浏览代码

Show tag <A HREF=...>

Kandrashin Denis 13 年之前
父节点
当前提交
56ab6ab0ec
共有 7 个文件被更改,包括 37 次插入43 次删除
  1. 2 0
      source/fb2edit.qrc
  2. 4 0
      source/fb2main.cpp
  3. 1 0
      source/fb2main.h
  4. 22 41
      source/fb2read.cpp
  5. 8 2
      source/fb2read.h
  6. 二进制
      source/images/16x16/zoom-original.png
  7. 二进制
      source/images/24x24/zoom-original.png

+ 2 - 0
source/fb2edit.qrc

@@ -19,6 +19,7 @@
         <file>images/16x16/format-text-superscript.png</file>
         <file>images/16x16/window-close.png</file>
         <file>images/16x16/zoom-in.png</file>
+        <file>images/16x16/zoom-original.png</file>
         <file>images/16x16/zoom-out.png</file>
         <file>images/24x24/application-exit.png</file>
         <file>images/24x24/document-new.png</file>
@@ -39,6 +40,7 @@
         <file>images/24x24/format-text-superscript.png</file>
         <file>images/24x24/window-close.png</file>
         <file>images/24x24/zoom-in.png</file>
+        <file>images/24x24/zoom-original.png</file>
         <file>images/24x24/zoom-out.png</file>
     </qresource>
 </RCC>

+ 4 - 0
source/fb2main.cpp

@@ -388,6 +388,10 @@ void MainWindow::createActions()
     menu->addAction(act);
     tool->addAction(act);
 
+    actionZoomOrig = act = new QAction(icon("zoom-original"), tr("Zoom original"), this);
+    menu->addAction(act);
+    tool->addAction(act);
+
     menuBar()->addSeparator();
 
     menu = menuBar()->addMenu(tr("&Help"));

+ 1 - 0
source/fb2main.h

@@ -100,6 +100,7 @@ private:
         *actionTextStrike,
         *actionTextSub,
         *actionTextSup,
+        *actionZoomOrig,
         *actionZoomIn,
         *actionZoomOut
     ;

+ 22 - 41
source/fb2read.cpp

