]> git.lyx.org Git - features.git/commitdiff
HTML for math fonts.
authorRichard Heck <rgheck@comcast.net>
Wed, 31 Mar 2010 18:57:47 +0000 (18:57 +0000)
committerRichard Heck <rgheck@comcast.net>
Wed, 31 Mar 2010 18:57:47 +0000 (18:57 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33970 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/InsetMathFont.cpp
src/mathed/InsetMathFont.h

index 35f58c00f3eff877562b2ac6c9c9faeb4045b9fc..93a266553759d0b4530d893993e7028dacf761d0 100644 (file)
@@ -92,17 +92,70 @@ docstring InsetMathFont::name() const
 void InsetMathFont::validate(LaTeXFeatures & features) const
 {
        InsetMathNest::validate(features);
-       // Make sure amssymb is put in preamble if Blackboard Bold or
-       // Fraktur used:
-       if (key_->name == "mathfrak" || key_->name == "mathbb")
-               features.require("amssymb");
-       if (key_->name == "text" || key_->name == "textnormal"
-           || (key_->name.length() == 6 && key_->name.substr(0, 4) == "text"))
-               features.require("amstext");
-       if (key_->name == "textipa")
-               features.require("tipa");
-       if (key_->name == "ce" || key_->name == "cf")
-               features.require("mhchem");
+       if (features.runparams().isLaTeX()) {
+               // Make sure amssymb is put in preamble if Blackboard Bold or
+               // Fraktur used:
+               if (key_->name == "mathfrak" || key_->name == "mathbb")
+                       features.require("amssymb");
+               if (key_->name == "text" || key_->name == "textnormal"
+                               || (key_->name.length() == 6 && key_->name.substr(0, 4) == "text"))
+                       features.require("amstext");
+               if (key_->name == "textipa")
+                       features.require("tipa");
+               if (key_->name == "ce" || key_->name == "cf")
+                       features.require("mhchem");
+       } else if (features.runparams().math_flavor == OutputParams::MathAsHTML) {
+               features.addPreambleSnippet("<style type=\"text/css\">\n"
+                       "span.normal{font: normal normal normal inherit serif;}\n"
+                       "span.fraktur{font: normal normal normal inherit cursive;}\n"
+                       "span.bold{font: normal normal bold inherit serif;}\n"
+                       "span.script{font: normal normal normal inherit cursive;}\n"
+                       "span.italic{font: italic normal normal inherit serif;}\n"
+                       "span.sans{font: normal normal normal inherit sans-serif;}\n"
+                       "span.monospace{font: normal normal normal inherit monospace;}\n"
+                       "span.noun{font: normal small-caps normal inherit normal;}\n"
+                       "</style>");
+       }
+}
+
+
+// The fonts we want to support are listed in lib/symbols
+void InsetMathFont::htmlize(HtmlStream & os) const
+{
+       // FIXME These are not quite right, because they do not nest
+       // correctly. A proper fix would presumably involve tracking
+       // the fonts already in effect.
+       std::string variant;
+       docstring const & tag = key_->name;
+       if (tag == "mathnormal" || tag == "mathrm"
+           || tag == "text" || tag == "textnormal"
+           || tag == "textrm" || tag == "textup"
+           || tag == "textmd")
+               variant = "normal";
+       else if (tag == "frak" || tag == "mathfrak")
+               variant = "fraktur";
+       else if (tag == "mathbb" || tag == "mathbf"
+                || tag == "textbf")
+               variant = "bold";
+       else if (tag == "mathcal")
+               variant == "script";
+       else if (tag == "mathit" || tag == "textsl"
+                || tag == "emph" || tag == "textit")
+               variant = "italic";
+       else if (tag == "mathsf" || tag == "textsf")
+               variant = "sans";
+       else if (tag == "mathtt" || tag == "texttt")
+               variant = "monospace";
+       else if (tag == "textipa" || tag == "textsc" || tag == "noun")
+               variant = "noun";
+       
+       docstring const beg = (tag.size() < 4) ? from_ascii("") : tag.substr(0, 4);
+       bool const textmode = (beg == "text");
+       if (!variant.empty()) {
+               SetHTMLMode sm(os, textmode, "class='" + variant + "'");
+               os << cell(0);
+       } else
+               os << cell(0);
 }
 
 
@@ -138,7 +191,7 @@ void InsetMathFont::mathmlize(MathStream & os) const
        docstring const beg = (tag.size() < 4) ? from_ascii("") : tag.substr(0, 4);
        bool const textmode = (beg == "text");
        if (!variant.empty()) {
-               docstring const attrs = from_ascii("mathvariant='" + variant + "'");
+               std::string const attrs = "mathvariant='" + variant + "'";
                SetMode sm(os, textmode, attrs);
                os << cell(0);
        } else
index 926732b3dcaab21a3ba7f7017632f132c65a2eab..88c83165e94dd95140ae96f2f8c4fd611e165f4f 100644 (file)
@@ -48,6 +48,8 @@ public:
        ///
        void mathmlize(MathStream &) const;
        ///
+       void htmlize(HtmlStream &) const;
+       ///
        void infoize(odocstream & os) const;
        ///
        int kerning(BufferView const * bv) const { return cell(0).kerning(bv); }