Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lintest/fb2edit.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKandrashin Denis <mail@lintest.ru>2012-10-20 02:20:17 +0400
committerKandrashin Denis <mail@lintest.ru>2012-10-20 02:20:17 +0400
commit14d5c3d1cd72c1a7143305ae637425b589cc7399 (patch)
tree366b5a866bb1e4123a1e4ade24fe8b6191a6342c
parentd6f14d498a3044470c884cabf5ed6d1c3179b3c7 (diff)
Move <stylesheet> to <header>
-rw-r--r--source/fb2read.cpp73
-rw-r--r--source/fb2read.hpp23
-rw-r--r--source/fb2save.hpp8
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: