From a3fa854e1bce6b5521fe11b186879763644c7af2 Mon Sep 17 00:00:00 2001 From: ikemo Date: Wed, 4 Jun 2003 16:25:51 +0000 Subject: [PATCH] impl parser git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/kita/kita/trunk@322 56b19765-1e22-0410-a548-a0f45d66c51a --- kita/src/libkita/board.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++---- kita/src/libkita/board.h | 12 +++++++++- 2 files changed, 66 insertions(+), 6 deletions(-) diff --git a/kita/src/libkita/board.cpp b/kita/src/libkita/board.cpp index 7ba09dd..31ae539 100644 --- a/kita/src/libkita/board.cpp +++ b/kita/src/libkita/board.cpp @@ -117,29 +117,79 @@ Board Board::fromXml( const QString& xml ) reader.setContentHandler( &parser ); reader.parse( &source ); + if( parser.isValid() ) { + board = parser.getBoard(); + } else { + qDebug("inValid"); + } return board; } bool Board::test() { - Board::fromXml( "\nhttp://pc.2ch.net/linux/\nLinux\n\n" ); + Board board = Board::fromXml( "\nhttp://pc.2ch.net/linux/\nLinux\n\n" ); + if( board.url().prettyURL() != "http://pc.2ch.net/linux/" ) qDebug("inValid: line=%d", __LINE__); + if( board.name() != "Linux" ) qDebug("inValid: line=%d", __LINE__); + + board = Board::fromXml( " \n http://pc.2ch.net/linux/\n Linux\n \n" ); + if( board.url().prettyURL() != "http://pc.2ch.net/linux/" ) qDebug("inValid: line=%d", __LINE__); + if( board.name() != "Linux" ) qDebug("inValid: line=%d", __LINE__); + return true; } -bool BoardXmlParser::startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts ) +bool BoardXmlParser::startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& ) { - qDebug("startElement url='%s', local='%s', qName='%s'", namespaceURI.latin1(), localName.latin1(), qName.latin1() ); +// qDebug("startElement url='%s', local='%s', qName='%s'", namespaceURI.latin1(), localName.latin1(), qName.latin1() ); + if( m_inBoard == true ) { + if( localName == "url" ) { + m_inURL = true; + } else if( localName == "name" ) { + m_inName = true; + } else { + // error + return false; + } + } else { + if( localName == "board" ) { + m_inBoard = true; + } else { + // error + return false; + } + } return true; } bool BoardXmlParser::endElement( const QString& namespaceURI, const QString& localName, const QString& qName ) { - qDebug("endElement url='%s', local='%s', qName='%s'", namespaceURI.latin1(), localName.latin1(), qName.latin1() ); +// qDebug("endElement url='%s', local='%s', qName='%s'", namespaceURI.latin1(), localName.latin1(), qName.latin1() ); + if( localName == "board" ) { + m_inBoard = false; + m_board = Kita::Board( KURL( m_urlStr ), m_nameStr ); + m_isValid = true; + // create board; + } else if( localName == "url" ) { + m_inURL = false; + } else if( localName == "name" ) { + m_inName = false; + } else { + // error + return false; + } return true; } bool BoardXmlParser::characters( const QString& ch ) { - qDebug("characters ch='%s'", ch.latin1() ); +// qDebug("characters ch='%s'", ch.latin1() ); + + if( m_inName == true ) { + m_nameStr = ch; + } else if( m_inURL == true ) { + m_urlStr = ch; + } else { + // ignore + } return true; } diff --git a/kita/src/libkita/board.h b/kita/src/libkita/board.h index 21a1c65..b501a8d 100644 --- a/kita/src/libkita/board.h +++ b/kita/src/libkita/board.h @@ -49,12 +49,22 @@ namespace Kita { class BoardXmlParser : public QXmlDefaultHandler { + QString m_nameStr; + QString m_urlStr; + + Board m_board; + bool m_inBoard; + bool m_inName; + bool m_inURL; + bool m_isValid; public: - BoardXmlParser() {}; + BoardXmlParser() : m_inBoard(false), m_inName(false), m_inURL(false), m_isValid(false) {}; ~BoardXmlParser() {}; bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts ); bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName ); bool characters( const QString& ch ); + bool isValid() const { return m_isValid; } + Board getBoard() const { return m_board; } }; }; -- 2.11.0