summaryrefslogtreecommitdiff
path: root/library/xmlreader.cpp
Side-by-side diff
Diffstat (limited to 'library/xmlreader.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/xmlreader.cpp137
1 files changed, 137 insertions, 0 deletions
diff --git a/library/xmlreader.cpp b/library/xmlreader.cpp
new file mode 100644
index 0000000..1ae4485
--- a/dev/null
+++ b/library/xmlreader.cpp
@@ -0,0 +1,137 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "xmlreader.h"
+
+Node::Node()
+ : parent( 0 ), prev( 0 ),
+ next( 0 ), first( 0 ), last( 0 )
+{
+}
+
+
+Node::~Node()
+{
+ Node *n = first, *m;
+
+ while ( n ) {
+ m = n->next;
+ delete n;
+ n = m;
+ }
+}
+
+
+void Node::addChild( Node *child )
+{
+ child->parent = this;
+
+ if ( last )
+ last->next = child;
+ child->prev = last;
+
+ if ( !first )
+ first = child;
+ last = child;
+}
+
+QString Node::attribute( const QString& name )
+{
+ return attributes[name];
+}
+
+void Node::setAttributes( const QXmlAttributes &a )
+{
+ for ( int i = 0; i < a.length(); i++ )
+ attributes[ a.qName( i ) ] = a.value( i );
+}
+
+QMap<QString, QString> Node::attributeMap()
+{
+ return attributes;
+}
+
+QString Node::subData(const QString& tag) const
+{
+ Node* c = firstChild();
+ while ( c ) {
+ if ( c->tagName() == tag )
+ return c->data();
+ c = c->nextNode();
+ }
+ return QString::null;
+}
+
+XmlHandler::XmlHandler()
+ : node( 0 ), tree( 0 )
+{
+}
+
+XmlHandler::~XmlHandler()
+{
+}
+
+
+bool XmlHandler::startDocument()
+{
+ tree = node = new Node;
+ node->setTagName( "DOCUMENT" );
+
+ return TRUE;
+}
+
+
+bool XmlHandler::endDocument()
+{
+ if ( node != tree )
+ return FALSE;
+
+ return TRUE;
+}
+
+bool XmlHandler::startElement( const QString &, const QString &,
+ const QString &qName, const QXmlAttributes &attr )
+{
+ Node *nnode = new Node;
+ nnode->setAttributes( attr );
+ nnode->setTagName( qName );
+
+ node->addChild( nnode );
+ node = nnode;
+
+ return TRUE;
+}
+
+
+bool XmlHandler::endElement( const QString &, const QString &, const QString & )
+{
+ if ( node == tree )
+ return FALSE;
+
+ node = node->parentNode();
+ return TRUE;
+}
+
+
+bool XmlHandler::characters( const QString &ch )
+{
+ node->appendData( ch );
+
+ return TRUE;
+}