From calligra-devel Fri Jun 10 06:22:04 2011 From: Jos van den Oever Date: Fri, 10 Jun 2011 06:22:04 +0000 To: calligra-devel Subject: Using ODF Relax NG schema to generate easier XML writing classes Message-Id: <201106100822.04455.jos.van.den.oever () kogmbh ! com> X-MARC-Message: https://marc.info/?l=calligra-devel&m=130768698325584 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 -- Jos van den Oever, software architect +49 391 25 19 15 53 074 3491911 http://kogmbh.com/legal/ _______________________________________________ calligra-devel mailing list calligra-devel@kde.org https://mail.kde.org/mailman/listinfo/calligra-devel