temml 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ };