temml 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/contrib/auto-render/README.md +89 -0
  4. package/contrib/auto-render/auto-render.js +128 -0
  5. package/contrib/auto-render/dist/auto-render.js +217 -0
  6. package/contrib/auto-render/dist/auto-render.min.js +1 -0
  7. package/contrib/auto-render/splitAtDelimiters.js +84 -0
  8. package/contrib/auto-render/test/auto-render-spec.js +234 -0
  9. package/contrib/auto-render/test/auto-render.js +217 -0
  10. package/contrib/auto-render/test/test_page.html +59 -0
  11. package/contrib/mhchem/README.md +26 -0
  12. package/contrib/mhchem/mhchem.js +1705 -0
  13. package/contrib/mhchem/mhchem.min.js +1 -0
  14. package/contrib/physics/README.md +20 -0
  15. package/contrib/physics/physics.js +131 -0
  16. package/contrib/texvc/README.md +23 -0
  17. package/contrib/texvc/texvc.js +61 -0
  18. package/dist/Temml-Asana.css +201 -0
  19. package/dist/Temml-Latin-Modern.css +216 -0
  20. package/dist/Temml-Libertinus.css +214 -0
  21. package/dist/Temml-Local.css +194 -0
  22. package/dist/Temml-STIX2.css +203 -0
  23. package/dist/Temml.woff2 +0 -0
  24. package/dist/temml.cjs +13122 -0
  25. package/dist/temml.js +11225 -0
  26. package/dist/temml.min.js +1 -0
  27. package/dist/temml.mjs +13120 -0
  28. package/dist/temmlPostProcess.js +70 -0
  29. package/package.json +34 -0
  30. package/src/Lexer.js +121 -0
  31. package/src/MacroExpander.js +437 -0
  32. package/src/Namespace.js +107 -0
  33. package/src/ParseError.js +64 -0
  34. package/src/Parser.js +977 -0
  35. package/src/Settings.js +49 -0
  36. package/src/SourceLocation.js +29 -0
  37. package/src/Style.js +144 -0
  38. package/src/Token.js +40 -0
  39. package/src/buildMathML.js +235 -0
  40. package/src/constants.js +25 -0
  41. package/src/defineEnvironment.js +25 -0
  42. package/src/defineFunction.js +69 -0
  43. package/src/defineMacro.js +11 -0
  44. package/src/domTree.js +185 -0
  45. package/src/environments/array.js +791 -0
  46. package/src/environments/cd.js +252 -0
  47. package/src/environments.js +8 -0
  48. package/src/functions/accent.js +127 -0
  49. package/src/functions/accentunder.js +38 -0
  50. package/src/functions/arrow.js +204 -0
  51. package/src/functions/cancelto.js +36 -0
  52. package/src/functions/char.js +33 -0
  53. package/src/functions/color.js +253 -0
  54. package/src/functions/cr.js +46 -0
  55. package/src/functions/def.js +259 -0
  56. package/src/functions/delimsizing.js +304 -0
  57. package/src/functions/enclose.js +193 -0
  58. package/src/functions/envTag.js +38 -0
  59. package/src/functions/environment.js +59 -0
  60. package/src/functions/font.js +123 -0
  61. package/src/functions/genfrac.js +333 -0
  62. package/src/functions/hbox.js +29 -0
  63. package/src/functions/horizBrace.js +32 -0
  64. package/src/functions/href.js +90 -0
  65. package/src/functions/html.js +95 -0
  66. package/src/functions/includegraphics.js +131 -0
  67. package/src/functions/kern.js +75 -0
  68. package/src/functions/label.js +29 -0
  69. package/src/functions/lap.js +75 -0
  70. package/src/functions/math.js +40 -0
  71. package/src/functions/mathchoice.js +41 -0
  72. package/src/functions/mclass.js +201 -0
  73. package/src/functions/multiscript.js +91 -0
  74. package/src/functions/not.js +46 -0
  75. package/src/functions/op.js +338 -0
  76. package/src/functions/operatorname.js +139 -0
  77. package/src/functions/ordgroup.js +9 -0
  78. package/src/functions/phantom.js +73 -0
  79. package/src/functions/pmb.js +31 -0
  80. package/src/functions/raise.js +68 -0
  81. package/src/functions/ref.js +28 -0
  82. package/src/functions/relax.js +16 -0
  83. package/src/functions/rule.js +52 -0
  84. package/src/functions/sizing.js +64 -0
  85. package/src/functions/smash.js +66 -0
  86. package/src/functions/sqrt.js +31 -0
  87. package/src/functions/styling.js +58 -0
  88. package/src/functions/supsub.js +135 -0
  89. package/src/functions/symbolsOp.js +53 -0
  90. package/src/functions/symbolsOrd.js +102 -0
  91. package/src/functions/symbolsSpacing.js +53 -0
  92. package/src/functions/tag.js +8 -0
  93. package/src/functions/text.js +75 -0
  94. package/src/functions/tip.js +63 -0
  95. package/src/functions/toggle.js +13 -0
  96. package/src/functions/verb.js +33 -0
  97. package/src/functions.js +57 -0
  98. package/src/linebreaking.js +159 -0
  99. package/src/macros.js +708 -0
  100. package/src/mathMLTree.js +175 -0
  101. package/src/parseNode.js +42 -0
  102. package/src/parseTree.js +40 -0
  103. package/src/postProcess.js +57 -0
  104. package/src/replace.js +225 -0
  105. package/src/stretchy.js +66 -0
  106. package/src/svg.js +110 -0
  107. package/src/symbols.js +972 -0
  108. package/src/tree.js +50 -0
  109. package/src/unicodeAccents.js +16 -0
  110. package/src/unicodeScripts.js +119 -0
  111. package/src/unicodeSupOrSub.js +108 -0
  112. package/src/unicodeSymbolBuilder.js +31 -0
  113. package/src/unicodeSymbols.js +320 -0
  114. package/src/units.js +109 -0
  115. package/src/utils.js +109 -0
  116. package/src/variant.js +103 -0
  117. package/temml.js +181 -0
