]> git.lyx.org Git - features.git/blobdiff - src/Paragraph.cpp
Get font sizes working for XHTML.
[features.git] / src / Paragraph.cpp
index d3dc2d82c5c298b6d2b5f4c4f30fcd2a709897b5..72a26006322c93c1066e9b1dacc5462de6c87927 100644 (file)
@@ -2865,6 +2865,10 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
        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_;
 
@@ -2873,7 +2877,12 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
        FontInfo font_old =
                style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
 
-       FontShape curr_fs = INHERIT_SHAPE;
+       FontShape  curr_fs   = INHERIT_SHAPE;
+       FontFamily curr_fam  = INHERIT_FAMILY;
+       FontSize   curr_size = FONT_SIZE_INHERIT;
+       
+       string const default_family = 
+               buf.masterBuffer()->params().fonts_default_family;              
 
        vector<html::FontTag> tagsToOpen;
        vector<html::EndFontTag> tagsToClose;
@@ -2922,6 +2931,7 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                if (font_old.series() != font.fontInfo().series())
                        doFontSwitch(tagsToOpen, tagsToClose, bold_flag, curstate, html::FT_BOLD);
 
+               // Font shape
                curr_fs = font.fontInfo().shape();
                FontShape old_fs = font_old.shape();
                if (old_fs != curr_fs) {
@@ -2949,12 +2959,15 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                        switch (curr_fs) {
                        case ITALIC_SHAPE:
                                tagsToOpen.push_back(html::FontTag(html::FT_ITALIC));
+                               shap_flag = true;
                                break;
                        case SLANTED_SHAPE:
                                tagsToOpen.push_back(html::FontTag(html::FT_SLANTED));
+                               shap_flag = true;
                                break;
                        case SMALLCAPS_SHAPE:
                                tagsToOpen.push_back(html::FontTag(html::FT_SMALLCAPS));
+                               shap_flag = true;
                                break;
                        case UP_SHAPE:
                        case INHERIT_SHAPE:
@@ -2964,7 +2977,164 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
                                LATTEST(false);
                                break;
                        }
-                       shap_flag = true;
+               }
+
+               // 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(html::EndFontTag(html::FT_ROMAN));
+                                       break;
+                               case SANS_FAMILY:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SANS));
+                                       break;
+                               case TYPEWRITER_FAMILY:
+                                       tagsToClose.push_back(html::EndFontTag(html::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(html::FontTag(html::FT_ROMAN));
+                                       faml_flag = true;
+                               }
+                               break;
+                       case SANS_FAMILY:
+                               if (default_family != "sfdefault") {
+                                       tagsToOpen.push_back(html::FontTag(html::FT_SANS));
+                                       faml_flag = true;
+                               }
+                               break;
+                       case TYPEWRITER_FAMILY:
+                               if (default_family != "ttdefault") {
+                                       tagsToOpen.push_back(html::FontTag(html::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 FONT_SIZE_TINY:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_TINY));
+                                       break;
+                               case FONT_SIZE_SCRIPT:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_SCRIPT));
+                                       break;
+                               case FONT_SIZE_FOOTNOTE:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_FOOTNOTE));
+                                       break;
+                               case FONT_SIZE_SMALL:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_SMALL));
+                                       break;
+                               case FONT_SIZE_LARGE:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_LARGE));
+                                       break;
+                               case FONT_SIZE_LARGER:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_LARGER));
+                                       break;
+                               case FONT_SIZE_LARGEST:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_LARGEST));
+                                       break;
+                               case FONT_SIZE_HUGE:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_HUGE));
+                                       break;
+                               case FONT_SIZE_HUGER:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_HUGER));
+                                       break;
+                               case FONT_SIZE_INCREASE:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_INCREASE));
+                                       break;
+                               case FONT_SIZE_DECREASE:
+                                       tagsToClose.push_back(html::EndFontTag(html::FT_SIZE_DECREASE));
+                                       break;
+                               case FONT_SIZE_INHERIT:
+                               case FONT_SIZE_NORMAL:
+                                       break;
+                               default:
+                                       // the other tags are for internal use
+                                       LATTEST(false);
+                                       break;
+                               }
+                               size_flag = false;
+                       }
+                       switch (curr_size) {
+                       case FONT_SIZE_TINY:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_TINY));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_SCRIPT:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_SCRIPT));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_FOOTNOTE:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_FOOTNOTE));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_SMALL:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_SMALL));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_LARGE:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_LARGE));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_LARGER:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_LARGER));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_LARGEST:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_LARGEST));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_HUGE:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_HUGE));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_HUGER:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_HUGER));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_INCREASE:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_INCREASE));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_DECREASE:
+                               tagsToOpen.push_back(html::FontTag(html::FT_SIZE_DECREASE));
+                               size_flag = true;
+                               break;
+                       case FONT_SIZE_NORMAL:
+                       case FONT_SIZE_INHERIT:
+                               break;
+                       default:
+                               // the other tags are for internal use
+                               LATTEST(false);
+                               break;
+                       }
                }
 
                // FIXME XHTML