]> git.lyx.org Git - lyx.git/blob - src/mathed/math_macrotable.C
167b8fb809ee1da82c097c83c762d40e5cc04f07
[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         //amsfonts.sty
104
105         createTemplate("dasharrow",    0, "\\dashrightarrow");
106         createTemplate("Box",          0, "\\square");
107         createTemplate("Diamond",      0, "\\lozenge");
108         createTemplate("leadsto",      0, "\\rightsquigarrow");
109
110         // amssymb.sty
111
112         createTemplate("restriction",  0, "\\upharpoonright");
113         createTemplate("Doteq",        0, "\\doteqdot");
114         createTemplate("doublecup",    0, "\\Cup");
115         createTemplate("doublecap",    0, "\\Cap");
116         createTemplate("llless",       0, "\\lll");
117         createTemplate("gggtr",        0, "\\ggg");
118
119 // #ifdef WITH_WARNINGS
120 // #warning 9em looks like too much but it is somehow working on screen..
121 // #endif WITH_WARNINGS
122 //      createTemplate("ll",           0, "<\\kern-9em<");
123 //      createTemplate("gg",           0, ">\\kern-9em>");
124
125         //createTemplate("lint",       4, "\\int_#1^#2#3 d#4");
126         //createTemplate("silentmult", 0, "\\cdot");
127         //createTemplate("binom",        2, "\\left(\\frac#1#2\\right)");
128 }