+
+/// A special case of StartTag, used exclusively for tags that wrap paragraphs.
+struct ParTag : public StartTag
+{
+ ///
+ explicit ParTag(std::string const & tag, std::string attr,
+ std::string const & parid);
+ ///
+ ~ParTag() {}
+};
+
+
+///
+enum FontTypes {
+ // ranges
+ FT_EMPH,
+ FT_NOUN,
+ FT_UBAR,
+ FT_DBAR,
+ FT_WAVE,
+ FT_SOUT,
+ FT_XOUT,
+ // bold
+ FT_BOLD,
+ // shapes
+ FT_UPRIGHT,
+ FT_ITALIC,
+ FT_SLANTED,
+ FT_SMALLCAPS,
+ // families
+ FT_ROMAN,
+ FT_SANS,
+ FT_TYPE,
+ // sizes
+ FT_SIZE_TINY,
+ FT_SIZE_SCRIPT,
+ FT_SIZE_FOOTNOTE,
+ FT_SIZE_SMALL,
+ FT_SIZE_NORMAL,
+ FT_SIZE_LARGE,
+ FT_SIZE_LARGER,
+ FT_SIZE_LARGEST,
+ FT_SIZE_HUGE,
+ FT_SIZE_HUGER,
+ FT_SIZE_INCREASE,
+ FT_SIZE_DECREASE
+};
+
+
+///
+struct FontTag : public StartTag
+{
+ ///
+ explicit FontTag(FontTypes type);
+ ///
+ FontTag const * asFontTag() const { return this; }
+ ///
+ bool operator==(StartTag const &) const;
+ ///
+ FontTypes font_type_;
+};
+
+
+///
+struct EndFontTag : public EndTag
+{
+ ///
+ explicit EndFontTag(FontTypes type);
+ ///
+ EndFontTag const * asFontTag() const { return this; }
+ ///
+ FontTypes font_type_;
+};
+
+
+// trivial struct for output of newlines
+struct CR{};
+