On Friday 10 June 2011 08:22:04 Jos van den Oever wrote:
> Here is an idea to improve code quality in Calligra.
> 
> Currently, we use KoXmlWriter to write ODF XML. For this, functions like
> startElement, endElement, addAttribute are used.
> 
> By using the Relax NG schema, we could generate a wrapper around this class
> which would give us functions like
> 
>  TextPWriter TextContentWriter::startTextP();
>  void TextHWriter::writeTextOutlineLevel(quint32 level);
> 
> that would wrap around KoXmlWriter or QXmlStreamWriter:
> 
> class TextHWriter {
> friend class TextContentWriter;
> private:
>     KoXmlWriter* const xml;
> protected:
>     TextHWriter(KoXmlWriter* xml_) :xml(xml_) {
>         xml->startElement("text:h");
>     }
> public:
>     ~TextHWriter() { xml->endElement(); }
>     TextSpan startTextSpan() { return TextSpanWriter(xml); }
>     void writeTextOutlineLevel(quint32 level) {
>         xml->setAttribute("text:outline-level", level);
>     }
> };
> 
> These writer classes would all go in header files only and should not
> affect the compiled form; the functions are so simple and that they should
> all be compiled away.
> The classes would provide compile time checking of the code that writes
> XML. It would be easier for people to write code to write XML and it would
> be harder to make mistakes. When writing serialization code, one would not
> need to look up the what attributes can go in which element and what type
> they have; your development enviroment would tell you with autocompletion.
> 
> Can you think of a reason why this would not work?
> 
> Cheers,
> Jos
Hi

That is a really interesting solution. The biggest trick would be not to forget 
to delete the objects at the right time if the endElement stays in the 
destructor.
But I'm not sure how it would interact with the change tracking code, unless 
you 
can integrate change tracking in these classes, then it's just great...

 Pierre

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
calligra-devel mailing list
calligra-devel@kde.org
https://mail.kde.org/mailman/listinfo/calligra-devel

Reply via email to