Style objects for applications and filters

Inge Wallin inge at lysator.liu.se
Sun May 4 06:13:26 BST 2014


On Sunday, May 04, 2014 06:18:45 Thorsten Zachmann wrote:
> On Monday, April 28, 2014 10:31:45 PM Inge Wallin wrote:
> >  * Represent styles as text attributes wherever possible so that they can
> >  be
> > 
> > complete, i.e. not throw away style data.
> 
> I'm not conviced that this is a good idea. We tried to do that with the
> KoUnavailShape to prevent what we can't save but as far as I remeber LO and
> OO where unfortunately not able to load the stuff we saved back.

I analyzed that later and that was because we saved back all files but did not 
save back empty subdirectories (used in charts if I remember correctly). I 
created a patch for that and I think it's committed but I'm not 100% sure.

> Also saving back styles might result in unwanted behaviour. See the
> following example:
> 
> User 1 creates a document with styles in LO.
> User 2 loads the document with calligra.
> User 2 copy and pastes something with unsupported formating options.
> User 2 formats it as he wants it to be. (however as he copied something he
> can't see he also has a format in there which will result in something
> different then expected when loaded)
> User 2 save
> User 1 loads in LO and the formating of the pasted text is not what User 2
> wanted.
> 
> Sure if User 2 only fixes a typo this is not a problem but if a user really
> works with a document it can happen in quite a lot supricing side effects
> the user can't forsee and therefore I against this.

This scenario is indeed possible and not good.  But I believe that it would be 
less common than the following scenario (given your suggestion to not save 
unsupported formatting):

 User 1 creates a document with styles in LO.
 User 2 loads the document with calligra.
 User 2 copy and pastes something with unsupported formating options and the 
unsupported formatting is removed by calligra.
 User 2 formats it as he wants it to be
 User 2 save
 User 1 loads in LO and the formating of the pasted text is now different from 
the rest of the text in the document.

My reasons for believing this is:
 * Calligra does already support almost all formatting and any formatting that 
we don't support is pretty exotic and therefore almost certainly by design in 
the document.
 * Most documents only contain a limited set of styles. And almost all of the 
text in a typical document is going to use pretty standard formatting - which 
calligra already supports.
 * So any unsupported formatting is something that User 1 wants.

And even if your scenario plays out then removing some formatting from a lot 
of text is going to be much easier than reapplying it to the specific parts 
that need it (removing formatting that isn't already there is a null 
operation).

And funnily enough I came across a bug of exactly this type yesterday on the 
documentliberation-discuss mailing list: 
https://bugs.freedesktop.org/show_bug.cgi?id=77855
As you can see from the screenshots this is quite serious and only one 
example.

> There are interdependencies between styles that can't be saved by in the way
> you described as it will need to update references and so on. Also I could
> not find something in the specification that says a reader/writer should
> support stuff  he does not understand.

Hmm, what interdependencies between styles do you mean? I know that there are 
interdependencies between individual attributes (e.g. you cannot get border-
left from one style and border-right from its parent) but not between styles.

But fixing this has nothing to do with being complete per se. It's orthogonal 
to it. I do think that we should create a list of interdependent attributes 
and make sure that we have a generic way of handling it.

> >  * Implement a binary interface for some (in the long run all) attributes
> >  so
> > 
> > that we retain the advantages of that (mostly speed).
> 
> If we go the route you propose then I would propose to add the new stuff as
> addition to what is there.

Agreed. Implementation wise we should throw away as little working code as 
possible.

> >  * Because all our apps use DOM parsing now (even if stream reading is
> >  used
> > 
> > under the hood) and many filters use stream parsing, I want to provide
> > both
> > variants of the loadOdf() method.
> 
> More code means more bugs so I'm not really convinced here.  At least quite
> a lot of testing for that is needed.

Yes, testing is important.  I am willing to write test code to test retaining 
properties of styles in different roundtrip scenarios. And for visuals we have 
cstester.

Note, though, that the alternative to doing this is not *not* writing the new 
parsing code.  It's writing even more code because the stream parsing API is 
already used by the filters. So instead of just adding 
load/saveOdf(KoStreamReader &) to existing objects we will have to write 
completely new objects to store the same thing.  For already existing examples 
of this, see all classes in filters/libodf2/ which do not start with KoOdf.  
There is a description of it in the README.

And I am not suggesting that the code using these objects already (i.e. the 
applications) move from dom parsing to stream parsing. I only want to reuse 
code that is already working well in new situations - in this case the filters.

But again I think this is two discussions mixed into one.  The two different 
issues are:
1. Shall we introduce a policy to keep also unsupported formatting and save it 
back?  This will demand a slightly different base implementation of styles and 
will indeed demand a lot of testing.
2. Shall we allow two different load/saveOdf() API's in the already existing 
objects so they can be also used in the filters?

Issue 1 is the big one.  Issue 2 is much smaller and is what you are replying 
to in the paragraph just above. 

> So I'm not really convinced this is a good idea.

Noted.  Any opinions from other people?

	-Inge

> 
> Thorsten
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/calligra-devel/attachments/20140504/c324a2f2/attachment.htm>


More information about the calligra-devel mailing list