package/src/tree.js ADDED
@@ -0,0 +1,50 @@
1
+ /**
2
+ * This node represents a document fragment, which contains elements, but when
3
+ * placed into the DOM doesn't have any representation itself. It only contains
4
+ * children and doesn't have any DOM node properties.
5
+ */
6
+ export class DocumentFragment {
7
+ constructor(children) {
8
+ this.children = children;
9
+ this.classes = [];
10
+ this.style = {};
11
+ }
12
+
13
+ hasClass(className) {
14
+ return this.classes.includes(className);
15
+ }
16
+
17
+ /** Convert the fragment into a node. */
18
+ toNode() {
19
+ const frag = document.createDocumentFragment();
20
+
21
+ for (let i = 0; i < this.children.length; i++) {
22
+ frag.appendChild(this.children[i].toNode());
23
+ }
24
+
25
+ return frag;
26
+ }
27
+
28
+ /** Convert the fragment into HTML markup. */
29
+ toMarkup() {
30
+ let markup = "";
31
+
32
+ // Simply concatenate the markup for the children together.
33
+ for (let i = 0; i < this.children.length; i++) {
34
+ markup += this.children[i].toMarkup();
35
+ }
36
+
37
+ return markup;
38
+ }
39
+
40
+ /**
41
+ * Converts the math node into a string, similar to innerText. Applies to
42
+ * MathDomNode's only.
43
+ */
44
+ toText() {
45
+ // To avoid this, we would subclass documentFragment separately for
46
+ // MathML, but polyfills for subclassing is expensive per PR 1469.
47
+ const toText = (child) => child.toText();
48
+ return this.children.map(toText).join("");
49
+ }
50
+ }
@@ -0,0 +1,16 @@
1
+ // Mapping of Unicode accent characters to their LaTeX equivalent in text and
2
+ // math mode (when they exist).
3
+ export default {
4
+ "\u0301": { text: "\\'", math: "\\acute" },
5
+ "\u0300": { text: "\\`", math: "\\grave" },
6
+ "\u0308": { text: '\\"', math: "\\ddot" },
7
+ "\u0303": { text: "\\~", math: "\\tilde" },
8
+ "\u0304": { text: "\\=", math: "\\bar" },
9
+ "\u0306": { text: "\\u", math: "\\breve" },
10
+ "\u030c": { text: "\\v", math: "\\check" },
11
+ "\u0302": { text: "\\^", math: "\\hat" },
12
+ "\u0307": { text: "\\.", math: "\\dot" },
13
+ "\u030a": { text: "\\r", math: "\\mathring" },
14
+ "\u030b": { text: "\\H" },
15
+ '\u0327': { text: '\\c' }
16
+ };
@@ -0,0 +1,119 @@
1
+ /*
2
+ * This file defines the Unicode scripts and script families that we
3
+ * support. To add new scripts or families, just add a new entry to the
4
+ * scriptData array below. Adding scripts to the scriptData array allows
5
+ * characters from that script to appear in \text{} environments.
6
+ */
7
+
8
+ /**
9
+ * Each script or script family has a name and an array of blocks.
10
+ * Each block is an array of two numbers which specify the start and
11
+ * end points (inclusive) of a block of Unicode codepoints.
12
+
13
+ /**
14
+ * Unicode block data for the families of scripts we support in \text{}.
15
+ * Scripts only need to appear here if they do not have font metrics.
16
+ */
17
+ const scriptData = [
18
+ {
19
+ // Latin characters beyond the Latin-1 characters we have metrics for.
20
+ // Needed for Czech, Hungarian and Turkish text, for example.
21
+ name: "latin",
22
+ blocks: [
23
+ [0x0100, 0x024f], // Latin Extended-A and Latin Extended-B
24
+ [0x0300, 0x036f] // Combining Diacritical marks
25
+ ]
26
+ },
27
+ {
28
+ // The Cyrillic script used by Russian and related languages.
29
+ // A Cyrillic subset used to be supported as explicitly defined
30
+ // symbols in symbols.js
31
+ name: "cyrillic",
32
+ blocks: [[0x0400, 0x04ff]]
33
+ },
34
+ {
35
+ // Armenian
36
+ name: "armenian",
37
+ blocks: [[0x0530, 0x058f]]
38
+ },
39
+ {
40
+ // The Brahmic scripts of South and Southeast Asia
41
+ // Devanagari (0900–097F)
42
+ // Bengali (0980–09FF)
43
+ // Gurmukhi (0A00–0A7F)
44
+ // Gujarati (0A80–0AFF)
45
+ // Oriya (0B00–0B7F)
46
+ // Tamil (0B80–0BFF)
47
+ // Telugu (0C00–0C7F)
48
+ // Kannada (0C80–0CFF)
49
+ // Malayalam (0D00–0D7F)
50
+ // Sinhala (0D80–0DFF)
51
+ // Thai (0E00–0E7F)
52
+ // Lao (0E80–0EFF)
53
+ // Tibetan (0F00–0FFF)
54
+ // Myanmar (1000–109F)
55
+ name: "brahmic",
56
+ blocks: [[0x0900, 0x109f]]
57
+ },
58
+ {
59
+ name: "georgian",
60
+ blocks: [[0x10a0, 0x10ff]]
61
+ },
62
+ {
63
+ // Chinese and Japanese.
64
+ // The "k" in cjk is for Korean, but we've separated Korean out
65
+ name: "cjk",
66
+ blocks: [
67
+ [0x3000, 0x30ff], // CJK symbols and punctuation, Hiragana, Katakana
68
+ [0x4e00, 0x9faf], // CJK ideograms
69
+ [0xff00, 0xff60] // Fullwidth punctuation
70
+ // TODO: add halfwidth Katakana and Romanji glyphs
71
+ ]
72
+ },
73
+ {
74
+ // Korean
75
+ name: "hangul",
76
+ blocks: [[0xac00, 0xd7af]]
77
+ }
78
+ ];
79
+
80
+ /**
81
+ * Given a codepoint, return the name of the script or script family
82
+ * it is from, or null if it is not part of a known block
83
+ */
84
+ export function scriptFromCodepoint(codepoint) {
85
+ for (let i = 0; i < scriptData.length; i++) {
86
+ const script = scriptData[i];
87
+ for (let i = 0; i < script.blocks.length; i++) {
88
+ const block = script.blocks[i];
89
+ if (codepoint >= block[0] && codepoint <= block[1]) {
90
+ return script.name;
91
+ }
92
+ }
93
+ }
94
+ return null;
95
+ }
96
+
97
+ /**
98
+ * A flattened version of all the supported blocks in a single array.
99
+ * This is an optimization to make supportedCodepoint() fast.
100
+ */
101
+ const allBlocks = [];
102
+ scriptData.forEach((s) => s.blocks.forEach((b) => allBlocks.push(...b)));
103
+
104
+ /**
105
+ * Given a codepoint, return true if it falls within one of the
106
+ * scripts or script families defined above and false otherwise.
107
+ *
108
+ * Micro benchmarks shows that this is faster than
109
+ * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test()
110
+ * in Firefox, Chrome and Node.
111
+ */
112
+ export function supportedCodepoint(codepoint) {
113
+ for (let i = 0; i < allBlocks.length; i += 2) {
114
+ if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {
115
+ return true;
116
+ }
117
+ }
118
+ return false;
119
+ }
@@ -0,0 +1,108 @@
1
+ // Helpers for Parser.js handling of Unicode (sub|super)script characters.
2
+
3
+ export const unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/
4
+
5
+ export const uSubsAndSups = Object.freeze({
6
+ '₊': '+',
7
+ '₋': '-',
8
+ '₌': '=',
9
+ '₍': '(',
10
+ '₎': ')',
11
+ '₀': '0',
12
+ '₁': '1',
13
+ '₂': '2',
14
+ '₃': '3',
15
+ '₄': '4',
16
+ '₅': '5',
17
+ '₆': '6',
18
+ '₇': '7',
19
+ '₈': '8',
20
+ '₉': '9',
21
+ '\u2090': 'a',
22
+ '\u2091': 'e',
23
+ '\u2095': 'h',
24
+ '\u1D62': 'i',
25
+ '\u2C7C': 'j',
26
+ '\u2096': 'k',
27
+ '\u2097': 'l',
28
+ '\u2098': 'm',
29
+ '\u2099': 'n',
30
+ '\u2092': 'o',
31
+ '\u209A': 'p',
32
+ '\u1D63': 'r',
33
+ '\u209B': 's',
34
+ '\u209C': 't',
35
+ '\u1D64': 'u',
36
+ '\u1D65': 'v',
37
+ '\u2093': 'x',
38
+ '\u1D66': 'β',
39
+ '\u1D67': 'γ',
40
+ '\u1D68': 'ρ',
41
+ '\u1D69': '\u03d5',
42
+ '\u1D6A': 'χ',
43
+ '⁺': '+',
44
+ '⁻': '-',
45
+ '⁼': '=',
46
+ '⁽': '(',
47
+ '⁾': ')',
48
+ '⁰': '0',
49
+ '¹': '1',
50
+ '²': '2',
51
+ '³': '3',
52
+ '⁴': '4',
53
+ '⁵': '5',
54
+ '⁶': '6',
55
+ '⁷': '7',
56
+ '⁸': '8',
57
+ '⁹': '9',
58
+ '\u1D2C': 'A',
59
+ '\u1D2E': 'B',
60
+ '\u1D30': 'D',
61
+ '\u1D31': 'E',
62
+ '\u1D33': 'G',
63
+ '\u1D34': 'H',
64
+ '\u1D35': 'I',
65
+ '\u1D36': 'J',
66
+ '\u1D37': 'K',
67
+ '\u1D38': 'L',
68
+ '\u1D39': 'M',
69
+ '\u1D3A': 'N',
70
+ '\u1D3C': 'O',
71
+ '\u1D3E': 'P',
72
+ '\u1D3F': 'R',
73
+ '\u1D40': 'T',
74
+ '\u1D41': 'U',
75
+ '\u2C7D': 'V',
76
+ '\u1D42': 'W',
77
+ '\u1D43': 'a',
78
+ '\u1D47': 'b',
79
+ '\u1D9C': 'c',
80
+ '\u1D48': 'd',
81
+ '\u1D49': 'e',
82
+ '\u1DA0': 'f',
83
+ '\u1D4D': 'g',
84
+ '\u02B0': 'h',
85
+ '\u2071': 'i',
86
+ '\u02B2': 'j',
87
+ '\u1D4F': 'k',
88
+ '\u02E1': 'l',
89
+ '\u1D50': 'm',
90
+ '\u207F': 'n',
91
+ '\u1D52': 'o',
92
+ '\u1D56': 'p',
93
+ '\u02B3': 'r',
94
+ '\u02E2': 's',
95
+ '\u1D57': 't',
96
+ '\u1D58': 'u',
97
+ '\u1D5B': 'v',
98
+ '\u02B7': 'w',
99
+ '\u02E3': 'x',
100
+ '\u02B8': 'y',
101
+ '\u1DBB': 'z',
102
+ '\u1D5D': 'β',
103
+ '\u1D5E': 'γ',
104
+ '\u1D5F': 'δ',
105
+ '\u1D60': '\u03d5',
106
+ '\u1D61': 'χ',
107
+ '\u1DBF': 'θ'
108
+ })
@@ -0,0 +1,31 @@
1
+ // This is an internal module, not part of the Temml distribution,
2
+ // whose purpose is to generate `unicodeSymbols` for Parser.js
3
+ // In this way, only this module, and not the distribution/browser,
4
+ // needs String's normalize function.
5
+ import * as accents from "./unicodeAccents";
6
+
7
+ const result = {};
8
+ const letters =
9
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +
10
+ "αβγδεϵζηθϑικλμνξοπϖρϱςστυφϕχψωΓΔΘΛΞΠΣΥΦΨΩ";
11
+ for (const letter of letters) {
12
+ for (const accent of Object.getOwnPropertyNames(accents)) {
13
+ const combined = letter + accent;
14
+ const normalized = combined.normalize("NFC");
15
+ if (normalized.length === 1) {
16
+ result[normalized] = combined;
17
+ }
18
+ for (const accent2 of Object.getOwnPropertyNames(accents)) {
19
+ if (accent === accent2) {
20
+ continue;
21
+ }
22
+ const combined2 = combined + accent2;
23
+ const normalized2 = combined2.normalize("NFC");
24
+ if (normalized2.length === 1) {
25
+ result[normalized2] = combined2;
26
+ }
27
+ }
28
+ }
29
+ }
30
+
31
+ export default result;
@@ -0,0 +1,320 @@
1
+ export default {
2
+ "á": "á",
3
+ "à": "à",
4
+ "ä": "ä",
5
+ "ǟ": "ǟ",
6
+ "ã": "ã",
7
+ "ā": "ā",
8
+ "ă": "ă",
9
+ "ắ": "ắ",
10
+ "ằ": "ằ",
11
+ "ẵ": "ẵ",
12
+ "ǎ": "ǎ",
13
+ "â": "â",
14
+ "ấ": "ấ",
15
+ "ầ": "ầ",
16
+ "ẫ": "ẫ",
17
+ "ȧ": "ȧ",
18
+ "ǡ": "ǡ",
19
+ "å": "å",
20
+ "ǻ": "ǻ",
21
+ "ḃ": "ḃ",
22
+ "ć": "ć",
23
+ "č": "č",
24
+ "ĉ": "ĉ",
25
+ "ċ": "ċ",
26
+ "ď": "ď",
27
+ "ḋ": "ḋ",
28
+ "é": "é",
29
+ "è": "è",
30
+ "ë": "ë",
31
+ "ẽ": "ẽ",
32
+ "ē": "ē",
33
+ "ḗ": "ḗ",
34
+ "ḕ": "ḕ",
35
+ "ĕ": "ĕ",
36
+ "ě": "ě",
37
+ "ê": "ê",
38
+ "ế": "ế",
39
+ "ề": "ề",
40
+ "ễ": "ễ",
41
+ "ė": "ė",
42
+ "ḟ": "ḟ",
43
+ "ǵ": "ǵ",
44
+ "ḡ": "ḡ",
45
+ "ğ": "ğ",
46
+ "ǧ": "ǧ",
47
+ "ĝ": "ĝ",
48
+ "ġ": "ġ",
49
+ "ḧ": "ḧ",
50
+ "ȟ": "ȟ",
51
+ "ĥ": "ĥ",
52
+ "ḣ": "ḣ",
53
+ "í": "í",
54
+ "ì": "ì",
55
+ "ï": "ï",
56
+ "ḯ": "ḯ",
57
+ "ĩ": "ĩ",
58
+ "ī": "ī",
59
+ "ĭ": "ĭ",
60
+ "ǐ": "ǐ",
61
+ "î": "î",
62
+ "ǰ": "ǰ",
63
+ "ĵ": "ĵ",
64
+ "ḱ": "ḱ",
65
+ "ǩ": "ǩ",
66
+ "ĺ": "ĺ",
67
+ "ľ": "ľ",
68
+ "ḿ": "ḿ",
69
+ "ṁ": "ṁ",
70
+ "ń": "ń",
71
+ "ǹ": "ǹ",
72
+ "ñ": "ñ",
73
+ "ň": "ň",
74
+ "ṅ": "ṅ",
75
+ "ó": "ó",
76
+ "ò": "ò",
77
+ "ö": "ö",
78
+ "ȫ": "ȫ",
79
+ "õ": "õ",
80
+ "ṍ": "ṍ",
81
+ "ṏ": "ṏ",
82
+ "ȭ": "ȭ",
83
+ "ō": "ō",
84
+ "ṓ": "ṓ",
85
+ "ṑ": "ṑ",
86
+ "ŏ": "ŏ",
87
+ "ǒ": "ǒ",
88
+ "ô": "ô",
89
+ "ố": "ố",
90
+ "ồ": "ồ",
91
+ "ỗ": "ỗ",
92
+ "ȯ": "ȯ",
93
+ "ȱ": "ȱ",
94
+ "ő": "ő",
95
+ "ṕ": "ṕ",
96
+ "ṗ": "ṗ",
97
+ "ŕ": "ŕ",
98
+ "ř": "ř",
99
+ "ṙ": "ṙ",
100
+ "ś": "ś",
101
+ "ṥ": "ṥ",
102
+ "š": "š",
103
+ "ṧ": "ṧ",
104
+ "ŝ": "ŝ",
105
+ "ṡ": "ṡ",
106
+ "ẗ": "ẗ",
107
+ "ť": "ť",
108
+ "ṫ": "ṫ",
109
+ "ú": "ú",
110
+ "ù": "ù",
111
+ "ü": "ü",
112
+ "ǘ": "ǘ",
113
+ "ǜ": "ǜ",
114
+ "ǖ": "ǖ",
115
+ "ǚ": "ǚ",
116
+ "ũ": "ũ",
117
+ "ṹ": "ṹ",
118
+ "ū": "ū",
119
+ "ṻ": "ṻ",
120
+ "ŭ": "ŭ",
121
+ "ǔ": "ǔ",
122
+ "û": "û",
123
+ "ů": "ů",
124
+ "ű": "ű",
125
+ "ṽ": "ṽ",
126
+ "ẃ": "ẃ",
127
+ "ẁ": "ẁ",
128
+ "ẅ": "ẅ",
129
+ "ŵ": "ŵ",
130
+ "ẇ": "ẇ",
131
+ "ẘ": "ẘ",
132
+ "ẍ": "ẍ",
133
+ "ẋ": "ẋ",
134
+ "ý": "ý",
135
+ "ỳ": "ỳ",
136
+ "ÿ": "ÿ",
137
+ "ỹ": "ỹ",
138
+ "ȳ": "ȳ",
139
+ "ŷ": "ŷ",
140
+ "ẏ": "ẏ",
141
+ "ẙ": "ẙ",
142
+ "ź": "ź",
143
+ "ž": "ž",
144
+ "ẑ": "ẑ",
145
+ "ż": "ż",
146
+ "Á": "Á",
147
+ "À": "À",
148
+ "Ä": "Ä",
149
+ "Ǟ": "Ǟ",
150
+ "Ã": "Ã",
151
+ "Ā": "Ā",
152
+ "Ă": "Ă",
153
+ "Ắ": "Ắ",
154
+ "Ằ": "Ằ",
155
+ "Ẵ": "Ẵ",
156
+ "Ǎ": "Ǎ",
157
+ "Â": "Â",
158
+ "Ấ": "Ấ",
159
+ "Ầ": "Ầ",
160
+ "Ẫ": "Ẫ",
161
+ "Ȧ": "Ȧ",
162
+ "Ǡ": "Ǡ",
163
+ "Å": "Å",
164
+ "Ǻ": "Ǻ",
165
+ "Ḃ": "Ḃ",
166
+ "Ć": "Ć",
167
+ "Č": "Č",
168
+ "Ĉ": "Ĉ",
169
+ "Ċ": "Ċ",
170
+ "Ď": "Ď",
171
+ "Ḋ": "Ḋ",
172
+ "É": "É",
173
+ "È": "È",
174
+ "Ë": "Ë",
175
+ "Ẽ": "Ẽ",
176
+ "Ē": "Ē",
177
+ "Ḗ": "Ḗ",
178
+ "Ḕ": "Ḕ",
179
+ "Ĕ": "Ĕ",
180
+ "Ě": "Ě",
181
+ "Ê": "Ê",
182
+ "Ế": "Ế",
183
+ "Ề": "Ề",
184
+ "Ễ": "Ễ",
185
+ "Ė": "Ė",
186
+ "Ḟ": "Ḟ",
187
+ "Ǵ": "Ǵ",
188
+ "Ḡ": "Ḡ",
189
+ "Ğ": "Ğ",
190
+ "Ǧ": "Ǧ",
191
+ "Ĝ": "Ĝ",
192
+ "Ġ": "Ġ",
193
+ "Ḧ": "Ḧ",
194
+ "Ȟ": "Ȟ",
195
+ "Ĥ": "Ĥ",
196
+ "Ḣ": "Ḣ",
197
+ "Í": "Í",
198
+ "Ì": "Ì",
199
+ "Ï": "Ï",
200
+ "Ḯ": "Ḯ",
201
+ "Ĩ": "Ĩ",
202
+ "Ī": "Ī",
203
+ "Ĭ": "Ĭ",
204
+ "Ǐ": "Ǐ",
205
+ "Î": "Î",
206
+ "İ": "İ",
207
+ "Ĵ": "Ĵ",
208
+ "Ḱ": "Ḱ",
209
+ "Ǩ": "Ǩ",
210
+ "Ĺ": "Ĺ",
211
+ "Ľ": "Ľ",
212
+ "Ḿ": "Ḿ",
213
+ "Ṁ": "Ṁ",
214
+ "Ń": "Ń",
215
+ "Ǹ": "Ǹ",
216
+ "Ñ": "Ñ",
217
+ "Ň": "Ň",
218
+ "Ṅ": "Ṅ",
219
+ "Ó": "Ó",
220
+ "Ò": "Ò",
221
+ "Ö": "Ö",
222
+ "Ȫ": "Ȫ",
223
+ "Õ": "Õ",
224
+ "Ṍ": "Ṍ",
225
+ "Ṏ": "Ṏ",
226
+ "Ȭ": "Ȭ",
227
+ "Ō": "Ō",
228
+ "Ṓ": "Ṓ",
229
+ "Ṑ": "Ṑ",
230
+ "Ŏ": "Ŏ",
231
+ "Ǒ": "Ǒ",
232
+ "Ô": "Ô",
233
+ "Ố": "Ố",
234
+ "Ồ": "Ồ",
235
+ "Ỗ": "Ỗ",
236
+ "Ȯ": "Ȯ",
237
+ "Ȱ": "Ȱ",
238
+ "Ő": "Ő",
239
+ "Ṕ": "Ṕ",
240
+ "Ṗ": "Ṗ",
241
+ "Ŕ": "Ŕ",
242
+ "Ř": "Ř",
243
+ "Ṙ": "Ṙ",
244
+ "Ś": "Ś",
245
+ "Ṥ": "Ṥ",
246
+ "Š": "Š",
247
+ "Ṧ": "Ṧ",
248
+ "Ŝ": "Ŝ",
249
+ "Ṡ": "Ṡ",
250
+ "Ť": "Ť",
251
+ "Ṫ": "Ṫ",
252
+ "Ú": "Ú",
253
+ "Ù": "Ù",
254
+ "Ü": "Ü",
255
+ "Ǘ": "Ǘ",
256
+ "Ǜ": "Ǜ",
257
+ "Ǖ": "Ǖ",
258
+ "Ǚ": "Ǚ",
259
+ "Ũ": "Ũ",
260
+ "Ṹ": "Ṹ",
261
+ "Ū": "Ū",
262
+ "Ṻ": "Ṻ",
263
+ "Ŭ": "Ŭ",
264
+ "Ǔ": "Ǔ",
265
+ "Û": "Û",
266
+ "Ů": "Ů",
267
+ "Ű": "Ű",
268
+ "Ṽ": "Ṽ",
269
+ "Ẃ": "Ẃ",
270
+ "Ẁ": "Ẁ",
271
+ "Ẅ": "Ẅ",
272
+ "Ŵ": "Ŵ",
273
+ "Ẇ": "Ẇ",
274
+ "Ẍ": "Ẍ",
275
+ "Ẋ": "Ẋ",
276
+ "Ý": "Ý",
277
+ "Ỳ": "Ỳ",
278
+ "Ÿ": "Ÿ",
279
+ "Ỹ": "Ỹ",
280
+ "Ȳ": "Ȳ",
281
+ "Ŷ": "Ŷ",
282
+ "Ẏ": "Ẏ",
283
+ "Ź": "Ź",
284
+ "Ž": "Ž",
285
+ "Ẑ": "Ẑ",
286
+ "Ż": "Ż",
287
+ "ά": "ά",
288
+ "ὰ": "ὰ",
289
+ "ᾱ": "ᾱ",
290
+ "ᾰ": "ᾰ",
291
+ "έ": "έ",
292
+ "ὲ": "ὲ",
293
+ "ή": "ή",
294
+ "ὴ": "ὴ",
295
+ "ί": "ί",
296
+ "ὶ": "ὶ",
297
+ "ϊ": "ϊ",
298
+ "ΐ": "ΐ",
299
+ "ῒ": "ῒ",
300
+ "ῑ": "ῑ",
301
+ "ῐ": "ῐ",
302
+ "ό": "ό",
303
+ "ὸ": "ὸ",
304
+ "ύ": "ύ",
305
+ "ὺ": "ὺ",
306
+ "ϋ": "ϋ",
307
+ "ΰ": "ΰ",
308
+ "ῢ": "ῢ",
309
+ "ῡ": "ῡ",
310
+ "ῠ": "ῠ",
311
+ "ώ": "ώ",
312
+ "ὼ": "ὼ",
313
+ "Ύ": "Ύ",
314
+ "Ὺ": "Ὺ",
315
+ "Ϋ": "Ϋ",
316
+ "Ῡ": "Ῡ",
317
+ "Ῠ": "Ῠ",
318
+ "Ώ": "Ώ",
319
+ "Ὼ": "Ὼ"
320
+ };