diff options
author | Kandrashin Denis <mail@lintest.ru> | 2012-10-20 02:20:17 +0400 |
---|---|---|
committer | Kandrashin Denis <mail@lintest.ru> | 2012-10-20 02:20:17 +0400 |
commit | 14d5c3d1cd72c1a7143305ae637425b589cc7399 (patch) | |
tree | 366b5a866bb1e4123a1e4ade24fe8b6191a6342c | |
parent | d6f14d498a3044470c884cabf5ed6d1c3179b3c7 (diff) |
Move <stylesheet> to <header>
-rw-r--r-- | source/fb2read.cpp | 73 | ||||
-rw-r--r-- | source/fb2read.hpp | 23 | ||||
-rw-r--r-- | source/fb2save.hpp | 8 |
3 files changed, 88 insertions, 16 deletions
diff --git a/source/fb2read.cpp b/source/fb2read.cpp index a57e2bf..0a41ab4 100644 --- a/source/fb2read.cpp +++ b/source/fb2read.cpp @@ -90,24 +90,80 @@ bool FbReadThread::parse() // FbReadHandler::RootHandler //--------------------------------------------------------------------------- +FB2_BEGIN_KEYHASH(FbReadHandler::RootHandler) + FB2_KEY( Style , "stylesheet" ); + FB2_KEY( Descr , "description" ); + FB2_KEY( Body , "body" ); + FB2_KEY( Binary , "binary" ); +FB2_END_KEYHASH + FbReadHandler::RootHandler::RootHandler(FbReadHandler &owner, const QString &name) : BaseHandler(owner, name) + , m_head(true) { - writer().writeStartElement("body"); } FbXmlHandler::NodeHandler * FbReadHandler::RootHandler::NewTag(const QString &name, const QXmlAttributes &atts) { - if (name == "binary") return new BinaryHandler(m_owner, name, atts); + switch (toKeyword(name)) { + case Binary: return new BinaryHandler(m_owner, name, atts); + case Style: return new StyleHandler(m_owner, name, m_style); + default: ; + } + + if (m_head) { + writeHeader(); + m_head = false; + } + return new TextHandler(m_owner, name, atts, "fb:" + name); } void FbReadHandler::RootHandler::EndTag(const QString &name) { Q_UNUSED(name); + if (!m_head) writer().writeEndElement(); +} + +void FbReadHandler::RootHandler::writeScript(const QString &src) +{ + writer().writeStartElement("script"); + writer().writeAttribute("type", "text/javascript"); + writer().writeAttribute("src", src); + writer().writeCharacters(" "); writer().writeEndElement(); } +void FbReadHandler::RootHandler::writeHeader() +{ + writer().writeStartElement("head"); + writeScript("qrc:/js/jquery.js"); + writeScript("qrc:/js/location.js"); + if (!m_style.isEmpty()) { + writer().writeStartElement("style"); + writer().writeAttribute("type", "text/css"); + writer().writeCharacters(m_style); + writer().writeEndElement(); + } + writer().writeEndElement(); + writer().writeStartElement("body"); +} + +//--------------------------------------------------------------------------- +// FbReadHandler::StyleHandler +//--------------------------------------------------------------------------- + +FbReadHandler::StyleHandler::StyleHandler(FbReadHandler &owner, const QString &name, QString &text) + : BaseHandler(owner, name) + , m_text(text) +{ +} + +void FbReadHandler::StyleHandler::TxtTag(const QString &text) +{ + m_text += text; +} + //--------------------------------------------------------------------------- // FbReadHandler::TextHandler //--------------------------------------------------------------------------- @@ -246,10 +302,6 @@ FbReadHandler::FbReadHandler(FbReadThread &thread, QXmlStreamWriter &writer) m_writer.setAutoFormatting(true); m_writer.setAutoFormattingIndent(2); m_writer.writeStartElement("html"); - m_writer.writeStartElement("head"); - writeScript("qrc:/js/jquery.js"); - writeScript("qrc:/js/location.js"); - m_writer.writeEndElement(); } FbReadHandler::~FbReadHandler() @@ -257,15 +309,6 @@ FbReadHandler::~FbReadHandler() m_writer.writeEndElement(); } -void FbReadHandler::writeScript(const QString &src) -{ - m_writer.writeStartElement("script"); - m_writer.writeAttribute("type", "text/javascript"); - m_writer.writeAttribute("src", src); - m_writer.writeCharacters(" "); - m_writer.writeEndElement(); -} - FbXmlHandler::NodeHandler * FbReadHandler::CreateRoot(const QString &name, const QXmlAttributes &atts) { Q_UNUSED(atts); diff --git a/source/fb2read.hpp b/source/fb2read.hpp index 778b9db..25c8c1e 100644 --- a/source/fb2read.hpp +++ b/source/fb2read.hpp @@ -69,11 +69,33 @@ private: class RootHandler : public BaseHandler { + FB2_BEGIN_KEYLIST + Style, + Descr, + Body, + Binary, + FB2_END_KEYLIST public: explicit RootHandler(FbReadHandler &owner, const QString &name); protected: virtual NodeHandler * NewTag(const QString & name, const QXmlAttributes &atts); virtual void EndTag(const QString &name); + private: + void writeScript(const QString &src); + void writeHeader(); + private: + QString m_style; + bool m_head; + }; + + class StyleHandler : public BaseHandler + { + public: + explicit StyleHandler(FbReadHandler &owner, const QString &name, QString &text); + protected: + virtual void TxtTag(const QString &text); + private: + QString &m_text; }; class TextHandler : public BaseHandler @@ -125,7 +147,6 @@ protected: private: void addFile(const QString &name, const QByteArray &data); - void writeScript(const QString &src); private: typedef QHash<QString, QString> StringHash; diff --git a/source/fb2save.hpp b/source/fb2save.hpp index 352313e..fc58b3f 100644 --- a/source/fb2save.hpp +++ b/source/fb2save.hpp @@ -137,6 +137,14 @@ private: FbSaveWriter &m_writer; }; + class HeadHandler : public TextHandler + { + public: + explicit HeadHandler(FbSaveWriter &writer, const QString &name, const QXmlAttributes &atts); + protected: + virtual void EndTag(const QString &name); + }; + class BodyHandler : public TextHandler { public: |