]> git.lyx.org Git - lyx.git/blob - src/mathed/math_macrotable.C
Few math fonts improvements (use cmr for uppercase greek, support for
[lyx.git] / src / mathed / math_macrotable.C
1 #include <config.h>
2
3 #include <iostream>
4
5 #ifdef __GNUG__
6 #pragma implementation
7 #endif
8
9 #include "math_macrotable.h"
10 #include "math_macro.h"
11 #include "math_macrotemplate.h"
12 #include "math_parser.h"
13 #include "debug.h"
14
15
16 MathArray mathed_parse_cell(string const &);
17
18
19 MathMacroTable::table_type MathMacroTable::macro_table;
20
21
22 void MathMacroTable::dump()
23 {
24         lyxerr << "\n------------------------------------------\n";
25         table_type::const_iterator it;
26         for (it = macro_table.begin(); it != macro_table.end(); ++it)
27                 lyxerr << it->first << " [" << it->second.nargs() << "] : "
28                         << it->second << "\n";
29         lyxerr << "------------------------------------------\n";
30 }
31
32
33 void MathMacroTable::insertTemplate(MathMacroTemplate const & p)
34 {
35         if (macro_table.find(p.name()) != macro_table.end()) 
36                 lyxerr << "macro '" << p.name() << "' not new\n";
37         macro_table[p.name()] = p;
38 }
39
40
41 MathMacroTemplate & MathMacroTable::provideTemplate(string const & name)
42 {
43         builtinMacros();
44         
45         table_type::iterator pos = macro_table.find(name);
46
47         if (pos == macro_table.end()) {
48                 lyxerr << "MathMacroTable::provideTemplate: no template with name '"
49                        << name << "' available.\n";
50         }
51                 
52         return pos->second;
53 }
54
55
56 void MathMacroTable::createTemplate
57         (string const & name, int na, string const & text)
58 {
59         MathMacroTemplate t(name, na);
60         t.cell(0) = mathed_parse_cell(text);
61         insertTemplate(t);
62 }
63
64
65 bool MathMacroTable::hasTemplate(string const & name)
66 {
67         builtinMacros();
68         return macro_table.find(name) != macro_table.end();
69 }
70
71
72 MathMacro * MathMacroTable::cloneTemplate(string const & name)
73 {
74         return new MathMacro(provideTemplate(name));
75 }
76
77
78 void MathMacroTable::builtinMacros()
79 {
80         static bool built = false;
81         
82         if (built)
83                 return; 
84
85         built = true;
86         //lyxerr[Debug::MATHED] << "Building macros\n";
87    
88         //createTemplate("emptyset",     0, "\\not0");
89         createTemplate("notin",        0, "\\not\\in");
90
91         // fontmath.ltx
92
93         createTemplate("lnot",         0, "\\neg");
94         createTemplate("land",         0, "\\wedge");
95         createTemplate("lor",          0, "\\vee");
96         createTemplate("ne",           0, "\\neq");
97         createTemplate("le",           0, "\\leq");
98         createTemplate("ge",           0, "\\geq");
99         createTemplate("owns",         0, "\\ni");
100         createTemplate("gets",         0, "\\leftarrow");
101         createTemplate("to",           0, "\\rightarrow");
102
103         createTemplate("longleftrightarrow", 0, "\\leftarrow\\kern-6mu\\rightarrow");
104         createTemplate("Longleftrightarrow", 0, "\\Leftarrow\\kern-6mu\\Rightarrow");
105         createTemplate("doteq", 0, "\\stackrel{\\cdot}{=}");
106
107 #if 0
108         // The following either require using the latex fonts,
109         // or don't look good, so they are disabled
110
111         createTemplate("hookrightarrow", 0, "\\lhook\\kern-3mu\\rightarrow");
112         createTemplate("hookleftarrow",  0, "\\leftarrow\\kern-3mu\\rhook");
113         createTemplate("bowtie",         0, "\\triangleright\\kern-3mu\\triangleleft");
114
115         createTemplate("models",         0, "|\\kern-9mu=");
116         createTemplate("longrightarrow", 0, "-\\kern-9mu\\rightarrow");
117         createTemplate("longleftarrow",  0, "\\leftarrow\\kern-9mu-");
118         createTemplate("Longrightarrow", 0, "=\\kern-9mu\\Rightarrow");
119         createTemplate("Longleftarrow",  0, "\\Leftarrow\\kern-9mu=");
120
121         //amsfonts.sty
122
123         createTemplate("dasharrow",    0, "\\dashrightarrow");
124         createTemplate("Box",          0, "\\square");
125         createTemplate("Diamond",      0, "\\lozenge");
126         createTemplate("leadsto",      0, "\\rightsquigarrow");
127
128         // amssymb.sty
129
130         createTemplate("restriction",  0, "\\upharpoonright");
131         createTemplate("Doteq",        0, "\\doteqdot");
132         createTemplate("doublecup",    0, "\\Cup");
133         createTemplate("doublecap",    0, "\\Cap");
134         createTemplate("llless",       0, "\\lll");
135         createTemplate("gggtr",        0, "\\ggg");
136 #endif
137
138         //createTemplate("lint",       4, "\\int_#1^#2#3 d#4");
139         //createTemplate("silentmult", 0, "\\cdot");
140         //createTemplate("binom",        2, "\\left(\\frac#1#2\\right)");
141 }