Back to index

scribus-ng  1.3.4.dfsg+svn20071115
digester_parse.cpp
Go to the documentation of this file.
00001 /*
00002  *  digester_parse.h
00003  *  
00004  *
00005  *  Created by Andreas Vox on 02.06.06.
00006  *  Copyright 2006 under GPL2. All rights reserved.
00007  *
00008  */
00009 
00010 
00011 #include <qxml.h>
00012 #include <qfile.h>
00013 #include <qstring.h>
00014 
00015 #include "digester.h"
00016 
00017 namespace desaxe {
00018        
00019 class DigesterParser : public QXmlDefaultHandler
00020 {
00021 public:
00022        DigesterParser(Digester* digester) : dig(digester) {}
00023        bool startDocument()
00024        {
00025               dig->beginDoc();
00026               return true;
00027        }
00028     bool startElement( const QString& nsURI, const QString& locName, const QString& qName,
00029                        const QXmlAttributes& qattr)
00030        {
00031               Xml_attr attr;
00032               for (int i=0; i < qattr.count(); ++i)
00033                      attr[qattr.qName(i)] = static_cast<Xml_string>(qattr.value(i).utf8());
00034               dig->begin(qName, attr);
00035               return true;
00036        }
00037 
00038     bool endElement( const QString& nsURI, const QString& locName, const QString& qName)
00039        {
00040               dig->end(qName);
00041               return true;
00042        }
00043 
00044        bool characters ( const QString & ch ) 
00045        {
00046               dig->chars(ch);
00047               return true;
00048        }
00049 private:
00050        Digester * dig;
00051 };
00052 
00053 void Digester::parseFile(const Xml_string& filename)
00054 {
00055        DigesterParser* handler = new DigesterParser(this);
00056        QFile xmlFile( filename );
00057        QXmlInputSource source( &xmlFile );
00058        QXmlSimpleReader reader;
00059        reader.setContentHandler( handler );
00060        reader.parse( source );
00061 }
00062 
00063 void Digester::parseMemory(const char* data, unsigned int length)
00064 {
00065        DigesterParser* handler = new DigesterParser(this);
00066        QXmlInputSource source;
00067        source.setData(QString::fromUtf8(data, length));
00068        QXmlSimpleReader reader;
00069        reader.setContentHandler( handler );
00070        reader.parse( source );
00071 }
00072 
00073 } // namespace
00074