diff options
Diffstat (limited to 'Swiften/Parser/PayloadParsers')
4 files changed, 74 insertions, 0 deletions
diff --git a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp index 1a45ed2..eace3d1 100644 --- a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp +++ b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp @@ -10,6 +10,7 @@ #include "Swiften/Parser/PayloadParserFactory.h" #include "Swiften/Parser/PayloadParsers/ErrorParserFactory.h" #include "Swiften/Parser/PayloadParsers/BodyParserFactory.h" +#include "Swiften/Parser/PayloadParsers/SubjectParserFactory.h" #include "Swiften/Parser/PayloadParsers/ChatStateParserFactory.h" #include "Swiften/Parser/PayloadParsers/PriorityParserFactory.h" #include "Swiften/Parser/PayloadParsers/ResourceBindParserFactory.h" @@ -38,6 +39,7 @@ FullPayloadParserFactoryCollection::FullPayloadParserFactoryCollection() { factories_.push_back(shared_ptr<PayloadParserFactory>(new StatusParserFactory())); factories_.push_back(shared_ptr<PayloadParserFactory>(new StatusShowParserFactory())); factories_.push_back(shared_ptr<PayloadParserFactory>(new BodyParserFactory())); + factories_.push_back(shared_ptr<PayloadParserFactory>(new SubjectParserFactory())); factories_.push_back(shared_ptr<PayloadParserFactory>(new PriorityParserFactory())); factories_.push_back(shared_ptr<PayloadParserFactory>(new ErrorParserFactory())); factories_.push_back(shared_ptr<PayloadParserFactory>(new SoftwareVersionParserFactory())); diff --git a/Swiften/Parser/PayloadParsers/SubjectParser.cpp b/Swiften/Parser/PayloadParsers/SubjectParser.cpp new file mode 100644 index 0000000..d28fb7d --- /dev/null +++ b/Swiften/Parser/PayloadParsers/SubjectParser.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swiften/Parser/PayloadParsers/SubjectParser.h" + +namespace Swift { + +SubjectParser::SubjectParser() : level_(0) { +} + +void SubjectParser::handleStartElement(const String&, const String&, const AttributeMap&) { + ++level_; +} + +void SubjectParser::handleEndElement(const String&, const String&) { + --level_; + if (level_ == 0) { + getPayloadInternal()->setText(text_); + } +} + +void SubjectParser::handleCharacterData(const String& data) { + text_ += data; +} + +} diff --git a/Swiften/Parser/PayloadParsers/SubjectParser.h b/Swiften/Parser/PayloadParsers/SubjectParser.h new file mode 100644 index 0000000..a7b8a89 --- /dev/null +++ b/Swiften/Parser/PayloadParsers/SubjectParser.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swiften/Elements/Subject.h" +#include "Swiften/Parser/GenericPayloadParser.h" + +namespace Swift { + class SubjectParser : public GenericPayloadParser<Subject> { + public: + SubjectParser(); + + virtual void handleStartElement(const String& element, const String&, const AttributeMap& attributes); + virtual void handleEndElement(const String& element, const String&); + virtual void handleCharacterData(const String& data); + + private: + int level_; + String text_; + }; +} diff --git a/Swiften/Parser/PayloadParsers/SubjectParserFactory.h b/Swiften/Parser/PayloadParsers/SubjectParserFactory.h new file mode 100644 index 0000000..8ac45c6 --- /dev/null +++ b/Swiften/Parser/PayloadParsers/SubjectParserFactory.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swiften/Parser/GenericPayloadParserFactory.h" +#include "Swiften/Parser/PayloadParsers/SubjectParser.h" + +namespace Swift { + class SubjectParserFactory : public GenericPayloadParserFactory<SubjectParser> { + public: + SubjectParserFactory() : GenericPayloadParserFactory<SubjectParser>("subject") {} + }; +} + |