]> git.lyx.org Git - features.git/blobdiff - src/Paragraph.cpp
Rework that way that font tags are handled in XHTML output. We need
[features.git] / src / Paragraph.cpp
index 6fc44a0d75f382a1c1ab73f283b89ed5b31efcc0..a95163ef3924d249e9e0d68cdbe12b06566e7880 100644 (file)
@@ -767,7 +767,7 @@ void Paragraph::Private::insertChar(pos_type pos, char_type c,
 
 
 bool Paragraph::insertInset(pos_type pos, Inset * inset,
-                                  Change const & change)
+                           Font const & font, Change const & change)
 {
        LASSERT(inset, return false);
        LASSERT(pos >= 0 && pos <= size(), return false);
@@ -785,6 +785,8 @@ bool Paragraph::insertInset(pos_type pos, Inset * inset,
 
        // Some insets require run of spell checker
        requestSpellCheck(pos);
+
+       setFont(pos, font);
        return true;
 }
 
@@ -1783,12 +1785,10 @@ void Paragraph::insertChar(pos_type pos, char_type c,
 
 
 bool Paragraph::insertInset(pos_type pos, Inset * inset,
-                           Font const & font, Change const & change)
+                           Change const & change)
 {
-       bool const success = insertInset(pos, inset, change);
-       // Set the font/language of the inset...
-       setFont(pos, font);
-       return success;
+       Font no_font;
+       return insertInset(pos, inset, no_font, change);
 }
 
 
@@ -2831,17 +2831,19 @@ void Paragraph::simpleDocBookOnePar(Buffer const & buf,
 }
 
 
+namespace {
 void doFontSwitch(XHTMLStream & xs, bool startrange,
-       bool & flag, FontState curstate, std::string tag, std::string attr = "")
+       bool & flag, FontState curstate, html::FontTypes type)
 {
        if (curstate == FONT_ON) {
-               xs << html::StartTag(tag, attr);
+               xs << html::FontTag(type);
                flag = true;
        } else if (flag && !startrange) {
-               xs << html::EndTag(tag);
+               xs << html::EndFontTag(type);
                flag = false;
        }
 }
+}
 
 
 docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
@@ -2864,12 +2866,6 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
 
        xs.startParagraph(allowEmpty());
 
-       if (!runparams.for_toc && runparams.html_make_pars) {
-               // generate a magic label for this paragraph
-               string const attr = "id='" + magicLabel() + "'";
-               xs << html::CompTag("a", attr);
-       }
-
        FontInfo font_old =
                style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
 
@@ -2879,53 +2875,45 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                if (isDeleted(i))
                        continue;
 
-               Font font = getFont(buf.masterBuffer()->params(), i, outerfont);
+               Font const font = getFont(buf.masterBuffer()->params(), i, outerfont);
                bool const at_start = (i == initial);
 
                // emphasis
                FontState curstate = font.fontInfo().emph();
                if (font_old.emph() != curstate)
-                       doFontSwitch(xs, at_start, emph_flag, curstate, "em");
+                       doFontSwitch(xs, at_start, emph_flag, curstate, html::FT_EMPH);
 
                // noun
                curstate = font.fontInfo().noun();
                if (font_old.noun() != curstate)
-                       doFontSwitch(xs, at_start, noun_flag, curstate, "dfn", "class='lyxnoun'");
+                       doFontSwitch(xs, at_start, noun_flag, curstate, html::FT_NOUN);
 
                // underbar
                curstate = font.fontInfo().underbar();
                if (font_old.underbar() != curstate)
-                       doFontSwitch(xs, at_start, ubar_flag, curstate, "u");
+                       doFontSwitch(xs, at_start, ubar_flag, curstate, html::FT_UBAR);
        
                // strikeout
                curstate = font.fontInfo().strikeout();
                if (font_old.strikeout() != curstate)
-                       doFontSwitch(xs, at_start, sout_flag, curstate, "del", "class='strikeout'");
-
-               // HTML does not really have an equivalent of the next two, so we will just
-               // output a single underscore with a class, and people can style it if they
-               // wish to do so
+                       doFontSwitch(xs, at_start, sout_flag, curstate, html::FT_SOUT);
 
                // double underbar
                curstate = font.fontInfo().uuline();
                if (font_old.uuline() != curstate)
-                       doFontSwitch(xs, at_start, dbar_flag, curstate, "u", "class='dline'");
+                       doFontSwitch(xs, at_start, dbar_flag, curstate, html::FT_DBAR);
 
                // wavy line
                curstate = font.fontInfo().uwave();
                if (font_old.uwave() != curstate)
-                       doFontSwitch(xs, at_start, wave_flag, curstate, "u", "class='wavyline'");
+                       doFontSwitch(xs, at_start, wave_flag, curstate, html::FT_WAVE);
 
                // bold
-               if (font_old.series() != font.fontInfo().series()) {
-                       if (font.fontInfo().series() == BOLD_SERIES) {
-                               xs << html::StartTag("b");
-                               bold_flag = true;
-                       } else if (bold_flag && i != initial) {
-                               xs << html::EndTag("b");
-                               bold_flag = false;
-                       }
-               }
+               // 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())
+                       doFontSwitch(xs, at_start, bold_flag, curstate, html::FT_BOLD);
+
                // FIXME XHTML
                // Other such tags? What about the other text ranges?