Prechádzať zdrojové kódy

Style for <body name=notes>

Kandrashin Denis 13 rokov pred
rodič
commit
67841fd93f
5 zmenil súbory, kde vykonal 62 pridanie a 18 odobranie
  1. 35 12
      source/fb2read.cpp
  2. 8 3
      source/fb2read.h
  3. 2 1
      source/fb2tree.cpp
  4. 4 0
      source/fb2tree.h
  5. 13 2
      source/res/style.css

+ 35 - 12
source/fb2read.cpp

@@ -271,13 +271,30 @@ FB2_END_KEYHASH
 Fb2Handler::BodyHandler::BodyHandler(Fb2HtmlWriter &writer, const QString &name, const QXmlAttributes &attributes, const QString &tag, const QString &style)
     : BaseHandler(name)
     , m_writer(writer)
+    , m_parent(NULL)
     , m_tag(tag)
     , m_style(style)
+{
+    Init(attributes);
+}
+
+Fb2Handler::BodyHandler::BodyHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &attributes, const QString &tag, const QString &style)
+    : BaseHandler(name)
+    , m_writer(parent->m_writer)
+    , m_parent(parent)
+    , m_tag(tag)
+    , m_style(style)
+{
+    Init(attributes);
+}
+
+void Fb2Handler::BodyHandler::Init(const QXmlAttributes &attributes)
 {
     if (m_tag.isEmpty()) return;
-    m_writer.writeStartElement(tag);
+    m_writer.writeStartElement(m_tag);
     QString id = Value(attributes, "id");
     if (!id.isEmpty()) {
+        if (m_style == "section" && isNotes()) m_style = "note";
         m_writer.writeAttribute("id", id);
     } else if (m_tag == "div" || m_tag == "img") {
         m_writer.writeAttribute("id", m_writer.newId());
@@ -292,8 +309,8 @@ Fb2Handler::BaseHandler * Fb2Handler::BodyHandler::NewTag(const QString &name, c
 {
     QString tag, style;
     switch (toKeyword(name)) {
-        case Anchor    : return new AnchorHandler(m_writer, name, attributes);
-        case Image     : return new ImageHandler(m_writer, name, attributes);
+        case Anchor    : return new AnchorHandler(this, name, attributes);
+        case Image     : return new ImageHandler(this, name, attributes);
         case Section   : tag = "div"; style = name; break;
         case Parag     : tag = "p";   break;
         case Strong    : tag = "b";   break;
@@ -303,7 +320,7 @@ Fb2Handler::BaseHandler * Fb2Handler::BodyHandler::NewTag(const QString &name, c
         case Sub       : tag = "sub"; break;
         case Sup       : tag = "sup"; break;
     }
-    return new BodyHandler(m_writer, name, attributes, tag, style);
+    return new BodyHandler(this, name, attributes, tag, style);
 }
 
 void Fb2Handler::BodyHandler::TxtTag(const QString &text)
@@ -318,29 +335,35 @@ void Fb2Handler::BodyHandler::EndTag(const QString &name)
     m_writer.writeEndElement();
 }
 
+bool Fb2Handler::BodyHandler::isNotes() const
+{
+    if (m_style == "notes") return true;
+    return m_parent ? m_parent->isNotes() : false;
+}
+
 //---------------------------------------------------------------------------
 //  Fb2Handler::AnchorHandler
 //---------------------------------------------------------------------------
 
-Fb2Handler::AnchorHandler::AnchorHandler(Fb2HtmlWriter &writer, const QString &name, const QXmlAttributes &attributes)
-    : BodyHandler(writer, name, attributes, "a")
+Fb2Handler::AnchorHandler::AnchorHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &attributes)
+    : BodyHandler(parent, name, attributes, "a")
 {
     QString href = Value(attributes, "href");
-    writer.writeAttribute("href", href);
+    m_writer.writeAttribute("href", href);
 }
 
 //---------------------------------------------------------------------------
 //  Fb2Handler::ImageHandler
 //---------------------------------------------------------------------------
 
-Fb2Handler::ImageHandler::ImageHandler(Fb2HtmlWriter &writer, const QString &name, const QXmlAttributes &attributes)
-    : BodyHandler(writer, name, attributes, "img")
+Fb2Handler::ImageHandler::ImageHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &attributes)
+    : BodyHandler(parent, name, attributes, "img")
 {
     QString href = Value(attributes, "href");
     while (href.left(1) == "#") href.remove(0, 1);
-    QString path = writer.getFile(href);
-    writer.writeAttribute("src", path);
-    writer.writeAttribute("alt", href);
+    QString path = m_writer.getFile(href);
+    m_writer.writeAttribute("src", path);
+    m_writer.writeAttribute("alt", href);
 }
 
 //---------------------------------------------------------------------------

+ 8 - 3
source/fb2read.h

@@ -161,12 +161,17 @@ private:
        FB2_END_KEYLIST
     public:
         explicit BodyHandler(Fb2HtmlWriter &writer, const QString &name, const QXmlAttributes &attributes, const QString &tag, const QString &style = QString());
-        virtual void TxtTag(const QString &text);
+        explicit BodyHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &attributes, const QString &tag, const QString &style = QString());
     protected:
         virtual BaseHandler * NewTag(const QString &name, const QXmlAttributes &attributes);
         virtual void EndTag(const QString &name);
+        virtual void TxtTag(const QString &text);
+    protected:
+        void Init(const QXmlAttributes &attributes);
+        bool isNotes() const;
     protected:
         Fb2HtmlWriter &m_writer;
+        BodyHandler *m_parent;
         QString m_tag;
         QString m_style;
     };
@@ -174,13 +179,13 @@ private:
     class AnchorHandler : public BodyHandler
     {
     public:
-        explicit AnchorHandler(Fb2HtmlWriter &writer, const QString &name, const QXmlAttributes &attributes);
+        explicit AnchorHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &attributes);
     };
 
     class ImageHandler : public BodyHandler
     {
     public:
-        explicit ImageHandler(Fb2HtmlWriter &writer, const QString &name, const QXmlAttributes &attributes);
+        explicit ImageHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &attributes);
     };
 
     class BinaryHandler : public BaseHandler

+ 2 - 1
source/fb2tree.cpp

@@ -99,7 +99,8 @@ void Fb2TreeModel::expand(QTreeView *view)
     int count = rowCount(parent);
     for (int i = 0; i < count; i++) {
         QModelIndex child = index(i, 0, parent);
-        view->expand(child);
+        Fb2TreeItem *node = item(child);
+        if (node && node->name() == "body") view->expand(child);
     }
 }
 

+ 4 - 0
source/fb2tree.h

@@ -40,6 +40,10 @@ public:
         return m_id;
     }
 
+    const QString & name() const {
+        return m_name;
+    }
+
 private:
     void addChildren(QWebElement &parent);
 

+ 13 - 2
source/res/style.css

@@ -67,7 +67,18 @@ div.poem p {
   margin-bottom: 0;
 }
 
-div.notes div.section div.title {
+div.note {
+  border-top: none;
+  border-bottom: none;
+  border-left: thin solid green;
+  border-right: none;
+  padding-top: 0;
+  padding-bottom: 0;
+  padding-left: 4;
+  padding-right: 0;
+}
+
+div.note div.title {
   font: inherit;
   float: left;
   margin-left: 4;
@@ -76,7 +87,7 @@ div.notes div.section div.title {
   padding-right: 4;
 }
 
-div.notes div.section div.title p {
+div.note div.title p {
   margin-top: 0;
   margin-bottom: 0;
 }