[calligra] /: Add api for writing ODF that is generated from the ODF RNG file.

Jos van den Oever jos.van.den.oever at kogmbh.com
Sun Aug 4 20:16:13 BST 2013


On 08/04/13 20:25, Friedrich W. H. Kossebau wrote:
> really cool work from Jos, happy to see it having made it into Calligra master

So am I. Glad I blew off the dust from this one.

> Having finally given the patch I look as well I found I have a really hard
> time reading all_the_created_methods_and_objects.
>
> I wonder who else would favour to do like it is done in the browsers' HTML
> DOM, where the hyphens in all element/attribute names are replaced by removing
> them and turning the following letter to Uppercase.
>
> Might need some more work in the generator, but given that this is affecting
> quite some code is should be worth the effort. So the only usages of _ would
> be to separate the element/attribute name from e.g. the set-prefix and as
> replacement for the namespace separator, which at least might help parsing. So
> in the given example it would be:
>
>>    text_p p(xmlWriter);
>>    p.set_text_styleName("italic");
>>    text_span span(p.add_text_span());
>>    span.set_text_styleName("italic");
>>    span.addTextNode("Hello World!");
>
> What do people think? What are other downsides of this approach? Will it need
> some special case handling for some cases (and would that still be worth it??

This issue was brought by Inge, Sebsauer and Zagge as well. I proposed 
to address it after the patch landed which is now.

The initial patch used camelcasing of the class names and function 
names. I moved away from that to use a simple rule s/[:-]/_/. There are 
a few ways in which to map the characters : and - that are not allowed 
in class names or function names. Here are a few obvious ones:

using namespace writeodf;

    Element                          Attribute       Attribute+uppercase
    office:body                      xml:id          svg:viewBox
    class name   open tag            set attribute   set attribute
1) office_body  add_office_body()   set_xml_id(v)   set_svg_viewBox(v)
2) OfficeBody   addOfficeBody       setXmlId(v)     setSvgViewBox(v)
3) Office_Body  addOffice_Body      setXml_Id(v)    setSvg_ViewBox(v)
4) office::body add<office::body>() set<xml::id>(v) set<svg::viewBox>(v)

Methods 1-3 have good autocompletion. Method 4 does not and has harder 
error messages, but it looks really cool.

Before you comment on the best method and pros and cons, I would ask you 
to convert at least one Calligra cpp file to the new API to get familiar 
with it. There's plenty to choose from.

Cheers,
Jos






More information about the calligra-devel mailing list