Răsfoiți Sursa

Show annotation

Kandrashin Denis 13 ani în urmă
părinte
comite
5b406c8f99
6 a modificat fișierele cu 67 adăugiri și 37 ștergeri
  1. 1 1
      source/fb2main.cpp
  2. 42 21
      source/fb2read.cpp
  3. 15 14
      source/fb2read.h
  4. 5 0
      source/fb2view.cpp
  5. 1 0
      source/fb2view.h
  6. 3 1
      source/res/style.css

+ 1 - 1
source/fb2main.cpp

@@ -608,7 +608,7 @@ void Fb2MainWindow::viewQsci()
     if (centralWidget() == qsciEdit) return;
     QString html;
     if (textEdit) {
-        html = textEdit->page()->mainFrame()->toHtml();
+        html = textEdit->toXml();
         delete textEdit;
         textEdit = NULL;
     }

+ 42 - 21
source/fb2read.cpp

@@ -191,6 +191,35 @@ void Fb2Handler::RootHandler::EndTag(const QString &name)
     m_writer.writeEndElement();
 }
 
+//---------------------------------------------------------------------------
+//  Fb2Handler::HeadHandler
+//---------------------------------------------------------------------------
+
+Fb2Handler::HeadHandler::HeadHandler(Fb2HtmlWriter &writer, const QString &name)
+    : BaseHandler(writer, name)
+{
+    m_writer.writeStartElement("div");
+    m_writer.writeAttribute("class", name);
+}
+
+Fb2Handler::BaseHandler * Fb2Handler::HeadHandler::NewTag(const QString &name, const QXmlAttributes &attributes)
+{
+    Q_UNUSED(attributes);
+    return new HeadHandler(m_writer, name);
+}
+
+void Fb2Handler::HeadHandler::TxtTag(const QString &text)
+{
+    m_writer.writeCharacters(text);
+}
+
+void Fb2Handler::HeadHandler::EndTag(const QString &name)
+{
+    Q_UNUSED(name);
+    m_writer.writeCharacters(" ");
+    m_writer.writeEndElement();
+}
+
 //---------------------------------------------------------------------------
 //  Fb2Handler::DescrHandler
 //---------------------------------------------------------------------------
@@ -206,34 +235,25 @@ Fb2Handler::BaseHandler * Fb2Handler::DescrHandler::NewTag(const QString &name,
 {
     Q_UNUSED(attributes);
     switch (toKeyword(name)) {
-        case Title   : return new HeaderHandler(m_writer, name);
-        case Publish : return new BaseHandler(m_writer, name);
-        default: return NULL;
+        case Title :
+            return new TitleHandler(m_writer, name);
+        case Document :
+        case Publish :
+        case Custom :
+            return new HeadHandler(m_writer, name);
+        default:
+            return NULL;
     }
 }
 
 //---------------------------------------------------------------------------
-//  Fb2Handler::HeaderHandler
+//  Fb2Handler::TitleHandler
 //---------------------------------------------------------------------------
 
-FB2_BEGIN_KEYHASH(HeaderHandler)
-    insert( "book-title"   , Title    );
-    insert( "author"       , Author   );
-    insert( "sequence"     , Sequence );
-    insert( "genre"        , Genre    );
-    insert( "lang"         , Lang     );
-    insert( "annotation"   , Annot    );
-    insert( "coverpage"    , Cover    );
-FB2_END_KEYHASH
-
-Fb2Handler::BaseHandler * Fb2Handler::HeaderHandler::NewTag(const QString &name, const QXmlAttributes &attributes)
+Fb2Handler::BaseHandler * Fb2Handler::TitleHandler::NewTag(const QString &name, const QXmlAttributes &attributes)
 {
-    Q_UNUSED(attributes);
-    switch (toKeyword(name)) {
-        case Title   : return new BaseHandler(m_writer, name);
-        case Annot   : return new BaseHandler(m_writer, name);
-        default: return NULL;
-    }
+    if (name == "annotation") return new BodyHandler(m_writer, name, attributes, "div", name);
+    return new HeadHandler(m_writer, name);
 }
 
 //---------------------------------------------------------------------------
@@ -331,6 +351,7 @@ void Fb2Handler::BodyHandler::EndTag(const QString &name)
 {
     Q_UNUSED(name);
     if (m_tag.isEmpty()) return;
+    if (m_tag == "div") m_writer.writeCharacters(" ");
     m_writer.writeEndElement();
 }
 

+ 15 - 14
source/fb2read.h

@@ -111,7 +111,17 @@ private:
         virtual void EndTag(const QString &name);
     };
 
-    class DescrHandler : public BaseHandler
+    class HeadHandler : public BaseHandler
+    {
+    public:
+        explicit HeadHandler(Fb2HtmlWriter &writer, const QString &name);
+    protected:
+        virtual BaseHandler * NewTag(const QString &name, const QXmlAttributes &attributes);
+        virtual void TxtTag(const QString &text);
+        virtual void EndTag(const QString &name);
+    };
+
+    class DescrHandler : public HeadHandler
     {
         FB2_BEGIN_KEYLIST
             Title,
@@ -120,24 +130,15 @@ private:
             Custom,
         FB2_END_KEYLIST
     public:
-        explicit DescrHandler(Fb2HtmlWriter &writer, const QString &name) : BaseHandler(writer, name) {}
+        explicit DescrHandler(Fb2HtmlWriter &writer, const QString &name) : HeadHandler(writer, name) {}
     protected:
         virtual BaseHandler * NewTag(const QString &name, const QXmlAttributes &attributes);
     };
 
-    class HeaderHandler : public BaseHandler
+    class TitleHandler : public HeadHandler
     {
-        FB2_BEGIN_KEYLIST
-            Author,
-            Title,
-            Sequence,
-            Genre,
-            Lang,
-            Annot,
-            Cover,
-        FB2_END_KEYLIST
     public:
-        explicit HeaderHandler(Fb2HtmlWriter &writer, const QString &name) : BaseHandler(writer, name) {}
+        explicit TitleHandler(Fb2HtmlWriter &writer, const QString &name) : HeadHandler(writer, name) {}
     protected:
         virtual BaseHandler * NewTag(const QString &name, const QXmlAttributes &attributes);
     };
@@ -163,8 +164,8 @@ private:
         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);
+        virtual void EndTag(const QString &name);
     protected:
         void Init(const QXmlAttributes &attributes);
         bool isNotes() const;

+ 5 - 0
source/fb2view.cpp

@@ -32,6 +32,11 @@ Fb2WebView::~Fb2WebView()
     foreach (QString value, m_files) QFile::remove(value);
 }
 
+QString Fb2WebView::toXml()
+{
+    return page()->mainFrame()->documentElement().toOuterXml();
+}
+
 void Fb2WebView::fixContents()
 {
     QWebElement doc = page()->mainFrame()->documentElement();

+ 1 - 0
source/fb2view.h

@@ -45,6 +45,7 @@ public:
     explicit Fb2WebView(QWidget *parent = 0);
     virtual ~Fb2WebView();
     void load(const QString &filename);
+    QString toXml();
 
     bool UndoEnabled();
     bool RedoEnabled();

+ 3 - 1
source/res/style.css

@@ -25,10 +25,12 @@ div.description div.title-info div.annotation {
   border-top-right-radius: 10;
   border-bottom-left-radius: 10;
   border-bottom-right-radius: 10;
+  margin-top: 1em;
+  margin-bottom: 1em;
 }
 
 div.section {
-  border-top: none; 
+  border-top: none;
   border-bottom: none; 
   border-left: thin solid green; 
   border-right: none;