Jelajahi Sumber

UnknowHandler

Kandrashin Denis 13 tahun lalu
induk
melakukan
d1cc07bfda
2 mengubah file dengan 40 tambahan dan 3 penghapusan
  1. 28 3
      source/fb2read.cpp
  2. 12 0
      source/fb2read.h

+ 28 - 3
source/fb2read.cpp

@@ -194,6 +194,11 @@ Fb2Handler::TextHandler::TextHandler(TextHandler &parent, const QString &name)
 {
 }
 
+Fb2Handler::BaseHandler * Fb2Handler::TextHandler::NewTag(const QString & name, const QXmlAttributes &attributes)
+{
+    return BaseHandler::NewTag(name, attributes);
+}
+
 void Fb2Handler::TextHandler::EndTag(const QString &name)
 {
     Q_UNUSED(name);
@@ -300,7 +305,7 @@ Fb2Handler::BaseHandler * Fb2Handler::SectionHandler::NewTag(const QString &name
         case Title     : return new TitleHandler(*this, name, attributes); break;
         case Poem      : return new PoemHandler(*this, name, attributes); break;
         case Image     : return new ImageHandler(*this, name, attributes); break;
-        default: return NULL;
+        default        : return new UnknowHandler(*this, name); break;
     }
 ;
 }
@@ -352,7 +357,7 @@ Fb2Handler::BaseHandler * Fb2Handler::TitleHandler::NewTag(const QString &name,
     switch (toKeyword(name)) {
         case Paragraph : return new BlockHandler(*this, name, attributes); break;
         case Emptyline : return new BlockHandler(*this, name, attributes); break;
-        default: return NULL;
+        default        : return new UnknowHandler(*this, name); break;
     }
 }
 
@@ -478,7 +483,7 @@ Fb2Handler::BaseHandler * Fb2Handler::BlockHandler::NewTag(const QString &name,
 {
     Q_UNUSED(attributes);
     switch (toKeyword(name)) {
-        default: return new BaseHandler(name); break;
+        default: return new UnknowHandler(*this, name); break;
     }
 }
 
@@ -506,6 +511,26 @@ Fb2Handler::BaseHandler * Fb2Handler::ImageHandler::NewTag(const QString &name,
     return false;
 }
 
+//---------------------------------------------------------------------------
+//  Fb2Handler::UnknowHandler
+//---------------------------------------------------------------------------
+
+Fb2Handler::UnknowHandler::UnknowHandler(TextHandler &parent, const QString &name)
+    : TextHandler(parent, name)
+    , m_parent(parent)
+{
+}
+
+Fb2Handler::BaseHandler * Fb2Handler::UnknowHandler::NewTag(const QString &name, const QXmlAttributes &attributes)
+{
+    return m_parent.NewTag(name, attributes);
+}
+
+void Fb2Handler::UnknowHandler::TxtTag(const QString &text)
+{
+    cursor().insertText(text);
+}
+
 //---------------------------------------------------------------------------
 //  Fb2Handler::BinaryHandler
 //---------------------------------------------------------------------------

+ 12 - 0
source/fb2read.h

@@ -128,6 +128,7 @@ private:
     public:
         explicit TextHandler(Fb2TextCursor &cursor, const QString &name);
         explicit TextHandler(TextHandler &parent, const QString &name);
+        virtual BaseHandler * NewTag(const QString & name, const QXmlAttributes &attributes);
     protected:
         virtual void EndTag(const QString &name);
     protected:
@@ -262,6 +263,17 @@ private:
         virtual void TxtTag(const QString &text);
     };
 
+    class UnknowHandler : public TextHandler
+    {
+    public:
+        explicit UnknowHandler(TextHandler &parent, const QString &name);
+    protected:
+        virtual BaseHandler * NewTag(const QString &name, const QXmlAttributes &attributes);
+        virtual void TxtTag(const QString &text);
+    private:
+        TextHandler &m_parent;
+    };
+
     class BinaryHandler : public BaseHandler
     {
     public: