// // aegis - project change supervisor // Copyright (C) 2005 Matthew Lee // Copyright (C) 2008 Peter Miller // // 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 // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #ifndef LIBAEGIS_XML_NODE_RSS_H #define LIBAEGIS_XML_NODE_RSS_H #include // Forward declarations class output_ty; class xml_text_reader_by_node; /** * The xml_node_rss class is a base class for specific RSS node processors. * It exists merely to group together attributes common to the RSS * processors. * * Objects of this class cannot be instantiated. */ class xml_node_rss: public xml_node { public: /** * The destructor. */ virtual ~xml_node_rss(); /** * The copy constructor. */ xml_node_rss(const xml_node_rss &arg); /** * element_begin handler. Write out the element. */ virtual void element_begin(const nstring &name); /** * element_end handler. Write out the element. */ virtual void element_end(const nstring &name); /** * attribute handler. Write out the attribute and value. */ virtual void attribute(const nstring &name, const nstring &value); protected: /** * Constructor. * * Protected so this base class cannot be instantiated. * * \param reader * The xml_text_reader_by_node using this object. * \param out * The output destination to write to. */ xml_node_rss(xml_text_reader_by_node &reader, const output::pointer &out); /** * Take care of terminating a begin element if necessary. */ void terminate_element_begin(); /** * The xmltextreader that is using this object. Store its address so * we can register ourselves to handle a whole bunch of RSS elements. */ const xml_text_reader_by_node &xml_reader; /** * The output destination to write to. */ output::pointer deeper; /** * Remember if the begin element has been properly terminated with a * trailing '>'. * * The element_begin handler cannot close the element when it prints it * out in case that element contains an attribute. So the opening element * must be left unterminated until it is determined if there is an * attribute present or not. */ bool begin_element_terminated; /** * We need to print out the XML version as the first line of output. * This doesn't seem to be handled by the xml_text_reader_by_node. */ bool xml_version_printed; private: /** * The default constructor. Don't use. */ xml_node_rss(); /** * The assignment operator. Don't use. */ xml_node_rss &operator=(const xml_node_rss &); }; #endif // LIBAEGIS_XML_NODE_RSS_H