summaryrefslogtreecommitdiffstats
path: root/ksayit/src/saxhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ksayit/src/saxhandler.cpp')
-rw-r--r--ksayit/src/saxhandler.cpp187
1 files changed, 187 insertions, 0 deletions
diff --git a/ksayit/src/saxhandler.cpp b/ksayit/src/saxhandler.cpp
new file mode 100644
index 0000000..2f8d49c
--- /dev/null
+++ b/ksayit/src/saxhandler.cpp
@@ -0,0 +1,187 @@
+//
+// C++ Implementation: saxhandler
+//
+// Description:
+//
+//
+// Author: Robert Vogl <voglrobe@web.de>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+// #include <iostream> // cout
+// using namespace std;
+
+// KDE includes
+#include <kdebug.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+// App specific includes
+#include "saxhandler.h"
+
+SaxHandler::SaxHandler()
+ : QXmlDefaultHandler()
+{
+ m_output = QString::null;
+ m_rtf = true;
+ m_tagmap["action"] = "B";
+ m_tagmap["application"] = "B";
+ m_tagmap["function"] = "B";
+ m_tagmap["guibutton"] = "B";
+ m_tagmap["guiicon"] = "B";
+ m_tagmap["guilabel"] = "B";
+ m_tagmap["guimenu"] = "B";
+ m_tagmap["guimenuitem"] = "B";
+ m_tagmap["guisubmenu"] = "B";
+ m_tagmap["menuchoice"] = "B";
+ m_tagmap["mousebutton"] = "B";
+ m_tagmap["option"] = "B";
+ m_tagmap["author"] = "B";
+ m_tagmap["corpauthor"] = "B";
+ m_tagmap["warning"] = "FONT color=\"red\"";
+ m_tagmap["command"] = "TT";
+ m_tagmap["email"] = "TT";
+ m_tagmap["filename"] = "TT";
+ m_tagmap["keycap"] = "TT";
+ m_tagmap["keycode"] = "TT";
+ m_tagmap["keycombo"] = "TT";
+ m_tagmap["keysym"] = "TT";
+ m_tagmap["link"] = "TT";
+ m_tagmap["literal"] = "TT";
+ m_tagmap["userinput"] = "TT";
+ m_tagmap["citation"] = "EM";
+ m_tagmap["emphasis"] = "EM";
+ m_tagmap["foreignphrase"] = "EM";
+ m_tagmap["phrase"] = "EM";
+ m_tagmap["comment"] = "EM";
+ m_tagmap["note"] = "EM";
+ m_tagmap["tip"] = "EM";
+ m_tagmap["subscript"] = "small";
+ m_tagmap["superscript"] = "small";
+ m_tagmap["itemizedlist"] = "UL";
+ m_tagmap["listitem"] = "LI";
+}
+
+SaxHandler::~SaxHandler()
+{
+}
+
+
+void SaxHandler::setRTF(bool rtf)
+{
+ m_rtf = rtf;
+}
+
+
+bool SaxHandler::startElement(const QString &,
+ const QString &,
+ const QString & qName,
+ const QXmlAttributes & atts )
+{
+ if ( !m_rtf )
+ return true;
+
+ QString tag = qName.lower();
+
+ TagMapT::iterator it;
+ it = m_tagmap.find(tag);
+ if ( it != m_tagmap.end() ){
+ // tag found in hash table
+ QString rtftag = (*it).second;
+ m_output += "<" + rtftag + ">";
+ }
+
+ return true;
+}
+
+
+bool SaxHandler::endElement(const QString &,
+ const QString &,
+ const QString & qName)
+{
+ if ( !m_rtf )
+ return true;
+
+ QString tag = qName.lower();
+
+ TagMapT::iterator it;
+ it = m_tagmap.find(tag);
+ if ( it != m_tagmap.end() ){
+ // tag found in hash table
+ QString rtftag = (*it).second;
+ m_output += "</" + rtftag.section(" ", 0, 0) + ">";
+ }
+
+ return true;
+}
+
+
+bool SaxHandler::characters(const QString & ch)
+{
+ m_output += ch;
+ return true;
+}
+
+
+bool SaxHandler::fatalError(const QXmlParseException &exc)
+{
+ QString err = i18n("Fatal error while parsing XML-Paragraph:\n");
+ err += i18n("%1, Line: %2").arg(exc.message()).arg(exc.lineNumber());
+ KMessageBox::error(0, err, i18n("Fatal error") );
+ return false;
+}
+
+
+bool SaxHandler::resolveEntity(const QString &publicId,
+ const QString &systemId,
+ QXmlInputSource* &ret)
+{
+ return true;
+}
+
+
+bool SaxHandler::externalEntityDecl(const QString & name,
+ const QString & publicId,
+ const QString & systemId)
+{
+ kdDebug(100200) << "externalEntityDecl(): " << name << ", " << publicId << ", " << systemId << endl;
+ return true;
+}
+
+
+bool SaxHandler::internalEntityDecl(const QString & name,
+ const QString & value)
+{
+ kdDebug() << "internalEntityDecl(): " << name << ", " << value << endl;
+ return true;
+}
+
+
+bool SaxHandler::skippedEntity(const QString &name)
+{
+ QString warn = i18n("Unresolved entity found: %1.\n").arg(name);
+ warn += i18n("KSayIt does not support DocBook files with external entities. ");
+ warn += i18n("Parsing can continue, but the resulting text will contain gaps.");
+
+ int res;
+ // TODO: "Option: don't show again this warning."
+ res = KMessageBox::warningContinueCancel(0, warn, i18n("Parser problem") );
+ if ( res == KMessageBox::Cancel )
+ return false;
+ return true;
+}
+
+
+void SaxHandler::getData( QString &data ) const
+{
+ data = m_output;
+}
+
+
+void SaxHandler::reset()
+{
+ m_output = QString::null;
+}
+
+