]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_factory.C
Jean-Marc's fix for wrong descent
[lyx.git] / src / mathed / math_factory.C
index cd569034896fe5538971f3fa294aba401d900160..7ad66b051d980d0f933a32bef1537cecd49f8241 100644 (file)
@@ -1,6 +1,3 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include <config.h>
 
@@ -34,6 +31,7 @@
 #include "math_stackrelinset.h"
 #include "math_substackinset.h"
 #include "math_symbolinset.h"
+#include "math_tabularinset.h"
 #include "math_undersetinset.h"
 #include "math_unknowninset.h"
 #include "math_xarrowinset.h"
@@ -123,7 +121,7 @@ void initSymbols()
 
                // special case of pre-defined macros
                if (line.size() > 8 && line.substr(0, 5) == "\\def\\") {
-                       //lyxerr << "defining: '" << line << "'" << endl;
+                       //lyxerr << "defining: '" << line << '\'' << endl;
                        istringstream is(STRCONV(line));
                        MathMacroTable::create(MathAtom(new MathMacroTemplate(is)));
                        continue;
@@ -137,7 +135,7 @@ void initSymbols()
                else
                        is >> tmp.extra;
                if (!is) {
-                       lyxerr[Debug::MATHED] << "skipping line '" << line << "'" << endl;
+                       lyxerr[Debug::MATHED] << "skipping line '" << line << '\'' << endl;
                        lyxerr[Debug::MATHED]
                                << tmp.name << ' ' << tmp.inset << ' ' << tmp.extra << endl;
                        continue;
@@ -146,13 +144,17 @@ void initSymbols()
                if (isFontName(tmp.inset)) {
                        // tmp.inset _is_ the fontname here.
                        // create fallbacks if necessary
+
+                       // symbol font is not available sometimes
+                       string symbol_font = "lyxsymbol";
+
                        if (tmp.extra == "func" || tmp.extra == "funclim" || tmp.extra == "special") {
                                lyxerr[Debug::MATHED] << "symbol abuse for " << tmp.name << endl;
                                tmp.draw = tmp.name;
                        } else if (math_font_available(tmp.inset)) {
                                lyxerr[Debug::MATHED] << "symbol available for " << tmp.name << endl;
                                tmp.draw += char(charid);
-                       } else if (fallbackid) {
+                       } else if (fallbackid && math_font_available(symbol_font)) {
                                if (tmp.inset == "cmex")
                                        tmp.inset  = "lyxsymbol";
                                else
@@ -183,7 +185,7 @@ void initSymbols()
                        << "  inset: " << tmp.inset
                        << "  draw: " << int(tmp.draw.empty() ? 0 : tmp.draw[0])
                        << "  extra: " << tmp.extra
-                       << "'" << endl;
+                       << '\'' << endl;
        }
        string tmp = "cmm";
        string tmp2 = "cmsy";
@@ -216,12 +218,12 @@ latexkeys const * in_word_set(string const & str)
 MathAtom createMathInset(string const & s)
 {
        lyxerr[Debug::MATHED] << "creating inset with name: '"
-                             << s << "'" << endl;;
+                             << s << '\'' << endl;;
        latexkeys const * l = in_word_set(s);
        if (l) {
                string const & inset = l->inset;
                lyxerr[Debug::MATHED] << " found inset: '" <<
-                       inset << "'" << endl;
+                       inset << '\'' << endl;
                if (inset == "ref")
                        return MathAtom(new RefInset(l->name));
                if (inset == "underset")
@@ -274,6 +276,8 @@ MathAtom createMathInset(string const & s)
                return MathAtom(new MathSqrtInset);
        if (s == "root")
                return MathAtom(new MathRootInset);
+       if (s == "tabular")
+               return MathAtom(new MathTabularInset(s, 1, 1));
        if (s == "stackrel")
                return MathAtom(new MathStackrelInset);
        if (s == "binom" || s == "choose")
@@ -292,6 +296,6 @@ MathAtom createMathInset(string const & s)
        if (MathMacroTable::has(s))
                return MathAtom(new MathMacro(s));
 
-       //lyxerr[Debug::MATHED] << "creating inset 2 with name: '" << s << "'" << endl;
+       //lyxerr[Debug::MATHED] << "creating inset 2 with name: '" << s << '\'' << endl;
        return MathAtom(new MathUnknownInset(s));
 }