lib/termtex/src/symbol.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2
3 pub fn command(name: []const u8) ?[]const u8 {
4 inline for (entries) |entry| {
5 if (std.mem.eql(u8, name, entry.name)) return entry.value;
6 }
7 return null;
8 }
9
10 pub fn function(name: []const u8) ?[]const u8 {
11 inline for (functions) |entry| {
12 if (std.mem.eql(u8, name, entry)) return entry;
13 }
14 return null;
15 }
16
17 pub fn negated(value: []const u8) ?[]const u8 {
18 inline for (negations) |entry| {
19 if (std.mem.eql(u8, value, entry.name)) return entry.value;
20 }
21 return null;
22 }
23
24 const Entry = struct {
25 name: []const u8,
26 value: []const u8,
27 };
28
29 const functions = [_][]const u8{
30 "arccos",
31 "arcsin",
32 "arctan",
33 "arg",
34 "argmax",
35 "argmin",
36 "cos",
37 "cosh",
38 "cod",
39 "cot",
40 "coth",
41 "csc",
42 "deg",
43 "det",
44 "diag",
45 "dim",
46 "dom",
47 "exp",
48 "gcd",
49 "hom",
50 "inf",
51 "ker",
52 "lg",
53 "lim",
54 "liminf",
55 "limsup",
56 "ln",
57 "log",
58 "max",
59 "min",
60 "Pr",
61 "rank",
62 "sec",
63 "sin",
64 "sinh",
65 "span",
66 "sup",
67 "tan",
68 "tanh",
69 "tr",
70 };
71
72 const entries = [_]Entry{
73 .{ .name = "Alpha", .value = "Α" },
74 .{ .name = "Beta", .value = "Β" },
75 .{ .name = "Gamma", .value = "Γ" },
76 .{ .name = "Delta", .value = "Δ" },
77 .{ .name = "Epsilon", .value = "Ε" },
78 .{ .name = "Zeta", .value = "Ζ" },
79 .{ .name = "Eta", .value = "Η" },
80 .{ .name = "Theta", .value = "Θ" },
81 .{ .name = "Iota", .value = "Ι" },
82 .{ .name = "Kappa", .value = "Κ" },
83 .{ .name = "Lambda", .value = "Λ" },
84 .{ .name = "Mu", .value = "Μ" },
85 .{ .name = "Nu", .value = "Ν" },
86 .{ .name = "Xi", .value = "Ξ" },
87 .{ .name = "Omicron", .value = "Ο" },
88 .{ .name = "Pi", .value = "Π" },
89 .{ .name = "Rho", .value = "Ρ" },
90 .{ .name = "Sigma", .value = "Σ" },
91 .{ .name = "Tau", .value = "Τ" },
92 .{ .name = "Upsilon", .value = "Υ" },
93 .{ .name = "Phi", .value = "Φ" },
94 .{ .name = "Chi", .value = "Χ" },
95 .{ .name = "Psi", .value = "Ψ" },
96 .{ .name = "Omega", .value = "Ω" },
97 .{ .name = "alpha", .value = "α" },
98 .{ .name = "beta", .value = "β" },
99 .{ .name = "gamma", .value = "γ" },
100 .{ .name = "delta", .value = "δ" },
101 .{ .name = "epsilon", .value = "ε" },
102 .{ .name = "varepsilon", .value = "ϵ" },
103 .{ .name = "zeta", .value = "ζ" },
104 .{ .name = "eta", .value = "η" },
105 .{ .name = "theta", .value = "θ" },
106 .{ .name = "vartheta", .value = "ϑ" },
107 .{ .name = "iota", .value = "ι" },
108 .{ .name = "kappa", .value = "κ" },
109 .{ .name = "lambda", .value = "λ" },
110 .{ .name = "mu", .value = "μ" },
111 .{ .name = "nu", .value = "ν" },
112 .{ .name = "xi", .value = "ξ" },
113 .{ .name = "pi", .value = "π" },
114 .{ .name = "varpi", .value = "ϖ" },
115 .{ .name = "rho", .value = "ρ" },
116 .{ .name = "varrho", .value = "ϱ" },
117 .{ .name = "sigma", .value = "σ" },
118 .{ .name = "varsigma", .value = "ς" },
119 .{ .name = "tau", .value = "τ" },
120 .{ .name = "upsilon", .value = "υ" },
121 .{ .name = "phi", .value = "φ" },
122 .{ .name = "varphi", .value = "ϕ" },
123 .{ .name = "chi", .value = "χ" },
124 .{ .name = "psi", .value = "ψ" },
125 .{ .name = "omega", .value = "ω" },
126 .{ .name = "pm", .value = "±" },
127 .{ .name = "mp", .value = "∓" },
128 .{ .name = "times", .value = "×" },
129 .{ .name = "div", .value = "÷" },
130 .{ .name = "cdot", .value = "·" },
131 .{ .name = "cdots", .value = "⋯" },
132 .{ .name = "ldots", .value = "…" },
133 .{ .name = "dots", .value = "…" },
134 .{ .name = "vdots", .value = "⋮" },
135 .{ .name = "ddots", .value = "⋱" },
136 .{ .name = "colon", .value = ":" },
137 .{ .name = "ldotp", .value = "." },
138 .{ .name = "cdotp", .value = "·" },
139 .{ .name = "backslash", .value = "∖" },
140 .{ .name = "ast", .value = "∗" },
141 .{ .name = "star", .value = "⋆" },
142 .{ .name = "diamond", .value = "⋄" },
143 .{ .name = "bigstar", .value = "★" },
144 .{ .name = "dagger", .value = "†" },
145 .{ .name = "ddagger", .value = "‡" },
146 .{ .name = "circ", .value = "∘" },
147 .{ .name = "bigcirc", .value = "○" },
148 .{ .name = "bullet", .value = "•" },
149 .{ .name = "amalg", .value = "⨿" },
150 .{ .name = "oplus", .value = "⊕" },
151 .{ .name = "ominus", .value = "⊖" },
152 .{ .name = "otimes", .value = "⊗" },
153 .{ .name = "oslash", .value = "⊘" },
154 .{ .name = "odot", .value = "⊙" },
155 .{ .name = "circledast", .value = "⊛" },
156 .{ .name = "circledcirc", .value = "⊚" },
157 .{ .name = "circleddash", .value = "⊝" },
158 .{ .name = "boxplus", .value = "⊞" },
159 .{ .name = "boxminus", .value = "⊟" },
160 .{ .name = "boxtimes", .value = "⊠" },
161 .{ .name = "sqcup", .value = "⊔" },
162 .{ .name = "sqcap", .value = "⊓" },
163 .{ .name = "wr", .value = "≀" },
164 .{ .name = "uplus", .value = "⊎" },
165 .{ .name = "le", .value = "≤" },
166 .{ .name = "leq", .value = "≤" },
167 .{ .name = "leqslant", .value = "≤" },
168 .{ .name = "nleq", .value = "≰" },
169 .{ .name = "nle", .value = "≰" },
170 .{ .name = "lesssim", .value = "≲" },
171 .{ .name = "lessapprox", .value = "⪅" },
172 .{ .name = "ll", .value = "≪" },
173 .{ .name = "lll", .value = "⋘" },
174 .{ .name = "llless", .value = "⋘" },
175 .{ .name = "ge", .value = "≥" },
176 .{ .name = "geq", .value = "≥" },
177 .{ .name = "geqslant", .value = "≥" },
178 .{ .name = "ngeq", .value = "≱" },
179 .{ .name = "nge", .value = "≱" },
180 .{ .name = "gtrsim", .value = "≳" },
181 .{ .name = "gtrapprox", .value = "⪆" },
182 .{ .name = "gg", .value = "≫" },
183 .{ .name = "ggg", .value = "⋙" },
184 .{ .name = "gggtr", .value = "⋙" },
185 .{ .name = "lt", .value = "<" },
186 .{ .name = "gt", .value = ">" },
187 .{ .name = "neq", .value = "≠" },
188 .{ .name = "ne", .value = "≠" },
189 .{ .name = "doteq", .value = "≐" },
190 .{ .name = "triangleq", .value = "≜" },
191 .{ .name = "coloneqq", .value = "≔" },
192 .{ .name = "eqqcolon", .value = "≕" },
193 .{ .name = "equiv", .value = "≡" },
194 .{ .name = "nequiv", .value = "≢" },
195 .{ .name = "approx", .value = "≈" },
196 .{ .name = "asymp", .value = "≍" },
197 .{ .name = "sim", .value = "∼" },
198 .{ .name = "nsim", .value = "≁" },
199 .{ .name = "simeq", .value = "≃" },
200 .{ .name = "precsim", .value = "≾" },
201 .{ .name = "succsim", .value = "≿" },
202 .{ .name = "cong", .value = "≅" },
203 .{ .name = "ncong", .value = "≇" },
204 .{ .name = "propto", .value = "∝" },
205 .{ .name = "prec", .value = "≺" },
206 .{ .name = "succ", .value = "≻" },
207 .{ .name = "preceq", .value = "≼" },
208 .{ .name = "succeq", .value = "≽" },
209 .{ .name = "preccurlyeq", .value = "≼" },
210 .{ .name = "succcurlyeq", .value = "≽" },
211 .{ .name = "perp", .value = "⊥" },
212 .{ .name = "bowtie", .value = "⋈" },
213 .{ .name = "in", .value = "∈" },
214 .{ .name = "notin", .value = "∉" },
215 .{ .name = "ni", .value = "∋" },
216 .{ .name = "owns", .value = "∋" },
217 .{ .name = "subset", .value = "⊂" },
218 .{ .name = "supset", .value = "⊃" },
219 .{ .name = "subseteq", .value = "⊆" },
220 .{ .name = "supseteq", .value = "⊇" },
221 .{ .name = "nsubseteq", .value = "⊈" },
222 .{ .name = "nsupseteq", .value = "⊉" },
223 .{ .name = "subsetneq", .value = "⊊" },
224 .{ .name = "supsetneq", .value = "⊋" },
225 .{ .name = "sqsubset", .value = "⊏" },
226 .{ .name = "sqsupset", .value = "⊐" },
227 .{ .name = "sqsubseteq", .value = "⊑" },
228 .{ .name = "sqsupseteq", .value = "⊒" },
229 .{ .name = "cup", .value = "∪" },
230 .{ .name = "cap", .value = "∩" },
231 .{ .name = "bigcup", .value = "⋃" },
232 .{ .name = "bigcap", .value = "⋂" },
233 .{ .name = "setminus", .value = "∖" },
234 .{ .name = "smallsetminus", .value = "∖" },
235 .{ .name = "emptyset", .value = "∅" },
236 .{ .name = "varnothing", .value = "∅" },
237 .{ .name = "forall", .value = "∀" },
238 .{ .name = "exists", .value = "∃" },
239 .{ .name = "nexists", .value = "∄" },
240 .{ .name = "nabla", .value = "∇" },
241 .{ .name = "partial", .value = "∂" },
242 .{ .name = "infty", .value = "∞" },
243 .{ .name = "ell", .value = "ℓ" },
244 .{ .name = "wp", .value = "℘" },
245 .{ .name = "Re", .value = "ℜ" },
246 .{ .name = "Im", .value = "ℑ" },
247 .{ .name = "aleph", .value = "ℵ" },
248 .{ .name = "beth", .value = "ℶ" },
249 .{ .name = "gimel", .value = "ℷ" },
250 .{ .name = "daleth", .value = "ℸ" },
251 .{ .name = "hbar", .value = "ℏ" },
252 .{ .name = "hslash", .value = "ℏ" },
253 .{ .name = "imath", .value = "ı" },
254 .{ .name = "jmath", .value = "ȷ" },
255 .{ .name = "prime", .value = "′" },
256 .{ .name = "dprime", .value = "″" },
257 .{ .name = "therefore", .value = "∴" },
258 .{ .name = "because", .value = "∵" },
259 .{ .name = "angle", .value = "∠" },
260 .{ .name = "degree", .value = "°" },
261 .{ .name = "to", .value = "→" },
262 .{ .name = "rightarrow", .value = "→" },
263 .{ .name = "longrightarrow", .value = "⟶" },
264 .{ .name = "gets", .value = "←" },
265 .{ .name = "leftarrow", .value = "←" },
266 .{ .name = "longleftarrow", .value = "⟵" },
267 .{ .name = "leftrightarrow", .value = "↔" },
268 .{ .name = "longleftrightarrow", .value = "⟷" },
269 .{ .name = "Rightarrow", .value = "⇒" },
270 .{ .name = "Longrightarrow", .value = "⟹" },
271 .{ .name = "Leftarrow", .value = "⇐" },
272 .{ .name = "Longleftarrow", .value = "⟸" },
273 .{ .name = "Leftrightarrow", .value = "⇔" },
274 .{ .name = "Longleftrightarrow", .value = "⟺" },
275 .{ .name = "iff", .value = "⇔" },
276 .{ .name = "implies", .value = "⇒" },
277 .{ .name = "impliedby", .value = "⇐" },
278 .{ .name = "mapsto", .value = "↦" },
279 .{ .name = "longmapsto", .value = "⟼" },
280 .{ .name = "multimap", .value = "⊸" },
281 .{ .name = "hookrightarrow", .value = "↪" },
282 .{ .name = "hookleftarrow", .value = "↩" },
283 .{ .name = "twoheadrightarrow", .value = "↠" },
284 .{ .name = "twoheadleftarrow", .value = "↞" },
285 .{ .name = "rightarrowtail", .value = "↣" },
286 .{ .name = "leftarrowtail", .value = "↢" },
287 .{ .name = "leadsto", .value = "↝" },
288 .{ .name = "rightsquigarrow", .value = "⇝" },
289 .{ .name = "rightharpoonup", .value = "⇀" },
290 .{ .name = "rightharpoondown", .value = "⇁" },
291 .{ .name = "leftharpoonup", .value = "↼" },
292 .{ .name = "leftharpoondown", .value = "↽" },
293 .{ .name = "rightleftharpoons", .value = "⇌" },
294 .{ .name = "uparrow", .value = "↑" },
295 .{ .name = "downarrow", .value = "↓" },
296 .{ .name = "updownarrow", .value = "↕" },
297 .{ .name = "Uparrow", .value = "⇑" },
298 .{ .name = "Downarrow", .value = "⇓" },
299 .{ .name = "Updownarrow", .value = "⇕" },
300 .{ .name = "nRightarrow", .value = "⇏" },
301 .{ .name = "nLeftarrow", .value = "⇍" },
302 .{ .name = "nLeftrightarrow", .value = "⇎" },
303 .{ .name = "nearrow", .value = "↗" },
304 .{ .name = "searrow", .value = "↘" },
305 .{ .name = "swarrow", .value = "↙" },
306 .{ .name = "nwarrow", .value = "↖" },
307 .{ .name = "sum", .value = "∑" },
308 .{ .name = "bigoplus", .value = "⨁" },
309 .{ .name = "bigotimes", .value = "⨂" },
310 .{ .name = "bigodot", .value = "⨀" },
311 .{ .name = "prod", .value = "∏" },
312 .{ .name = "coprod", .value = "∐" },
313 .{ .name = "int", .value = "∫" },
314 .{ .name = "iint", .value = "∬" },
315 .{ .name = "iiint", .value = "∭" },
316 .{ .name = "oint", .value = "∮" },
317 .{ .name = "land", .value = "∧" },
318 .{ .name = "lor", .value = "∨" },
319 .{ .name = "neg", .value = "¬" },
320 .{ .name = "lnot", .value = "¬" },
321 .{ .name = "wedge", .value = "∧" },
322 .{ .name = "vee", .value = "∨" },
323 .{ .name = "bigwedge", .value = "⋀" },
324 .{ .name = "bigvee", .value = "⋁" },
325 .{ .name = "bot", .value = "⊥" },
326 .{ .name = "top", .value = "⊤" },
327 .{ .name = "bigtriangleup", .value = "△" },
328 .{ .name = "bigtriangledown", .value = "▽" },
329 .{ .name = "triangleleft", .value = "◁" },
330 .{ .name = "triangleright", .value = "▷" },
331 .{ .name = "vartriangleleft", .value = "⊲" },
332 .{ .name = "vartriangleright", .value = "⊳" },
333 .{ .name = "trianglelefteq", .value = "⊴" },
334 .{ .name = "trianglerighteq", .value = "⊵" },
335 .{ .name = "unlhd", .value = "⊴" },
336 .{ .name = "unrhd", .value = "⊵" },
337 .{ .name = "vdash", .value = "⊢" },
338 .{ .name = "Vdash", .value = "⊩" },
339 .{ .name = "vDash", .value = "⊨" },
340 .{ .name = "Vvdash", .value = "⊪" },
341 .{ .name = "dashv", .value = "⊣" },
342 .{ .name = "models", .value = "⊨" },
343 .{ .name = "nvdash", .value = "⊬" },
344 .{ .name = "nvDash", .value = "⊭" },
345 .{ .name = "nVdash", .value = "⊮" },
346 .{ .name = "nVDash", .value = "⊯" },
347 .{ .name = "parallel", .value = "∥" },
348 .{ .name = "nparallel", .value = "∦" },
349 .{ .name = "mid", .value = "∣" },
350 .{ .name = "nmid", .value = "∤" },
351 .{ .name = "vert", .value = "|" },
352 .{ .name = "Vert", .value = "‖" },
353 .{ .name = "lvert", .value = "|" },
354 .{ .name = "rvert", .value = "|" },
355 .{ .name = "lVert", .value = "‖" },
356 .{ .name = "rVert", .value = "‖" },
357 .{ .name = "lparen", .value = "(" },
358 .{ .name = "rparen", .value = ")" },
359 .{ .name = "lbrack", .value = "[" },
360 .{ .name = "rbrack", .value = "]" },
361 .{ .name = "lbrace", .value = "{" },
362 .{ .name = "rbrace", .value = "}" },
363 .{ .name = "langle", .value = "⟨" },
364 .{ .name = "rangle", .value = "⟩" },
365 .{ .name = "llangle", .value = "⟪" },
366 .{ .name = "rrangle", .value = "⟫" },
367 .{ .name = "llbracket", .value = "⟦" },
368 .{ .name = "rrbracket", .value = "⟧" },
369 .{ .name = "lfloor", .value = "⌊" },
370 .{ .name = "rfloor", .value = "⌋" },
371 .{ .name = "lceil", .value = "⌈" },
372 .{ .name = "rceil", .value = "⌉" },
373 .{ .name = "ulcorner", .value = "⌜" },
374 .{ .name = "urcorner", .value = "⌝" },
375 .{ .name = "llcorner", .value = "⌞" },
376 .{ .name = "lrcorner", .value = "⌟" },
377 };
378
379 const negations = [_]Entry{
380 .{ .name = "=", .value = "≠" },
381 .{ .name = "<", .value = "≮" },
382 .{ .name = ">", .value = "≯" },
383 .{ .name = "≤", .value = "≰" },
384 .{ .name = "≥", .value = "≱" },
385 .{ .name = "≡", .value = "≢" },
386 .{ .name = "≈", .value = "≉" },
387 .{ .name = "∼", .value = "≁" },
388 .{ .name = "≃", .value = "≄" },
389 .{ .name = "≅", .value = "≇" },
390 .{ .name = "∈", .value = "∉" },
391 .{ .name = "∋", .value = "∌" },
392 .{ .name = "⊂", .value = "⊄" },
393 .{ .name = "⊃", .value = "⊅" },
394 .{ .name = "⊆", .value = "⊈" },
395 .{ .name = "⊇", .value = "⊉" },
396 .{ .name = "⊑", .value = "⋢" },
397 .{ .name = "⊒", .value = "⋣" },
398 .{ .name = "⊢", .value = "⊬" },
399 .{ .name = "⊨", .value = "⊭" },
400 .{ .name = "⊩", .value = "⊮" },
401 .{ .name = "∣", .value = "∤" },
402 .{ .name = "∥", .value = "∦" },
403 };