# HG changeset patch # User insilmaril # Date 1185788833 0 # Node ID 56fa27b2be3e9531e503e0b9b13286bfd56c2381 # Parent af451f0e5fbb6ef66d97f60d9b27d9e9caae7de3 1.9.4 New base class for XML based file parsing (vym & Freemind) diff -r af451f0e5fbb -r 56fa27b2be3e vym.pro --- a/vym.pro Mon Jul 30 09:47:12 2007 +0000 +++ b/vym.pro Mon Jul 30 09:47:13 2007 +0000 @@ -47,7 +47,8 @@ simplescripteditor.h\ texteditor.h \ version.h \ - xml.h \ + xml-base.h \ + xml-vym.h \ xml-freemind.h \ xsltproc.h \ settings.h \ @@ -93,7 +94,8 @@ simplescripteditor.cpp \ texteditor.cpp \ version.cpp \ - xml.cpp \ + xml-base.cpp \ + xml-vym.cpp \ xml-freemind.cpp \ xsltproc.cpp \ settings.cpp \ diff -r af451f0e5fbb -r 56fa27b2be3e xml-base.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml-base.cpp Mon Jul 30 09:47:13 2007 +0000 @@ -0,0 +1,108 @@ +#include "xml-base.h" + +#include +#include +#include +#include + +#include "misc.h" +#include "settings.h" +#include "linkablemapobj.h" +#include "version.h" + +/* +static BranchObj *lastBranch; +static FloatObj *lastFloat; +static OrnamentedObj *lastOO; + +extern Settings settings; +extern QString vymVersion; +*/ + +parseBaseHandler::parseBaseHandler() {} + +parseBaseHandler::~parseBaseHandler() {} + +QString parseBaseHandler::errorProtocol() { return errorProt; } + + +/* +bool parseBaseHandler::startDocument() +{ + errorProt = ""; + state = StateInit; + laststate = StateInit; + stateStack.clear(); + stateStack.append(StateInit); + branchDepth=0; + htmldata=""; + isVymPart=false; + return true; +} +*/ + +QString parseBaseHandler::parseHREF(QString href) +{ + QString type=href.section(":",0,0); + QString path=href.section(":",1,1); + if (!tmpDir.endsWith("/")) + return tmpDir + "/" + path; + else + return tmpDir + path; +} + + +/* +QString parseBaseHandler::errorString() +{ + return "the document is not in the VYM file format"; +} +*/ + +bool parseBaseHandler::fatalError( const QXmlParseException& exception ) +{ + errorProt += QString( "Fatal parsing error: %1 in line %2, column %3\n") + .arg( exception.message() ) + .arg( exception.lineNumber() ) + .arg( exception.columnNumber() ); + // Try to read the bogus line + errorProt+=QString("File is: %1\n").arg(inputFile); + QString s; + if (loadStringFromDisk (inputFile,s)) + { + QStringList sl=QStringList::split ("\n",s); + int i=1; + QStringList::Iterator it = sl.begin(); + while (i"); + errorProt+=s; + } + return QXmlDefaultHandler::fatalError( exception ); +} + +void parseBaseHandler::setMapEditor (MapEditor* e) +{ + me=e; + mc=me->getMapCenter(); +} + +void parseBaseHandler::setTmpDir (QString tp) +{ + tmpDir=tp; +} + +void parseBaseHandler::setInputFile (QString f) +{ + inputFile=f; +} + +void parseBaseHandler::setLoadMode (const LoadMode &lm) +{ + loadMode=lm; +} + diff -r af451f0e5fbb -r 56fa27b2be3e xml-base.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml-base.h Mon Jul 30 09:47:13 2007 +0000 @@ -0,0 +1,50 @@ +#ifndef XML_BASE +#define XML_BASE + + +#include +#include + +#include "file.h" +#include "mapcenterobj.h" +#include "mapeditor.h" + + +/*! \brief Base class for parsing maps from XML documents */ + +class parseBaseHandler : public QXmlDefaultHandler +{ +public: + parseBaseHandler(); + ~parseBaseHandler(); + QString errorProtocol(); + QString parseHREF(QString); + virtual bool startElement ( const QString&, const QString&, + const QString& eName, const QXmlAttributes& atts )=0; + virtual bool endElement ( const QString&, const QString&, const QString& )=0; + virtual bool characters ( const QString&)=0; + + virtual QString errorString()=0; + bool fatalError( const QXmlParseException&); + void setMapEditor (MapEditor*); + void setTmpDir (QString); + void setInputFile (QString); + void setLoadMode (const LoadMode &); + +protected: + QString errorProt; + + LoadMode loadMode; + bool isVymPart; +// State state; +// State laststate; +// QList stateStack; +// QString htmldata; + int branchDepth; +// NoteObj no; + MapCenterObj* mc; + MapEditor* me; + QString tmpDir; + QString inputFile; +}; +#endif diff -r af451f0e5fbb -r 56fa27b2be3e xml-freemind.cpp --- a/xml-freemind.cpp Mon Jul 30 09:47:12 2007 +0000 +++ b/xml-freemind.cpp Mon Jul 30 09:47:13 2007 +0000 @@ -19,14 +19,7 @@ extern QString flagsPath; -parseFMHandler::parseFMHandler() {} - -parseFMHandler::~parseFMHandler() {} - -QString parseFMHandler::errorProtocol() { return errorProt; } - - -bool parseFMHandler::startDocument() +bool parseFreemindHandler::startDocument() { errorProt = ""; state = StateInit; @@ -34,13 +27,12 @@ stateStack.clear(); stateStack.append(StateInit); branchDepth=0; - htmldata=""; isVymPart=false; return true; } -QString parseFMHandler::parseHREF(QString href) +QString parseFreemindHandler::parseHREF(QString href) { QString type=href.section(":",0,0); QString path=href.section(":",1,1); @@ -50,7 +42,7 @@ return tmpDir + path; } -bool parseFMHandler::startElement ( const QString&, const QString&, +bool parseFreemindHandler::startElement ( const QString&, const QString&, const QString& eName, const QXmlAttributes& atts ) { QColor col; @@ -148,7 +140,7 @@ else if (f=="button_cancel") v="cross-red"; else if (f.contains("full-")) - v=f.replace("full-","freemind-priority-"); //FIXME + v=f.replace("full-","freemind-priority-"); else if (f=="back") v="freemind-back"; else if (f=="forward") @@ -208,7 +200,7 @@ return true; } -bool parseFMHandler::endElement ( const QString&, const QString&, const QString &eName) +bool parseFreemindHandler::endElement ( const QString&, const QString&, const QString &eName) { /* Testing cout << "endElement "); - errorProt+=s; - } - return QXmlDefaultHandler::fatalError( exception ); -} - -void parseFMHandler::setMapEditor (MapEditor* e) -{ - me=e; - mc=me->getMapCenter(); -} - -void parseFMHandler::setTmpDir (QString tp) -{ - tmpDir=tp; -} - -void parseFMHandler::setInputFile (QString f) -{ - inputFile=f; -} - -void parseFMHandler::setLoadMode (const LoadMode &lm) -{ - loadMode=lm; -} - -bool parseFMHandler::readNodeAttr (const QXmlAttributes& a) +bool parseFreemindHandler::readNodeAttr (const QXmlAttributes& a) { lastOO=lastBranch;