#ifndef ARABICA_XSLT_TEXT_HANDLER_HPP #define ARABICA_XSLT_TEXT_HANDLER_HPP #include "../xslt_text.hpp" namespace Arabica { namespace XSLT { class TextHandler : public SAX::DefaultHandler { public: TextHandler(CompilationContext& context) : context_(context), text_(0) { } // TextHandler virtual void startElement(const std::string& namespaceURI, const std::string& localName, const std::string& qName, const SAX::Attributes& atts) { if(text_ == 0) { static const ValueRule rules[] = { { "disable-output-escaping", false, No, AllowedYesNo }, { 0, false, 0} }; text_ = new Text(gatherAttributes(qName, atts, rules)["disable-output-escaping"] == Yes); return; } // if(text_ == 0) throw SAX::SAXException(qName + " can not contain elements"); } // startElement virtual void endElement(const std::string& namespaceURI, const std::string& localName, const std::string& qName) { text_->set(buffer_); context_.parentContainer().add_item(text_); context_.pop(); } // endElement virtual void characters(const std::string& ch) { buffer_ += ch; } // characters private: CompilationContext& context_; Text* text_; std::string buffer_; }; // class TextHandler } // namespace XSLT } // namespace Arabica #endif // ARABICA_XSLT_TEXT_TEMPLATE_HPP