diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-07-11 23:20:48 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-07-11 23:20:48 +0900 |
| commit | 70685bd233d5c32b9f762a5fc0e4d7fa42a013ee (patch) | |
| tree | e7617d7a54b756f45c1e100998ec9a63cdd36281 /src/Xml2XmlParser.h | |
| parent | cd67e27ca4f610758835b951ac725fb188cb79b5 (diff) | |
Rewritten Xml2XmlParser
Now it is push parser + utility function for file parsing.
Diffstat (limited to 'src/Xml2XmlParser.h')
| -rw-r--r-- | src/Xml2XmlParser.h | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/src/Xml2XmlParser.h b/src/Xml2XmlParser.h index 66cc1a8b..c608b6c7 100644 --- a/src/Xml2XmlParser.h +++ b/src/Xml2XmlParser.h @@ -2,7 +2,7 @@ /* * aria2 - The high speed download utility * - * Copyright (C) 2011 Tatsuhiro Tsujikawa + * Copyright (C) 2012 Tatsuhiro Tsujikawa * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,25 +37,56 @@ #include "common.h" +#include <sys/types.h> + #include <cstdlib> +#include <string> +#include <deque> + +#include <libxml/parser.h> namespace aria2 { -class BinaryStream; class ParserStateMachine; +namespace xml { + +enum XmlError { + ERR_XML_PARSE = -1, + ERR_RESET = -2 +}; + +struct SessionData { + std::deque<std::string> charactersStack; + ParserStateMachine* psm; + SessionData(ParserStateMachine* psm) + : psm(psm) + {} + void reset() + { + charactersStack.clear(); + } +}; + class XmlParser { public: // This object does not delete psm. XmlParser(ParserStateMachine* psm); ~XmlParser(); - bool parseFile(const char* filename); - bool parseBinaryStream(BinaryStream* binaryStream); - bool parseMemory(const char* xml, size_t size); + ssize_t parseUpdate(const char* data, size_t size); + ssize_t parseFinal(const char* data, size_t size); + int reset(); private: ParserStateMachine* psm_; + SessionData sessionData_; + xmlParserCtxtPtr ctx_; + int lastError_; }; +bool parseFile(const std::string& filename, ParserStateMachine* psm); + +} // namespace xml + } // namespace aria2 #endif // D_XML2_XML_PARSER_H |
