+///
+struct EndTag
+{
+ ///
+ explicit EndTag(std::string const & tag) : tag_(tag) {}
+ ///
+ virtual ~EndTag() {}
+ /// </tag_>
+ virtual docstring writeEndTag() const;
+ ///
+ bool operator==(StartTag const & rhs) const
+ { return tag_ == rhs.tag_; }
+ ///
+ bool operator!=(StartTag const & rhs) const
+ { return !(*this == rhs); }
+ ///
+ virtual EndFontTag const * asFontTag() const { return 0; }
+ ///
+ std::string tag_;
+};
+
+
+/// Tags like <img />
+/// Attributes will be escaped automatically and so should NOT
+/// be escaped before being passed to the constructor.
+struct CompTag
+{
+ ///
+ explicit CompTag(std::string const & tag)
+ : tag_(tag) {}
+ ///
+ explicit CompTag(std::string const & tag, std::string const & attr)
+ : tag_(tag), attr_(attr) {}
+ /// <tag_ attr_ />
+ docstring writeTag() const;
+ ///
+ std::string tag_;
+ ///
+ std::string attr_;
+};
+
+