> On Aug. 2, 2013, 8:35 p.m., Inge Wallin wrote: > > I have looked through this rather big patch, and I must say that in many > > places where these writers are used it results in easier to read code. I > > also like that it's possible to mix the old manual and this new automatic > > style of writing ODF. So in general I'm in favour of this patch and the > > ideas behind it. > > > > But I think that if we want to have this in libs/odf we need more > > documentation. I miss a general overview of the classes and how they are > > supposed to be used together. I also miss other types of API docs even if > > it's difficult to say exactly where it should be put since we are talking > > about automatically generated code here. Finally, the code should follow > > the coding standards of Calligra. See comments below. > > > > I also have a question: Will this be able to handle extensions to ODF, > > like the special tags that we write in some of our filters to create better > > compatibility with MS Office documents? > > > > In conclusion I think it's very promising but not ready for merge yet.
I've added a document that explains how the headers work. This code can handle extension to the RNG. Just add them to the file ./devtools/scripts/OpenDocument-v1.2-cs01-schema-calligra.rng It might even be possible to use it with the RNG files of OOXML. > On Aug. 2, 2013, 8:35 p.m., Inge Wallin wrote: > > devtools/rng2cpp/rng2cpp.cpp, line 8 > > <http://git.reviewboard.kde.org/r/111773/diff/1/?file=174558#file174558line8> > > > > I think some small documentation of FULL and SUB wouldn't hurt. I try > > to look at the code below (void test()...) and I don't understand the > > purpose. Junk that I removed now. > On Aug. 2, 2013, 8:35 p.m., Inge Wallin wrote: > > filters/libmso/shapes.cpp, line 132 > > <http://git.reviewboard.kde.org/r/111773/diff/1/?file=174560#file174560line132> > > > > This may be a personal thing but wouldn't it be easier if this was > > written: > > > > draw_enhanced_geometry eg = rect.add_draw_enhanced_geometry(); > > > > ? That's a good option too, until we have std::move from c++11 it's more expensive though. > On Aug. 2, 2013, 8:35 p.m., Inge Wallin wrote: > > filters/sheets/excel/import/excelimporttoods.cc, line 1309 > > <http://git.reviewboard.kde.org/r/111773/diff/1/?file=174563#file174563line1309> > > > > This seems to be a good place to ask this question, but it's not > > specific to these lines: > > > > Is it possible to add convenience functions to write a bool (for > > instance) so we don't have to use this ugly way: > > > > <boolexpr> ? "true" : "false" > > > > ? Yes, that's possible once we have support for the value types. Currently that is not there yet, although parts towards it are in already. - Jos ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://git.reviewboard.kde.org/r/111773/#review37001 ----------------------------------------------------------- On July 28, 2013, 9:47 p.m., Jos van den Oever wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://git.reviewboard.kde.org/r/111773/ > ----------------------------------------------------------- > > (Updated July 28, 2013, 9:47 p.m.) > > > Review request for Calligra. > > > Description > ------- > > This patch is also available in the branch libs-writeodf-vandenoever-2. > > Two years ago I wrote an initial version of this patch and a detailed > discussion on the mailing list [1] followed. The main objections to the patch > have been dealt with (see below). > Most of this new version was written at Akademy in Bilbao. > > Very short summary of the patch: > This patch should help everybody, young and old, with coding C++ for writing > ODF and make errors easier to catch. > The OpenDocument Format specification is published with a Relax NG file that > specifies the XML format. This file can be used to check if ODF files are > valid. It can also be used to generate a C++ API headers. This is what this > patch does. > > Example: > Instead of writing: > == > xmlWriter->startElement("text:p"); > xmlWriter->addAttribute("text:style-name", "italic"); > xmlWriter->startElement("text:p"); > xmlWriter->addAttribute("text:style-name", "bold"); > xmlWriter->addTextNode("Hello World!"); > xmlWriter->endElement(); > xmlWriter->endElement(); > == > you can write: > == > text_p p(xmlWriter); > p.set_text_style_name("italic"); > text_span span(p.add_text_span()); > span.set_text_style_name("italic"); > span.addTextNode("Hello World!"); > == > > Some advantages: > - autocompletion when coding: faster coding > - tag and attribute names are not strings but class and function names: less > errors > - nesting is checked by the compiler > - you write to elements (span, p), not xmlwriter: easier to read > - required attributes are part of the element constructor > > Implementation considerations: > - Calligra is large, so the generated code mixes well with the use of > KoXmlWriter and porting can be done in small steps. > - class and function names are similar to the xml tags with ':' and '-' > replaced by '_'. > - stack based: no heap allocations > - only header files: all code will inline and have low impact on runtime > - modular: one header file per namespace to reduce compile overhead > - code generator is Qt code, part of Calligra and runs as a build step > > Not in this patch (and places where you can help in the future): > - generate enumerations based on Relax NG > - check data type for attributes (you can still write "hello" to an integer > attribute) > - complete port of Calligra to the generated code > - improved speed by using static QString instead of const char* > > Provided solutions to previously raised issues: > - modular headers to reduce compile overhead > - function "end()" to optionally close an element before it goes out of scope > - use structure of Relax NG file to reduce header sizes by inheritance from > common groups > - provide most KoXmlWriter functionality safely through the element instances > - closing elements is now automatic at a slight runtime overhead > > > [1] http://lists.kde.org/?t=130768700500002 > > > Diffs > ----- > > devtools/CMakeLists.txt 15008fb > devtools/rng2cpp/CMakeLists.txt PRE-CREATION > devtools/rng2cpp/rng2cpp.cpp PRE-CREATION > filters/libmso/CMakeLists.txt 6bc145f > filters/libmso/shapes.cpp 073e061 > filters/libmso/shapes2.cpp 0f0b906 > filters/sheets/excel/import/CMakeLists.txt 2466218 > filters/sheets/excel/import/excelimporttoods.cc de788d4 > filters/stage/powerpoint/PptToOdp.h 8d85c1f > filters/stage/powerpoint/PptToOdp.cpp 9258564 > libs/kotext/KoInlineNote.cpp 6faa9a9 > libs/odf/CMakeLists.txt a2e3695 > libs/odf/writeodf/CMakeLists.txt PRE-CREATION > libs/odf/writeodf/helpers.h PRE-CREATION > libs/odf/writeodf/odfwriter.h PRE-CREATION > > Diff: http://git.reviewboard.kde.org/r/111773/diff/ > > > Testing > ------- > > Opened several ppt and xls files. > Checked ppt conversion for two files and checked that XML was equivalent. > > > Thanks, > > Jos van den Oever > >
_______________________________________________ calligra-devel mailing list calligra-devel@kde.org https://mail.kde.org/mailman/listinfo/calligra-devel