[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [calligra/export-epub-moji] filters/words/epub: Preparations for moving all the html generation to c
From:       Inge Wallin <inge () lysator ! liu ! se>
Date:       2012-07-31 22:22:12
Message-ID: 20120731222212.076ACA60A6 () git ! kde ! org
[Download RAW message or body]

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/exportepub2.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 QByteArray \
&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+xml", \
                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/htmlconvert.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<QString, QString> &metaData);
-
+static void handleTagTable(QDomElement &nodeElement, KoXmlWriter *bodyWriter);
 
 
 KoFilter::ConversionStatus stylesParse(KoStore *odfStore,
@@ -401,107 +401,31 @@ QPair<KoFilter::ConversionStatus, bool> convertContent(KoStore \
*odfStore, QHash<  childNode = doc.documentElement().firstChild();
     childNode = childNode.nextSibling();
     childNode = childNode.firstChild().firstChild().nextSibling();
-    if (!flagMoreHtml) {
-        nodeElement = childNode.toElement();
-    }
-    else {
+
+    // Set childNode to the node we want to operate on next. 
+    if (flagMoreHtml) {
         for (int i = 0; i <startNode; i++){
             childNode = childNode.nextSibling();
         }
 
-        nodeElement = childNode.toElement();
         sibl = startNode;
     }
+    nodeElement = childNode.toElement();
 
     QDomNode pNode;
 
-    bool pFlag = false;  // True if inside a top level <p>.
+    bool pFlag = false;  // True if inside a top level <p> tag.
     while (!nodeElement.isNull() || pFlag) {
 
         //kDebug(30517) << nodeElement.tagName() <<pFlag;
 
         //  Check for tag table
         if (nodeElement.tagName() == "table") {
-            bodyWriter->startElement("table");
-            QString styleClass = nodeElement.attribute("style-name");
-            bodyWriter->addAttribute("class", styleClass);
-            bodyWriter->addAttribute("border", "1");
-
-            QDomNode tableNode = childNode.firstChild();
-            QDomElement tableElement = tableNode.toElement(); // tag name should be \
                table-column
-
-            int columnsNumber;
-            if (tableElement.hasAttribute("number-columns-repeated")) { // it is Lo \
                tables
-                columnsNumber = \
                tableElement.attribute("number-columns-repeated").toInt();
-                tableNode = tableNode.nextSibling();
-                tableElement = tableNode.toElement();
-            }
-            else { // calligra words tables
-                while (tableElement.tagName() == "table-column") {
-                    tableNode = tableNode.nextSibling();
-                    tableElement = tableNode.toElement();
-                    columnsNumber++;
-                }
-                columnsNumber++;
-            }
-
-            //===== table-row ======
-
-            while (tableElement.tagName() == "table-row") { // FIXME: we dont have a \
                tag for table-column.
-                bodyWriter->startElement("tr");
-
-                // ===== table-cell ======
-                QDomNode cellNode = tableNode.firstChild();
-                QDomElement cellElement = cellNode.toElement();
-
-                for (int i = 0; i < columnsNumber; i++) {
-                    bodyWriter->startElement("td");
-                    bodyWriter->addAttribute("class", \
                cellElement.attribute("style-name"));
-
-                    // ==== cell text ====
-                    QDomNode cellTextNode = cellNode.firstChild();
-                    QDomElement cellTextElement = cellTextNode.toElement();
-
-                    while (!cellTextElement.isNull()) {
-                        \
                bodyWriter->startElement(cellTextElement.tagName().toUtf8());
-                        bodyWriter->addAttribute("class", \
                cellTextElement.attribute("style-name"));
-
-                        QDomNode node = cellTextNode.firstChild();
-                        QDomElement elemet = 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 = cellTextElement.text();
-                                bodyWriter->addTextNode(text);
-                                bodyWriter->endElement(); // tagName()
-                            }
-                        }
-                        else {
-                            bodyWriter->addTextNode(cellTextElement.text());
-                        }
-                        bodyWriter->endElement(); // tagName(p)
-                        cellTextNode = cellTextNode.nextSibling();
-                        cellTextElement = cellTextNode.toElement();
-                    } // end while write tag p
-                    bodyWriter->endElement();
-
-                    cellNode = cellNode.nextSibling();
-                    cellElement = cellNode.toElement();
-                } // end for write tag cell
-                bodyWriter->endElement();
-
-                tableNode = tableNode.nextSibling();
-                tableElement = 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 = pNode;
                    nodeElement = childNode.toElement();
                    pFlag = false;
@@ -713,3 +637,86 @@ void createHtmlHead(KoXmlWriter *writer, QHash<QString, QString> \
&metaData)  
     writer->endElement(); // head
 }
+
+
+void handleTagTable(QDomElement &nodeElement, KoXmlWriter *bodyWriter)
+{
+    bodyWriter->startElement("table");
+    QString styleClass = nodeElement.attribute("style-name");
+    bodyWriter->addAttribute("class", styleClass);
+    bodyWriter->addAttribute("border", "1");
+
+    QDomNode tableNode = nodeElement.firstChild();
+    QDomElement tableElement = tableNode.toElement(); // tag name should be \
table-column +
+    int columnsNumber;
+    if (tableElement.hasAttribute("number-columns-repeated")) { // it is Lo tables
+        columnsNumber = tableElement.attribute("number-columns-repeated").toInt();
+        tableNode = tableNode.nextSibling();
+        tableElement = tableNode.toElement();
+    }
+    else { // calligra words tables
+        while (tableElement.tagName() == "table-column") {
+            tableNode = tableNode.nextSibling();
+            tableElement = tableNode.toElement();
+            columnsNumber++;
+        }
+        columnsNumber++;
+    }
+
+    //===== table-row ======
+
+    while (tableElement.tagName() == "table-row") { // FIXME: we dont have a tag for \
table-column. +        bodyWriter->startElement("tr");
+
+        // ===== table-cell ======
+        QDomNode cellNode = tableNode.firstChild();
+        QDomElement cellElement = cellNode.toElement();
+
+        for (int i = 0; i < columnsNumber; i++) {
+            bodyWriter->startElement("td");
+            bodyWriter->addAttribute("class", cellElement.attribute("style-name"));
+
+            // ==== cell text ====
+            QDomNode cellTextNode = cellNode.firstChild();
+            QDomElement cellTextElement = cellTextNode.toElement();
+
+            while (!cellTextElement.isNull()) {
+                bodyWriter->startElement(cellTextElement.tagName().toUtf8());
+                bodyWriter->addAttribute("class", \
cellTextElement.attribute("style-name")); +
+                QDomNode node = cellTextNode.firstChild();
+                QDomElement elemet = 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 = \
cellTextElement.text(); +                        bodyWriter->addTextNode(text);
+                        bodyWriter->endElement(); // span
+                    }
+                }
+                else {
+                    bodyWriter->addTextNode(cellTextElement.text());
+                }
+                bodyWriter->endElement(); // tagName(p)
+                cellTextNode = cellTextNode.nextSibling();
+                cellTextElement = cellTextNode.toElement();
+            } // end while write tag p
+            bodyWriter->endElement(); // td
+
+            cellNode = cellNode.nextSibling();
+            cellElement = cellNode.toElement();
+        } // end for write tag cell
+        bodyWriter->endElement(); //tr
+
+        tableNode = tableNode.nextSibling();
+        tableElement = tableNode.toElement();
+    } // end while write tag row
+
+    bodyWriter->endElement(); // table
+}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic