Explorar o código

Save tag <stylesheet> by lines

Kandrashin Denis %!s(int64=12) %!d(string=hai) anos
pai
achega
b08d59484a
Modificáronse 2 ficheiros con 26 adicións e 9 borrados
  1. 23 0
      source/fb2save.cpp
  2. 3 9
      source/fb2save.hpp

+ 23 - 0
source/fb2save.cpp

@@ -137,6 +137,9 @@ FbSaveWriter::FbSaveWriter(FbTextEdit &view, QByteArray *array)
     : QXmlStreamWriter(array)
     , m_view(view)
 {
+    if (QWebFrame * frame = m_view.page()->mainFrame()) {
+        m_style = frame->findFirstElement("html>head>style").toPlainText();
+    }
 }
 
 FbSaveWriter::FbSaveWriter(FbTextEdit &view, QIODevice *device)
@@ -210,6 +213,25 @@ QString FbSaveWriter::getFileName(const QString &path)
     }
 }
 
+void FbSaveWriter::writeStyle()
+{
+    if (m_style.isEmpty()) return;
+
+    const QString postfix = "\n  ";
+    writeStartElement("stylesheet", 2);
+    writeAttribute("type", "text/css");
+    writeCharacters(postfix);
+
+    QStringList list = m_style.split("}", QString::SkipEmptyParts);
+    foreach (const QString &str, list) {
+        QString line = str.simplified();
+        if (line.isEmpty()) continue;
+        writeCharacters("  " + line + "}" + postfix);
+    }
+
+    QXmlStreamWriter::writeEndElement();
+}
+
 void FbSaveWriter::writeFiles()
 {
     QStringListIterator it(m_names);
@@ -363,6 +385,7 @@ FbSaveHandler::BodyHandler::BodyHandler(FbSaveWriter &writer, const QString &nam
 {
     m_writer.writeAttribute("xmlns", "http://www.gribuser.ru/xml/fictionbook/2.0");
     m_writer.writeAttribute("xmlns:l", "http://www.w3.org/1999/xlink");
+    m_writer.writeStyle();
 }
 
 void FbSaveHandler::BodyHandler::EndTag(const QString &name)

+ 3 - 9
source/fb2save.hpp

@@ -76,12 +76,14 @@ public:
     void writeComment(const QString &ch);
     void writeLineEnd();
     void writeFiles();
+    void writeStyle();
 private:
     QByteArray downloadFile(const QUrl &url);
     void writeContentType(const QString &name, QByteArray &data);
 private:
     FbTextEdit &m_view;
     QStringList m_names;
+    QString m_style;
 };
 
 class FbSaveHandler : public FbHtmlHandler
@@ -94,7 +96,7 @@ public:
 private:
     class TextHandler : public NodeHandler
     {
-        FB2_BEGIN_KEYLIST
+       FB2_BEGIN_KEYLIST
             Origin,
             Anchor,
             Table,
@@ -137,14 +139,6 @@ private:
         FbSaveWriter &m_writer;
     };
 
-    class HeadHandler : public TextHandler
-    {
-    public:
-        explicit HeadHandler(FbSaveWriter &writer, const QString &name, const QXmlAttributes &atts);
-    protected:
-        virtual void EndTag(const QString &name);
-    };
-
     class BodyHandler : public TextHandler
     {
     public: