3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Alejandro Aguilar Sierra
9 * Full author contact details are available in file CREDITS
14 #include "ControlMath.h"
16 #include "support/lstrings.h"
17 #include "support/filetools.h"
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",
29 int const nr_function_names = sizeof(function_names) / sizeof(char const *) - 1;
31 char const * latex_dots[] = {
32 "ldots", "cdots", "vdots", "ddots", ""
35 int const nr_latex_dots = sizeof(latex_dots) / sizeof(char const *) - 1;
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",
46 int const nr_latex_deco = sizeof(latex_deco) / sizeof(char const *) - 1;
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", "",
59 int const nr_latex_arrow = sizeof(latex_arrow) / sizeof(char const *);
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", ""
72 int const nr_latex_bop = sizeof(latex_bop) / sizeof(char const *);
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", ""
86 int const nr_latex_brel = sizeof(latex_brel) / sizeof(char const *);
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", ""
97 int const nr_latex_greek = sizeof(latex_greek) / sizeof(char const *);
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", "_",
108 "mathbb N", "mathbb Z", "mathbb Q",
109 "mathbb R", "mathbb C", "mathbb H",
110 "mathcal F", "mathcal L",
111 "mathcal H", "mathcal O", ""
114 int const nr_latex_misc = sizeof(latex_misc) / sizeof(char const *);
116 char const * latex_varsz[] = {
117 "sum", "int", "oint",
118 "prod", "coprod", "bigsqcup",
119 "bigotimes", "bigodot", "bigoplus",
120 "bigcap", "bigcup", "biguplus",
121 "bigvee", "bigwedge", ""
124 int const nr_latex_varsz = sizeof(latex_varsz) / sizeof(char const *);
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", ""
140 int const nr_latex_ams_misc = sizeof(latex_ams_misc) / sizeof(char const *);
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", ""
158 int const nr_latex_ams_arrows = sizeof(latex_ams_arrows) / sizeof(char const *);
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", ""
174 int const nr_latex_ams_rel = sizeof(latex_ams_rel) / sizeof(char const *);
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",
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","", "", ""
189 int const nr_latex_ams_nrel = sizeof(latex_ams_nrel) / sizeof(char const *);
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", ""
203 int const nr_latex_ams_ops = sizeof(latex_ams_ops) / sizeof(char const *);
206 string const find_xpm(string const & name)
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";
252 lyxerr[Debug::GUI] << "Looking for math XPM called \""
253 << xpm_name << "\"" << std::endl;
255 return LibFileSearch("images/math/", xpm_name, "xpm");