]> git.lyx.org Git - features.git/commitdiff
cosmetics: rename support.[Ch] into math_support.[Ch]
authorAndré Pönitz <poenitz@gmx.net>
Thu, 8 Nov 2001 12:15:12 +0000 (12:15 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Thu, 8 Nov 2001 12:15:12 +0000 (12:15 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2985 a592a061-630c-0410-9148-cb99ea01b6c8

36 files changed:
src/mathed/Makefile.am
src/mathed/array.C
src/mathed/formula.C
src/mathed/formulabase.C
src/mathed/formulamacro.C
src/mathed/math_binaryopinset.C
src/mathed/math_binominset.C
src/mathed/math_braceinset.C
src/mathed/math_charinset.C
src/mathed/math_cursor.C
src/mathed/math_decorationinset.C
src/mathed/math_deliminset.C
src/mathed/math_dotsinset.C
src/mathed/math_exfuncinset.C
src/mathed/math_exintinset.C
src/mathed/math_fracinset.C
src/mathed/math_funcinset.C
src/mathed/math_funcliminset.C
src/mathed/math_kerninset.C
src/mathed/math_macro.C
src/mathed/math_macroarg.C
src/mathed/math_macrotable.C
src/mathed/math_matrixinset.C
src/mathed/math_notinset.C
src/mathed/math_parser.C
src/mathed/math_scriptinset.C
src/mathed/math_spaceinset.C
src/mathed/math_specialcharinset.C
src/mathed/math_stackrelinset.C
src/mathed/math_stringinset.C
src/mathed/math_support.C [new file with mode: 0644]
src/mathed/math_support.h [new file with mode: 0644]
src/mathed/math_symbolinset.C
src/mathed/support.C [deleted file]
src/mathed/support.h [deleted file]
src/mathed/xarray.C

index bc7108aaa4e725150e42879c057fd992cfa98c6c..68d7c6dbc3bcc0050635bab034659681909f0fa3 100644 (file)
@@ -104,7 +104,7 @@ libmathed_la_SOURCES = \
        math_stackrelinset.h \
        math_stringinset.C \
        math_stringinset.h \
+       math_support.C \
+       math_support.h \
        math_symbolinset.C \
-       math_symbolinset.h \
-       support.C \
-       support.h
+       math_symbolinset.h
index c65e069f9a04f192e0ab167081ef17ab484a96e8..6fa0b879b625af82a2892120c7b9eda84756d457 100644 (file)
@@ -7,7 +7,7 @@
 #include "math_scriptinset.h"
 #include "math_stringinset.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 #include "debug.h"
 #include "array.h"
 #include "support/LAssert.h"
index 59fdb97cc05822c3d62abcf5b849c1ced79d010d..e596cf6b0c5d8dba4c28cfc5d2902c1293ae1596 100644 (file)
@@ -41,7 +41,7 @@
 #include "Painter.h"
 #include "lyxrc.h"
 #include "math_matrixinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_mathmlstream.h"
 
 using std::ostream;
index 3706236622674df6f7c08ef5f39013edb105424b..f30b6ecbc717a6288ecf5d163352596f7ac6eff1 100644 (file)
@@ -32,7 +32,7 @@
 #include "gettext.h"
 #include "LaTeXFeatures.h"
 #include "debug.h"
-#include "support.h"
+#include "math_support.h"
 #include "support/lstrings.h"
 #include "LyXView.h"
 #include "Painter.h"
index f5a75c4bd39e2344ed39c112320bfb7898387b91..cd2b108c242169cb4050dd2b4b2b6721db03b516 100644 (file)
@@ -32,7 +32,7 @@
 #include "Painter.h"
 #include "font.h"
 #include "support/lyxlib.h"
-#include "mathed/support.h"
+#include "mathed/math_support.h"
 #include "support/LOstream.h"
 #include "debug.h"
 #include "lyxlex.h"
index ff67faf7a95e670c4f2bb0a7427d55863ed34561..e27de8034dcd9948a20f805c835686535da19472 100644 (file)
@@ -5,7 +5,7 @@
 #include "math_binaryopinset.h"
 #include "Painter.h"
 #include "support/LOstream.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_mathmlstream.h"
 
 
index 71b32bdb3c46ae6cfb83591b1fd8e451124e9377..58b1acafa22bfcdd76c9b733cb3615bee8d688e6 100644 (file)
@@ -3,7 +3,7 @@
 #endif
 
 #include "math_binominset.h"
-#include "support.h"
+#include "math_support.h"
 #include "support/LOstream.h"
 #include "math_mathmlstream.h"
 
index 88fd33a5bd541bcf904648d12033e2e0486af202..ff1c46965190bd05fe82307841e951a0d3ddad9c 100644 (file)
@@ -6,7 +6,7 @@
 
 #include "math_braceinset.h"
 #include "math_parser.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_mathmlstream.h"
 
 
index 0986be73e08d13c13267dc150db155044bf815f6..cc3bb1dbb388e96c940ba945b77b0a8711ee1d47 100644 (file)
@@ -8,7 +8,7 @@
 #include "LColor.h"
 #include "Painter.h"
 #include "support/LOstream.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_parser.h"
 #include "debug.h"
 #include "math_mathmlstream.h"
index aa8394ab474f10b88490d3684ae687fcf88613cf..c06778070702e9f094b1de790df1bd89b42d433e 100644 (file)
@@ -28,7 +28,7 @@
 #include "debug.h"
 #include "LColor.h"
 #include "Painter.h"
-#include "support.h"
+#include "math_support.h"
 #include "formulabase.h"
 #include "math_cursor.h"
 #include "math_factory.h"
index 33829502e0a7e17d236408ecf9ca70019e4a70b7..49d0f923b9b9d4c4deafe7af69fd187a827a43e7 100644 (file)
@@ -3,7 +3,7 @@
 #endif
 
 #include "math_decorationinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_parser.h"
 #include "math_mathmlstream.h"
 
index dd4f3ef08bf6bd48ee8af4c7d54c2718ba7c3391..4ada1f77cc373fd1b5a2d3b0eca47a630bb7024e 100644 (file)
@@ -6,7 +6,7 @@
 
 #include "math_deliminset.h"
 #include "math_parser.h"
-#include "support.h"
+#include "math_support.h"
 #include "support/LOstream.h"
 #include "math_mathmlstream.h"
 
index 1f3aad23141fe4930541562c2ac7d5897cf48325..2fad8b4082e2c822c828ed399438346cf5ef0291 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "math_dotsinset.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 
 
 MathDotsInset::MathDotsInset(string const & name)
index d1da3f4119c583871419b006c50ab98656588c9e..4be96200cbfd427df075b007ed9e37da6badacb9 100644 (file)
@@ -1,5 +1,5 @@
 #include "math_exfuncinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_mathmlstream.h"
 
 
index 7ebd2b9ddcde33aa126287fd5282bb420c364c35..edd8343c0ba5fb941aada52202b76faac3cc40e5 100644 (file)
@@ -1,5 +1,5 @@
 #include "math_exintinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "debug.h"
 #include "math_mathmlstream.h"
 #include "math_symbolinset.h"
index 455da87e6a6d87e1d1812aca04a0223125f00d83..6577510700eb75a13a21d1f6bf664528fab0d8c2 100644 (file)
@@ -3,7 +3,7 @@
 #endif
 
 #include "math_fracinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "Painter.h"
 #include "math_mathmlstream.h"
 
index af1bebebeb0ec155481056670818f13a5d63731f..6318a817b35642a69061ab88210579227b76608e 100644 (file)
@@ -5,7 +5,7 @@
 #include "math_funcinset.h"
 #include "font.h"
 #include "Painter.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_mathmlstream.h"
 
 
index ac3469cb17c300a6a52ae55e6c555fc7d1ed655c..903a7697edb285d79fc375961db382bd293f56e1 100644 (file)
@@ -1,6 +1,6 @@
 #include "math_funcliminset.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 
 
 MathFuncLimInset::MathFuncLimInset(string const & name)
index ae18d84790c7723f1368a1135b9384a94c9212b8..4df5f78d77f0b1e931ca644ed9fc146d438bb377 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "math_kerninset.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 
 
 MathKernInset::MathKernInset()
index c0c63266d23492f2cbe135bb73e73342d098155c..5bada3e06f3d6dd705d6be0b135e408ebcadfda0 100644 (file)
@@ -23,7 +23,7 @@
 #include "support/lstrings.h"
 #include "support/LAssert.h"
 #include "debug.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_cursor.h"
 #include "math_macrotable.h"
 #include "math_macrotemplate.h"
index 6a6a639b43e079f852bcc3cc8e9b48cda67fb24e..4a9bf76ce12c0f0160deab6cb8f2e03da4678092 100644 (file)
@@ -6,7 +6,7 @@
 #include "math_macro.h"
 #include "math_defs.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 #include "debug.h"
 
 
index 392897de2b380b0b64c279137671edf36f15b0f4..2b70aaa9e6481e93b04cf74a54f1d01a582e989a 100644 (file)
@@ -12,7 +12,7 @@
 #include "math_parser.h"
 #include "math_mathmlstream.h"
 #include "debug.h"
-#include "support.h" // math_font_available
+#include "math_support.h" // math_font_available
 
 
 MathMacroTable::table_type MathMacroTable::macro_table;
index 6f846961350f05440886f83e459799f1a893f7cf..3621f84235c8d9ec1f5d94d3a06520a3129a13a1 100644 (file)
@@ -5,7 +5,7 @@
 #include <vector>
 
 #include "math_matrixinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "debug.h"
 #include "Painter.h"
 #include "LaTeXFeatures.h"
index 9d55ce2f4cbf4bd9216bc50b3c470a63990d1ddd..bedef35dab6f39e24c20355d73bdaddced70215a 100644 (file)
@@ -1,7 +1,7 @@
 #include "math_notinset.h"
 #include "math_parser.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 
 
 MathNotInset::MathNotInset()
index 4f59e333fe7a3e9fcf11ce41dd4df259d19a3791..1266efc819c83eb8dc85fd348132ff858dc2c085 100644 (file)
@@ -73,7 +73,7 @@ point to write some macros:
 #include "math_splitinset.h"
 #include "math_sqrtinset.h"
 #include "debug.h"
-#include "support.h"
+#include "math_support.h"
 #include "lyxlex.h"
 #include "support/lstrings.h"
 
index feb398f1914334cfa0284880564cb9d08ebf0a0a..e675d75a844fc691f6994d3c1c297308bddbc98f 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "math_scriptinset.h"
 #include "debug.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_mathmlstream.h"
 #include "support/LAssert.h"
 
index bf640cb4faaf90aac3b39bacf8590630ab264e32..2355e3c05b748d7c9bfa9347e5bbee4ab9a998fb 100644 (file)
@@ -3,7 +3,7 @@
 #endif
 
 #include "math_spaceinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "LColor.h"
 #include "Painter.h"
 #include "math_mathmlstream.h"
index e108151eabb9005da0b516b1bc2381f83dbe61bd..0dbe004b4135a41a0689c7dfcd64b9d79901fe5d 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "math_specialcharinset.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 
 
 MathSpecialCharInset::MathSpecialCharInset(char c)
index 69cb5105cdb82f8999be5cfdbc848ede9c4ded1e..72f7b981b7cec943b6069f9a6ae2692606107e4f 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "math_stackrelinset.h"
 #include "math_mathmlstream.h"
-#include "support.h"
+#include "math_support.h"
 
 
 MathStackrelInset::MathStackrelInset()
index b3cb3767677fb4fea738ab84e80ed3c67f12db51..68c4dab16e1c6e9e40d52ecaa1b4be5f6bf8ea05 100644 (file)
@@ -8,7 +8,7 @@
 #include "math_mathmlstream.h"
 #include "LColor.h"
 #include "Painter.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_parser.h"
 #include "debug.h"
 
diff --git a/src/mathed/math_support.C b/src/mathed/math_support.C
new file mode 100644 (file)
index 0000000..f48e989
--- /dev/null
@@ -0,0 +1,758 @@
+#include <config.h>
+
+#include <map>
+
+#include "math_support.h"
+#include "lyxfont.h"
+#include "FontLoader.h"
+#include "font.h"
+#include "math_defs.h"
+#include "math_inset.h"
+#include "math_parser.h"
+#include "Painter.h"
+#include "debug.h"
+
+using std::map;
+using std::endl;
+using std::max;
+
+
+bool isBinaryOp(char c, MathTextCodes type)
+{
+       return type < LM_TC_SYMB && strchr("+-<>=/*", c);
+}
+
+
+///
+class Matrix {
+public:
+       ///
+       Matrix(int, double, double);
+       ///
+       void transform(double &, double &);
+private:
+       ///
+       double m_[2][2];
+};
+
+
+Matrix::Matrix(int code, double x, double y)
+{
+       double const cs = (code & 1) ? 0 : (1 - code);
+       double const sn = (code & 1) ? (2 - code) : 0;
+       m_[0][0] =  cs * x;
+       m_[0][1] =  sn * x;
+       m_[1][0] = -sn * y;
+       m_[1][1] =  cs * y;
+}
+
+
+void Matrix::transform(double & x, double & y)
+{
+       double xx = m_[0][0] * x + m_[0][1] * y;
+       double yy = m_[1][0] * x + m_[1][1] * y;
+       x = xx;
+       y = yy;
+}
+
+
+namespace {
+
+LyXFont * MathFonts = 0;
+bool font_available[LM_FONT_END];
+bool font_available_initialized[LM_FONT_END];
+
+enum MathFont {
+       FONT_IT,
+       FONT_SYMBOL,
+       FONT_SYMBOLI,
+       FONT_BF,
+       FONT_BB,
+       FONT_CAL,
+       FONT_TT,
+       FONT_RM,
+       FONT_SF,
+       FONT_CMR,
+       FONT_CMSY,
+       FONT_CMM,
+       FONT_CMEX,
+       FONT_MSA,
+       FONT_MSB,
+       FONT_NUM
+};
+
+void mathed_init_fonts()
+{
+       MathFonts = new LyXFont[FONT_NUM]; //DEC cxx cannot initialize all fonts
+       //at once (JMarc) rc
+
+       for (int i = 0 ; i < FONT_NUM ; ++i) {
+               MathFonts[i] = LyXFont(LyXFont::ALL_SANE);
+       }
+
+       MathFonts[FONT_IT].setShape(LyXFont::ITALIC_SHAPE);
+
+       MathFonts[FONT_SYMBOL].setFamily(LyXFont::SYMBOL_FAMILY);
+
+       MathFonts[FONT_SYMBOLI].setFamily(LyXFont::SYMBOL_FAMILY);
+       MathFonts[FONT_SYMBOLI].setShape(LyXFont::ITALIC_SHAPE);
+
+       MathFonts[FONT_BF].setSeries(LyXFont::BOLD_SERIES);
+
+       MathFonts[FONT_BB].setSeries(LyXFont::BOLD_SERIES);
+       MathFonts[FONT_BB].setFamily(LyXFont::TYPEWRITER_FAMILY);
+
+       MathFonts[FONT_CAL].setFamily(LyXFont::SANS_FAMILY);
+       MathFonts[FONT_CAL].setShape(LyXFont::ITALIC_SHAPE);
+
+       MathFonts[FONT_TT].setFamily(LyXFont::TYPEWRITER_FAMILY);
+
+       MathFonts[FONT_RM].setFamily(LyXFont::ROMAN_FAMILY);
+
+       MathFonts[FONT_SF].setFamily(LyXFont::SANS_FAMILY);
+
+       MathFonts[FONT_CMR].setFamily(LyXFont::CMR_FAMILY);
+       MathFonts[FONT_CMSY].setFamily(LyXFont::CMSY_FAMILY);
+       MathFonts[FONT_CMM].setFamily(LyXFont::CMM_FAMILY);
+       MathFonts[FONT_CMEX].setFamily(LyXFont::CMEX_FAMILY);
+       MathFonts[FONT_MSA].setFamily(LyXFont::MSA_FAMILY);
+       MathFonts[FONT_MSB].setFamily(LyXFont::MSB_FAMILY);
+
+       for (int i = 0; i < LM_FONT_END; ++i)
+               font_available_initialized[i] = false;
+}
+
+
+LyXFont const & whichFontBase(MathTextCodes type)
+{
+       if (!MathFonts)
+               mathed_init_fonts();
+
+       switch (type) {
+       case LM_TC_SYMB:        
+       case LM_TC_BOLDSYMB:    
+               return MathFonts[FONT_SYMBOLI];
+
+       case LM_TC_VAR:
+       case LM_TC_IT:
+               return MathFonts[FONT_IT];
+
+       case LM_TC_BF:
+               return MathFonts[FONT_BF];
+
+       case LM_TC_BB:
+               if (math_font_available(LM_TC_MSB))
+                       return MathFonts[FONT_MSB];
+               else
+                       return MathFonts[FONT_BB];
+
+       case LM_TC_CAL:
+               if (math_font_available(LM_TC_CMSY))
+                       return MathFonts[FONT_CMSY];
+               else
+                       return MathFonts[FONT_CAL];
+
+       case LM_TC_TT:
+               return MathFonts[FONT_TT];
+
+       case LM_TC_TEXTRM:
+       case LM_TC_CONST:
+       case LM_TC_TEX:
+       case LM_TC_RM:
+               return MathFonts[FONT_RM];
+
+       case LM_TC_SF:
+               return MathFonts[FONT_SF];
+
+       case LM_TC_CMR:
+               return MathFonts[FONT_CMR];
+
+       case LM_TC_CMSY:
+               return MathFonts[FONT_CMSY];
+
+       case LM_TC_CMM:
+               return MathFonts[FONT_CMM];
+
+       case LM_TC_CMEX:
+               return MathFonts[FONT_CMEX];
+
+       case LM_TC_MSA:
+               return MathFonts[FONT_MSA];
+
+       case LM_TC_MSB:
+               return MathFonts[FONT_MSB];
+
+       default:
+               break;
+       }
+       return MathFonts[1];
+}
+
+
+LyXFont whichFont(MathTextCodes type, MathMetricsInfo const & size)
+{
+       LyXFont f = whichFontBase(type);
+       // use actual size
+       f.setSize(size.font.size());
+
+       switch (size.style) {
+       case LM_ST_DISPLAY:
+               if (type == LM_TC_BOLDSYMB || type == LM_TC_CMEX) {
+                       f.incSize();
+                       f.incSize();
+               }
+               break;
+
+       case LM_ST_TEXT:
+               break;
+
+       case LM_ST_SCRIPT:
+               f.decSize();
+               f.decSize();
+               break;
+
+       case LM_ST_SCRIPTSCRIPT:
+               f.decSize();
+               f.decSize();
+               f.decSize();
+               break;
+
+       default:
+               lyxerr << "Math Error: wrong font size: " << size.style << endl;
+               break;
+       }
+
+       if (type != LM_TC_TEXTRM)
+               f.setColor(LColor::math);
+
+       if (type == LM_TC_TEX)
+               f.setColor(LColor::latex);
+
+       return f;
+}
+
+} // namespace
+
+
+bool math_font_available(MathTextCodes type)
+{
+       if (!font_available_initialized[type]) {
+               font_available_initialized[type] = true;
+               font_available[type] = fontloader.available(whichFontBase(type));
+       }
+       return font_available[type];
+}
+
+
+namespace {
+
+/*
+ * Internal struct of a drawing: code n x1 y1 ... xn yn, where code is:
+ * 0 = end, 1 = line, 2 = polyline, 3 = square line, 4= square polyline
+ */
+
+
+double const parenthHigh[] = {
+       2, 13,
+       0.9840, 0.0014, 0.7143, 0.0323, 0.4603, 0.0772,
+       0.2540, 0.1278, 0.1746, 0.1966, 0.0952, 0.3300,
+       0.0950, 0.5000, 0.0952, 0.6700, 0.1746, 0.8034,
+       0.2540, 0.8722, 0.4603, 0.9228, 0.7143, 0.9677,
+       0.9840, 0.9986,
+       0
+};
+
+
+double const parenth[] = {
+       2, 13,
+       0.9930, 0.0071, 0.7324, 0.0578, 0.5141, 0.1126,
+       0.3380, 0.1714, 0.2183, 0.2333, 0.0634, 0.3621,
+       0.0141, 0.5000, 0.0563, 0.6369, 0.2113, 0.7647,
+       0.3310, 0.8276, 0.5070, 0.8864, 0.7254, 0.9412,
+       0.9930, 0.9919,
+       0
+};
+
+
+double const brace[] = {
+       2, 21,
+       0.9492, 0.0020, 0.9379, 0.0020, 0.7458, 0.0243,
+       0.5819, 0.0527, 0.4859, 0.0892, 0.4463, 0.1278,
+       0.4463, 0.3732, 0.4011, 0.4199, 0.2712, 0.4615,
+       0.0734, 0.4919, 0.0113, 0.5000, 0.0734, 0.5081,
+       0.2712, 0.5385, 0.4011, 0.5801, 0.4463, 0.6268,
+       0.4463, 0.8722, 0.4859, 0.9108, 0.5819, 0.9473,
+       0.7458, 0.9757, 0.9379, 0.9980, 0.9492, 0.9980,
+       0
+};
+
+
+double const arrow[] = {
+       4, 7,
+       0.0150, 0.7500, 0.2000, 0.6000, 0.3500, 0.3500,
+       0.5000, 0.0500, 0.6500, 0.3500, 0.8000, 0.6000,
+       0.9500, 0.7500,
+       3, 0.5000, 0.1500, 0.5000, 0.9500,
+       0
+};
+
+
+double const Arrow[] = {
+       4, 7,
+       0.0150, 0.7500, 0.2000, 0.6000, 0.3500, 0.3500,
+       0.5000, 0.0500, 0.6500, 0.3500, 0.8000, 0.6000,
+       0.9500, 0.7500,
+       3, 0.3500, 0.5000, 0.3500, 0.9500,
+       3, 0.6500, 0.5000, 0.6500, 0.9500,
+       0
+};
+
+
+double const udarrow[] = {
+       2, 3,
+       0.015, 0.25,  0.5, 0.05, 0.95, 0.25,
+       2, 3,
+       0.015, 0.75,  0.5, 0.95, 0.95, 0.75,
+       1, 0.5, 0.2,  0.5, 0.8,
+       0
+};
+
+
+double const Udarrow[] = {
+       2, 3,
+       0.015, 0.25,  0.5, 0.05, 0.95, 0.25,
+       2, 3,
+       0.015, 0.75,  0.5, 0.95, 0.95, 0.75,
+       1, 0.35, 0.2, 0.35, 0.8,
+       1, 0.65, 0.2, 0.65, 0.8,
+       0
+};
+
+
+double const brack[] = {
+       2, 4,
+       0.95, 0.05,  0.05, 0.05,  0.05, 0.95,  0.95, 0.95,
+       0
+};
+
+
+double const corner[] = {
+       2, 3,
+       0.95, 0.05,  0.05, 0.05,  0.05, 0.95,
+       0
+};
+
+
+double const angle[] = {
+       2, 3,
+       1, 0,  0.05, 0.5,  1, 1,
+       0
+};
+
+
+double const slash[] = {
+       1, 0.95, 0.05, 0.05, 0.95,
+       0
+};
+
+
+double const hline[] = {
+       1, 0.00, 0.5, 1.0, 0.5,
+       0
+};
+
+
+double const hline2[] = {
+       1, 0.1, 0.5,  0.3, 0.5,
+       1, 0.7, 0.5,  0.9, 0.5,
+       0
+};
+
+
+double const hline3[] = {
+       1, 0.1,   0,  0.15,  0,
+       1, 0.475, 0,  0.525, 0,
+       1, 0.85,  0,  0.9,   0,
+       0
+};
+
+
+double const dline3[] = {
+       1, 0.1,   0.1,   0.15,  0.15,
+       1, 0.475, 0.475, 0.525, 0.525,
+       1, 0.85,  0.85,  0.9,   0.9,
+       0
+};
+
+
+double const hlinesmall[] = {
+       1, 0.4, 0.5, 0.6, 0.5,
+       0
+};
+
+
+double const vert[] = {
+       1, 0.5, 0.05,  0.5, 0.95,
+       0
+};
+
+
+double const  Vert[] = {
+       1, 0.3, 0.05,  0.3, 0.95,
+       1, 0.7, 0.05,  0.7, 0.95,
+       0
+};
+
+
+double const tilde[] = {
+       2, 4,
+       0.05, 0.8,  0.25, 0.2,  0.75, 0.8,  0.95, 0.2,
+       0
+};
+
+
+struct deco_struct {
+       double const * data;
+       int angle;
+};
+
+struct named_deco_struct {
+       char const * name;
+       double const * data;
+       int angle;
+};
+
+named_deco_struct deco_table[] = {
+       // Decorations
+       {"widehat",        angle,      3 },
+       {"widetilde",      tilde,      0 },
+       {"underline",      hline,      0 },
+       {"overline",       hline,      0 },
+       {"underbrace",     brace,      1 },
+       {"overbrace",      brace,      3 },
+       {"overleftarrow",  arrow,      1 },
+       {"overrightarrow", arrow,      3 },
+       
+       // Delimiters
+       {"(",              parenth,    0 },
+       {")",              parenth,    2 },
+       {"{",              brace,      0 },
+       {"}",              brace,      2 },
+       {"[",              brack,      0 },
+       {"]",              brack,      2 },
+       {"|",              vert,       0 },
+       {"/",              slash,      0 },
+       {"Vert",           Vert,       0 },
+       {"'",              slash,      1 },
+       {"backslash",      slash,      1 },
+       {"langle",         angle,      0 },
+       {"lceil",          corner,     0 },
+       {"lfloor",         corner,     1 },
+       {"rangle",         angle,      2 },
+       {"rceil",          corner,     3 },
+       {"rfloor",         corner,     2 },
+       {"downarrow",      arrow,      2 },
+       {"Downarrow",      Arrow,      2 },
+       {"uparrow",        arrow,      0 },
+       {"Uparrow",        Arrow,      0 },
+       {"updownarrow",    udarrow,    0 },
+       {"Updownarrow",    Udarrow,    0 },     
+       
+       // Accents
+       {"ddot",           hline2,     0 },
+       {"hat",            angle,      3 },
+       {"grave",          slash,      1 },
+       {"acute",          slash,      0 },
+       {"tilde",          tilde,      0 },
+       {"bar",            hline,      0 },
+       {"dot",            hlinesmall, 0 },
+       {"check",          angle,      1 },
+       {"breve",          parenth,    1 },
+       {"vec",            arrow,      3 },
+       {"not",            slash,      0 },
+       
+       // Dots
+       {"ldots",          hline3,     0 },
+       {"cdots",          hline3,     0 },
+       {"vdots",          hline3,     1 },
+       {"ddots",          dline3,     0 }
+};
+
+
+map<string, deco_struct> deco_list;
+
+// sort the table on startup
+struct init_deco_table {
+       init_deco_table() {
+               unsigned const n = sizeof(deco_table) / sizeof(deco_table[0]);
+               for (named_deco_struct * p = deco_table; p != deco_table + n; ++p) {
+                       deco_struct d;
+                       d.data  = p->data;
+                       d.angle = p->angle;
+                       deco_list[p->name]= d;
+               }
+       }
+};
+
+static init_deco_table dummy;
+
+
+deco_struct const * search_deco(string const & name)
+{
+       map<string, deco_struct>::const_iterator p = deco_list.find(name);
+       return (p == deco_list.end()) ? 0 : &(p->second);
+}
+
+
+} // namespace anon
+
+
+void mathed_char_dim(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c, int & asc, int & des, int & wid)
+{
+       LyXFont const font = whichFont(type, size);
+       des = lyxfont::descent(c, font);
+       asc = lyxfont::ascent(c, font);
+       wid = mathed_char_width(type, size, c);
+}
+
+
+int mathed_char_height(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c, int & asc, int & des)
+{
+       LyXFont const font = whichFont(type, size);
+       des = lyxfont::descent(c, font);
+       asc = lyxfont::ascent(c, font);
+       return asc + des;
+}
+
+
+int mathed_char_height(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c)
+{
+       int asc;
+       int des;
+       return mathed_char_height(type, size, c, asc, des);
+}
+
+
+int mathed_char_ascent(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c)
+{
+       LyXFont const font = whichFont(type, size);
+       return lyxfont::ascent(c, font);
+}
+
+
+int mathed_char_descent(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c)
+{
+       LyXFont const font = whichFont(type, size);
+       return lyxfont::descent(c, font);
+}
+
+
+int mathed_char_width(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c)
+{
+       LyXFont const font = whichFont(type, size);
+       if (isBinaryOp(c, type))
+               return lyxfont::width(c, font) + 2 * lyxfont::width(' ', font);
+       else
+               return lyxfont::width(c, font);
+}
+
+
+void mathed_string_dim(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s, int & asc, int & des, int & wid)
+{
+       mathed_string_height(type, size, s, asc, des);
+       wid = mathed_string_width(type, size, s);
+}
+
+
+int mathed_string_height(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s, int & asc, int & des)
+{
+       LyXFont const font = whichFont(type, size);
+       asc = des = 0;
+       for (string::const_iterator it = s.begin(); it != s.end(); ++it) {
+               des = max(des, lyxfont::descent(*it, font));
+               asc = max(asc, lyxfont::ascent(*it, font));
+       }
+       return asc + des;
+}
+
+
+int mathed_string_width(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s)
+{
+       return lyxfont::width(s, whichFont(type, size));
+}
+
+
+int mathed_string_ascent(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s)
+{
+       LyXFont const font = whichFont(type, size);
+       int asc = 0;
+       for (string::const_iterator it = s.begin(); it != s.end(); ++it)
+               asc = max(asc, lyxfont::ascent(*it, font));
+       return asc;
+}
+
+
+int mathed_string_descent(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s)
+{
+       LyXFont const font = whichFont(type, size);
+       int des = 0;
+       for (string::const_iterator it = s.begin(); it != s.end(); ++it)
+               des = max(des, lyxfont::descent(*it, font));
+       return des;
+}
+
+
+
+void mathed_draw_deco(Painter & pain, int x, int y, int w, int h,
+       const string & name)
+{
+       if (name == ".") {
+               pain.line(x + w/2, y, x + w/2, y + h,
+                         LColor::mathcursor, Painter::line_onoffdash);
+               return;
+       }       
+       
+       deco_struct const * mds = search_deco(name);
+       if (!mds) {
+               lyxerr << "Deco was not found. Programming error?\n";
+               lyxerr << "name: '" << name << "'\n";
+               return;
+       }
+       
+       int const n = (w < h) ? w : h;
+       int const r = mds->angle;
+       double const * d = mds->data;
+       
+       if (h > 70 && (name == "(" || name == ")"))
+               d = parenthHigh;
+       
+       Matrix mt(r, w, h);
+       Matrix sqmt(r, n, n);
+
+       if (r > 0 && r < 3)
+               y += h;
+
+       if (r >= 2)
+               x += w;
+
+       for (int i = 0; d[i]; ) {
+               int code = int(d[i++]);
+               if (code & 1) {  // code == 1 || code == 3
+                       double xx = d[i++];
+                       double yy = d[i++];
+                       double x2 = d[i++];
+                       double y2 = d[i++];
+                       if (code == 3)
+                               sqmt.transform(xx, yy);
+                       else
+                               mt.transform(xx, yy);
+                       mt.transform(x2, y2);
+                       pain.line(x + int(xx), y + int(yy), x + int(x2), y + int(y2),
+                                       LColor::mathline);
+               }       else {
+                       int xp[32];
+                       int yp[32];
+                       int const n = int(d[i++]);
+                       for (int j = 0; j < n; ++j) {
+                               double xx = d[i++];
+                               double yy = d[i++];
+//          lyxerr << " " << xx << " " << yy << " ";
+                               if (code == 4)
+                                       sqmt.transform(xx, yy);
+                               else
+                                       mt.transform(xx, yy);
+                               xp[j] = x + int(xx);
+                               yp[j] = y + int(yy);
+                               //  lyxerr << "P[" << j " " << xx << " " << yy << " " << x << " " << y << "]";
+                       }
+                       pain.lines(xp, yp, n, LColor::mathline);
+               }
+       }
+}
+
+
+// In the future maybe we use a better fonts renderer
+void drawStr(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
+       int x, int y, string const & s)
+{
+       pain.text(x, y, s, whichFont(type, siz));
+}
+
+
+void drawChar(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
+       int x, int y, char c)
+{
+       string s;
+       if (isBinaryOp(c, type))
+               s += ' ';
+       s += c;
+       if (isBinaryOp(c, type))
+               s += ' ';
+       drawStr(pain, type, siz, x, y, s);
+}
+
+
+// decrease math size for super- and subscripts
+void smallerStyleScript(MathMetricsInfo & st)
+{
+       switch (st.style) {
+               case LM_ST_DISPLAY:
+               case LM_ST_TEXT:    st.style = LM_ST_SCRIPT; break;
+               default:            st.style = LM_ST_SCRIPTSCRIPT;
+       }
+}
+
+
+// decrease math size for fractions
+void smallerStyleFrac(MathMetricsInfo & st)
+{
+       switch (st.style) {
+               case LM_ST_DISPLAY: st.style = LM_ST_TEXT; break;
+               case LM_ST_TEXT:    st.style = LM_ST_SCRIPT; break;
+               default:            st.style = LM_ST_SCRIPTSCRIPT;
+       }
+}
+
+
+void math_font_max_dim(MathTextCodes code, MathMetricsInfo const & siz,
+       int & asc, int & des)
+{
+       LyXFont font = whichFont(code, siz);
+       asc = lyxfont::maxAscent(font);
+       des = lyxfont::maxDescent(font);
+}
+
+
+char const * latex_mathspace[] = {
+       "!", ",", ":", ";", "quad", "qquad"
+};
+
+
+char const * math_font_name(MathTextCodes code)
+{
+       static char const * theFontNames[] = {
+               "mathrm",
+               "mathcal",
+               "mathbf",
+               "mathbb",
+               "mathsf",
+               "mathtt",
+               "mathit",
+               "textrm"
+       };
+
+       if (code >= LM_TC_RM && code <= LM_TC_TEXTRM) 
+               return theFontNames[code - LM_TC_RM];
+       return 0;
+}
diff --git a/src/mathed/math_support.h b/src/mathed/math_support.h
new file mode 100644 (file)
index 0000000..2b219a3
--- /dev/null
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+
+#ifndef MATH_SUPPORT_H
+#define MATH_SUPPORT_H
+
+#include "math_defs.h"
+#include "LString.h"
+
+class Painter;
+class latexkeys;
+class MathMetricsInfo;
+
+extern char const * latex_mathspace[];
+
+int mathed_char_height(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c, int & asc, int & des);
+void mathed_char_dim(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c, int & asc, int & des, int & wid);
+int mathed_char_width(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c);
+int mathed_char_ascent(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c);
+int mathed_char_descent(MathTextCodes type, MathMetricsInfo const & size,
+       unsigned char c);
+
+void mathed_draw_deco(Painter & pain, int x, int y, int w, int h,
+       string const & name);
+
+void mathed_string_dim(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s, int & asc, int & des, int & wid);
+int mathed_string_height(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s, int & asc, int & des);
+
+int mathed_string_width(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s);
+int mathed_string_ascent(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s);
+int mathed_string_descent(MathTextCodes type, MathMetricsInfo const & size,
+       string const & s);
+
+void drawStr(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
+       int x, int y, string const & s);
+void drawChar(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
+       int x, int y, char c);
+
+void math_font_max_dim(MathTextCodes code, MathMetricsInfo const & siz,
+       int & asc, int & desc);
+
+bool math_font_available(MathTextCodes code);
+
+// decrease math size for super- and subscripts
+void smallerStyleScript(MathMetricsInfo &);
+
+// decrease math size for fractions
+void smallerStyleFrac(MathMetricsInfo & st);
+
+char const * math_font_name(MathTextCodes type);
+
+
+#endif
index 1cfb56460206b4684e09e9afe1e098e8ff03391f..b9e84c9c8071f3a0cef2e8732a20fc095308441d 100644 (file)
@@ -2,7 +2,7 @@
 #include "math_parser.h"
 #include "math_mathmlstream.h"
 #include "debug.h"
-#include "support.h"
+#include "math_support.h"
 
 
 MathSymbolInset::MathSymbolInset(const latexkeys * l)
diff --git a/src/mathed/support.C b/src/mathed/support.C
deleted file mode 100644 (file)
index 5c47405..0000000
+++ /dev/null
@@ -1,758 +0,0 @@
-#include <config.h>
-
-#include <map>
-
-#include "support.h"
-#include "lyxfont.h"
-#include "FontLoader.h"
-#include "font.h"
-#include "math_defs.h"
-#include "math_inset.h"
-#include "math_parser.h"
-#include "Painter.h"
-#include "debug.h"
-
-using std::map;
-using std::endl;
-using std::max;
-
-
-bool isBinaryOp(char c, MathTextCodes type)
-{
-       return type < LM_TC_SYMB && strchr("+-<>=/*", c);
-}
-
-
-///
-class Matrix {
-public:
-       ///
-       Matrix(int, double, double);
-       ///
-       void transform(double &, double &);
-private:
-       ///
-       double m_[2][2];
-};
-
-
-Matrix::Matrix(int code, double x, double y)
-{
-       double const cs = (code & 1) ? 0 : (1 - code);
-       double const sn = (code & 1) ? (2 - code) : 0;
-       m_[0][0] =  cs * x;
-       m_[0][1] =  sn * x;
-       m_[1][0] = -sn * y;
-       m_[1][1] =  cs * y;
-}
-
-
-void Matrix::transform(double & x, double & y)
-{
-       double xx = m_[0][0] * x + m_[0][1] * y;
-       double yy = m_[1][0] * x + m_[1][1] * y;
-       x = xx;
-       y = yy;
-}
-
-
-namespace {
-
-LyXFont * MathFonts = 0;
-bool font_available[LM_FONT_END];
-bool font_available_initialized[LM_FONT_END];
-
-enum MathFont {
-       FONT_IT,
-       FONT_SYMBOL,
-       FONT_SYMBOLI,
-       FONT_BF,
-       FONT_BB,
-       FONT_CAL,
-       FONT_TT,
-       FONT_RM,
-       FONT_SF,
-       FONT_CMR,
-       FONT_CMSY,
-       FONT_CMM,
-       FONT_CMEX,
-       FONT_MSA,
-       FONT_MSB,
-       FONT_NUM
-};
-
-void mathed_init_fonts()
-{
-       MathFonts = new LyXFont[FONT_NUM]; //DEC cxx cannot initialize all fonts
-       //at once (JMarc) rc
-
-       for (int i = 0 ; i < FONT_NUM ; ++i) {
-               MathFonts[i] = LyXFont(LyXFont::ALL_SANE);
-       }
-
-       MathFonts[FONT_IT].setShape(LyXFont::ITALIC_SHAPE);
-
-       MathFonts[FONT_SYMBOL].setFamily(LyXFont::SYMBOL_FAMILY);
-
-       MathFonts[FONT_SYMBOLI].setFamily(LyXFont::SYMBOL_FAMILY);
-       MathFonts[FONT_SYMBOLI].setShape(LyXFont::ITALIC_SHAPE);
-
-       MathFonts[FONT_BF].setSeries(LyXFont::BOLD_SERIES);
-
-       MathFonts[FONT_BB].setSeries(LyXFont::BOLD_SERIES);
-       MathFonts[FONT_BB].setFamily(LyXFont::TYPEWRITER_FAMILY);
-
-       MathFonts[FONT_CAL].setFamily(LyXFont::SANS_FAMILY);
-       MathFonts[FONT_CAL].setShape(LyXFont::ITALIC_SHAPE);
-
-       MathFonts[FONT_TT].setFamily(LyXFont::TYPEWRITER_FAMILY);
-
-       MathFonts[FONT_RM].setFamily(LyXFont::ROMAN_FAMILY);
-
-       MathFonts[FONT_SF].setFamily(LyXFont::SANS_FAMILY);
-
-       MathFonts[FONT_CMR].setFamily(LyXFont::CMR_FAMILY);
-       MathFonts[FONT_CMSY].setFamily(LyXFont::CMSY_FAMILY);
-       MathFonts[FONT_CMM].setFamily(LyXFont::CMM_FAMILY);
-       MathFonts[FONT_CMEX].setFamily(LyXFont::CMEX_FAMILY);
-       MathFonts[FONT_MSA].setFamily(LyXFont::MSA_FAMILY);
-       MathFonts[FONT_MSB].setFamily(LyXFont::MSB_FAMILY);
-
-       for (int i = 0; i < LM_FONT_END; ++i)
-               font_available_initialized[i] = false;
-}
-
-
-LyXFont const & whichFontBase(MathTextCodes type)
-{
-       if (!MathFonts)
-               mathed_init_fonts();
-
-       switch (type) {
-       case LM_TC_SYMB:        
-       case LM_TC_BOLDSYMB:    
-               return MathFonts[FONT_SYMBOLI];
-
-       case LM_TC_VAR:
-       case LM_TC_IT:
-               return MathFonts[FONT_IT];
-
-       case LM_TC_BF:
-               return MathFonts[FONT_BF];
-
-       case LM_TC_BB:
-               if (math_font_available(LM_TC_MSB))
-                       return MathFonts[FONT_MSB];
-               else
-                       return MathFonts[FONT_BB];
-
-       case LM_TC_CAL:
-               if (math_font_available(LM_TC_CMSY))
-                       return MathFonts[FONT_CMSY];
-               else
-                       return MathFonts[FONT_CAL];
-
-       case LM_TC_TT:
-               return MathFonts[FONT_TT];
-
-       case LM_TC_TEXTRM:
-       case LM_TC_CONST:
-       case LM_TC_TEX:
-       case LM_TC_RM:
-               return MathFonts[FONT_RM];
-
-       case LM_TC_SF:
-               return MathFonts[FONT_SF];
-
-       case LM_TC_CMR:
-               return MathFonts[FONT_CMR];
-
-       case LM_TC_CMSY:
-               return MathFonts[FONT_CMSY];
-
-       case LM_TC_CMM:
-               return MathFonts[FONT_CMM];
-
-       case LM_TC_CMEX:
-               return MathFonts[FONT_CMEX];
-
-       case LM_TC_MSA:
-               return MathFonts[FONT_MSA];
-
-       case LM_TC_MSB:
-               return MathFonts[FONT_MSB];
-
-       default:
-               break;
-       }
-       return MathFonts[1];
-}
-
-
-LyXFont whichFont(MathTextCodes type, MathMetricsInfo const & size)
-{
-       LyXFont f = whichFontBase(type);
-       // use actual size
-       f.setSize(size.font.size());
-
-       switch (size.style) {
-       case LM_ST_DISPLAY:
-               if (type == LM_TC_BOLDSYMB || type == LM_TC_CMEX) {
-                       f.incSize();
-                       f.incSize();
-               }
-               break;
-
-       case LM_ST_TEXT:
-               break;
-
-       case LM_ST_SCRIPT:
-               f.decSize();
-               f.decSize();
-               break;
-
-       case LM_ST_SCRIPTSCRIPT:
-               f.decSize();
-               f.decSize();
-               f.decSize();
-               break;
-
-       default:
-               lyxerr << "Math Error: wrong font size: " << size.style << endl;
-               break;
-       }
-
-       if (type != LM_TC_TEXTRM)
-               f.setColor(LColor::math);
-
-       if (type == LM_TC_TEX)
-               f.setColor(LColor::latex);
-
-       return f;
-}
-
-} // namespace
-
-
-bool math_font_available(MathTextCodes type)
-{
-       if (!font_available_initialized[type]) {
-               font_available_initialized[type] = true;
-               font_available[type] = fontloader.available(whichFontBase(type));
-       }
-       return font_available[type];
-}
-
-
-namespace {
-
-/*
- * Internal struct of a drawing: code n x1 y1 ... xn yn, where code is:
- * 0 = end, 1 = line, 2 = polyline, 3 = square line, 4= square polyline
- */
-
-
-double const parenthHigh[] = {
-       2, 13,
-       0.9840, 0.0014, 0.7143, 0.0323, 0.4603, 0.0772,
-       0.2540, 0.1278, 0.1746, 0.1966, 0.0952, 0.3300,
-       0.0950, 0.5000, 0.0952, 0.6700, 0.1746, 0.8034,
-       0.2540, 0.8722, 0.4603, 0.9228, 0.7143, 0.9677,
-       0.9840, 0.9986,
-       0
-};
-
-
-double const parenth[] = {
-       2, 13,
-       0.9930, 0.0071, 0.7324, 0.0578, 0.5141, 0.1126,
-       0.3380, 0.1714, 0.2183, 0.2333, 0.0634, 0.3621,
-       0.0141, 0.5000, 0.0563, 0.6369, 0.2113, 0.7647,
-       0.3310, 0.8276, 0.5070, 0.8864, 0.7254, 0.9412,
-       0.9930, 0.9919,
-       0
-};
-
-
-double const brace[] = {
-       2, 21,
-       0.9492, 0.0020, 0.9379, 0.0020, 0.7458, 0.0243,
-       0.5819, 0.0527, 0.4859, 0.0892, 0.4463, 0.1278,
-       0.4463, 0.3732, 0.4011, 0.4199, 0.2712, 0.4615,
-       0.0734, 0.4919, 0.0113, 0.5000, 0.0734, 0.5081,
-       0.2712, 0.5385, 0.4011, 0.5801, 0.4463, 0.6268,
-       0.4463, 0.8722, 0.4859, 0.9108, 0.5819, 0.9473,
-       0.7458, 0.9757, 0.9379, 0.9980, 0.9492, 0.9980,
-       0
-};
-
-
-double const arrow[] = {
-       4, 7,
-       0.0150, 0.7500, 0.2000, 0.6000, 0.3500, 0.3500,
-       0.5000, 0.0500, 0.6500, 0.3500, 0.8000, 0.6000,
-       0.9500, 0.7500,
-       3, 0.5000, 0.1500, 0.5000, 0.9500,
-       0
-};
-
-
-double const Arrow[] = {
-       4, 7,
-       0.0150, 0.7500, 0.2000, 0.6000, 0.3500, 0.3500,
-       0.5000, 0.0500, 0.6500, 0.3500, 0.8000, 0.6000,
-       0.9500, 0.7500,
-       3, 0.3500, 0.5000, 0.3500, 0.9500,
-       3, 0.6500, 0.5000, 0.6500, 0.9500,
-       0
-};
-
-
-double const udarrow[] = {
-       2, 3,
-       0.015, 0.25,  0.5, 0.05, 0.95, 0.25,
-       2, 3,
-       0.015, 0.75,  0.5, 0.95, 0.95, 0.75,
-       1, 0.5, 0.2,  0.5, 0.8,
-       0
-};
-
-
-double const Udarrow[] = {
-       2, 3,
-       0.015, 0.25,  0.5, 0.05, 0.95, 0.25,
-       2, 3,
-       0.015, 0.75,  0.5, 0.95, 0.95, 0.75,
-       1, 0.35, 0.2, 0.35, 0.8,
-       1, 0.65, 0.2, 0.65, 0.8,
-       0
-};
-
-
-double const brack[] = {
-       2, 4,
-       0.95, 0.05,  0.05, 0.05,  0.05, 0.95,  0.95, 0.95,
-       0
-};
-
-
-double const corner[] = {
-       2, 3,
-       0.95, 0.05,  0.05, 0.05,  0.05, 0.95,
-       0
-};
-
-
-double const angle[] = {
-       2, 3,
-       1, 0,  0.05, 0.5,  1, 1,
-       0
-};
-
-
-double const slash[] = {
-       1, 0.95, 0.05, 0.05, 0.95,
-       0
-};
-
-
-double const hline[] = {
-       1, 0.00, 0.5, 1.0, 0.5,
-       0
-};
-
-
-double const hline2[] = {
-       1, 0.1, 0.5,  0.3, 0.5,
-       1, 0.7, 0.5,  0.9, 0.5,
-       0
-};
-
-
-double const hline3[] = {
-       1, 0.1,   0,  0.15,  0,
-       1, 0.475, 0,  0.525, 0,
-       1, 0.85,  0,  0.9,   0,
-       0
-};
-
-
-double const dline3[] = {
-       1, 0.1,   0.1,   0.15,  0.15,
-       1, 0.475, 0.475, 0.525, 0.525,
-       1, 0.85,  0.85,  0.9,   0.9,
-       0
-};
-
-
-double const hlinesmall[] = {
-       1, 0.4, 0.5, 0.6, 0.5,
-       0
-};
-
-
-double const vert[] = {
-       1, 0.5, 0.05,  0.5, 0.95,
-       0
-};
-
-
-double const  Vert[] = {
-       1, 0.3, 0.05,  0.3, 0.95,
-       1, 0.7, 0.05,  0.7, 0.95,
-       0
-};
-
-
-double const tilde[] = {
-       2, 4,
-       0.05, 0.8,  0.25, 0.2,  0.75, 0.8,  0.95, 0.2,
-       0
-};
-
-
-struct deco_struct {
-       double const * data;
-       int angle;
-};
-
-struct named_deco_struct {
-       char const * name;
-       double const * data;
-       int angle;
-};
-
-named_deco_struct deco_table[] = {
-       // Decorations
-       {"widehat",        angle,      3 },
-       {"widetilde",      tilde,      0 },
-       {"underline",      hline,      0 },
-       {"overline",       hline,      0 },
-       {"underbrace",     brace,      1 },
-       {"overbrace",      brace,      3 },
-       {"overleftarrow",  arrow,      1 },
-       {"overrightarrow", arrow,      3 },
-       
-       // Delimiters
-       {"(",              parenth,    0 },
-       {")",              parenth,    2 },
-       {"{",              brace,      0 },
-       {"}",              brace,      2 },
-       {"[",              brack,      0 },
-       {"]",              brack,      2 },
-       {"|",              vert,       0 },
-       {"/",              slash,      0 },
-       {"Vert",           Vert,       0 },
-       {"'",              slash,      1 },
-       {"backslash",      slash,      1 },
-       {"langle",         angle,      0 },
-       {"lceil",          corner,     0 },
-       {"lfloor",         corner,     1 },
-       {"rangle",         angle,      2 },
-       {"rceil",          corner,     3 },
-       {"rfloor",         corner,     2 },
-       {"downarrow",      arrow,      2 },
-       {"Downarrow",      Arrow,      2 },
-       {"uparrow",        arrow,      0 },
-       {"Uparrow",        Arrow,      0 },
-       {"updownarrow",    udarrow,    0 },
-       {"Updownarrow",    Udarrow,    0 },     
-       
-       // Accents
-       {"ddot",           hline2,     0 },
-       {"hat",            angle,      3 },
-       {"grave",          slash,      1 },
-       {"acute",          slash,      0 },
-       {"tilde",          tilde,      0 },
-       {"bar",            hline,      0 },
-       {"dot",            hlinesmall, 0 },
-       {"check",          angle,      1 },
-       {"breve",          parenth,    1 },
-       {"vec",            arrow,      3 },
-       {"not",            slash,      0 },
-       
-       // Dots
-       {"ldots",          hline3,     0 },
-       {"cdots",          hline3,     0 },
-       {"vdots",          hline3,     1 },
-       {"ddots",          dline3,     0 }
-};
-
-
-map<string, deco_struct> deco_list;
-
-// sort the table on startup
-struct init_deco_table {
-       init_deco_table() {
-               unsigned const n = sizeof(deco_table) / sizeof(deco_table[0]);
-               for (named_deco_struct * p = deco_table; p != deco_table + n; ++p) {
-                       deco_struct d;
-                       d.data  = p->data;
-                       d.angle = p->angle;
-                       deco_list[p->name]= d;
-               }
-       }
-};
-
-static init_deco_table dummy;
-
-
-deco_struct const * search_deco(string const & name)
-{
-       map<string, deco_struct>::const_iterator p = deco_list.find(name);
-       return (p == deco_list.end()) ? 0 : &(p->second);
-}
-
-
-} // namespace anon
-
-
-void mathed_char_dim(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c, int & asc, int & des, int & wid)
-{
-       LyXFont const font = whichFont(type, size);
-       des = lyxfont::descent(c, font);
-       asc = lyxfont::ascent(c, font);
-       wid = mathed_char_width(type, size, c);
-}
-
-
-int mathed_char_height(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c, int & asc, int & des)
-{
-       LyXFont const font = whichFont(type, size);
-       des = lyxfont::descent(c, font);
-       asc = lyxfont::ascent(c, font);
-       return asc + des;
-}
-
-
-int mathed_char_height(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c)
-{
-       int asc;
-       int des;
-       return mathed_char_height(type, size, c, asc, des);
-}
-
-
-int mathed_char_ascent(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c)
-{
-       LyXFont const font = whichFont(type, size);
-       return lyxfont::ascent(c, font);
-}
-
-
-int mathed_char_descent(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c)
-{
-       LyXFont const font = whichFont(type, size);
-       return lyxfont::descent(c, font);
-}
-
-
-int mathed_char_width(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c)
-{
-       LyXFont const font = whichFont(type, size);
-       if (isBinaryOp(c, type))
-               return lyxfont::width(c, font) + 2 * lyxfont::width(' ', font);
-       else
-               return lyxfont::width(c, font);
-}
-
-
-void mathed_string_dim(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s, int & asc, int & des, int & wid)
-{
-       mathed_string_height(type, size, s, asc, des);
-       wid = mathed_string_width(type, size, s);
-}
-
-
-int mathed_string_height(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s, int & asc, int & des)
-{
-       LyXFont const font = whichFont(type, size);
-       asc = des = 0;
-       for (string::const_iterator it = s.begin(); it != s.end(); ++it) {
-               des = max(des, lyxfont::descent(*it, font));
-               asc = max(asc, lyxfont::ascent(*it, font));
-       }
-       return asc + des;
-}
-
-
-int mathed_string_width(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s)
-{
-       return lyxfont::width(s, whichFont(type, size));
-}
-
-
-int mathed_string_ascent(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s)
-{
-       LyXFont const font = whichFont(type, size);
-       int asc = 0;
-       for (string::const_iterator it = s.begin(); it != s.end(); ++it)
-               asc = max(asc, lyxfont::ascent(*it, font));
-       return asc;
-}
-
-
-int mathed_string_descent(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s)
-{
-       LyXFont const font = whichFont(type, size);
-       int des = 0;
-       for (string::const_iterator it = s.begin(); it != s.end(); ++it)
-               des = max(des, lyxfont::descent(*it, font));
-       return des;
-}
-
-
-
-void mathed_draw_deco(Painter & pain, int x, int y, int w, int h,
-       const string & name)
-{
-       if (name == ".") {
-               pain.line(x + w/2, y, x + w/2, y + h,
-                         LColor::mathcursor, Painter::line_onoffdash);
-               return;
-       }       
-       
-       deco_struct const * mds = search_deco(name);
-       if (!mds) {
-               lyxerr << "Deco was not found. Programming error?\n";
-               lyxerr << "name: '" << name << "'\n";
-               return;
-       }
-       
-       int const n = (w < h) ? w : h;
-       int const r = mds->angle;
-       double const * d = mds->data;
-       
-       if (h > 70 && (name == "(" || name == ")"))
-               d = parenthHigh;
-       
-       Matrix mt(r, w, h);
-       Matrix sqmt(r, n, n);
-
-       if (r > 0 && r < 3)
-               y += h;
-
-       if (r >= 2)
-               x += w;
-
-       for (int i = 0; d[i]; ) {
-               int code = int(d[i++]);
-               if (code & 1) {  // code == 1 || code == 3
-                       double xx = d[i++];
-                       double yy = d[i++];
-                       double x2 = d[i++];
-                       double y2 = d[i++];
-                       if (code == 3)
-                               sqmt.transform(xx, yy);
-                       else
-                               mt.transform(xx, yy);
-                       mt.transform(x2, y2);
-                       pain.line(x + int(xx), y + int(yy), x + int(x2), y + int(y2),
-                                       LColor::mathline);
-               }       else {
-                       int xp[32];
-                       int yp[32];
-                       int const n = int(d[i++]);
-                       for (int j = 0; j < n; ++j) {
-                               double xx = d[i++];
-                               double yy = d[i++];
-//          lyxerr << " " << xx << " " << yy << " ";
-                               if (code == 4)
-                                       sqmt.transform(xx, yy);
-                               else
-                                       mt.transform(xx, yy);
-                               xp[j] = x + int(xx);
-                               yp[j] = y + int(yy);
-                               //  lyxerr << "P[" << j " " << xx << " " << yy << " " << x << " " << y << "]";
-                       }
-                       pain.lines(xp, yp, n, LColor::mathline);
-               }
-       }
-}
-
-
-// In the future maybe we use a better fonts renderer
-void drawStr(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
-       int x, int y, string const & s)
-{
-       pain.text(x, y, s, whichFont(type, siz));
-}
-
-
-void drawChar(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
-       int x, int y, char c)
-{
-       string s;
-       if (isBinaryOp(c, type))
-               s += ' ';
-       s += c;
-       if (isBinaryOp(c, type))
-               s += ' ';
-       drawStr(pain, type, siz, x, y, s);
-}
-
-
-// decrease math size for super- and subscripts
-void smallerStyleScript(MathMetricsInfo & st)
-{
-       switch (st.style) {
-               case LM_ST_DISPLAY:
-               case LM_ST_TEXT:    st.style = LM_ST_SCRIPT; break;
-               default:            st.style = LM_ST_SCRIPTSCRIPT;
-       }
-}
-
-
-// decrease math size for fractions
-void smallerStyleFrac(MathMetricsInfo & st)
-{
-       switch (st.style) {
-               case LM_ST_DISPLAY: st.style = LM_ST_TEXT; break;
-               case LM_ST_TEXT:    st.style = LM_ST_SCRIPT; break;
-               default:            st.style = LM_ST_SCRIPTSCRIPT;
-       }
-}
-
-
-void math_font_max_dim(MathTextCodes code, MathMetricsInfo const & siz,
-       int & asc, int & des)
-{
-       LyXFont font = whichFont(code, siz);
-       asc = lyxfont::maxAscent(font);
-       des = lyxfont::maxDescent(font);
-}
-
-
-char const * latex_mathspace[] = {
-       "!", ",", ":", ";", "quad", "qquad"
-};
-
-
-char const * math_font_name(MathTextCodes code)
-{
-       static char const * theFontNames[] = {
-               "mathrm",
-               "mathcal",
-               "mathbf",
-               "mathbb",
-               "mathsf",
-               "mathtt",
-               "mathit",
-               "textrm"
-       };
-
-       if (code >= LM_TC_RM && code <= LM_TC_TEXTRM) 
-               return theFontNames[code - LM_TC_RM];
-       return 0;
-}
diff --git a/src/mathed/support.h b/src/mathed/support.h
deleted file mode 100644 (file)
index 2b219a3..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// -*- C++ -*-
-
-#ifndef MATH_SUPPORT_H
-#define MATH_SUPPORT_H
-
-#include "math_defs.h"
-#include "LString.h"
-
-class Painter;
-class latexkeys;
-class MathMetricsInfo;
-
-extern char const * latex_mathspace[];
-
-int mathed_char_height(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c, int & asc, int & des);
-void mathed_char_dim(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c, int & asc, int & des, int & wid);
-int mathed_char_width(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c);
-int mathed_char_ascent(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c);
-int mathed_char_descent(MathTextCodes type, MathMetricsInfo const & size,
-       unsigned char c);
-
-void mathed_draw_deco(Painter & pain, int x, int y, int w, int h,
-       string const & name);
-
-void mathed_string_dim(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s, int & asc, int & des, int & wid);
-int mathed_string_height(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s, int & asc, int & des);
-
-int mathed_string_width(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s);
-int mathed_string_ascent(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s);
-int mathed_string_descent(MathTextCodes type, MathMetricsInfo const & size,
-       string const & s);
-
-void drawStr(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
-       int x, int y, string const & s);
-void drawChar(Painter & pain, MathTextCodes type, MathMetricsInfo const & siz,
-       int x, int y, char c);
-
-void math_font_max_dim(MathTextCodes code, MathMetricsInfo const & siz,
-       int & asc, int & desc);
-
-bool math_font_available(MathTextCodes code);
-
-// decrease math size for super- and subscripts
-void smallerStyleScript(MathMetricsInfo &);
-
-// decrease math size for fractions
-void smallerStyleFrac(MathMetricsInfo & st);
-
-char const * math_font_name(MathTextCodes type);
-
-
-#endif
index 42da38dd0da0ef22b05fbd901e6ae2a9e8a8cf2a..5e848f119da5849eae6d7ac7789c49ca536737ec 100644 (file)
@@ -7,7 +7,7 @@
 #include "xarray.h"
 #include "math_inset.h"
 #include "math_scriptinset.h"
-#include "support.h"
+#include "math_support.h"
 #include "math_defs.h"
 #include "Painter.h"
 #include "debug.h"