annotate katex/contrib/render-a11y-string.mjs @ 8:4a25b534c81c javascript-experiment

Add v8 engine and include katex
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 17 Jun 2020 21:43:52 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 import katex from '../katex.mjs';
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 /**
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 * renderA11yString returns a readable string.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 *
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 * In some cases the string will have the proper semantic math
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 * meaning,:
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 * renderA11yString("\\frac{1}{2}"")
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 * -> "start fraction, 1, divided by, 2, end fraction"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 *
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 * However, other cases do not:
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 * renderA11yString("f(x) = x^2")
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 * -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 *
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 * The commas in the string aim to increase ease of understanding
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 * when read by a screenreader.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 */
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 const stringMap = {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 "(": "left parenthesis",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 ")": "right parenthesis",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 "[": "open bracket",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 "]": "close bracket",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 "\\{": "left brace",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 "\\}": "right brace",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 "\\lvert": "open vertical bar",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 "\\rvert": "close vertical bar",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 "|": "vertical bar",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 "\\uparrow": "up arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 "\\Uparrow": "up arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 "\\downarrow": "down arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 "\\Downarrow": "down arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 "\\updownarrow": "up down arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 "\\leftarrow": "left arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 "\\Leftarrow": "left arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 "\\rightarrow": "right arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 "\\Rightarrow": "right arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 "\\langle": "open angle",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 "\\rangle": "close angle",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 "\\lfloor": "open floor",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 "\\rfloor": "close floor",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 "\\int": "integral",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 "\\intop": "integral",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 "\\lim": "limit",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 "\\ln": "natural log",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 "\\log": "log",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 "\\sin": "sine",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 "\\cos": "cosine",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 "\\tan": "tangent",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 "\\cot": "cotangent",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 "\\sum": "sum",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 "/": "slash",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 ",": "comma",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 ".": "point",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 "-": "negative",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 "+": "plus",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 "~": "tilde",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 ":": "colon",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 "?": "question mark",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 "'": "apostrophe",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 "\\%": "percent",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 " ": "space",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 "\\ ": "space",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 "\\$": "dollar sign",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 "\\angle": "angle",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 "\\degree": "degree",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 "\\circ": "circle",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 "\\vec": "vector",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 "\\triangle": "triangle",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 "\\pi": "pi",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 "\\prime": "prime",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 "\\infty": "infinity",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 "\\alpha": "alpha",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 "\\beta": "beta",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 "\\gamma": "gamma",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 "\\omega": "omega",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 "\\theta": "theta",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 "\\sigma": "sigma",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 "\\lambda": "lambda",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 "\\tau": "tau",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 "\\Delta": "delta",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 "\\delta": "delta",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 "\\mu": "mu",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 "\\rho": "rho",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 "\\nabla": "del",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 "\\ell": "ell",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 "\\ldots": "dots",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 // TODO: add entries for all accents
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 "\\hat": "hat",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 "\\acute": "acute"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 const powerMap = {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92 "prime": "prime",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 "degree": "degrees",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94 "circle": "degrees",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 "2": "squared",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 "3": "cubed"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 const openMap = {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99 "|": "open vertical bar",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100 ".": ""
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
102 const closeMap = {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
103 "|": "close vertical bar",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
104 ".": ""
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106 const binMap = {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
107 "+": "plus",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
108 "-": "minus",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
109 "\\pm": "plus minus",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
110 "\\cdot": "dot",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111 "*": "times",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112 "/": "divided by",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113 "\\times": "times",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114 "\\div": "divided by",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115 "\\circ": "circle",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116 "\\bullet": "bullet"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
117 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
118 const relMap = {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
119 "=": "equals",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
120 "\\approx": "approximately equals",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
121 "≠": "does not equal",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122 "\\geq": "is greater than or equal to",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
123 "\\ge": "is greater than or equal to",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
124 "\\leq": "is less than or equal to",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
125 "\\le": "is less than or equal to",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
126 ">": "is greater than",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
127 "<": "is less than",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
128 "\\leftarrow": "left arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
129 "\\Leftarrow": "left arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
130 "\\rightarrow": "right arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
131 "\\Rightarrow": "right arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
132 ":": "colon"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
133 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
134 const accentUnderMap = {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
135 "\\underleftarrow": "left arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
136 "\\underrightarrow": "right arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
137 "\\underleftrightarrow": "left-right arrow",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
138 "\\undergroup": "group",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
139 "\\underlinesegment": "line segment",
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
140 "\\utilde": "tilde"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
141 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
142
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
143 const buildString = (str, type, a11yStrings) => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
144 if (!str) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
145 return;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
146 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
147
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
148 let ret;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
149
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
150 if (type === "open") {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
151 ret = str in openMap ? openMap[str] : stringMap[str] || str;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
152 } else if (type === "close") {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
153 ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
154 } else if (type === "bin") {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
155 ret = binMap[str] || str;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
156 } else if (type === "rel") {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
157 ret = relMap[str] || str;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
158 } else {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
159 ret = stringMap[str] || str;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
160 } // If the text to add is a number and there is already a string
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
161 // in the list and the last string is a number then we should
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
162 // combine them into a single number
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
163
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
164
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
165 if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
166 // I think we might be able to drop the nested arrays, which would make
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
167 // this easier to type - $FlowFixMe
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
168 /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
169 a11yStrings[a11yStrings.length - 1] += ret;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
170 } else if (ret) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
171 a11yStrings.push(ret);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
172 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
173 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
174
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
175 const buildRegion = (a11yStrings, callback) => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
176 const regionStrings = [];
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
177 a11yStrings.push(regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
178 callback(regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
179 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
180
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
181 const handleObject = (tree, a11yStrings, atomType) => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
182 // Everything else is assumed to be an object...
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
183 switch (tree.type) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
184 case "accent":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
185 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
186 buildRegion(a11yStrings, a11yStrings => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
187 buildA11yStrings(tree.base, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
188 a11yStrings.push("with");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
189 buildString(tree.label, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
190 a11yStrings.push("on top");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
191 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
192 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
193 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
194
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
195 case "accentUnder":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
196 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
197 buildRegion(a11yStrings, a11yStrings => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
198 buildA11yStrings(tree.base, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
199 a11yStrings.push("with");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
200 buildString(accentUnderMap[tree.label], "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
201 a11yStrings.push("underneath");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
202 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
203 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
204 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
205
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
206 case "accent-token":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
207 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
208 // Used internally by accent symbols.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
209 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
210 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
211
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
212 case "atom":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
213 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
214 const text = tree.text;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
215
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
216 switch (tree.family) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
217 case "bin":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
218 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
219 buildString(text, "bin", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
220 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
221 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
222
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
223 case "close":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
224 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
225 buildString(text, "close", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
226 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
227 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
228 // TODO(kevinb): figure out what should be done for inner
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
229
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
230 case "inner":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
231 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
232 buildString(tree.text, "inner", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
233 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
234 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
235
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
236 case "open":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
237 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
238 buildString(text, "open", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
239 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
240 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
241
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
242 case "punct":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
243 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
244 buildString(text, "punct", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
245 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
246 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
247
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
248 case "rel":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
249 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
250 buildString(text, "rel", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
251 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
252 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
253
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
254 default:
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
255 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
256 tree.family;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
257 throw new Error(`"${tree.family}" is not a valid atom type`);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
258 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
259 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
260
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
261 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
262 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
263
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
264 case "color":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
265 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
266 const color = tree.color.replace(/katex-/, "");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
267 buildRegion(a11yStrings, regionStrings => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
268 regionStrings.push("start color " + color);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
269 buildA11yStrings(tree.body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
270 regionStrings.push("end color " + color);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
271 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
272 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
273 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
274
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
275 case "color-token":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
276 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
277 // Used by \color, \colorbox, and \fcolorbox but not directly rendered.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
278 // It's a leaf node and has no children so just break.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
279 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
280 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
281
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
282 case "delimsizing":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
283 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
284 if (tree.delim && tree.delim !== ".") {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
285 buildString(tree.delim, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
286 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
287
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
288 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
289 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
290
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
291 case "genfrac":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
292 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
293 buildRegion(a11yStrings, regionStrings => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
294 // genfrac can have unbalanced delimiters
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
295 const leftDelim = tree.leftDelim,
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
296 rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
297 // hasBarLine true -> fraction, false -> binomial
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
298
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
299 if (tree.hasBarLine) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
300 regionStrings.push("start fraction");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
301 leftDelim && buildString(leftDelim, "open", regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
302 buildA11yStrings(tree.numer, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
303 regionStrings.push("divided by");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
304 buildA11yStrings(tree.denom, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
305 rightDelim && buildString(rightDelim, "close", regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
306 regionStrings.push("end fraction");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
307 } else {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
308 regionStrings.push("start binomial");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
309 leftDelim && buildString(leftDelim, "open", regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
310 buildA11yStrings(tree.numer, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
311 regionStrings.push("over");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
312 buildA11yStrings(tree.denom, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
313 rightDelim && buildString(rightDelim, "close", regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
314 regionStrings.push("end binomial");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
315 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
316 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
317 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
318 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
319
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
320 case "kern":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
321 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
322 // No op: we don't attempt to present kerning information
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
323 // to the screen reader.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
324 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
325 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
326
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
327 case "leftright":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
328 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
329 buildRegion(a11yStrings, regionStrings => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
330 buildString(tree.left, "open", regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
331 buildA11yStrings(tree.body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
332 buildString(tree.right, "close", regionStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
333 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
334 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
335 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
336
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
337 case "leftright-right":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
338 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
339 // TODO: double check that this is a no-op
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
340 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
341 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
342
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
343 case "lap":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
344 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
345 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
346 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
347 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
348
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
349 case "mathord":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
350 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
351 buildString(tree.text, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
352 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
353 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
354
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
355 case "op":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
356 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
357 const body = tree.body,
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
358 name = tree.name;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
359
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
360 if (body) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
361 buildA11yStrings(body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
362 } else if (name) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
363 buildString(name, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
364 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
365
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
366 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
367 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
368
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
369 case "op-token":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
370 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
371 // Used internally by operator symbols.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
372 buildString(tree.text, atomType, a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
373 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
374 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
375
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
376 case "ordgroup":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
377 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
378 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
379 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
380 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
381
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
382 case "overline":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
383 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
384 buildRegion(a11yStrings, function (a11yStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
385 a11yStrings.push("start overline");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
386 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
387 a11yStrings.push("end overline");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
388 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
389 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
390 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
391
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
392 case "phantom":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
393 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
394 a11yStrings.push("empty space");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
395 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
396 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
397
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
398 case "raisebox":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
399 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
400 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
401 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
402 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
403
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
404 case "rule":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
405 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
406 a11yStrings.push("rectangle");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
407 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
408 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
409
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
410 case "sizing":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
411 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
412 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
413 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
414 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
415
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
416 case "spacing":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
417 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
418 a11yStrings.push("space");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
419 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
420 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
421
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
422 case "styling":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
423 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
424 // We ignore the styling and just pass through the contents
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
425 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
426 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
427 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
428
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
429 case "sqrt":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
430 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
431 buildRegion(a11yStrings, regionStrings => {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
432 const body = tree.body,
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
433 index = tree.index;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
434
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
435 if (index) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
436 const indexString = flatten(buildA11yStrings(index, [], atomType)).join(",");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
437
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
438 if (indexString === "3") {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
439 regionStrings.push("cube root of");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
440 buildA11yStrings(body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
441 regionStrings.push("end cube root");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
442 return;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
443 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
444
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
445 regionStrings.push("root");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
446 regionStrings.push("start index");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
447 buildA11yStrings(index, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
448 regionStrings.push("end index");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
449 return;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
450 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
451
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
452 regionStrings.push("square root of");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
453 buildA11yStrings(body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
454 regionStrings.push("end square root");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
455 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
456 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
457 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
458
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
459 case "supsub":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
460 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
461 const base = tree.base,
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
462 sub = tree.sub,
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
463 sup = tree.sup;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
464 let isLog = false;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
465
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
466 if (base) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
467 buildA11yStrings(base, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
468 isLog = base.type === "op" && base.name === "\\log";
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
469 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
470
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
471 if (sub) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
472 const regionName = isLog ? "base" : "subscript";
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
473 buildRegion(a11yStrings, function (regionStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
474 regionStrings.push(`start ${regionName}`);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
475 buildA11yStrings(sub, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
476 regionStrings.push(`end ${regionName}`);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
477 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
478 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
479
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
480 if (sup) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
481 buildRegion(a11yStrings, function (regionStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
482 const supString = flatten(buildA11yStrings(sup, [], atomType)).join(",");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
483
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
484 if (supString in powerMap) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
485 regionStrings.push(powerMap[supString]);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
486 return;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
487 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
488
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
489 regionStrings.push("start superscript");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
490 buildA11yStrings(sup, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
491 regionStrings.push("end superscript");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
492 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
493 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
494
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
495 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
496 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
497
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
498 case "text":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
499 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
500 // TODO: handle other fonts
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
501 if (tree.font === "\\textbf") {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
502 buildRegion(a11yStrings, function (regionStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
503 regionStrings.push("start bold text");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
504 buildA11yStrings(tree.body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
505 regionStrings.push("end bold text");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
506 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
507 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
508 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
509
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
510 buildRegion(a11yStrings, function (regionStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
511 regionStrings.push("start text");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
512 buildA11yStrings(tree.body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
513 regionStrings.push("end text");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
514 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
515 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
516 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
517
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
518 case "textord":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
519 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
520 buildString(tree.text, atomType, a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
521 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
522 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
523
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
524 case "smash":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
525 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
526 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
527 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
528 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
529
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
530 case "enclose":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
531 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
532 // TODO: create a map for these.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
533 // TODO: differentiate between a body with a single atom, e.g.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
534 // "cancel a" instead of "start cancel, a, end cancel"
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
535 if (/cancel/.test(tree.label)) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
536 buildRegion(a11yStrings, function (regionStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
537 regionStrings.push("start cancel");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
538 buildA11yStrings(tree.body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
539 regionStrings.push("end cancel");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
540 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
541 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
542 } else if (/box/.test(tree.label)) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
543 buildRegion(a11yStrings, function (regionStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
544 regionStrings.push("start box");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
545 buildA11yStrings(tree.body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
546 regionStrings.push("end box");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
547 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
548 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
549 } else if (/sout/.test(tree.label)) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
550 buildRegion(a11yStrings, function (regionStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
551 regionStrings.push("start strikeout");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
552 buildA11yStrings(tree.body, regionStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
553 regionStrings.push("end strikeout");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
554 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
555 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
556 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
557
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
558 throw new Error(`KaTeX-a11y: enclose node with ${tree.label} not supported yet`);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
559 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
560
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
561 case "vphantom":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
562 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
563 throw new Error("KaTeX-a11y: vphantom not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
564 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
565
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
566 case "hphantom":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
567 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
568 throw new Error("KaTeX-a11y: hphantom not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
569 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
570
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
571 case "operatorname":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
572 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
573 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
574 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
575 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
576
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
577 case "array":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
578 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
579 throw new Error("KaTeX-a11y: array not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
580 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
581
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
582 case "raw":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
583 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
584 throw new Error("KaTeX-a11y: raw not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
585 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
586
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
587 case "size":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
588 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
589 // Although there are nodes of type "size" in the parse tree, they have
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
590 // no semantic meaning and should be ignored.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
591 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
592 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
593
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
594 case "url":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
595 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
596 throw new Error("KaTeX-a11y: url not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
597 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
598
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
599 case "tag":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
600 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
601 throw new Error("KaTeX-a11y: tag not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
602 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
603
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
604 case "verb":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
605 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
606 buildString(`start verbatim`, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
607 buildString(tree.body, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
608 buildString(`end verbatim`, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
609 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
610 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
611
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
612 case "environment":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
613 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
614 throw new Error("KaTeX-a11y: environment not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
615 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
616
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
617 case "horizBrace":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
618 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
619 buildString(`start ${tree.label.slice(1)}`, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
620 buildA11yStrings(tree.base, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
621 buildString(`end ${tree.label.slice(1)}`, "normal", a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
622 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
623 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
624
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
625 case "infix":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
626 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
627 // All infix nodes are replace with other nodes.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
628 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
629 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
630
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
631 case "includegraphics":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
632 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
633 throw new Error("KaTeX-a11y: includegraphics not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
634 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
635
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
636 case "font":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
637 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
638 // TODO: callout the start/end of specific fonts
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
639 // TODO: map \BBb{N} to "the naturals" or something like that
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
640 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
641 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
642 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
643
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
644 case "href":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
645 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
646 throw new Error("KaTeX-a11y: href not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
647 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
648
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
649 case "cr":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
650 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
651 // This is used by environments.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
652 throw new Error("KaTeX-a11y: cr not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
653 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
654
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
655 case "underline":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
656 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
657 buildRegion(a11yStrings, function (a11yStrings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
658 a11yStrings.push("start underline");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
659 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
660 a11yStrings.push("end underline");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
661 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
662 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
663 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
664
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
665 case "xArrow":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
666 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
667 throw new Error("KaTeX-a11y: xArrow not implemented yet");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
668 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
669
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
670 case "mclass":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
671 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
672 // \neq and \ne are macros so we let "htmlmathml" render the mathmal
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
673 // side of things and extract the text from that.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
674 const atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
675
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
676 buildA11yStrings(tree.body, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
677 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
678 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
679
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
680 case "mathchoice":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
681 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
682 // TODO: track which which style we're using, e.g. dispaly, text, etc.
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
683 // default to text style if even that may not be the correct style
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
684 buildA11yStrings(tree.text, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
685 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
686 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
687
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
688 case "htmlmathml":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
689 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
690 buildA11yStrings(tree.mathml, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
691 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
692 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
693
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
694 case "middle":
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
695 {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
696 buildString(tree.delim, atomType, a11yStrings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
697 break;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
698 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
699
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
700 default:
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
701 tree.type;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
702 throw new Error("KaTeX a11y un-recognized type: " + tree.type);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
703 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
704 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
705
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
706 const buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
707 if (a11yStrings === void 0) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
708 a11yStrings = [];
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
709 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
710
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
711 if (tree instanceof Array) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
712 for (let i = 0; i < tree.length; i++) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
713 buildA11yStrings(tree[i], a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
714 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
715 } else {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
716 handleObject(tree, a11yStrings, atomType);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
717 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
718
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
719 return a11yStrings;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
720 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
721
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
722 const flatten = function flatten(array) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
723 let result = [];
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
724 array.forEach(function (item) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
725 if (item instanceof Array) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
726 result = result.concat(flatten(item));
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
727 } else {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
728 result.push(item);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
729 }
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
730 });
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
731 return result;
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
732 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
733
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
734 const renderA11yString = function renderA11yString(text, settings) {
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
735 const tree = katex.__parse(text, settings);
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
736
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
737 const a11yStrings = buildA11yStrings(tree, [], "normal");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
738 return flatten(a11yStrings).join(", ");
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
739 };
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
740
4a25b534c81c Add v8 engine and include katex
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
741 export default renderA11yString;