+namespace {
+
+LyXFont * Math_Fonts = 0;
+
+void mathed_init_fonts()
+{
+ Math_Fonts = new LyXFont[8]; //DEC cxx cannot initialize all fonts
+ //at once (JMarc) rc
+
+ for (int i = 0 ; i < 8 ; ++i) {
+ Math_Fonts[i] = LyXFont(LyXFont::ALL_SANE);
+ }
+
+ Math_Fonts[0].setShape(LyXFont::ITALIC_SHAPE);
+
+ Math_Fonts[1].setFamily(LyXFont::SYMBOL_FAMILY);
+
+ Math_Fonts[2].setFamily(LyXFont::SYMBOL_FAMILY);
+ Math_Fonts[2].setShape(LyXFont::ITALIC_SHAPE);
+
+ Math_Fonts[3].setSeries(LyXFont::BOLD_SERIES);
+
+ Math_Fonts[4].setFamily(LyXFont::SANS_FAMILY);
+ Math_Fonts[4].setShape(LyXFont::ITALIC_SHAPE);
+
+ Math_Fonts[5].setFamily(LyXFont::TYPEWRITER_FAMILY);
+
+ Math_Fonts[6].setFamily(LyXFont::ROMAN_FAMILY);
+
+ Math_Fonts[7].setFamily(LyXFont::SANS_FAMILY);
+}
+
+} // namespace
+
+
+LyXFont WhichFont(MathTextCodes type, MathStyles size)
+{
+ LyXFont f;
+
+ if (!Math_Fonts)
+ mathed_init_fonts();
+
+ switch (type) {
+ case LM_TC_SYMB:
+ f = Math_Fonts[2];
+ break;
+
+ case LM_TC_BSYM:
+ f = Math_Fonts[2];
+ break;
+
+ case LM_TC_VAR:
+ case LM_TC_IT:
+ f = Math_Fonts[0];
+ break;
+
+ case LM_TC_BF:
+ f = Math_Fonts[3];
+ break;
+
+ case LM_TC_SF:
+ f = Math_Fonts[7];
+ break;
+
+ case LM_TC_CAL:
+ f = Math_Fonts[4];
+ break;
+
+ case LM_TC_TT:
+ f = Math_Fonts[5];
+ break;
+
+ case LM_TC_SPECIAL: //f = Math_Fonts[0]; break;
+ case LM_TC_TEXTRM:
+ case LM_TC_TEX:
+ case LM_TC_RM:
+ f = Math_Fonts[6];
+ break;
+
+ default:
+ f = Math_Fonts[1];
+ break;
+ }
+
+ switch (size) {
+ case LM_ST_DISPLAY:
+ if (type == LM_TC_BSYM) {
+ f.incSize();
+ f.incSize();
+ }
+ break;
+
+ case LM_ST_TEXT:
+ break;
+
+ case LM_ST_SCRIPT:
+ f.decSize();
+ break;
+
+ case LM_ST_SCRIPTSCRIPT:
+ f.decSize();
+ f.decSize();
+ break;
+
+ default:
+ lyxerr << "Math Error: wrong font size: " << size << endl;
+ break;
+ }