+
+bool StartTag::operator==(FontTag const & rhs) const
+{
+ return rhs == *this;
+}
+
+
+docstring EndTag::writeEndTag() const
+{
+ string output = "</" + tag_ + ">";
+ return from_utf8(output);
+}
+
+
+docstring ParTag::writeTag() const
+{
+ docstring output = StartTag::writeTag();
+
+ if (parid_.empty())
+ return output;
+
+ string const pattr = "id='" + parid_ + "'";
+ output += html::CompTag("a", pattr).writeTag();
+ return output;
+}
+
+
+docstring CompTag::writeTag() const
+{
+ docstring output = '<' + from_utf8(tag_);
+ if (!attr_.empty())
+ output += ' ' + html::htmlize(from_utf8(attr_), XHTMLStream::ESCAPE_NONE);
+ output += " />";
+ return output;
+}
+
+
+
+namespace {
+
+string fontToTag(html::FontTypes type)
+{
+ switch(type) {
+ case FT_EMPH:
+ return "em";
+ case FT_BOLD:
+ return "b";
+ case FT_NOUN:
+ return "dfn";
+ case FT_UBAR:
+ case FT_WAVE:
+ case FT_DBAR:
+ return "u";
+ case FT_SOUT:
+ return "del";
+ case FT_ITALIC:
+ return "i";
+ case FT_UPRIGHT:
+ case FT_SLANTED:
+ case FT_SMALLCAPS:
+ case FT_ROMAN:
+ case FT_SANS:
+ case FT_TYPE:
+ case FT_SIZE_TINY:
+ case FT_SIZE_SCRIPT:
+ case FT_SIZE_FOOTNOTE:
+ case FT_SIZE_SMALL:
+ case FT_SIZE_NORMAL:
+ case FT_SIZE_LARGE:
+ case FT_SIZE_LARGER:
+ case FT_SIZE_LARGEST:
+ case FT_SIZE_HUGE:
+ case FT_SIZE_HUGER:
+ case FT_SIZE_INCREASE:
+ case FT_SIZE_DECREASE:
+ return "span";
+ }
+ // kill warning
+ return "";
+}
+
+string fontToAttribute(html::FontTypes type)
+{
+ switch(type) {
+ case FT_EMPH:
+ case FT_BOLD:
+ return "";
+ case FT_NOUN:
+ return "class='lyxnoun'";
+ case FT_UBAR:
+ return "";
+ case FT_DBAR:
+ return "class='dline'";
+ case FT_SOUT:
+ return "class='strikeout'";
+ case FT_WAVE:
+ return "class='wline'";
+ case FT_ITALIC:
+ return "";
+ case FT_UPRIGHT:
+ return "style='font-style:normal;'";
+ case FT_SLANTED:
+ return "style='font-style:oblique;'";
+ case FT_SMALLCAPS:
+ return "style='font-variant:small-caps;'";
+ case FT_ROMAN:
+ return "style='font-family:serif;'";
+ case FT_SANS:
+ return "style='font-family:sans-serif;'";
+ case FT_TYPE:
+ return "style='font-family:monospace;'";
+ case FT_SIZE_TINY:
+ case FT_SIZE_SCRIPT:
+ case FT_SIZE_FOOTNOTE:
+ return "style='font-size:x-small;'";
+ case FT_SIZE_SMALL:
+ return "style='font-size:small;'";
+ case FT_SIZE_NORMAL:
+ return "style='font-size:normal;'";
+ case FT_SIZE_LARGE:
+ return "style='font-size:large;'";
+ case FT_SIZE_LARGER:
+ case FT_SIZE_LARGEST:
+ return "style='font-size:x-large;'";
+ case FT_SIZE_HUGE:
+ case FT_SIZE_HUGER:
+ return "style='font-size:xx-large;'";
+ case FT_SIZE_INCREASE:
+ return "style='font-size:larger;'";
+ case FT_SIZE_DECREASE:
+ return "style='font-size:smaller;'";
+ }
+ // kill warning
+ return "";
+}
+
+} // end anonymous namespace
+
+
+FontTag::FontTag(FontTypes type)
+ : StartTag(fontToTag(type), fontToAttribute(type)), font_type_(type)
+{}
+
+
+bool FontTag::operator==(StartTag const & tag) const
+{
+ FontTag const * const ftag = tag.asFontTag();
+ if (!ftag)
+ return false;
+ return (font_type_ == ftag->font_type_);
+}
+
+
+EndFontTag::EndFontTag(FontTypes type)
+ : EndTag(fontToTag(type)), font_type_(type)
+{}
+
+} // namespace html
+
+
+