From 870e192f3b85964ccb2b24ad693dbe70665b52a7 Mon Sep 17 00:00:00 2001 From: Carsten Niehaus Date: Wed, 7 Jun 2006 14:34:22 +0000 Subject: [PATCH] * Ok, the parser is now working, it completly eats the test-cml stuff svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=549122 --- libscience/cmlclasses.cpp | 7 +++ libscience/cmlclasses.h | 25 +++++++-- libscience/tests/cml2test.cpp | 22 ++++---- libscience/xml_cml.cpp | 101 ++++++++++++++-------------------- libscience/xml_cml.h | 33 +++++------ 5 files changed, 95 insertions(+), 93 deletions(-) diff --git a/libscience/cmlclasses.cpp b/libscience/cmlclasses.cpp index 1476713..7927a23 100644 --- a/libscience/cmlclasses.cpp +++ b/libscience/cmlclasses.cpp @@ -27,6 +27,13 @@ Molecule::Molecule() Atom::Atom() { + QString m_elementType = QString( "" ); + QString m_id = QString( "" ); + coord_x2 = 0.0; + coord_x3 = 0.0; + coord_y2 = 0.0; + coord_y3 = 0.0; + coord_z3 = 0.0; } Bond::Bond() diff --git a/libscience/cmlclasses.h b/libscience/cmlclasses.h index b05770e..33e0710 100644 --- a/libscience/cmlclasses.h +++ b/libscience/cmlclasses.h @@ -40,6 +40,11 @@ class EDUSCIENCE_EXPORT Atom public: Atom( ); + QString debug(){ + QString db = "ID: " + m_id + " Type: " + m_elementType + " Coordinates: " + "x3: " + QString::number( coord_x3 ) + " y3: " + QString::number( coord_y3 )+ " z3:" + QString::number( coord_z3 ) + "\n"; + return db; + } + void setID( const QString& id ){ m_id = id; } @@ -68,6 +73,10 @@ class EDUSCIENCE_EXPORT Atom coord_z3 = i; } + QString id() const{ + return m_id; + } + private: QString m_elementType; QString m_id; @@ -82,13 +91,19 @@ class EDUSCIENCE_EXPORT Bond { public: Bond(); + + QString debug(){ + QString db = "Atom 1: " + m_startatom_id + " ... Atom 2: " + m_endatom_id; + return db; + } + /** * defines the two Atoms which start and stop the bond */ - void setAtoms( CML::Atom* a1, CML::Atom* a2 ){ - m_start = a1; - m_end = a2; + void setAtoms( const QString& id1, const QString& id2 ){ + m_startatom_id = id1; + m_endatom_id = id2; } void setOrder( int o ){ @@ -96,8 +111,8 @@ class EDUSCIENCE_EXPORT Bond } private: - Atom* m_start; - Atom* m_end; + QString m_startatom_id; + QString m_endatom_id; int m_order; }; diff --git a/libscience/tests/cml2test.cpp b/libscience/tests/cml2test.cpp index 5d02b89..f76a689 100644 --- a/libscience/tests/cml2test.cpp +++ b/libscience/tests/cml2test.cpp @@ -23,20 +23,22 @@ int main(int argc, char *argv[]) if ( !xmlFile.open( IO_ReadOnly ) ) return false; - QTextStream t1( &xmlFile ); - - QXmlInputSource source; -// source.setData( t1 ); - + QXmlInputSource source( xmlFile ); QXmlSimpleReader xmlReader; xmlReader.setContentHandler( handler ); - xmlReader.parse( source ); + + QList parsedAtoms; + parsedAtoms = handler->getAtoms(); + QList parsedBonds; + parsedBonds = handler->getBonds(); + + kDebug() << "Found " << parsedAtoms.count() << " Atoms and " << parsedBonds.count() << " Bonds!" << endl; -//X QList parsedBonds; -//X Bond *tbond; -//X parsedBonds = handler.getBonds(); -//X + foreach( CML::Atom* a, parsedAtoms ) + kDebug() << a->debug() << endl; + foreach( CML::Bond* b, parsedBonds ) + kDebug() << b->debug() << endl; return 0; } diff --git a/libscience/xml_cml.cpp b/libscience/xml_cml.cpp index 6547f67..3b4a3f0 100644 --- a/libscience/xml_cml.cpp +++ b/libscience/xml_cml.cpp @@ -25,7 +25,6 @@ CMLParser::~CMLParser() bool CMLParser::startDocument() { - qDebug() << "New CML parser started."; return TRUE; } @@ -33,90 +32,69 @@ bool CMLParser::startElement( const QString&, const QString&, const QString& qName, const QXmlAttributes& attr ) { - qDebug() << "Start:" << qName; if ( qName.toUpper() == "ATOM" ) { - states = CML_ATOM; tmp_atom = new CML::Atom(); + + QString x2 = attr.value( "x2"); + if ( x2 != QString( "" ) ) + tmp_atom->setX2( x2.toDouble() ); + + QString x3 = attr.value( "x3"); + if ( x3 != QString( "" ) ) + tmp_atom->setX3( x3.toDouble() ); + + QString y2 = attr.value( "y2"); + if ( y2 != QString( "" ) ) + tmp_atom->setY2( y2.toDouble() ); + + QString y3 = attr.value( "y3"); + if ( y3 != QString( "" ) ) + tmp_atom->setY3( y3.toDouble() ); + + QString z3 = attr.value( "z3"); + if ( z3 != QString( "" ) ) + tmp_atom->setZ3( z3.toDouble() ); + tmp_atom->setID( attr.value( "id" ) ); - qDebug() << "CML::Atom id=" << attr.value( "id" ); } - if ( qName.toUpper() == "BOND" ) { - states = CML_BOND; + else if ( qName.toUpper() == "BOND" ) { tmp_bond = new CML::Bond(); - atom1 = 0; atom2 = 0; + + QString order = attr.value( "order"); + if ( order != QString( "" ) ) + tmp_bond->setOrder( order.toInt() ); + + QString atomRef = attr.value( "atomRefs2"); + if ( atomRef != QString( "" ) ) + { + QStringList Split = atomRef.split( " " ); + tmp_bond->setAtoms( Split.at( 0 ), Split.at( 1 ) ); + } } -//X if ( qName.toUpper() == "FLOAT" ) { -//X last_builtin = attr.value( "builtin" ).toUpper(); -//X if ( last_builtin == "X3" ) last_builtin = "X2"; -//X if ( last_builtin == "X3" ) last_builtin = "Y2"; -//X } -//X if ( qName.toUpper() == "STRING" ) { -//X last_builtin = attr.value( "builtin" ).toUpper(); -//X } return TRUE; } bool CMLParser::endElement( const QString&, const QString&, const QString& qName ) { - qDebug() << "End:" << qName; if ( qName.toUpper() == "ATOM" ) { localAtoms.append( tmp_atom ); tmp_atom = 0; - states = CML_NONE; - qDebug() << "finished atom"; } if ( qName.toUpper() == "BOND" ) { - tmp_bond->setAtoms( atom1, atom2 ); localBonds.append( tmp_bond ); tmp_bond = 0; - states = CML_NONE; - qDebug() << "finished bond"; } return TRUE; } -bool CMLParser::characters( const QString &ch ) { - qDebug() << "char:" << ch << ":"; - if ( states == CML_ATOM ) - { - if ( last_builtin == "ELEMENTTYPE" ) - tmp_atom->setElementType( ch ); - - if ( last_builtin == "X2" ) - tmp_atom->setX2( ch.toDouble() ); - - if ( last_builtin == "Y2" ) - tmp_atom->setY2( ch.toDouble() ); - - if ( last_builtin == "X3" ) - tmp_atom->setX3( ch.toDouble() ); - - if ( last_builtin == "Y3" ) - tmp_atom->setY3( ch.toDouble() ); - - if ( last_builtin == "Z3" ) - tmp_atom->setZ3( ch.toDouble() ); - } - if ( states == CML_BOND ) { - - if ( last_builtin == "ATOMREFS2" ) - { - } - - if ( last_builtin == "ORDER" ) - tmp_bond->setOrder( ch.toInt() ); - -//X if ( last_builtin == "STEREO" ) { -//X if ( ch == "H" ) tmp_bond->setOrder( 7 ); -//X if ( ch == "W" ) tmp_bond->setOrder( 5 ); -//X } - } +bool CMLParser::characters( const QString &ch ) +{ return TRUE; } -bool CMLParser::ignorableWhitespace( const QString &ch ) { - qDebug() << "ignored:" << ch << ":"; +bool CMLParser::ignorableWhitespace( const QString &ch ) +{ return TRUE; } @@ -124,3 +102,8 @@ QList CMLParser::getAtoms() { return localAtoms; } + +QList CMLParser::getBonds() +{ + return localBonds; +} diff --git a/libscience/xml_cml.h b/libscience/xml_cml.h index 09b2034..08bc5e0 100644 --- a/libscience/xml_cml.h +++ b/libscience/xml_cml.h @@ -21,16 +21,16 @@ class QString; // possible states (CMLParser::states) -// // set in defs.h -// //#define CML_NONE 0 -// //#define CML_ATOM 1 -// //#define CML_BOND 2 -#define CML_MOLECULE 10 -#define CML_NONE 1 -#define CML_ATOM 2 -#define CML_BOND 3 -#define CML_ATOMARRAY 4 -#define CML_BONDARRAY 5 +// set in defs.h +//X #define CML_NONE 0 +//X #define CML_ATOM 1 +//X #define CML_BOND 2 +//X #define CML_MOLECULE 10 +//X #define CML_NONE 1 +//X #define CML_ATOM 2 +//X #define CML_BOND 3 +//X #define CML_ATOMARRAY 4 +//X #define CML_BONDARRAY 5 class EDUSCIENCE_EXPORT CMLParser : public QXmlDefaultHandler @@ -41,7 +41,9 @@ class EDUSCIENCE_EXPORT CMLParser : public QXmlDefaultHandler bool startDocument(); - bool startElement( const QString&, const QString&, const QString& , + bool startElement( const QString&, + const QString&, + const QString& , const QXmlAttributes& ); bool endElement( const QString&, const QString&, const QString& ); @@ -51,6 +53,7 @@ class EDUSCIENCE_EXPORT CMLParser : public QXmlDefaultHandler bool ignorableWhitespace( const QString& ); QList getAtoms(); + QList getBonds(); private: QList localAtoms; @@ -58,15 +61,7 @@ class EDUSCIENCE_EXPORT CMLParser : public QXmlDefaultHandler CML::Bond *tmp_bond; - //temporary atoms for the creation of a Bond - CML::Atom * atom1; - CML::Atom * atom2; - CML::Atom * tmp_atom; - - QString indent, last_builtin; - - int states; }; #endif -- 2.47.3