]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlMath.C
Some more mangling
[lyx.git] / src / frontends / controllers / ControlMath.C
1 /**
2  * \file ControlMath.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Alejandro Aguilar Sierra
7  * \author John Levon
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 #include <config.h>
13
14 #include "ControlMath.h"
15
16 #include "support/lstrings.h"
17 #include "support/filetools.h"
18 #include "debug.h" 
19
20 char const * function_names[] = {
21         "arccos", "arcsin", "arctan", "arg", "bmod",
22         "cos", "cosh", "cot", "coth", "csc", "deg",
23         "det", "dim", "exp", "gcd", "hom", "inf", "ker",
24         "lg", "lim", "liminf", "limsup", "ln", "log",
25         "max", "min", "sec", "sin", "sinh", "sup",
26         "tan", "tanh", ""
27 };
28
29 int const nr_function_names = sizeof(function_names) / sizeof(char const *) - 1;
30
31 char const * latex_dots[] = {
32         "ldots", "cdots", "vdots", "ddots", ""
33 };
34
35 int const nr_latex_dots = sizeof(latex_dots) / sizeof(char const *) - 1;
36
37 char const * latex_deco[] = {
38         "widehat", "widetilde", "overbrace", "overleftarrow", "overrightarrow",
39         "overline", "underbrace", "underline", "underleftarrow", "underrightarrow",
40         "underleftrightarrow", "overleftrightarrow",
41         "hat", "acute", "bar", "dot",
42         "check", "grave", "vec", "ddot",
43         "breve", "tilde", ""
44 };
45
46 int const nr_latex_deco = sizeof(latex_deco) / sizeof(char const *) - 1;
47
48 char const * latex_arrow[] = {
49         "downarrow", "leftarrow", "Downarrow", "Leftarrow",
50         "hookleftarrow", "rightarrow", "uparrow", "Rightarrow", "Uparrow",
51         "hookrightarrow", "updownarrow", "Leftrightarrow", "leftharpoonup",
52         "rightharpoonup", "rightleftharpoons", "leftrightarrow", "Updownarrow",
53         "leftharpoondown", "rightharpoondown", "mapsto",
54         "Longleftarrow", "Longrightarrow", "Longleftrightarrow",
55         "longleftrightarrow", "longleftarrow", "longrightarrow", "longmapsto",
56         "nwarrow", "nearrow", "swarrow", "searrow",  "",
57 };
58
59 int const nr_latex_arrow = sizeof(latex_arrow) / sizeof(char const *);
60
61 char const * latex_bop[] = {
62         "pm", "cap", "diamond", "oplus",
63         "mp", "cup", "bigtriangleup", "ominus",
64         "times", "uplus", "bigtriangledown", "otimes",
65         "div", "sqcap", "triangleright", "oslash",
66         "cdot", "sqcup", "triangleleft", "odot",
67         "star", "vee", "amalg", "bigcirc",
68         "setminus", "wedge", "dagger", "circ",
69         "bullet", "wr", "ddagger", ""
70 };
71
72 int const nr_latex_bop = sizeof(latex_bop) / sizeof(char const *);
73
74 char const * latex_brel[] = {
75         "leq", "geq", "equiv", "models",
76         "prec", "succ", "sim", "perp",
77         "preceq", "succeq", "simeq", "mid",
78         "ll", "gg", "asymp", "parallel",
79         "subset", "supset", "approx", "smile",
80         "subseteq", "supseteq", "cong", "frown",
81         "sqsubseteq", "sqsupseteq", "doteq", "neq",
82         "in", "ni", "propto", "notin",
83         "vdash", "dashv", "bowtie", ""
84 };
85
86 int const nr_latex_brel = sizeof(latex_brel) / sizeof(char const *);
87
88 char const * latex_greek[] = {
89         "Gamma", "Delta", "Theta", "Lambda", "Xi", "Pi",
90         "Sigma", "Upsilon", "Phi", "Psi", "Omega",
91         "alpha", "beta", "gamma", "delta", "epsilon", "varepsilon", "zeta",
92         "eta", "theta", "vartheta", "iota", "kappa", "lambda", "mu",
93         "nu", "xi", "pi", "varpi", "rho", "sigma", "varsigma",
94         "tau", "upsilon", "phi", "varphi", "chi", "psi", "omega", ""
95 };
96
97 int const nr_latex_greek = sizeof(latex_greek) / sizeof(char const *);
98
99 char const * latex_misc[] = {
100         "nabla", "partial", "infty", "prime", "ell",
101         "emptyset", "exists", "forall", "imath",  "jmath",
102         "Re", "Im", "aleph", "wp", "hbar",
103         "angle", "top", "bot", "Vert", "neg",
104         "flat", "natural", "sharp", "surd", "triangle",
105         "diamondsuit", "heartsuit", "clubsuit", "spadesuit",
106         "textrm Å", "textrm Ø", "mathcircumflex", "_",
107         "mathrm T",
108         "mathbb N", "mathbb Z", "mathbb Q",
109         "mathbb R", "mathbb C", "mathbb H",
110         "mathcal F", "mathcal L",
111         "mathcal H", "mathcal O", ""
112 };
113
114 int const nr_latex_misc = sizeof(latex_misc) / sizeof(char const *);
115
116 char const * latex_varsz[] = {
117         "sum", "int", "oint",
118         "prod", "coprod", "bigsqcup",
119         "bigotimes", "bigodot", "bigoplus",
120         "bigcap", "bigcup", "biguplus",
121         "bigvee", "bigwedge", ""
122 };
123
124 int const nr_latex_varsz = sizeof(latex_varsz) / sizeof(char const *);
125
126 char const * latex_ams_misc[] = {
127         "digamma", "varkappa", "beth", "daleth", "gimel",
128         "ulcorner", "urcorner", "llcorner", "lrcorner",
129         "hbar", "hslash", "vartriangle",
130         "triangledown", "square", "lozenge",
131         "circledS", "angle", "measuredangle",
132         "nexists", "mho", "Finv",
133         "Game", "Bbbk", "backprime",
134         "varnothing", "blacktriangle", "blacktriangledown",
135         "blacksquare", "blacklozenge", "bigstar",
136         "sphericalangle", "complement", "eth",
137         "diagup", "diagdown", ""
138 };
139
140 int const nr_latex_ams_misc = sizeof(latex_ams_misc) / sizeof(char const *);
141
142 char const * latex_ams_arrows[] = {
143         "dashrightarrow", "dashleftarrow", "leftleftarrows",
144         "leftrightarrows", "Lleftarrow", "twoheadleftarrow",
145         "leftarrowtail", "looparrowleft", "leftrightharpoons",
146         "curvearrowleft", "circlearrowleft", "Lsh",
147         "upuparrows", "upharpoonleft", "downharpoonleft",
148         "multimap", "leftrightsquigarrow", "rightrightarrows",
149         "rightleftarrows", "rightrightarrows", "rightleftarrows",
150         "twoheadrightarrow", "rightarrowtail", "looparrowright",
151         "rightleftharpoons", "curvearrowright", "circlearrowright",
152         "Rsh", "downdownarrows", "upharpoonright",
153         "downharpoonright", "rightsquigarrow",
154         "nleftarrow", "nrightarrow", "nLeftarrow",
155         "nRightarrow", "nleftrightarrow", "nLeftrightarrow", ""
156 };
157
158 int const nr_latex_ams_arrows = sizeof(latex_ams_arrows) / sizeof(char const *);
159
160 char const * latex_ams_rel[] = {
161         "leqq", "leqslant", "eqslantless", "eqslantgtr", "gtrsim", "gtrapprox",
162         "lesssim", "lessapprox", "approxeq", "gtrdot", "ggg", "gtrless",
163         "lessdot", "lll", "lessgtr", "gtreqless", "gtreqqless", "eqcirc",
164         "lesseqgtr", "lesseqqgtr", "doteqdot", "circeq", "triangleq", "thicksim",
165         "risingdotseq", "fallingdotseq", "backsim", "thickapprox", "supseteqq", "Supset",
166         "backsimeq", "subseteqq", "Subset","sqsupset", "succcurlyeq", "curlyeqsucc",
167         "sqsubset", "preccurlyeq", "curlyeqprec", "succsim", "succapprox", "vartriangleright",
168         "precsim", "precapprox", "vartriangleleft", "trianglerighteq", "Vdash", "shortmid",
169         "trianglelefteq", "vDash", "Vvdash", "shortparallel", "between", "pitchfork",
170         "smallsmile", "smallfrown", "bumpeq", "varpropto", "blacktriangleleft", "therefore",
171         "Bumpeq", "geqq", "geqslant", "backepsilon", "blacktriangleright", "because", ""
172 };
173
174 int const nr_latex_ams_rel = sizeof(latex_ams_rel) / sizeof(char const *);
175
176 char const * latex_ams_nrel[] = {
177         "nless", "nleq", "nleqslant", "ngeqslant", "ngeqq", "gneq",
178         "nleqq", "lneq", "lneqq","gneqq", "gvertneqq", "gnsim",
179         "lvertneqq", "lnsim", "lnapprox", "gnapprox", "nsucc", "nsucceq",
180         "nprec", "npreceq", "precnsim","succnsim", "succnapprox", "ncong",
181         "precnapprox", "nsim", "nshortmid", "nshortparallel", "nparallel", "nvDash",
182
183         "nmid", "nvdash", "nvDash","nVDash", "ntriangleright", "ntrianglerighteq",
184         "ntriangleleft", "ntrianglelefteq", "nsubseteq", "nsupseteq", "nsupseteqq", "supsetneq",
185         "subsetneq", "varsubsetneq", "subsetneqq", "varsupsetneq", "supsetneqq", "varsupsetneqq",
186         "varsubsetneqq", "ngtr", "ngeq","", "", ""
187 };
188
189 int const nr_latex_ams_nrel = sizeof(latex_ams_nrel) / sizeof(char const *);
190
191
192 char const * latex_ams_ops[] = {
193         "dotplus", "smallsetminus", "Cap",
194         "Cup", "barwedge", "veebar",
195         "doublebarwedge", "boxminus", "boxtimes",
196         "boxdot", "boxplus", "divideontimes",
197         "ltimes", "rtimes", "leftthreetimes",
198         "rightthreetimes", "curlywedge", "curlyvee",
199         "circleddash", "circledast", "circledcirc",
200         "centerdot", "intercal", ""
201 };
202
203 int const nr_latex_ams_ops = sizeof(latex_ams_ops) / sizeof(char const *);
204
205  
206 string const find_xpm(string const & name)
207 {
208         string xpm_name = subst(name, ' ', '_');
209         if (xpm_name == "(") xpm_name = "lparen";
210         else if (xpm_name == ")") xpm_name = "rparen";
211         else if (xpm_name == "[") xpm_name = "lbracket";
212         else if (xpm_name == "]") xpm_name = "rbracket";
213         else if (xpm_name == "{") xpm_name = "lbrace";
214         else if (xpm_name == "}") xpm_name = "rbrace";
215         else if (xpm_name == "|") xpm_name = "bars";
216         else if (xpm_name == "_") xpm_name = "underscore";
217         else if (xpm_name == "textrm_Å") xpm_name = "textrm_A";
218         else if (xpm_name == "textrm_Ø") xpm_name = "textrm_0";
219         else if (xpm_name == "Bumpeq") xpm_name = "bumpeq2";
220         else if (xpm_name == "Cap") xpm_name = "cap2";
221         else if (xpm_name == "Cup") xpm_name = "cup2";
222         else if (xpm_name == "Delta") xpm_name = "delta2";
223         else if (xpm_name == "Downarrow") xpm_name = "downarrow2";
224         else if (xpm_name == "Gamma") xpm_name = "gamma2";
225         else if (xpm_name == "Lambda") xpm_name = "lambda2";
226         else if (xpm_name == "Leftarrow") xpm_name = "leftarrow2";
227         else if (xpm_name == "Leftrightarrow") xpm_name = "leftrightarrow2";
228         else if (xpm_name == "Longleftarrow") xpm_name = "longleftarrow2";
229         else if (xpm_name == "Longleftrightarrow") xpm_name = "longleftrightarrow2";
230         else if (xpm_name == "Longrightarrow") xpm_name = "longrightarrow2";
231         else if (xpm_name == "nLeftarrow") xpm_name = "nleftarrow2";
232         else if (xpm_name == "nLeftrightarrow") xpm_name = "nleftrightarrow2";
233         else if (xpm_name == "nRightarrow") xpm_name = "nrightarrow2";
234         else if (xpm_name == "nvDash") xpm_name = "nvdash2";
235         else if (xpm_name == "nVDash") xpm_name = "nvdash3";
236         else if (xpm_name == "Omega") xpm_name = "omega2";
237         else if (xpm_name == "Phi") xpm_name = "phi2";
238         else if (xpm_name == "Pi") xpm_name = "pi2";
239         else if (xpm_name == "Psi") xpm_name = "psi2";
240         else if (xpm_name == "Rightarrow") xpm_name = "rightarrow2";
241         else if (xpm_name == "Sigma") xpm_name = "sigma2";
242         else if (xpm_name == "Subset") xpm_name = "subset2";
243         else if (xpm_name == "Supset") xpm_name = "supset2";
244         else if (xpm_name == "Theta") xpm_name = "theta2";
245         else if (xpm_name == "Uparrow") xpm_name = "uparrow2";
246         else if (xpm_name == "Updownarrow") xpm_name = "updownarrow2";
247         else if (xpm_name == "Upsilon") xpm_name = "upsilon2";
248         else if (xpm_name == "vDash") xpm_name = "vdash2";
249         else if (xpm_name == "Vdash") xpm_name = "vdash3";
250         else if (xpm_name == "Xi") xpm_name = "xi2";
251
252         lyxerr[Debug::GUI] << "Looking for math XPM called \""
253                 << xpm_name << "\"" << std::endl; 
254  
255         return LibFileSearch("images/math/", xpm_name, "xpm");
256 }