[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