From c4792434683c963997acb1500ef1f2159dcdcc33 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Sun, 13 Sep 2015 10:04:16 +0200 Subject: [PATCH] Work around a gcc5 bug The old code produced crashes with gcc5 caused by calling the copy constructor (see https://bugzilla.redhat.com/show_bug.cgi?id=1260976). This has been filed as gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67557 It is currently being marked as invalid (they claim the code is not valid and produces undefined behaviour), but I don't think that this is correct. Fortunately i does not matter for us whether the old code was valid or not, since the new version is easier to understand and works with all compilers. --- src/output_xhtml.cpp | 54 +++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index 35f0ea5c6d..9378783f89 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -205,7 +205,7 @@ docstring CompTag::writeTag() const namespace { string fontToTag(html::FontTypes type) - { +{ switch(type) { case FT_EMPH: return "em"; @@ -245,68 +245,66 @@ string fontToTag(html::FontTypes type) return ""; } -StartTag fontToStartTag(html::FontTypes type) - { - string tag = fontToTag(type); +string fontToAttribute(html::FontTypes type) +{ switch(type) { case FT_EMPH: - return html::StartTag(tag); case FT_BOLD: - return html::StartTag(tag); + return ""; case FT_NOUN: - return html::StartTag(tag, "class='lyxnoun'"); + return "class='lyxnoun'"; case FT_UBAR: - return html::StartTag(tag); + return ""; case FT_DBAR: - return html::StartTag(tag, "class='dline'"); + return "class='dline'"; case FT_SOUT: - return html::StartTag(tag, "class='strikeout'"); + return "class='strikeout'"; case FT_WAVE: - return html::StartTag(tag, "class='wline'"); + return "class='wline'"; case FT_ITALIC: - return html::StartTag(tag); + return ""; case FT_UPRIGHT: - return html::StartTag(tag, "style='font-style:normal;'"); + return "style='font-style:normal;'"; case FT_SLANTED: - return html::StartTag(tag, "style='font-style:oblique;'"); + return "style='font-style:oblique;'"; case FT_SMALLCAPS: - return html::StartTag(tag, "style='font-variant:small-caps;'"); + return "style='font-variant:small-caps;'"; case FT_ROMAN: - return html::StartTag(tag, "style='font-family:serif;'"); + return "style='font-family:serif;'"; case FT_SANS: - return html::StartTag(tag, "style='font-family:sans-serif;'"); + return "style='font-family:sans-serif;'"; case FT_TYPE: - return html::StartTag(tag, "style='font-family:monospace;'"); + return "style='font-family:monospace;'"; case FT_SIZE_TINY: case FT_SIZE_SCRIPT: case FT_SIZE_FOOTNOTE: - return html::StartTag(tag, "style='font-size:x-small;'"); + return "style='font-size:x-small;'"; case FT_SIZE_SMALL: - return html::StartTag(tag, "style='font-size:small;'"); + return "style='font-size:small;'"; case FT_SIZE_NORMAL: - return html::StartTag(tag, "style='font-size:normal;'"); + return "style='font-size:normal;'"; case FT_SIZE_LARGE: - return html::StartTag(tag, "style='font-size:large;'"); + return "style='font-size:large;'"; case FT_SIZE_LARGER: case FT_SIZE_LARGEST: - return html::StartTag(tag, "style='font-size:x-large;'"); + return "style='font-size:x-large;'"; case FT_SIZE_HUGE: case FT_SIZE_HUGER: - return html::StartTag(tag, "style='font-size:xx-large;'"); + return "style='font-size:xx-large;'"; case FT_SIZE_INCREASE: - return html::StartTag(tag, "style='font-size:larger;'"); + return "style='font-size:larger;'"; case FT_SIZE_DECREASE: - return html::StartTag(tag, "style='font-size:smaller;'"); + return "style='font-size:smaller;'"; } // kill warning - return StartTag(""); + return ""; } } // end anonymous namespace FontTag::FontTag(FontTypes type) - : StartTag(fontToStartTag(type)), font_type_(type) + : StartTag(fontToTag(type), fontToAttribute(type)), font_type_(type) {}