Browse Source

Save FB2 stylesheets

Kandrashin Denis 13 years ago
parent
commit
ac269cc7bd
3 changed files with 45 additions and 0 deletions
  1. 30 0
      source/fb2read.cpp
  2. 11 0
      source/fb2read.hpp
  3. 4 0
      source/res/style.css

+ 30 - 0
source/fb2read.cpp

@@ -107,6 +107,7 @@ Fb2XmlHandler::NodeHandler * Fb2ReadHandler::RootHandler::NewTag(const QString &
     switch (toKeyword(name)) {
     switch (toKeyword(name)) {
         case Body   : return new TextHandler(m_owner, name, atts, "div", name);
         case Body   : return new TextHandler(m_owner, name, atts, "div", name);
         case Descr  : return new DescrHandler(m_owner, name, atts);
         case Descr  : return new DescrHandler(m_owner, name, atts);
+        case Style  : return new StyleHandler(m_owner, name, atts);
         case Binary : return new BinaryHandler(m_owner, name, atts);
         case Binary : return new BinaryHandler(m_owner, name, atts);
         default: return NULL;
         default: return NULL;
     }
     }
@@ -118,6 +119,35 @@ void Fb2ReadHandler::RootHandler::EndTag(const QString &name)
     writer().writeEndElement();
     writer().writeEndElement();
 }
 }
 
 
+//---------------------------------------------------------------------------
+//  Fb2ReadHandler::StyleHandler
+//---------------------------------------------------------------------------
+
+Fb2ReadHandler::StyleHandler::StyleHandler(Fb2ReadHandler &owner, const QString &name, const QXmlAttributes &atts)
+    : BaseHandler(owner, name)
+    , m_empty(true)
+{
+    writer().writeStartElement("div");
+    writer().writeAttribute("class", name);
+    int count = atts.count();
+    for (int i = 0; i < count; i++) {
+        writer().writeAttribute("fb2:" + atts.qName(i), atts.value(i));
+    }
+}
+
+void Fb2ReadHandler::StyleHandler::TxtTag(const QString &text)
+{
+    writer().writeCharacters(text);
+    m_empty = false;
+}
+
+void Fb2ReadHandler::StyleHandler::EndTag(const QString &name)
+{
+    Q_UNUSED(name);
+    if (m_empty) writer().writeCharacters(" ");
+    writer().writeEndElement();
+}
+
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 //  Fb2ReadHandler::HeadHandler
 //  Fb2ReadHandler::HeadHandler
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------

+ 11 - 0
source/fb2read.hpp

@@ -72,6 +72,17 @@ private:
         virtual void EndTag(const QString &name);
         virtual void EndTag(const QString &name);
     };
     };
 
 
+    class StyleHandler : public BaseHandler
+    {
+    public:
+        explicit StyleHandler(Fb2ReadHandler &owner, const QString &name, const QXmlAttributes &atts);
+    protected:
+        virtual void TxtTag(const QString &text);
+        virtual void EndTag(const QString &name);
+    private:
+        bool m_empty;
+    };
+
     class HeadHandler : public BaseHandler
     class HeadHandler : public BaseHandler
     {
     {
         FB2_BEGIN_KEYLIST
         FB2_BEGIN_KEYLIST

+ 4 - 0
source/res/style.css

@@ -2,6 +2,10 @@ body {
   font-family: serif;
   font-family: serif;
 }
 }
 
 
+div.stylesheet{
+  display: none;
+}
+
 div.description div {
 div.description div {
   display: none;
   display: none;
 }
 }