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

Sebastian Sauer mail at dipe.org
Sun Aug 4 21:23:24 BST 2013


On 08/05/2013 02:16 AM, Jos van den Oever wrote:
> 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.

Just from my first impression I love method 4 because its super-easy to 
understand what part is added by us (add/set/...), what part is 
namespace and what part is tag-name.

For error-messages: true for gcc, I guess clang is better then and I 
think/hope gcc is improving there too.

>
> 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.

Yep, sorry but that has really the very last priority for me :)




More information about the calligra-devel mailing list