Git commit 777bc23d834c524f15022dd84baf083a82b1d38d by Inge Wallin. Committed on 01/08/2012 at 00:21. Pushed by ingwa into branch 'export-epub-moji'. Preparations for moving all the html generation to convertContent: - Simplifying some code - Break out handling of tables into its own file. M +2 -7 filters/words/epub/exportepub2.cpp M +91 -84 filters/words/epub/htmlconvert.cpp http://commits.kde.org/calligra/777bc23d834c524f15022dd84baf083a82b1d38d diff --git a/filters/words/epub/exportepub2.cpp b/filters/words/epub/export= epub2.cpp index 4342ddd..52d581b 100644 --- a/filters/words/epub/exportepub2.cpp +++ b/filters/words/epub/exportepub2.cpp @@ -109,6 +109,7 @@ KoFilter::ConversionStatus ExportEpub2::convert(const Q= ByteArray &from, const QB delete odfStore; return status; } + epub.addContentFile("stylesheet", "OEBPS/styleSheet.css", "text/css", = cssContent); = // Create html contents QByteArray htmlContent; @@ -141,13 +142,7 @@ KoFilter::ConversionStatus ExportEpub2::convert(const = QByteArray &from, const QB } = // ---------------------------------------------------------------- - // write contents - - epub.addContentFile("stylesheet", "OEBPS/styleSheet.css", "text/css", = cssContent); - //epub.addContentFile("body", "OEBPS/body.html", "application/xhtml+xm= l", htmlContent); - - // ---------------------------------------------------------------- - // Write epub files + // Write the finished epub file to disk = epub.writeEpub(m_chain->outputFile(), to, m_meta); = diff --git a/filters/words/epub/htmlconvert.cpp b/filters/words/epub/htmlco= nvert.cpp index 5b69ec7..4425330 100644 --- a/filters/words/epub/htmlconvert.cpp +++ b/filters/words/epub/htmlconvert.cpp @@ -39,7 +39,7 @@ = = static void createHtmlHead(KoXmlWriter *writer, QHash &m= etaData); - +static void handleTagTable(QDomElement &nodeElement, KoXmlWriter *bodyWrit= er); = = KoFilter::ConversionStatus stylesParse(KoStore *odfStore, @@ -401,107 +401,31 @@ QPair convertConte= nt(KoStore *odfStore, QHash< childNode =3D doc.documentElement().firstChild(); childNode =3D childNode.nextSibling(); childNode =3D childNode.firstChild().firstChild().nextSibling(); - if (!flagMoreHtml) { - nodeElement =3D childNode.toElement(); - } - else { + + // Set childNode to the node we want to operate on next. = + if (flagMoreHtml) { for (int i =3D 0; i . + bool pFlag =3D false; // True if inside a top level

