+/// A special case of StartTag, used exclusively for tags that wrap paragraphs.
+struct ParTag : public StartTag
+{
+ ///
+ explicit ParTag(std::string const & tag, std::string const & attr,
+ std::string const & parid)
+ : StartTag(tag, attr), parid_(parid)
+ {}
+ ///
+ ~ParTag() {}
+ ///
+ docstring writeTag() const;
+ /// the "magic par label" for this paragraph
+ std::string parid_;
+};
+
+
+///
+enum FontTypes {
+ // ranges
+ FT_EMPH,
+ FT_NOUN,
+ FT_UBAR,
+ FT_DBAR,
+ FT_WAVE,
+ FT_SOUT,
+ // 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_;
+};
+
+