<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="http://git.reviewboard.kde.org/r/109393/">http://git.reviewboard.kde.org/r/109393/</a>
     </td>
    </tr>
   </table>
   <br />













<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On March 20th, 2013, 9:17 p.m. UTC, <b>Jos van den Oever</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Interesting approach to the common case of writing an export filter. I have a few comments and ideas on the problem and the approach.

Usually one would use XSLT to convert one xml format to another. However in ODF, there is a lot of context which is not easily available.
Nevertheless, in XSLT one has the e.g. XPath expression
  "document('styles.xml')//styles:styles" to list all the styles
or 
  "document('styles.xml')//manifest:file-entry" to list all files from the manifest

Getting image sizes is tricky though. They'd need to be put in a temporary xml file which is available to the xslt.


If you go with the C++ approach, you could try to be complete. Currently, the list of available tags is whatever you think is useful and should be expanded whenever you want to support more. Another approach could be to parse the relax ng and generate the code like explained in
  http://lists.kde.org/?l=calligra-devel&m=130768698325584


As it currently stands, the TraversalBackend not that much information is added on top of
  QXmlContentHandler::startElement / QXmlContentHandler::endElement
except a switch for the various QNames. But you do lose the speed of a SAX parser by using KoXmlElement.






</pre>
 </blockquote>







</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">We already talked on IRC but I thought I'd add my comments here as well.

Regarding stream reading (QXmlStreamReader instead of KoXmlReader): I'm positive to that but it has to be a later optimization.

Regarding automatic code generation: I'm positive to that too but that's not a small task.

So overall good ideas but all of them for later.</pre>
<br />


<p>- Inge</p>


<br />
<p>On March 20th, 2013, 8:35 p.m. UTC, Inge Wallin wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('http://git.reviewboard.kde.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Calligra.</div>
<div>By Inge Wallin.</div>


<p style="color: grey;"><i>Updated March 20, 2013, 8:35 p.m.</i></p>






<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This patch creates a new library in filters/odftraverse. The purpose of this library is to create classes to make it easier to create export filters for ODF files. What you do to use this library is that you inherit a base class for backends to this parser / traverser and in the many callbacks you write the output that is relevant for your output format.

To show how it can be used I have also created a very simple proof of concept filter that exports to text format, something Calligra actually lacked before.

The current implementation traverses only ODT files and there are still a number of NYI functions that I want to finish before the actual merge. But I thought I'd get some opinions early. In other words, I expect at least one, maybe two iterations before this branch can be merged.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Tested with a lengthy text file.</pre>
  </td>
 </tr>
</table>




<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>filters/CMakeLists.txt <span style="color: grey">(bb0db3d)</span></li>

 <li>filters/libodftraverse/CMakeLists.txt <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdfParser.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdfParser.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdfTraverserContext.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdfTraverserContext.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdtTraverser.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdtTraverser.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdtTraverserBackend.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/OdtTraverserBackend.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/libodftraverse/odftraverse_export.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/words/ascii/AsciiExport.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/words/ascii/AsciiExport.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/words/ascii/CMakeLists.txt <span style="color: grey">(d36de47)</span></li>

 <li>filters/words/ascii/OdtTraverserAsciiBackend.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/words/ascii/OdtTraverserAsciiBackend.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>filters/words/ascii/TODO <span style="color: grey">(ceb1a24)</span></li>

 <li>filters/words/ascii/words_ascii_export.desktop <span style="color: grey">(PRE-CREATION)</span></li>

</ul>

<p><a href="http://git.reviewboard.kde.org/r/109393/diff/" style="margin-left: 3em;">View Diff</a></p>







  </td>
 </tr>
</table>








  </div>
 </body>
</html>