tag. while (!nodeElement.isNull() || pFlag) { = //kDebug(30517) << nodeElement.tagName() <startElement("table"); - QString styleClass =3D nodeElement.attribute("style-name"); - bodyWriter->addAttribute("class", styleClass); - bodyWriter->addAttribute("border", "1"); - - QDomNode tableNode =3D childNode.firstChild(); - QDomElement tableElement =3D tableNode.toElement(); // tag nam= e should be table-column - - int columnsNumber; - if (tableElement.hasAttribute("number-columns-repeated")) { //= it is Lo tables - columnsNumber =3D tableElement.attribute("number-columns-r= epeated").toInt(); - tableNode =3D tableNode.nextSibling(); - tableElement =3D tableNode.toElement(); - } - else { // calligra words tables - while (tableElement.tagName() =3D=3D "table-column") { - tableNode =3D tableNode.nextSibling(); - tableElement =3D tableNode.toElement(); - columnsNumber++; - } - columnsNumber++; - } - - //=3D=3D=3D=3D=3D table-row =3D=3D=3D=3D=3D=3D - - while (tableElement.tagName() =3D=3D "table-row") { // FIXME: = we dont have a tag for table-column. - bodyWriter->startElement("tr"); - - // =3D=3D=3D=3D=3D table-cell =3D=3D=3D=3D=3D=3D - QDomNode cellNode =3D tableNode.firstChild(); - QDomElement cellElement =3D cellNode.toElement(); - - for (int i =3D 0; i < columnsNumber; i++) { - bodyWriter->startElement("td"); - bodyWriter->addAttribute("class", cellElement.attribut= e("style-name")); - - // =3D=3D=3D=3D cell text =3D=3D=3D=3D - QDomNode cellTextNode =3D cellNode.firstChild(); - QDomElement cellTextElement =3D cellTextNode.toElement= (); - - while (!cellTextElement.isNull()) { - bodyWriter->startElement(cellTextElement.tagName()= .toUtf8()); - bodyWriter->addAttribute("class", cellTextElement.= attribute("style-name")); - - QDomNode node =3D cellTextNode.firstChild(); - QDomElement elemet =3D node.toElement(); - - // This is for span tag about font-style and font-= weight - // that i should add them with tagz b and i and sh= ould be other - // tags what should i do? shoudl i check all ? - if (node.isElement()) { - if (elemet.hasAttribute("style-name")) { - bodyWriter->startElement("span"); - bodyWriter->addAttribute("class", elemet.a= ttribute("style-name")); - QString text =3D cellTextElement.text(); - bodyWriter->addTextNode(text); - bodyWriter->endElement(); // tagName() - } - } - else { - bodyWriter->addTextNode(cellTextElement.text()= ); - } - bodyWriter->endElement(); // tagName(p) - cellTextNode =3D cellTextNode.nextSibling(); - cellTextElement =3D cellTextNode.toElement(); - } // end while write tag p - bodyWriter->endElement(); - - cellNode =3D cellNode.nextSibling(); - cellElement =3D cellNode.toElement(); - } // end for write tag cell - bodyWriter->endElement(); - - tableNode =3D tableNode.nextSibling(); - tableElement =3D tableNode.toElement(); - } // end while write tag row + handleTagTable(nodeElement, bodyWriter); = + // FIXME: I don't understand this at all. /IW if (pFlag) { if (childNode.nextSibling().isNull()) { - bodyWriter->endElement(); childNode =3D pNode; nodeElement =3D childNode.toElement(); pFlag =3D false; @@ -713,3 +637,86 @@ void createHtmlHead(KoXmlWriter *writer, QHash &metaData) = writer->endElement(); // head } + + +void handleTagTable(QDomElement &nodeElement, KoXmlWriter *bodyWriter) +{ + bodyWriter->startElement("table"); + QString styleClass =3D nodeElement.attribute("style-name"); + bodyWriter->addAttribute("class", styleClass); + bodyWriter->addAttribute("border", "1"); + + QDomNode tableNode =3D nodeElement.firstChild(); + QDomElement tableElement =3D tableNode.toElement(); // tag name should= be table-column + + int columnsNumber; + if (tableElement.hasAttribute("number-columns-repeated")) { // it is L= o tables + columnsNumber =3D tableElement.attribute("number-columns-repeated"= ).toInt(); + tableNode =3D tableNode.nextSibling(); + tableElement =3D tableNode.toElement(); + } + else { // calligra words tables + while (tableElement.tagName() =3D=3D "table-column") { + tableNode =3D tableNode.nextSibling(); + tableElement =3D tableNode.toElement(); + columnsNumber++; + } + columnsNumber++; + } + + //=3D=3D=3D=3D=3D table-row =3D=3D=3D=3D=3D=3D + + while (tableElement.tagName() =3D=3D "table-row") { // FIXME: we dont = have a tag for table-column. + bodyWriter->startElement("tr"); + + // =3D=3D=3D=3D=3D table-cell =3D=3D=3D=3D=3D=3D + QDomNode cellNode =3D tableNode.firstChild(); + QDomElement cellElement =3D cellNode.toElement(); + + for (int i =3D 0; i < columnsNumber; i++) { + bodyWriter->startElement("td"); + bodyWriter->addAttribute("class", cellElement.attribute("style= -name")); + + // =3D=3D=3D=3D cell text =3D=3D=3D=3D + QDomNode cellTextNode =3D cellNode.firstChild(); + QDomElement cellTextElement =3D cellTextNode.toElement(); + + while (!cellTextElement.isNull()) { + bodyWriter->startElement(cellTextElement.tagName().toUtf8(= )); + bodyWriter->addAttribute("class", cellTextElement.attribut= e("style-name")); + + QDomNode node =3D cellTextNode.firstChild(); + QDomElement elemet =3D node.toElement(); + + // This is for span tag about font-style and font-weight + // that i should add them with tagz b and i and should be = other + // tags what should i do? shoudl i check all ? + if (node.isElement()) { + if (elemet.hasAttribute("style-name")) { + bodyWriter->startElement("span"); + bodyWriter->addAttribute("class", elemet.attribute= ("style-name")); + QString text =3D cellTextElement.text(); + bodyWriter->addTextNode(text); + bodyWriter->endElement(); // span + } + } + else { + bodyWriter->addTextNode(cellTextElement.text()); + } + bodyWriter->endElement(); // tagName(p) + cellTextNode =3D cellTextNode.nextSibling(); + cellTextElement =3D cellTextNode.toElement(); + } // end while write tag p + bodyWriter->endElement(); // td + + cellNode =3D cellNode.nextSibling(); + cellElement =3D cellNode.toElement(); + } // end for write tag cell + bodyWriter->endElement(); //tr + + tableNode =3D tableNode.nextSibling(); + tableElement =3D tableNode.toElement(); + } // end while write tag row + + bodyWriter->endElement(); // table +}