org_rust_parser/object/
entity.rs

1use crate::types::{MatchError, Result};
2use phf::phf_map;
3
4static ENTITY_MAP: phf::Map<&'static str, &'static str> = phf_map! {
5"Agrave"         => r#"À"#,
6"agrave"         => r#"à"#,
7"Aacute"         => r#"Á"#,
8"aacute"         => r#"á"#,
9"Acirc"          => r#"Â"#,
10"acirc"          => r#"â"#,
11"Amacr"          => r#"Ā"#,
12"amacr"          => r#"ā"#,
13"Atilde"         => r#"Ã"#,
14"atilde"         => r#"ã"#,
15"Auml"           => r#"Ä"#,
16"auml"           => r#"ä"#,
17"Aring"          => r#"Å"#,
18"AA"             => r#"Å"#,
19"aring"          => r#"å"#,
20"AElig"          => r#"Æ"#,
21"aelig"          => r#"æ"#,
22"Ccedil"         => r#"Ç"#,
23"ccedil"         => r#"ç"#,
24"Egrave"         => r#"È"#,
25"egrave"         => r#"è"#,
26"Eacute"         => r#"É"#,
27"eacute"         => r#"é"#,
28"Ecirc"          => r#"Ê"#,
29"ecirc"          => r#"ê"#,
30"Euml"           => r#"Ë"#,
31"euml"           => r#"ë"#,
32"Igrave"         => r#"Ì"#,
33"igrave"         => r#"ì"#,
34"Iacute"         => r#"Í"#,
35"iacute"         => r#"í"#,
36"Idot"           => r#"İ"#,
37"inodot"         => r#"ı"#,
38"Icirc"          => r#"Î"#,
39"icirc"          => r#"î"#,
40"Iuml"           => r#"Ï"#,
41"iuml"           => r#"ï"#,
42"Ntilde"         => r#"Ñ"#,
43"ntilde"         => r#"ñ"#,
44"Ograve"         => r#"Ò"#,
45"ograve"         => r#"ò"#,
46"Oacute"         => r#"Ó"#,
47"oacute"         => r#"ó"#,
48"Ocirc"          => r#"Ô"#,
49"ocirc"          => r#"ô"#,
50"Otilde"         => r#"Õ"#,
51"otilde"         => r#"õ"#,
52"Ouml"           => r#"Ö"#,
53"ouml"           => r#"ö"#,
54"Oslash"         => r#"Ø"#,
55"oslash"         => r#"ø"#,
56"OElig"          => r#"Œ"#,
57"oelig"          => r#"œ"#,
58"Scaron"         => r#"Š"#,
59"scaron"         => r#"š"#,
60"szlig"          => r#"ß"#,
61"Ugrave"         => r#"Ù"#,
62"ugrave"         => r#"ù"#,
63"Uacute"         => r#"Ú"#,
64"uacute"         => r#"ú"#,
65"Ucirc"          => r#"Û"#,
66"ucirc"          => r#"û"#,
67"Uuml"           => r#"Ü"#,
68"uuml"           => r#"ü"#,
69"Yacute"         => r#"Ý"#,
70"yacute"         => r#"ý"#,
71"Yuml"           => r#"Ÿ"#,
72"yuml"           => r#"ÿ"#,
73"fnof"           => r#"ƒ"#,
74"real"           => r#"ℜ"#,
75"image"          => r#"ℑ"#,
76"weierp"         => r#"℘"#,
77"ell"            => r#"ℓ"#,
78"imath"          => r#"ı"#,
79"jmath"          => r#"ȷ"#,
80"Alpha"          => r#"Α"#,
81"alpha"          => r#"α"#,
82"Beta"           => r#"Β"#,
83"beta"           => r#"β"#,
84"Gamma"          => r#"Γ"#,
85"gamma"          => r#"γ"#,
86"Delta"          => r#"Δ"#,
87"delta"          => r#"δ"#,
88"Epsilon"        => r#"Ε"#,
89"epsilon"        => r#"ε"#,
90"varepsilon"     => r#"ε"#,
91"Zeta"           => r#"Ζ"#,
92"zeta"           => r#"ζ"#,
93"Eta"            => r#"Η"#,
94"eta"            => r#"η"#,
95"Theta"          => r#"Θ"#,
96"theta"          => r#"θ"#,
97"thetasym"       => r#"ϑ"#,
98"vartheta"       => r#"ϑ"#,
99"Iota"           => r#"Ι"#,
100"iota"           => r#"ι"#,
101"Kappa"          => r#"Κ"#,
102"kappa"          => r#"κ"#,
103"Lambda"         => r#"Λ"#,
104"lambda"         => r#"λ"#,
105"Mu"             => r#"Μ"#,
106"mu"             => r#"μ"#,
107"nu"             => r#"ν"#,
108"Nu"             => r#"Ν"#,
109"Xi"             => r#"Ξ"#,
110"xi"             => r#"ξ"#,
111"Omicron"        => r#"Ο"#,
112"omicron"        => r#"ο"#,
113"Pi"             => r#"Π"#,
114"pi"             => r#"π"#,
115"Rho"            => r#"Ρ"#,
116"rho"            => r#"ρ"#,
117"Sigma"          => r#"Σ"#,
118"sigma"          => r#"σ"#,
119"sigmaf"         => r#"ς"#,
120"varsigma"       => r#"ς"#,
121"Tau"            => r#"Τ"#,
122"Upsilon"        => r#"Υ"#,
123"upsih"          => r#"ϒ"#,
124"upsilon"        => r#"υ"#,
125"Phi"            => r#"Φ"#,
126"phi"            => r#"φ"#,
127"varphi"         => r#"ϕ"#,
128"Chi"            => r#"Χ"#,
129"chi"            => r#"χ"#,
130"acutex"         => r#"´x"#,
131"Psi"            => r#"Ψ"#,
132"psi"            => r#"ψ"#,
133"tau"            => r#"τ"#,
134"Omega"          => r#"Ω"#,
135"omega"          => r#"ω"#,
136"piv"            => r#"ϖ"#,
137"varpi"          => r#"ϖ"#,
138"partial"        => r#"∂"#,
139"alefsym"        => r#"ℵ"#,
140"aleph"          => r#"ℵ"#,
141"gimel"          => r#"ℷ"#,
142"beth"           => r#"ℶ"#,
143"dalet"          => r#"ℸ"#,
144"ETH"            => r#"Ð"#,
145"eth"            => r#"ð"#,
146"THORN"          => r#"Þ"#,
147"thorn"          => r#"þ"#,
148"dots"           => r#"…"#,
149"cdots"          => r#"⋯"#,
150"hellip"         => r#"…"#,
151"middot"         => r#"·"#,
152"iexcl"          => r#"¡"#,
153"iquest"         => r#"¿"#,
154"shy"            => r#"\u{AD}"#,
155"ndash"          => r#"–"#,
156"mdash"          => r#"—"#,
157"quot"           => r#"""#,
158"acute"          => r#"´"#,
159"ldquo"          => r#"“"#,
160"rdquo"          => r#"”"#,
161"bdquo"          => r#"„"#,
162"lsquo"          => r#"‘"#,
163"rsquo"          => r#"’"#,
164"sbquo"          => r#"‚"#,
165"laquo"          => r#"«"#,
166"raquo"          => r#"»"#,
167"lsaquo"         => r#"‹"#,
168"rsaquo"         => r#"›"#,
169"circ"           => r#"ˆ"#,
170"vert"           => r#"|"#,
171"vbar"           => r#"|"#,
172"brvbar"         => r#"¦"#,
173"S"              => r#"§"#,
174"sect"           => r#"§"#,
175"amp"            => r#"&"#,
176"lt"             => r#"<"#,
177"gt"             => r#">"#,
178"tilde"          => r#"~"#,
179"slash"          => r#"/"#,
180"plus"           => r#"+"#,
181"under"          => r#"_"#,
182"equal"          => r#"="#,
183"asciicirc"      => r#"^"#,
184"dagger"         => r#"†"#,
185"dag"            => r#"†"#,
186"Dagger"         => r#"‡"#,
187"ddag"           => r#"‡"#,
188"ensp"           => r#" "#,
189"emsp"           => r#" "#,
190"thinsp"         => r#" "#,
191"curren"         => r#"¤"#,
192"cent"           => r#"¢"#,
193"pound"          => r#"£"#,
194"yen"            => r#"¥"#,
195"euro"           => r#"€"#,
196"EUR"            => r#"€"#,
197"dollar"         => r#"$"#,
198"USD"            => r#"$"#,
199"copy"           => r#"©"#,
200"reg"            => r#"®"#,
201"trade"          => r#"™"#,
202"minus"          => r#"−"#,
203"pm"             => r#"±"#,
204"plusmn"         => r#"±"#,
205"times"          => r#"×"#,
206"frasl"          => r#"⁄"#,
207"colon"          => r#":"#,
208"div"            => r#"÷"#,
209"frac12"         => r#"½"#,
210"frac14"         => r#"¼"#,
211"frac34"         => r#"¾"#,
212"permil"         => r#"‰"#,
213"sup1"           => r#"¹"#,
214"sup2"           => r#"²"#,
215"sup3"           => r#"³"#,
216"radic"          => r#"√"#,
217"sum"            => r#"∑"#,
218"prod"           => r#"∏"#,
219"micro"          => r#"µ"#,
220"macr"           => r#"¯"#,
221"deg"            => r#"°"#,
222"prime"          => r#"′"#,
223"Prime"          => r#"″"#,
224"infin"          => r#"∞"#,
225"infty"          => r#"∞"#,
226"prop"           => r#"∝"#,
227"propto"         => r#"∝"#,
228"not"            => r#"¬"#,
229"neg"            => r#"¬"#,
230"land"           => r#"∧"#,
231"wedge"          => r#"∧"#,
232"lor"            => r#"∨"#,
233"vee"            => r#"∨"#,
234"cap"            => r#"∩"#,
235"cup"            => r#"∪"#,
236"smile"          => r#"⌣"#,
237"frown"          => r#"⌢"#,
238"int"            => r#"∫"#,
239"therefore"      => r#"∴"#,
240"there4"         => r#"∴"#,
241"because"        => r#"∵"#,
242"sim"            => r#"∼"#,
243"cong"           => r#"≅"#,
244"simeq"          => r#"≅"#,
245"asymp"          => r#"≈"#,
246"approx"         => r#"≈"#,
247"ne"             => r#"≠"#,
248"neq"            => r#"≠"#,
249"equiv"          => r#"≡"#,
250"triangleq"      => r#"≜"#,
251"le"             => r#"≤"#,
252"leq"            => r#"≤"#,
253"ge"             => r#"≥"#,
254"geq"            => r#"≥"#,
255"lessgtr"        => r#"≶"#,
256"lesseqgtr"      => r#"⋚"#,
257"ll"             => r#"≪"#,
258"Ll"             => r#"⋘"#,
259"lll"            => r#"⋘"#,
260"gg"             => r#"≫"#,
261"Gg"             => r#"⋙"#,
262"ggg"            => r#"⋙"#,
263"prec"           => r#"≺"#,
264"preceq"         => r#"≼"#,
265"preccurlyeq"    => r#"≼"#,
266"succ"           => r#"≻"#,
267"succeq"         => r#"≽"#,
268"succcurlyeq"    => r#"≽"#,
269"sub"            => r#"⊂"#,
270"subset"         => r#"⊂"#,
271"sup"            => r#"⊃"#,
272"supset"         => r#"⊃"#,
273"nsub"           => r#"⊄"#,
274"sube"           => r#"⊆"#,
275"nsup"           => r#"⊅"#,
276"supe"           => r#"⊇"#,
277"setminus"       => r#"∖"#,
278"forall"         => r#"∀"#,
279"exist"          => r#"∃"#,
280"exists"         => r#"∃"#,
281"nexist"         => r#"∃"#,
282"nexists"        => r#"∃"#,
283"empty"          => r#"∅"#,
284"emptyset"       => r#"∅"#,
285"isin"           => r#"∈"#,
286"in"             => r#"∈"#,
287"notin"          => r#"∉"#,
288"ni"             => r#"∋"#,
289"nabla"          => r#"∇"#,
290"ang"            => r#"∠"#,
291"angle"          => r#"∠"#,
292"perp"           => r#"⊥"#,
293"parallel"       => r#"∥"#,
294"sdot"           => r#"⋅"#,
295"cdot"           => r#"⋅"#,
296"lceil"          => r#"⌈"#,
297"rceil"          => r#"⌉"#,
298"lfloor"         => r#"⌊"#,
299"rfloor"         => r#"⌋"#,
300"lang"           => r#"⟨"#,
301"rang"           => r#"⟩"#,
302"langle"         => r#"⟨"#,
303"rangle"         => r#"⟩"#,
304"hbar"           => r#"ℏ"#,
305"mho"            => r#"℧"#,
306"larr"           => r#"←"#,
307"leftarrow"      => r#"←"#,
308"gets"           => r#"←"#,
309"lArr"           => r#"⇐"#,
310"Leftarrow"      => r#"⇐"#,
311"uarr"           => r#"↑"#,
312"uparrow"        => r#"↑"#,
313"uArr"           => r#"⇑"#,
314"Uparrow"        => r#"⇑"#,
315"rarr"           => r#"→"#,
316"to"             => r#"→"#,
317"rightarrow"     => r#"→"#,
318"rArr"           => r#"⇒"#,
319"Rightarrow"     => r#"⇒"#,
320"darr"           => r#"↓"#,
321"downarrow"      => r#"↓"#,
322"dArr"           => r#"⇓"#,
323"Downarrow"      => r#"⇓"#,
324"harr"           => r#"↔"#,
325"leftrightarrow" => r#"↔"#,
326"hArr"           => r#"⇔"#,
327"Leftrightarrow" => r#"⇔"#,
328"crarr"          => r#"↵"#,
329"hookleftarrow"  => r#"↵"#,
330"arccos"         => r#"arccos"#,
331"arcsin"         => r#"arcsin"#,
332"arctan"         => r#"arctan"#,
333"arg"            => r#"arg"#,
334"cos"            => r#"cos"#,
335"cosh"           => r#"cosh"#,
336"cot"            => r#"cot"#,
337"coth"           => r#"coth"#,
338"csc"            => r#"csc"#,
339"det"            => r#"det"#,
340"dim"            => r#"dim"#,
341"exp"            => r#"exp"#,
342"gcd"            => r#"gcd"#,
343"hom"            => r#"hom"#,
344"inf"            => r#"inf"#,
345"ker"            => r#"ker"#,
346"lg"             => r#"lg"#,
347"lim"            => r#"lim"#,
348"liminf"         => r#"liminf"#,
349"limsup"         => r#"limsup"#,
350"ln"             => r#"ln"#,
351"log"            => r#"log"#,
352"max"            => r#"max"#,
353"min"            => r#"min"#,
354"Pr"             => r#"Pr"#,
355"sec"            => r#"sec"#,
356"sin"            => r#"sin"#,
357"sinh"           => r#"sinh"#,
358"tan"            => r#"tan"#,
359"tanh"           => r#"tanh"#,
360"bull"           => r#"•"#,
361"bullet"         => r#"•"#,
362"star"           => r#"*"#,
363"lowast"         => r#"∗"#,
364"ast"            => r#"∗"#,
365"odot"           => r#"o"#,
366"oplus"          => r#"⊕"#,
367"otimes"         => r#"⊗"#,
368"check"          => r#"✓"#,
369"checkmark"      => r#"✓"#,
370"para"           => r#"¶"#,
371"ordf"           => r#"ª"#,
372"ordm"           => r#"º"#,
373"cedil"          => r#"¸"#,
374"oline"          => r#"‾"#,
375"uml"            => r#"¨"#,
376"zwnj"           => r#"‌"#,
377"zwj"            => r#"‍"#,
378"lrm"            => r#"‎"#,
379"rlm"            => r#"‏"#,
380"smiley"         => r#"☺"#,
381"blacksmile"     => r#"☻"#,
382"sad"            => r#"☹"#,
383"frowny"         => r#"☹"#,
384"clubs"          => r#"♣"#,
385"clubsuit"       => r#"♣"#,
386"spades"         => r#"♠"#,
387"spadesuit"      => r#"♠"#,
388"hearts"         => r#"♥"#,
389"heartsuit"      => r#"♥"#,
390"diams"          => r#"♦"#,
391"diamondsuit"    => r#"♦"#,
392"diamond"        => r#"⋄"#,
393"Diamond"        => r#"⋄"#,
394"loz"            => r#"◊"#,
395};
396
397#[derive(Debug, Clone, Copy)]
398pub struct Entity<'a> {
399    pub name: &'a str,
400    pub mapped_item: &'a str,
401}
402
403pub(crate) fn parse_entity(name: &str) -> Result<Entity> {
404    if let Some(mapped_item) = ENTITY_MAP.get(name) {
405        Ok(Entity { name, mapped_item })
406    } else {
407        Err(MatchError::InvalidLogic)
408    }
409}