X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=0251752342fd53cca7654daa66a396aa84511960;hb=af5257b6c3b24c00b18c601b77033cf7e60ce211;hp=10b6456adfd1e21449bc59cbec8923c10497c380;hpb=a6b07608d8e9de24383d3ebaec20b6b265ed9314;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 10b6456adf..0251752342 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -64,6 +64,7 @@ #include "support/lassert.h" #include "support/lstrings.h" #include "support/textutils.h" +#include "output_docbook.h" #include #include @@ -2054,13 +2055,6 @@ docstring Paragraph::expandLabel(Layout const & layout, } -docstring Paragraph::expandDocBookLabel(Layout const & layout, - BufferParams const & bparams) const -{ - return expandParagraphLabel(layout, bparams, false); -} - - docstring Paragraph::expandParagraphLabel(Layout const & layout, BufferParams const & bparams, bool process_appendix) const { @@ -2812,6 +2806,10 @@ void Paragraph::latex(BufferParams const & bparams, // command is ever executed but its opening was recorded. runparams.inulemcmd = rp.inulemcmd; + // These need to be passed upstream as well + runparams.need_maketitle = rp.need_maketitle; + runparams.have_maketitle = rp.have_maketitle; + // And finally, pass the post_macros upstream runparams.post_macro = rp.post_macro; } @@ -2948,18 +2946,17 @@ string Paragraph::getID(Buffer const &, OutputParams const &) } -pos_type Paragraph::firstWordDocBook(odocstream & os, OutputParams const & runparams) - const +pos_type Paragraph::firstWordDocBook(XMLStream & xs, OutputParams const & runparams) const { pos_type i; for (i = 0; i < size(); ++i) { if (Inset const * inset = getInset(i)) { - inset->docbook(os, runparams); + inset->docbook(xs, runparams); } else { char_type c = d->text_[i]; if (c == ' ') break; - os << xml::escapeChar(c, XMLStream::ESCAPE_ALL); + xs << c; } } return i; @@ -3001,57 +2998,311 @@ bool Paragraph::Private::onlyText(Buffer const & buf, Font const & outerfont, po } +namespace { + +void doFontSwitchDocBook(vector & tagsToOpen, + vector & tagsToClose, + bool & flag, FontState curstate, xml::FontTypes type) +{ + if (curstate == FONT_ON) { + tagsToOpen.push_back(docbookStartFontTag(type)); + flag = true; + } else if (flag) { + tagsToClose.push_back(docbookEndFontTag(type)); + flag = false; + } +} + +class OptionalFontType { +public: + bool has_value; + xml::FontTypes ft; + + OptionalFontType(): has_value(false), ft(xml::FT_EMPH) {} // A possible value at random for ft. + OptionalFontType(xml::FontTypes ft): has_value(true), ft(ft) {} +}; + +OptionalFontType fontShapeToXml(FontShape fs) +{ + switch (fs) { + case ITALIC_SHAPE: + return {xml::FT_ITALIC}; + case SLANTED_SHAPE: + return {xml::FT_SLANTED}; + case SMALLCAPS_SHAPE: + return {xml::FT_SMALLCAPS}; + case UP_SHAPE: + case INHERIT_SHAPE: + return {}; + default: + // the other tags are for internal use + LATTEST(false); + return {}; + } +} + +OptionalFontType fontFamilyToXml(FontFamily fm) +{ + switch (fm) { + case ROMAN_FAMILY: + return {xml::FT_ROMAN}; + break; + case SANS_FAMILY: + return {xml::FT_SANS}; + break; + case TYPEWRITER_FAMILY: + return {xml::FT_TYPE}; + break; + case INHERIT_FAMILY: + return {}; + default: + // the other tags are for internal use + LATTEST(false); + return {}; + } +} + +OptionalFontType fontSizeToXml(FontSize fs) +{ + switch (fs) { + case TINY_SIZE: + return {xml::FT_SIZE_TINY}; + case SCRIPT_SIZE: + return {xml::FT_SIZE_SCRIPT}; + case FOOTNOTE_SIZE: + return {xml::FT_SIZE_FOOTNOTE}; + case SMALL_SIZE: + return {xml::FT_SIZE_SMALL}; + case LARGE_SIZE: + return {xml::FT_SIZE_LARGE}; + case LARGER_SIZE: + return {xml::FT_SIZE_LARGER}; + case LARGEST_SIZE: + return {xml::FT_SIZE_LARGEST}; + case HUGE_SIZE: + return {xml::FT_SIZE_HUGE}; + case HUGER_SIZE: + return {xml::FT_SIZE_HUGER}; + case INCREASE_SIZE: + return {xml::FT_SIZE_INCREASE}; + case DECREASE_SIZE: + return {xml::FT_SIZE_DECREASE}; + case INHERIT_SIZE: + case NORMAL_SIZE: + return {}; + default: + // the other tags are for internal use + LATTEST(false); + return {}; + } +} + +}// anonymous namespace + + void Paragraph::simpleDocBookOnePar(Buffer const & buf, - odocstream & os, - OutputParams const & runparams, - Font const & outerfont, - pos_type initial) const + XMLStream & xs, + OutputParams const & runparams, + Font const & outerfont, + bool start_paragraph, bool close_paragraph, + pos_type initial) const { + // track whether we have opened these tags bool emph_flag = false; + bool bold_flag = false; + bool noun_flag = false; + bool ubar_flag = false; + bool dbar_flag = false; + bool sout_flag = false; + bool wave_flag = false; + // shape tags + bool shap_flag = false; + // family tags + bool faml_flag = false; + // size tags + bool size_flag = false; Layout const & style = *d->layout_; + + if (start_paragraph) + xs.startDivision(allowEmpty()); + FontInfo font_old = - style.labeltype == LABEL_MANUAL ? style.labelfont : style.font; + style.labeltype == LABEL_MANUAL ? style.labelfont : style.font; - if (style.pass_thru && !d->onlyText(buf, outerfont, initial)) - os << "]]>"; + FontShape curr_fs = INHERIT_SHAPE; + FontFamily curr_fam = INHERIT_FAMILY; + FontSize curr_size = INHERIT_SIZE; + + string const default_family = + buf.masterBuffer()->params().fonts_default_family; + + vector tagsToOpen; + vector tagsToClose; // parsing main loop for (pos_type i = initial; i < size(); ++i) { - Font font = getFont(buf.params(), i, outerfont); - - // handle tag - if (font_old.emph() != font.fontInfo().emph()) { - if (font.fontInfo().emph() == FONT_ON) { - os << ""; - emph_flag = true; - } else if (i != initial) { - os << ""; - emph_flag = false; + // let's not show deleted material in the output + if (isDeleted(i)) + continue; + + Font const font = getFont(buf.masterBuffer()->params(), i, outerfont); + + // emphasis + FontState curstate = font.fontInfo().emph(); + if (font_old.emph() != curstate) + doFontSwitchDocBook(tagsToOpen, tagsToClose, emph_flag, curstate, xml::FT_EMPH); + + // noun + curstate = font.fontInfo().noun(); + if (font_old.noun() != curstate) + doFontSwitchDocBook(tagsToOpen, tagsToClose, noun_flag, curstate, xml::FT_NOUN); + + // underbar + curstate = font.fontInfo().underbar(); + if (font_old.underbar() != curstate) + doFontSwitchDocBook(tagsToOpen, tagsToClose, ubar_flag, curstate, xml::FT_UBAR); + + // strikeout + curstate = font.fontInfo().strikeout(); + if (font_old.strikeout() != curstate) + doFontSwitchDocBook(tagsToOpen, tagsToClose, sout_flag, curstate, xml::FT_SOUT); + + // double underbar + curstate = font.fontInfo().uuline(); + if (font_old.uuline() != curstate) + doFontSwitchDocBook(tagsToOpen, tagsToClose, dbar_flag, curstate, xml::FT_DBAR); + + // wavy line + curstate = font.fontInfo().uwave(); + if (font_old.uwave() != curstate) + doFontSwitchDocBook(tagsToOpen, tagsToClose, wave_flag, curstate, xml::FT_WAVE); + + // bold + // a little hackish, but allows us to reuse what we have. + curstate = (font.fontInfo().series() == BOLD_SERIES ? FONT_ON : FONT_OFF); + if (font_old.series() != font.fontInfo().series()) + doFontSwitchDocBook(tagsToOpen, tagsToClose, bold_flag, curstate, xml::FT_BOLD); + + // Font shape + curr_fs = font.fontInfo().shape(); + FontShape old_fs = font_old.shape(); + if (old_fs != curr_fs) { + if (shap_flag) { + OptionalFontType tag = fontShapeToXml(old_fs); + if (tag.has_value) { + tagsToClose.push_back(docbookEndFontTag(tag.ft)); + } + shap_flag = false; + } + + OptionalFontType tag = fontShapeToXml(curr_fs); + if (tag.has_value) { + tagsToOpen.push_back(docbookStartFontTag(tag.ft)); + } + } + + // Font family + curr_fam = font.fontInfo().family(); + FontFamily old_fam = font_old.family(); + if (old_fam != curr_fam) { + if (faml_flag) { + OptionalFontType tag = fontFamilyToXml(old_fam); + if (tag.has_value) { + tagsToClose.push_back(docbookEndFontTag(tag.ft)); + } + faml_flag = false; + } + switch (curr_fam) { + case ROMAN_FAMILY: + // we will treat a "default" font family as roman, since we have + // no other idea what to do. + if (default_family != "rmdefault" && default_family != "default") { + tagsToOpen.push_back(docbookStartFontTag(xml::FT_ROMAN)); + faml_flag = true; + } + break; + case SANS_FAMILY: + if (default_family != "sfdefault") { + tagsToOpen.push_back(docbookStartFontTag(xml::FT_SANS)); + faml_flag = true; + } + break; + case TYPEWRITER_FAMILY: + if (default_family != "ttdefault") { + tagsToOpen.push_back(docbookStartFontTag(xml::FT_TYPE)); + faml_flag = true; + } + break; + case INHERIT_FAMILY: + break; + default: + // the other tags are for internal use + LATTEST(false); + break; + } + } + + // Font size + curr_size = font.fontInfo().size(); + FontSize old_size = font_old.size(); + if (old_size != curr_size) { + if (size_flag) { + OptionalFontType tag = fontSizeToXml(old_size); + if (tag.has_value) { + tagsToClose.push_back(docbookEndFontTag(tag.ft)); + } + size_flag = false; + } + + OptionalFontType tag = fontSizeToXml(curr_size); + if (tag.has_value) { + tagsToOpen.push_back(docbookStartFontTag(tag.ft)); + size_flag = true; } } + // FIXME XHTML + // Other such tags? What about the other text ranges? + + vector::const_iterator cit = tagsToClose.begin(); + vector::const_iterator cen = tagsToClose.end(); + for (; cit != cen; ++cit) + xs << *cit; + + vector::const_iterator sit = tagsToOpen.begin(); + vector::const_iterator sen = tagsToOpen.end(); + for (; sit != sen; ++sit) + xs << *sit; + + tagsToClose.clear(); + tagsToOpen.clear(); + if (Inset const * inset = getInset(i)) { - inset->docbook(os, runparams); + if (!runparams.for_toc || inset->isInToc()) { + OutputParams np = runparams; + np.local_font = &font; + // If the paragraph has size 1, then we are in the "special + // case" where we do not output the containing paragraph info. + if (!inset->getLayout().htmlisblock() && size() != 1) // TODO: htmlisblock here too! + np.docbook_in_par = true; + inset->docbook(xs, np); + } } else { - char_type c = d->text_[i]; - - if (style.pass_thru) - os.put(c); - else - os << xml::escapeChar(c, XMLStream::EscapeSettings::ESCAPE_ALL); + char_type c = getUChar(buf.masterBuffer()->params(), runparams, i); + xs << c; } font_old = font.fontInfo(); } - if (emph_flag) { - os << ""; - } - - if (style.free_spacing) - os << '\n'; - if (style.pass_thru && !d->onlyText(buf, outerfont, initial)) - os << " & tagsToOpen, docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, - XMLStream & xs, - OutputParams const & runparams, - Font const & outerfont, - bool start_paragraph, bool close_paragraph, - pos_type initial) const + XMLStream & xs, + OutputParams const & runparams, + Font const & outerfont, + bool start_paragraph, bool close_paragraph, + pos_type initial) const { docstring retval; @@ -3169,206 +3420,206 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, curr_fs = font.fontInfo().shape(); FontShape old_fs = font_old.shape(); if (old_fs != curr_fs) { - if (shap_flag) { - switch (old_fs) { - case ITALIC_SHAPE: - tagsToClose.push_back(xml::EndFontTag(fontToHtmlTag(xml::FT_ITALIC), xml::FT_ITALIC)); - break; - case SLANTED_SHAPE: - tagsToClose.push_back(xml::EndFontTag(fontToHtmlTag(xml::FT_SLANTED), xml::FT_SLANTED)); - break; - case SMALLCAPS_SHAPE: - tagsToClose.push_back(xml::EndFontTag(fontToHtmlTag(xml::FT_SMALLCAPS), xml::FT_SMALLCAPS)); - break; - case UP_SHAPE: - case INHERIT_SHAPE: - break; - default: - // the other tags are for internal use - LATTEST(false); - break; - } - shap_flag = false; - } - switch (curr_fs) { - case ITALIC_SHAPE: - tagsToOpen.push_back(xml::FontTag(fontToHtmlTag(xml::FT_ITALIC), xml::FT_ITALIC)); - shap_flag = true; - break; - case SLANTED_SHAPE: - tagsToOpen.push_back(xml::FontTag(fontToHtmlTag(xml::FT_SLANTED), xml::FT_SLANTED)); - shap_flag = true; - break; - case SMALLCAPS_SHAPE: - tagsToOpen.push_back(xml::FontTag(fontToHtmlTag(xml::FT_SMALLCAPS), xml::FT_SMALLCAPS)); - shap_flag = true; - break; - case UP_SHAPE: - case INHERIT_SHAPE: - break; - default: - // the other tags are for internal use - LATTEST(false); - break; - } + if (shap_flag) { + switch (old_fs) { + case ITALIC_SHAPE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_ITALIC)); + break; + case SLANTED_SHAPE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SLANTED)); + break; + case SMALLCAPS_SHAPE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SMALLCAPS)); + break; + case UP_SHAPE: + case INHERIT_SHAPE: + break; + default: + // the other tags are for internal use + LATTEST(false); + break; + } + shap_flag = false; + } + switch (curr_fs) { + case ITALIC_SHAPE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_ITALIC)); + shap_flag = true; + break; + case SLANTED_SHAPE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SLANTED)); + shap_flag = true; + break; + case SMALLCAPS_SHAPE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SMALLCAPS)); + shap_flag = true; + break; + case UP_SHAPE: + case INHERIT_SHAPE: + break; + default: + // the other tags are for internal use + LATTEST(false); + break; + } } // Font family curr_fam = font.fontInfo().family(); FontFamily old_fam = font_old.family(); if (old_fam != curr_fam) { - if (faml_flag) { - switch (old_fam) { - case ROMAN_FAMILY: - tagsToClose.push_back(xml::EndFontTag(fontToHtmlTag(xml::FT_ROMAN), xml::FT_ROMAN)); - break; - case SANS_FAMILY: - tagsToClose.push_back(xml::EndFontTag(fontToHtmlTag(xml::FT_SANS), xml::FT_SANS)); - break; - case TYPEWRITER_FAMILY: - tagsToClose.push_back(xml::EndFontTag(fontToHtmlTag(xml::FT_TYPE), xml::FT_TYPE)); - break; - case INHERIT_FAMILY: - break; - default: - // the other tags are for internal use - LATTEST(false); - break; - } - faml_flag = false; - } - switch (curr_fam) { - case ROMAN_FAMILY: - // we will treat a "default" font family as roman, since we have - // no other idea what to do. - if (default_family != "rmdefault" && default_family != "default") { - tagsToOpen.push_back(xml::FontTag(fontToHtmlTag(xml::FT_ROMAN), xml::FT_ROMAN)); - faml_flag = true; - } - break; - case SANS_FAMILY: - if (default_family != "sfdefault") { - tagsToOpen.push_back(xml::FontTag(fontToHtmlTag(xml::FT_SANS), xml::FT_SANS)); - faml_flag = true; - } - break; - case TYPEWRITER_FAMILY: - if (default_family != "ttdefault") { - tagsToOpen.push_back(xml::FontTag(fontToHtmlTag(xml::FT_TYPE), xml::FT_TYPE)); - faml_flag = true; - } - break; - case INHERIT_FAMILY: - break; - default: - // the other tags are for internal use - LATTEST(false); - break; - } + if (faml_flag) { + switch (old_fam) { + case ROMAN_FAMILY: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_ROMAN)); + break; + case SANS_FAMILY: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SANS)); + break; + case TYPEWRITER_FAMILY: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_TYPE)); + break; + case INHERIT_FAMILY: + break; + default: + // the other tags are for internal use + LATTEST(false); + break; + } + faml_flag = false; + } + switch (curr_fam) { + case ROMAN_FAMILY: + // we will treat a "default" font family as roman, since we have + // no other idea what to do. + if (default_family != "rmdefault" && default_family != "default") { + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_ROMAN)); + faml_flag = true; + } + break; + case SANS_FAMILY: + if (default_family != "sfdefault") { + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SANS)); + faml_flag = true; + } + break; + case TYPEWRITER_FAMILY: + if (default_family != "ttdefault") { + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_TYPE)); + faml_flag = true; + } + break; + case INHERIT_FAMILY: + break; + default: + // the other tags are for internal use + LATTEST(false); + break; + } } // Font size curr_size = font.fontInfo().size(); FontSize old_size = font_old.size(); if (old_size != curr_size) { - if (size_flag) { - switch (old_size) { - case TINY_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_TINY), xml::FT_SIZE_TINY); - break; - case SCRIPT_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_SCRIPT), xml::FT_SIZE_SCRIPT); - break; - case FOOTNOTE_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_FOOTNOTE), xml::FT_SIZE_FOOTNOTE); - break; - case SMALL_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_SMALL), xml::FT_SIZE_SMALL); - break; - case LARGE_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_LARGE), xml::FT_SIZE_LARGE); - break; - case LARGER_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_LARGER), xml::FT_SIZE_LARGER); - break; - case LARGEST_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_LARGEST), xml::FT_SIZE_LARGEST); - break; - case HUGE_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_HUGE), xml::FT_SIZE_HUGE); - break; - case HUGER_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_HUGER), xml::FT_SIZE_HUGER); - break; - case INCREASE_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_INCREASE), xml::FT_SIZE_INCREASE); - break; - case DECREASE_SIZE: - tagsToClose.emplace_back(fontToHtmlTag(xml::FT_SIZE_DECREASE), xml::FT_SIZE_DECREASE); - break; - case INHERIT_SIZE: - case NORMAL_SIZE: - break; - default: - // the other tags are for internal use - LATTEST(false); - break; - } - size_flag = false; - } - switch (curr_size) { - case TINY_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_TINY), xml::FT_SIZE_TINY); - size_flag = true; - break; - case SCRIPT_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_SCRIPT), xml::FT_SIZE_SCRIPT); - size_flag = true; - break; - case FOOTNOTE_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_FOOTNOTE), xml::FT_SIZE_FOOTNOTE); - size_flag = true; - break; - case SMALL_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_SMALL), xml::FT_SIZE_SMALL); - size_flag = true; - break; - case LARGE_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_LARGE), xml::FT_SIZE_LARGE); - size_flag = true; - break; - case LARGER_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_LARGER), xml::FT_SIZE_LARGER); - size_flag = true; - break; - case LARGEST_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_LARGEST), xml::FT_SIZE_LARGEST); - size_flag = true; - break; - case HUGE_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_HUGE), xml::FT_SIZE_HUGE); - size_flag = true; - break; - case HUGER_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_HUGER), xml::FT_SIZE_HUGER); - size_flag = true; - break; - case INCREASE_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_INCREASE), xml::FT_SIZE_INCREASE); - size_flag = true; - break; - case DECREASE_SIZE: - tagsToOpen.emplace_back(fontToHtmlTag(xml::FT_SIZE_DECREASE), xml::FT_SIZE_DECREASE); - size_flag = true; - break; - case INHERIT_SIZE: - case NORMAL_SIZE: - break; - default: - // the other tags are for internal use - LATTEST(false); - break; - } + if (size_flag) { + switch (old_size) { + case TINY_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_TINY)); + break; + case SCRIPT_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_SCRIPT)); + break; + case FOOTNOTE_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_FOOTNOTE)); + break; + case SMALL_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_SMALL)); + break; + case LARGE_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_LARGE)); + break; + case LARGER_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_LARGER)); + break; + case LARGEST_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_LARGEST)); + break; + case HUGE_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_HUGE)); + break; + case HUGER_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_HUGER)); + break; + case INCREASE_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_INCREASE)); + break; + case DECREASE_SIZE: + tagsToClose.emplace_back(xhtmlEndFontTag(xml::FT_SIZE_DECREASE)); + break; + case INHERIT_SIZE: + case NORMAL_SIZE: + break; + default: + // the other tags are for internal use + LATTEST(false); + break; + } + size_flag = false; + } + switch (curr_size) { + case TINY_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_TINY)); + size_flag = true; + break; + case SCRIPT_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_SCRIPT)); + size_flag = true; + break; + case FOOTNOTE_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_FOOTNOTE)); + size_flag = true; + break; + case SMALL_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_SMALL)); + size_flag = true; + break; + case LARGE_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_LARGE)); + size_flag = true; + break; + case LARGER_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_LARGER)); + size_flag = true; + break; + case LARGEST_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_LARGEST)); + size_flag = true; + break; + case HUGE_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_HUGE)); + size_flag = true; + break; + case HUGER_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_HUGER)); + size_flag = true; + break; + case INCREASE_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_INCREASE)); + size_flag = true; + break; + case DECREASE_SIZE: + tagsToOpen.emplace_back(xhtmlStartFontTag(xml::FT_SIZE_DECREASE)); + size_flag = true; + break; + case INHERIT_SIZE: + case NORMAL_SIZE: + break; + default: + // the other tags are for internal use + LATTEST(false); + break; + } } // FIXME XHTML