@@ -141,7 +141,7 @@ Fb2Handler::RootHandler::~RootHandler()
 Fb2Handler::BaseHandler * Fb2Handler::RootHandler::NewTag(const QString &name, const QXmlAttributes &attributes)
 {
     switch (toKeyword(name)) {
-        case Body   : return new BodyHandler(m_writer, name, "div", name);
+        case Body   : return new BodyHandler(m_writer, name, attributes, "div", name);
         case Descr  : return new DescrHandler(m_writer, name);
         case Binary : return new BinaryHandler(name, attributes);
         default: return NULL;
@@ -224,11 +224,13 @@ FB2_BEGIN_KEYHASH(BodyHandler)
     FB2_KEY( Code,     "code"          );
 FB2_END_KEYHASH
 
-Fb2Handler::BodyHandler::BodyHandler(QXmlStreamWriter &writer, const QString &name, const QString &tag, const QString &style)
+Fb2Handler::BodyHandler::BodyHandler(QXmlStreamWriter &writer, const QString &name, const QXmlAttributes &attributes, const QString &tag, const QString &style)
     : BaseHandler(name)
     , m_writer(writer)
 {
     m_writer.writeStartElement(tag);
+    QString id = Value(attributes, "id");
+    if (!id.isEmpty()) m_writer.writeAttribute("id", id);
     if (!style.isEmpty()) m_writer.writeAttribute("style", style);
 }
 
@@ -240,15 +242,16 @@ Fb2Handler::BodyHandler::~BodyHandler()
 Fb2Handler::BaseHandler * Fb2Handler::BodyHandler::NewTag(const QString &name, const QXmlAttributes &attributes)
 {
     switch (toKeyword(name)) {
-        case Section   : return new BodyHandler(m_writer, name, "div", name);
-        case Parag     : return new BodyHandler(m_writer, name, "p");
-        case Strong    : return new BodyHandler(m_writer, name, "b");
-        case Emphas    : return new BodyHandler(m_writer, name, "i");
-        case Strike    : return new BodyHandler(m_writer, name, "s");
-        case Code      : return new BodyHandler(m_writer, name, "tt");
-        case Sub       : return new BodyHandler(m_writer, name, "sub");
-        case Sup       : return new BodyHandler(m_writer, name, "sup");
+        case Section   : return new BodyHandler(m_writer, name, attributes, "div", name);
+        case Anchor    : return new AnchorHandler(m_writer, name, attributes);
         case Image     : return new ImageHandler(m_writer, name, attributes);
+        case Parag     : return new BodyHandler(m_writer, name, attributes, "p");
+        case Strong    : return new BodyHandler(m_writer, name, attributes, "b");
+        case Emphas    : return new BodyHandler(m_writer, name, attributes, "i");
+        case Strike    : return new BodyHandler(m_writer, name, attributes, "s");
+        case Code      : return new BodyHandler(m_writer, name, attributes, "tt");
+        case Sub       : return new BodyHandler(m_writer, name, attributes, "sub");
+        case Sup       : return new BodyHandler(m_writer, name, attributes, "sup");
         default: return NULL;
     }
 }
@@ -259,48 +262,25 @@ void Fb2Handler::BodyHandler::TxtTag(const QString &text)
 }
 
 //---------------------------------------------------------------------------
-//  Fb2Handler::BlockHandler
+//  Fb2Handler::AnchorHandler
 //---------------------------------------------------------------------------
 
-/*
-
-Fb2Handler::BaseHandler * Fb2Handler::BlockHandler::NewTag(const QString &name, const QXmlAttributes &attributes)
+Fb2Handler::AnchorHandler::AnchorHandler(QXmlStreamWriter &writer, const QString &name, const QXmlAttributes &attributes)
+    : BodyHandler(writer, name, attributes, "a")
 {
-    Q_UNUSED(attributes);
-    QTextCharFormat format;
-    switch (toKeyword(name)) {
-        case Image    : return new ImageHandler(*this, name, attributes);
-        case Strong   : format.setFontWeight(QFont::Bold);  break;
-        case Emphasis : format.setFontItalic(true); break;
-        case Strike   : format.setFontStrikeOut(true); break;
-        case Sub      : format.setVerticalAlignment(QTextCharFormat::AlignSubScript); break;
-        case Sup      : format.setVerticalAlignment(QTextCharFormat::AlignSuperScript); break;
-        case Anchor   : {
-            QString href = Value(attributes, "href");
-            if (!href.isEmpty()) {
-                format.setAnchorHref(href);
-                format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
-            }
-        } break;
-        default:
-            return new UnknowHandler(*this, name); break;
-    }
-    return new BlockHandler(*this, name, attributes, &format);
+    QString href = Value(attributes, "href");
+    writer.writeAttribute("href", href);
 }
 
-*/
-
 //---------------------------------------------------------------------------
 //  Fb2Handler::ImageHandler
 //---------------------------------------------------------------------------
 
 Fb2Handler::ImageHandler::ImageHandler(QXmlStreamWriter &writer, const QString &name, const QXmlAttributes &attributes)
-    : BaseHandler(name)
+    : BodyHandler(writer, name, attributes, "img")
 {
-    QString image = Value(attributes, "href");
-    writer.writeStartElement("img");
-    writer.writeAttribute("href", image);
-    writer.writeEndElement();
+    QString href = Value(attributes, "href");
+    writer.writeAttribute("src", href);
 }
 
 //---------------------------------------------------------------------------
@@ -335,6 +315,7 @@ Fb2Handler::Fb2Handler(QString &string)
     , m_writer(&string)
     , m_handler(NULL)
 {
+    m_writer.setAutoFormatting(true);
 }
 
 Fb2Handler::~Fb2Handler()

+ 8 - 2
source/fb2read.h

@@ -152,7 +152,7 @@ private:
             Code,
        FB2_END_KEYLIST
     public:
-        explicit BodyHandler(QXmlStreamWriter &writer, const QString &name, const QString &tag, const QString &style = QString());
+        explicit BodyHandler(QXmlStreamWriter &writer, const QString &name, const QXmlAttributes &attributes, const QString &tag, const QString &style = QString());
         virtual ~BodyHandler();
         virtual void TxtTag(const QString &text);
     protected:
@@ -161,7 +161,13 @@ private:
         QXmlStreamWriter &m_writer;
     };
 
-    class ImageHandler : public BaseHandler
+    class AnchorHandler : public BodyHandler
+    {
+    public:
+        explicit AnchorHandler(QXmlStreamWriter &writer, const QString &name, const QXmlAttributes &attributes);
+    };
+
+    class ImageHandler : public BodyHandler
     {
     public:
         explicit ImageHandler(QXmlStreamWriter &writer, const QString &name, const QXmlAttributes &attributes);

二进制
source/images/16x16/zoom-original.png


二进制
source/images/24x24/zoom-original.png