]> Git trees. - libqmvoc.git/commitdiff
* Ok, the parser is now working, it completly eats the test-cml stuff
authorCarsten Niehaus <cniehaus@gmx.de>
Wed, 7 Jun 2006 14:34:22 +0000 (14:34 +0000)
committerCarsten Niehaus <cniehaus@gmx.de>
Wed, 7 Jun 2006 14:34:22 +0000 (14:34 +0000)
svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=549122

libscience/cmlclasses.cpp
libscience/cmlclasses.h
libscience/tests/cml2test.cpp
libscience/xml_cml.cpp
libscience/xml_cml.h

index 14767130d24aed35e7f48e165d0e0cbf5657fff5..7927a23bdb8b83441da8f912b9c8849b05362d93 100644 (file)
@@ -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()
index b05770ed096ea53565a1c082fd16136fb345e645..33e0710b042eaf9d96dd70e7d2c70143ff9dee5e 100644 (file)
@@ -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;
 };
index 5d02b896020a30e262188a4502078bcd6371f9c2..f76a68971ccfc55a184b85aae85ccb0dbeabf994 100644 (file)
@@ -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<CML::Atom*> parsedAtoms;
+       parsedAtoms = handler->getAtoms();
+       QList<CML::Bond*> parsedBonds;
+       parsedBonds = handler->getBonds();
+       
+       kDebug() << "Found " << parsedAtoms.count() << " Atoms and " << parsedBonds.count() << " Bonds!" << endl;
 
-//X    QList<Bond*> 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;
 }
index 6547f67d13ddaf856d64c15ca1a01f6a50f0bcad..3b4a3f03f9a22b374f30f980f49bebee61870b9a 100644 (file)
@@ -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<CML::Atom*> CMLParser::getAtoms()
 { 
        return localAtoms; 
 }
+
+QList<CML::Bond*> CMLParser::getBonds()
+{ 
+       return localBonds; 
+}
index 09b2034fb2b1ad30b2fa054c3990ab9f773a7685..08bc5e067c8b08b8ec1c36794bab076f26fedb61 100644 (file)
 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
+//#define CML_NONE 0
+//#define CML_ATOM 1
+//#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<CML::Atom*> getAtoms();
+               QList<CML::Bond*> getBonds();
 
        private:
                QList<CML::Atom*> 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