Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/common/math_semantic_attr.js

Issue 2943193002: Run clang-format on .js files in c/b/r/chromeos/chromevox (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview Semantic attributes of Math symbols and expressions. 6 * @fileoverview Semantic attributes of Math symbols and expressions.
7 * 7 *
8 * This file contains the basic functionality to lookup and assign semantic 8 * This file contains the basic functionality to lookup and assign semantic
9 * attributes for mathematical expressions. Since there is no such thing as a 9 * attributes for mathematical expressions. Since there is no such thing as a
10 * well-defined semantics for all of mathematics we compute a default semantics 10 * well-defined semantics for all of mathematics we compute a default semantics
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 * Observe that all characters are given as hex code number in order to ease the 50 * Observe that all characters are given as hex code number in order to ease the
51 * comparison with those in the JSON files that define speech rules per 51 * comparison with those in the JSON files that define speech rules per
52 * character. 52 * character.
53 * @constructor 53 * @constructor
54 */ 54 */
55 cvox.SemanticAttr = function() { 55 cvox.SemanticAttr = function() {
56 // Punctuation Characters. 56 // Punctuation Characters.
57 /** 57 /**
58 * @type {Array<string>} 58 * @type {Array<string>}
59 */ 59 */
60 this.generalPunctuations = 60 this.generalPunctuations = [
61 [ 61 '!', '"', '#', '%', '&', '\'', '*', ',', ':', ';', '?', '@',
62 '!', '"', '#', '%', '&', '\'', '*', ',', ':', ';', '?', '@', '\\', 62 '\\', '¡', '§', '¶', '·', '¿', '‗', '†', '‡', '•', '‣', '․',
63 '¡', '§', '¶', '·', '¿', '‗', '†', '‡', '•', '‣', '․', '‥', '‧', 63 '‥', '‧', '‰', '‱', '‸', '※', '‼', '‽', '‾', '⁁', '⁂', '⁃',
64 '‰', '‱', '‸', '※', '‼', '‽', '‾', '⁁', '⁂', '⁃', '⁇', '⁈', '⁉', 64 '⁇', '⁈', '⁉', '⁋', '⁌', '⁍', '⁎', '⁏', '⁐', '⁑', '⁓', '⁕',
65 '⁋', '⁌', '⁍', '⁎', '⁏', '⁐', '⁑', '⁓', '⁕', '⁖', '⁘', '⁙', '⁚', 65 '⁖', '⁘', '⁙', '⁚', '⁛', '⁜', '⁝', '⁞', '︐', '︓', '︔', '︕',
66 '⁛', '⁜', '⁝', '⁞', '︐', '︓', '︔', '︕', '︖', '︰', '﹅', '﹆', 66 '︖', '︰', '﹅', '﹆', '﹉', '﹊', '﹋', '﹌', '﹐', '﹔', '﹕', '﹖',
67 '﹉', '﹊', '﹋', '﹌', '﹐', '﹔', '﹕', '﹖', '﹗', '﹟', '﹠', '﹡', '﹨', 67 '﹗', '﹟', '﹠', '﹡', '﹨', '﹪', '﹫', '!', '"', '#', '%', '&',
68 '﹪', '﹫', '!', '"', '#', '%', '&', ''', '*', ',', '/', ':', 68 ''', '*', ',', '/', ':', ';', '?', '@', '\'
69 ';', '?', '@', '\' 69 ];
70 ];
71 /** 70 /**
72 * @type {string} 71 * @type {string}
73 * @private 72 * @private
74 */ 73 */
75 this.invisibleComma_ = cvox.SemanticUtil.numberToUnicode(0x2063); 74 this.invisibleComma_ = cvox.SemanticUtil.numberToUnicode(0x2063);
76 this.generalPunctuations.push(this.invisibleComma_); 75 this.generalPunctuations.push(this.invisibleComma_);
77 /** 76 /**
78 * @type {Array<string>} 77 * @type {Array<string>}
79 */ 78 */
80 this.ellipses = 79 this.ellipses = ['…', '⋮', '⋯', '⋰', '⋱', '︙'];
81 [
82 '…', '⋮', '⋯', '⋰', '⋱', '︙'
83 ];
84 /** 80 /**
85 * @type {Array<string>} 81 * @type {Array<string>}
86 */ 82 */
87 this.fullStops = 83 this.fullStops = ['.', '﹒', '.'];
88 [
89 '.', '﹒', '.'
90 ];
91 /** 84 /**
92 * @type {Array<string>} 85 * @type {Array<string>}
93 */ 86 */
94 this.dashes = 87 this.dashes = ['‒', '–', '—', '―', '〜', '︱', '︲', '﹘'];
95 [
96 '‒', '–', '—', '―', '〜', '︱', '︲', '﹘'
97 ];
98 /** 88 /**
99 * @type {Array<string>} 89 * @type {Array<string>}
100 */ 90 */
101 this.primes = 91 this.primes = ['′', '″', '‴', '‵', '‶', '‷', '⁗'];
102 [
103 '′', '″', '‴', '‵', '‶', '‷', '⁗'
104 ];
105 92
106 // Fences. 93 // Fences.
107 // Fences are treated slightly differently from other symbols as we want to 94 // Fences are treated slightly differently from other symbols as we want to
108 // record pairs of opening/closing and top/bottom fences. 95 // record pairs of opening/closing and top/bottom fences.
109 /** 96 /**
110 * Mapping opening to closing fences. 97 * Mapping opening to closing fences.
111 * @type {Object<string>} 98 * @type {Object<string>}
112 */ 99 */
113 this.openClosePairs = 100 this.openClosePairs = {
114 { 101 // Unicode categories Ps and Pe.
115 // Unicode categories Ps and Pe. 102 // Observe that left quotation 301D could also be matched to 301F,
116 // Observe that left quotation 301D could also be matched to 301F, 103 // but is currently matched to 301E.
117 // but is currently matched to 301E. 104 '(': ')',
118 '(': ')', '[': ']', '{': '}', '⁅': '⁆', '〈': '〉', '❨': '❩', 105 '[': ']',
119 '❪': '❫', '❬': '❭', '❮': '❯', '❰': '❱', '❲': '❳', '❴': '❵', 106 '{': '}',
120 '⟅': '⟆', '⟦': '⟧', '⟨': '⟩', '⟪': '⟫', '⟬': '⟭', '⟮': '⟯', 107 '⁅': '⁆',
121 '⦃': '⦄', '⦅': '⦆', '⦇': '⦈', '⦉': '⦊', '⦋': '⦌', '⦍': '⦎', 108 '〈': '〉',
122 '⦏': '⦐', '⦑': '⦒', '⦓': '⦔', '⦕': '⦖', '⦗': '⦘', '⧘': '⧙', 109 '❨': '❩',
123 '⧚': '⧛', '⧼': '⧽', '⸢': '⸣', '⸤': '⸥', '⸦': '⸧', '⸨': '⸩', 110 '❪': '❫',
124 '〈': '〉', '《': '》', '「': '」', '『': '』', '【': '】', 111 '❬': '❭',
125 '〔': '〕', '〖': '〗', '〘': '〙', '〚': '〛', '〝': '〞', 112 '❮': '❯',
126 '﴾': '﴿', '︗': '︘', '﹙': '﹚', '﹛': '﹜', '﹝': '﹞', '(': ')', 113 '❰': '❱',
127 '[': ']', '{': '}', '⦅': '⦆', '「': '」', 114 '❲': '❳',
128 // Unicode categories Sm and So. 115 '❴': '❵',
129 '⌈': '⌉', '⌊': '⌋', '⌌': '⌍', '⌎': '⌏', '⌜': '⌝', '⌞': '⌟', 116 '⟅': '⟆',
130 // Extender fences. 117 '⟦': '⟧',
131 // Parenthesis. 118 '⟨': '⟩',
132 '⎛': '⎞', '⎜': '⎟', '⎝': '⎠', 119 '⟪': '⟫',
133 // Square bracket. 120 '⟬': '⟭',
134 '⎡': '⎤', '⎢': '⎥', '⎣': '⎦', 121 '⟮': '⟯',
135 // Curly bracket. 122 '⦃': '⦄',
136 '⎧': '⎫', '⎨': '⎬', '⎩': '⎭', '⎰': '⎱', '⎸': '⎹' 123 '⦅': '⦆',
137 }; 124 '⦇': '⦈',
125 '⦉': '⦊',
126 '⦋': '⦌',
127 '⦍': '⦎',
128 '⦏': '⦐',
129 '⦑': '⦒',
130 '⦓': '⦔',
131 '⦕': '⦖',
132 '⦗': '⦘',
133 '⧘': '⧙',
134 '⧚': '⧛',
135 '⧼': '⧽',
136 '⸢': '⸣',
137 '⸤': '⸥',
138 '⸦': '⸧',
139 '⸨': '⸩',
140 '〈': '〉',
141 '《': '》',
142 '「': '」',
143 '『': '』',
144 '【': '】',
145 '〔': '〕',
146 '〖': '〗',
147 '〘': '〙',
148 '〚': '〛',
149 '〝': '〞',
150 '﴾': '﴿',
151 '︗': '︘',
152 '﹙': '﹚',
153 '﹛': '﹜',
154 '﹝': '﹞',
155 '(': ')',
156 '[': ']',
157 '{': '}',
158 '⦅': '⦆',
159 '「': '」',
160 // Unicode categories Sm and So.
161 '⌈': '⌉',
162 '⌊': '⌋',
163 '⌌': '⌍',
164 '⌎': '⌏',
165 '⌜': '⌝',
166 '⌞': '⌟',
167 // Extender fences.
168 // Parenthesis.
169 '⎛': '⎞',
170 '⎜': '⎟',
171 '⎝': '⎠',
172 // Square bracket.
173 '⎡': '⎤',
174 '⎢': '⎥',
175 '⎣': '⎦',
176 // Curly bracket.
177 '⎧': '⎫',
178 '⎨': '⎬',
179 '⎩': '⎭',
180 '⎰': '⎱',
181 '⎸': '⎹'
182 };
138 /** 183 /**
139 * Mapping top to bottom fences. 184 * Mapping top to bottom fences.
140 * @type {Object<string>} 185 * @type {Object<string>}
141 */ 186 */
142 this.topBottomPairs = 187 this.topBottomPairs = {
143 { 188 '⎴': '⎵',
144 '⎴': '⎵', '⏜': '⏝', '⏞': '⏟', '⏠': '⏡', '︵': '︶', '︷': '︸', 189 '⏜': '⏝',
145 '︹': '︺', '︻': '︼', '︽': '︾', '︿': '﹀', '﹁': '﹂', 190 '⏞': '⏟',
146 '﹃': '﹄', '﹇': '﹈' 191 '⏠': '⏡',
147 }; 192 '︵': '︶',
193 '︷': '︸',
194 '︹': '︺',
195 '︻': '︼',
196 '︽': '︾',
197 '︿': '﹀',
198 '﹁': '﹂',
199 '﹃': '﹄',
200 '﹇': '﹈'
201 };
148 /** 202 /**
149 * @type {Array<string>} 203 * @type {Array<string>}
150 */ 204 */
151 this.leftFences = cvox.SemanticUtil.objectsToKeys(this.openClosePairs); 205 this.leftFences = cvox.SemanticUtil.objectsToKeys(this.openClosePairs);
152 /** 206 /**
153 * @type {Array<string>} 207 * @type {Array<string>}
154 */ 208 */
155 this.rightFences = cvox.SemanticUtil.objectsToValues(this.openClosePairs); 209 this.rightFences = cvox.SemanticUtil.objectsToValues(this.openClosePairs);
156 this.rightFences.push('〟'); 210 this.rightFences.push('〟');
157 /** 211 /**
158 * @type {Array<string>} 212 * @type {Array<string>}
159 */ 213 */
160 this.topFences = cvox.SemanticUtil.objectsToKeys(this.topBottomPairs); 214 this.topFences = cvox.SemanticUtil.objectsToKeys(this.topBottomPairs);
161 /** 215 /**
162 * @type {Array<string>} 216 * @type {Array<string>}
163 */ 217 */
164 this.bottomFences = cvox.SemanticUtil.objectsToValues(this.topBottomPairs); 218 this.bottomFences = cvox.SemanticUtil.objectsToValues(this.topBottomPairs);
165 /** 219 /**
166 * @type {Array<string>} 220 * @type {Array<string>}
167 */ 221 */
168 this.neutralFences = 222 this.neutralFences = ['|', '¦', '‖', '❘', '⦀', '⫴', '¦', '|'];
169 [
170 '|', '¦', '‖', '❘', '⦀', '⫴', '¦', '|'
171 ];
172 /** Array of all fences. 223 /** Array of all fences.
173 * @type {Array<string>} 224 * @type {Array<string>}
174 */ 225 */
175 this.fences = this.neutralFences.concat( 226 this.fences = this.neutralFences.concat(
176 this.leftFences, this.rightFences, this.topFences, this.bottomFences); 227 this.leftFences, this.rightFences, this.topFences, this.bottomFences);
177 228
178 // Identifiers. 229 // Identifiers.
179 // Latin Alphabets. 230 // Latin Alphabets.
180 /** 231 /**
181 * @type {Array<string>} 232 * @type {Array<string>}
182 */ 233 */
183 this.capitalLatin = 234 this.capitalLatin = [
184 [ 235 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
185 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 236 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
186 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' 237 ];
187 ]; 238 /**
188 /** 239 * @type {Array<string>}
189 * @type {Array<string>} 240 */
190 */ 241 this.smallLatin = [
191 this.smallLatin = 242 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
192 [ 243 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
193 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 244 // dotless i and j.
194 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 245 'ı', 'ȷ'
195 // dotless i and j. 246 ];
196 'ı', 'ȷ' 247 /**
197 ]; 248 * @type {Array<string>}
198 /** 249 */
199 * @type {Array<string>} 250 this.capitalLatinFullWidth = [
200 */ 251 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
201 this.capitalLatinFullWidth = 252 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
202 [ 253 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
203 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 254 ];
204 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' 255 /**
205 ]; 256 * @type {Array<string>}
206 /** 257 */
207 * @type {Array<string>} 258 this.smallLatinFullWidth = [
208 */ 259 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
209 this.smallLatinFullWidth = 260 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
210 [ 261 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
211 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 262 ];
212 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' 263 /**
213 ]; 264 * @type {Array<string>}
214 /** 265 */
215 * @type {Array<string>} 266 this.capitalLatinBold = [
216 */ 267 '𝐀', '𝐁', '𝐂', '𝐃', '𝐄', '𝐅', '𝐆', '𝐇', '𝐈', '𝐉', '𝐊', '𝐋', '𝐌',
217 this.capitalLatinBold = 268 '𝐍', '𝐎', '𝐏', '𝐐', '𝐑', '𝐒', '𝐓', '𝐔', '𝐕', '𝐖', '𝐗', '𝐘', '𝐙'
218 [ 269 ];
219 '𝐀', '𝐁', '𝐂', '𝐃', '𝐄', '𝐅', '𝐆', '𝐇', '𝐈', '𝐉', '𝐊', '𝐋', '𝐌', 270 /**
220 '𝐍', '𝐎', '𝐏', '𝐐', '𝐑', '𝐒', '𝐓', '𝐔', '𝐕', '𝐖', '𝐗', '𝐘', '𝐙' 271 * @type {Array<string>}
221 ]; 272 */
222 /** 273 this.smallLatinBold = [
223 * @type {Array<string>} 274 '𝐚', '𝐛', '𝐜', '𝐝', '𝐞', '𝐟', '𝐠', '𝐡', '𝐢', '𝐣', '𝐤', '𝐥', '𝐦',
224 */ 275 '𝐧', '𝐨', '𝐩', '𝐪', '𝐫', '𝐬', '𝐭', '𝐮', '𝐯', '𝐰', '𝐱', '𝐲', '𝐳'
225 this.smallLatinBold = 276 ];
226 [ 277 /**
227 '𝐚', '𝐛', '𝐜', '𝐝', '𝐞', '𝐟', '𝐠', '𝐡', '𝐢', '𝐣', '𝐤', '𝐥', '𝐦', 278 * @type {Array<string>}
228 '𝐧', '𝐨', '𝐩', '𝐪', '𝐫', '𝐬', '𝐭', '𝐮', '𝐯', '𝐰', '𝐱', '𝐲', '𝐳' 279 */
229 ]; 280 this.capitalLatinItalic = [
230 /** 281 '𝐴', '𝐵', '𝐶', '𝐷', '𝐸', '𝐹', '𝐺', '𝐻', '𝐼', '𝐽', '𝐾', '𝐿', '𝑀',
231 * @type {Array<string>} 282 '𝑁', '𝑂', '𝑃', '𝑄', '𝑅', '𝑆', '𝑇', '𝑈', '𝑉', '𝑊', '𝑋', '𝑌', '𝑍'
232 */ 283 ];
233 this.capitalLatinItalic = 284 /**
234 [ 285 * @type {Array<string>}
235 '𝐴', '𝐵', '𝐶', '𝐷', '𝐸', '𝐹', '𝐺', '𝐻', '𝐼', '𝐽', '𝐾', '𝐿', '𝑀', 286 */
236 '𝑁', '𝑂', '𝑃', '𝑄', '𝑅', '𝑆', '𝑇', '𝑈', '𝑉', '𝑊', '𝑋', '𝑌', '𝑍' 287 this.smallLatinItalic = [
237 ]; 288 '𝑎', '𝑏', '𝑐', '𝑑', '𝑒', '𝑓', '𝑔', 'ℎ', '𝑖', '𝑗', '𝑘', '𝑙', '𝑚', '𝑛', '𝑜',
238 /** 289 '𝑝', '𝑞', '𝑟', '𝑠', '𝑡', '𝑢', '𝑣', '𝑤', '𝑥', '𝑦', '𝑧',
239 * @type {Array<string>} 290 // dotless i and j.
240 */ 291 '𝚤', '𝚥'
241 this.smallLatinItalic = 292 ];
242 [ 293 /**
243 '𝑎', '𝑏', '𝑐', '𝑑', '𝑒', '𝑓', '𝑔', 'ℎ', '𝑖', '𝑗', '𝑘', '𝑙', '𝑚', 294 * @type {Array<string>}
244 '𝑛', '𝑜', '𝑝', '𝑞', '𝑟', '𝑠', '𝑡', '𝑢', '𝑣', '𝑤', '𝑥', '𝑦', '𝑧', 295 */
245 // dotless i and j. 296 this.capitalLatinScript = [
246 '𝚤', '𝚥' 297 '𝒜', 'ℬ', '𝒞', '𝒟', 'ℰ', 'ℱ', '𝒢', 'ℋ', 'ℐ', '𝒥', '𝒦', 'ℒ', 'ℳ', '𝒩', '𝒪',
247 ]; 298 '𝒫', '𝒬', 'ℛ', '𝒮', '𝒯', '𝒰', '𝒱', '𝒲', '𝒳', '𝒴', '𝒵',
248 /** 299 // Powerset Cap P.
249 * @type {Array<string>} 300 '℘'
250 */ 301 ];
251 this.capitalLatinScript = 302 /**
252 [ 303 * @type {Array<string>}
253 '𝒜', 'ℬ', '𝒞', '𝒟', 'ℰ', 'ℱ', '𝒢', 'ℋ', 'ℐ', '𝒥', '𝒦', 'ℒ', 'ℳ', 304 */
254 '𝒩', '𝒪', '𝒫', '𝒬', 'ℛ', '𝒮', '𝒯', '𝒰', '𝒱', '𝒲', '𝒳', '𝒴', '𝒵', 305 this.smallLatinScript = [
255 // Powerset Cap P. 306 '𝒶', '𝒷', '𝒸', '𝒹', 'ℯ', '𝒻', 'ℊ', '𝒽', '𝒾', '𝒿', '𝓀', '𝓁', '𝓂', '𝓃', 'ℴ',
256 '℘' 307 '𝓅', '𝓆', '𝓇', '𝓈', '𝓉', '𝓊', '𝓋', '𝓌', '𝓍', '𝓎', '𝓏',
257 ]; 308 // script small l
258 /** 309 'ℓ'
259 * @type {Array<string>} 310 ];
260 */ 311 /**
261 this.smallLatinScript = 312 * @type {Array<string>}
262 [ 313 */
263 '𝒶', '𝒷', '𝒸', '𝒹', 'ℯ', '𝒻', 'ℊ', '𝒽', '𝒾', '𝒿', '𝓀', '𝓁', '𝓂', 314 this.capitalLatinBoldScript = [
264 '𝓃', 'ℴ', '𝓅', '𝓆', '𝓇', '𝓈', '𝓉', '𝓊', '𝓋', '𝓌', '𝓍', '𝓎', '𝓏', 315 '𝓐', '𝓑', '𝓒', '𝓓', '𝓔', '𝓕', '𝓖', '𝓗', '𝓘', '𝓙', '𝓚', '𝓛', '𝓜',
265 // script small l 316 '𝓝', '𝓞', '𝓟', '𝓠', '𝓡', '𝓢', '𝓣', '𝓤', '𝓥', '𝓦', '𝓧', '𝓨', '𝓩'
266 'ℓ' 317 ];
267 ]; 318 /**
268 /** 319 * @type {Array<string>}
269 * @type {Array<string>} 320 */
270 */ 321 this.smallLatinBoldScript = [
271 this.capitalLatinBoldScript = 322 '𝓪', '𝓫', '𝓬', '𝓭', '𝓮', '𝓯', '𝓰', '𝓱', '𝓲', '𝓳', '𝓴', '𝓵', '𝓶',
272 [ 323 '𝓷', '𝓸', '𝓹', '𝓺', '𝓻', '𝓼', '𝓽', '𝓾', '𝓿', '𝔀', '𝔁', '𝔂', '𝔃'
273 '𝓐', '𝓑', '𝓒', '𝓓', '𝓔', '𝓕', '𝓖', '𝓗', '𝓘', '𝓙', '𝓚', '𝓛', '𝓜', 324 ];
274 '𝓝', '𝓞', '𝓟', '𝓠', '𝓡', '𝓢', '𝓣', '𝓤', '𝓥', '𝓦', '𝓧', '𝓨', '𝓩' 325 /**
275 ]; 326 * @type {Array<string>}
276 /** 327 */
277 * @type {Array<string>} 328 this.capitalLatinFraktur = [
278 */ 329 '𝔄', '𝔅', 'ℭ', '𝔇', '𝔈', '𝔉', '𝔊', 'ℌ', 'ℑ', '𝔍', '𝔎', '𝔏', '𝔐',
279 this.smallLatinBoldScript = 330 '𝔑', '𝔒', '𝔓', '𝔔', 'ℜ', '𝔖', '𝔗', '𝔘', '𝔙', '𝔚', '𝔛', '𝔜', 'ℨ'
280 [ 331 ];
281 '𝓪', '𝓫', '𝓬', '𝓭', '𝓮', '𝓯', '𝓰', '𝓱', '𝓲', '𝓳', '𝓴', '𝓵', '𝓶', 332 /**
282 '𝓷', '𝓸', '𝓹', '𝓺', '𝓻', '𝓼', '𝓽', '𝓾', '𝓿', '𝔀', '𝔁', '𝔂', '𝔃' 333 * @type {Array<string>}
283 ]; 334 */
284 /** 335 this.smallLatinFraktur = [
285 * @type {Array<string>} 336 '𝔞', '𝔟', '𝔠', '𝔡', '𝔢', '𝔣', '𝔤', '𝔥', '𝔦', '𝔧', '𝔨', '𝔩', '𝔪',
286 */ 337 '𝔫', '𝔬', '𝔭', '𝔮', '𝔯', '𝔰', '𝔱', '𝔲', '𝔳', '𝔴', '𝔵', '𝔶', '𝔷'
287 this.capitalLatinFraktur = 338 ];
288 [ 339 /**
289 '𝔄', '𝔅', 'ℭ', '𝔇', '𝔈', '𝔉', '𝔊', 'ℌ', 'ℑ', '𝔍', '𝔎', '𝔏', '𝔐', 340 * @type {Array<string>}
290 '𝔑', '𝔒', '𝔓', '𝔔', 'ℜ', '𝔖', '𝔗', '𝔘', '𝔙', '𝔚', '𝔛', '𝔜', 'ℨ' 341 */
291 ]; 342 this.capitalLatinDoubleStruck = [
292 /** 343 '𝔸', '𝔹', 'ℂ', '𝔻', '𝔼', '𝔽', '𝔾', 'ℍ', '𝕀', '𝕁', '𝕂', '𝕃', '𝕄',
293 * @type {Array<string>} 344 'ℕ', '𝕆', 'ℙ', 'ℚ', 'ℝ', '𝕊', '𝕋', '𝕌', '𝕍', '𝕎', '𝕏', '𝕐', 'ℤ'
294 */ 345 ];
295 this.smallLatinFraktur = 346 /**
296 [ 347 * @type {Array<string>}
297 '𝔞', '𝔟', '𝔠', '𝔡', '𝔢', '𝔣', '𝔤', '𝔥', '𝔦', '𝔧', '𝔨', '𝔩', '𝔪', 348 */
298 '𝔫', '𝔬', '𝔭', '𝔮', '𝔯', '𝔰', '𝔱', '𝔲', '𝔳', '𝔴', '𝔵', '𝔶', '𝔷' 349 this.smallLatinDoubleStruck = [
299 ]; 350 '𝕒', '𝕓', '𝕔', '𝕕', '𝕖', '𝕗', '𝕘', '𝕙', '𝕚', '𝕛', '𝕜', '𝕝', '𝕞',
300 /** 351 '𝕟', '𝕠', '𝕡', '𝕢', '𝕣', '𝕤', '𝕥', '𝕦', '𝕧', '𝕨', '𝕩', '𝕪', '𝕫'
301 * @type {Array<string>} 352 ];
302 */ 353 /**
303 this.capitalLatinDoubleStruck = 354 * @type {Array<string>}
304 [ 355 */
305 '𝔸', '𝔹', 'ℂ', '𝔻', '𝔼', '𝔽', '𝔾', 'ℍ', '𝕀', '𝕁', '𝕂', '𝕃', '𝕄', 356 this.capitalLatinBoldFraktur = [
306 'ℕ', '𝕆', 'ℙ', 'ℚ', 'ℝ', '𝕊', '𝕋', '𝕌', '𝕍', '𝕎', '𝕏', '𝕐', 'ℤ' 357 '𝕬', '𝕭', '𝕮', '𝕯', '𝕰', '𝕱', '𝕲', '𝕳', '𝕴', '𝕵', '𝕶', '𝕷', '𝕸',
307 ]; 358 '𝕹', '𝕺', '𝕻', '𝕼', '𝕽', '𝕾', '𝕿', '𝖀', '𝖁', '𝖂', '𝖃', '𝖄', '𝖅'
308 /** 359 ];
309 * @type {Array<string>} 360 /**
310 */ 361 * @type {Array<string>}
311 this.smallLatinDoubleStruck = 362 */
312 [ 363 this.smallLatinBoldFraktur = [
313 '𝕒', '𝕓', '𝕔', '𝕕', '𝕖', '𝕗', '𝕘', '𝕙', '𝕚', '𝕛', '𝕜', '𝕝', '𝕞', 364 '𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒',
314 '𝕟', '𝕠', '𝕡', '𝕢', '𝕣', '𝕤', '𝕥', '𝕦', '𝕧', '𝕨', '𝕩', '𝕪', '𝕫' 365 '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟'
315 ]; 366 ];
316 /** 367 /**
317 * @type {Array<string>} 368 * @type {Array<string>}
318 */ 369 */
319 this.capitalLatinBoldFraktur = 370 this.capitalLatinSansSerif = [
320 [ 371 '𝖠', '𝖡', '𝖢', '𝖣', '𝖤', '𝖥', '𝖦', '𝖧', '𝖨', '𝖩', '𝖪', '𝖫', '𝖬',
321 '𝕬', '𝕭', '𝕮', '𝕯', '𝕰', '𝕱', '𝕲', '𝕳', '𝕴', '𝕵', '𝕶', '𝕷', '𝕸', 372 '𝖭', '𝖮', '𝖯', '𝖰', '𝖱', '𝖲', '𝖳', '𝖴', '𝖵', '𝖶', '𝖷', '𝖸', '𝖹'
322 '𝕹', '𝕺', '𝕻', '𝕼', '𝕽', '𝕾', '𝕿', '𝖀', '𝖁', '𝖂', '𝖃', '𝖄', '𝖅' 373 ];
323 ]; 374 /**
324 /** 375 * @type {Array<string>}
325 * @type {Array<string>} 376 */
326 */ 377 this.smallLatinSansSerif = [
327 this.smallLatinBoldFraktur = 378 '𝖺', '𝖻', '𝖼', '𝖽', '𝖾', '𝖿', '𝗀', '𝗁', '𝗂', '𝗃', '𝗄', '𝗅', '𝗆',
328 [ 379 '𝗇', '𝗈', '𝗉', '𝗊', '𝗋', '𝗌', '𝗍', '𝗎', '𝗏', '𝗐', '𝗑', '𝗒', '𝗓'
329 '𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', 380 ];
330 '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟' 381 /**
331 ]; 382 * @type {Array<string>}
332 /** 383 */
333 * @type {Array<string>} 384 this.capitalLatinSansSerifBold = [
334 */ 385 '𝗔', '𝗕', '𝗖', '𝗗', '𝗘', '𝗙', '𝗚', '𝗛', '𝗜', '𝗝', '𝗞', '𝗟', '𝗠',
335 this.capitalLatinSansSerif = 386 '𝗡', '𝗢', '𝗣', '𝗤', '𝗥', '𝗦', '𝗧', '𝗨', '𝗩', '𝗪', '𝗫', '𝗬', '𝗭'
336 [ 387 ];
337 '𝖠', '𝖡', '𝖢', '𝖣', '𝖤', '𝖥', '𝖦', '𝖧', '𝖨', '𝖩', '𝖪', '𝖫', '𝖬', 388 /**
338 '𝖭', '𝖮', '𝖯', '𝖰', '𝖱', '𝖲', '𝖳', '𝖴', '𝖵', '𝖶', '𝖷', '𝖸', '𝖹' 389 * @type {Array<string>}
339 ]; 390 */
340 /** 391 this.smallLatinSansSerifBold = [
341 * @type {Array<string>} 392 '𝗮', '𝗯', '𝗰', '𝗱', '𝗲', '𝗳', '𝗴', '𝗵', '𝗶', '𝗷', '𝗸', '𝗹', '𝗺',
342 */ 393 '𝗻', '𝗼', '𝗽', '𝗾', '𝗿', '𝘀', '𝘁', '𝘂', '𝘃', '𝘄', '𝘅', '𝘆', '𝘇'
343 this.smallLatinSansSerif = 394 ];
344 [ 395 /**
345 '𝖺', '𝖻', '𝖼', '𝖽', '𝖾', '𝖿', '𝗀', '𝗁', '𝗂', '𝗃', '𝗄', '𝗅', '𝗆', 396 * @type {Array<string>}
346 '𝗇', '𝗈', '𝗉', '𝗊', '𝗋', '𝗌', '𝗍', '𝗎', '𝗏', '𝗐', '𝗑', '𝗒', '𝗓' 397 */
347 ]; 398 this.capitalLatinSansSerifItalic = [
348 /** 399 '𝘈', '𝘉', '𝘊', '𝘋', '𝘌', '𝘍', '𝘎', '𝘏', '𝘐', '𝘑', '𝘒', '𝘓', '𝘔',
349 * @type {Array<string>} 400 '𝘕', '𝘖', '𝘗', '𝘘', '𝘙', '𝘚', '𝘛', '𝘜', '𝘝', '𝘞', '𝘟', '𝘠', '𝘡'
350 */ 401 ];
351 this.capitalLatinSansSerifBold = 402 /**
352 [ 403 * @type {Array<string>}
353 '𝗔', '𝗕', '𝗖', '𝗗', '𝗘', '𝗙', '𝗚', '𝗛', '𝗜', '𝗝', '𝗞', '𝗟', '𝗠', 404 */
354 '𝗡', '𝗢', '𝗣', '𝗤', '𝗥', '𝗦', '𝗧', '𝗨', '𝗩', '𝗪', '𝗫', '𝗬', '𝗭' 405 this.smallLatinSansSerifItalic = [
355 ]; 406 '𝘢', '𝘣', '𝘤', '𝘥', '𝘦', '𝘧', '𝘨', '𝘩', '𝘪', '𝘫', '𝘬', '𝘭', '𝘮',
356 /** 407 '𝘯', '𝘰', '𝘱', '𝘲', '𝘳', '𝘴', '𝘵', '𝘶', '𝘷', '𝘸', '𝘹', '𝘺', '𝘻'
357 * @type {Array<string>} 408 ];
358 */ 409 /**
359 this.smallLatinSansSerifBold = 410 * @type {Array<string>}
360 [ 411 */
361 '𝗮', '𝗯', '𝗰', '𝗱', '𝗲', '𝗳', '𝗴', '𝗵', '𝗶', '𝗷', '𝗸', '𝗹', '𝗺', 412 this.capitalLatinMonospace = [
362 '𝗻', '𝗼', '𝗽', '𝗾', '𝗿', '𝘀', '𝘁', '𝘂', '𝘃', '𝘄', '𝘅', '𝘆', '𝘇' 413 '𝙰', '𝙱', '𝙲', '𝙳', '𝙴', '𝙵', '𝙶', '𝙷', '𝙸', '𝙹', '𝙺', '𝙻', '𝙼',
363 ]; 414 '𝙽', '𝙾', '𝙿', '𝚀', '𝚁', '𝚂', '𝚃', '𝚄', '𝚅', '𝚆', '𝚇', '𝚈', '𝚉'
364 /** 415 ];
365 * @type {Array<string>} 416 /**
366 */ 417 * @type {Array<string>}
367 this.capitalLatinSansSerifItalic = 418 */
368 [ 419 this.smallLatinMonospace = [
369 '𝘈', '𝘉', '𝘊', '𝘋', '𝘌', '𝘍', '𝘎', '𝘏', '𝘐', '𝘑', '𝘒', '𝘓', '𝘔', 420 '𝚊', '𝚋', '𝚌', '𝚍', '𝚎', '𝚏', '𝚐', '𝚑', '𝚒', '𝚓', '𝚔', '𝚕', '𝚖',
370 '𝘕', '𝘖', '𝘗', '𝘘', '𝘙', '𝘚', '𝘛', '𝘜', '𝘝', '𝘞', '𝘟', '𝘠', '𝘡' 421 '𝚗', '𝚘', '𝚙', '𝚚', '𝚛', '𝚜', '𝚝', '𝚞', '𝚟', '𝚠', '𝚡', '𝚢', '𝚣'
371 ]; 422 ];
372 /** 423 /**
373 * @type {Array<string>} 424 * @type {Array<string>}
374 */ 425 */
375 this.smallLatinSansSerifItalic = 426 this.latinDoubleStruckItalic = ['ⅅ', 'ⅆ', 'ⅇ', 'ⅈ', 'ⅉ'];
376 [
377 '𝘢', '𝘣', '𝘤', '𝘥', '𝘦', '𝘧', '𝘨', '𝘩', '𝘪', '𝘫', '𝘬', '𝘭', '𝘮',
378 '𝘯', '𝘰', '𝘱', '𝘲', '𝘳', '𝘴', '𝘵', '𝘶', '𝘷', '𝘸', '𝘹', '𝘺', '𝘻'
379 ];
380 /**
381 * @type {Array<string>}
382 */
383 this.capitalLatinMonospace =
384 [
385 '𝙰', '𝙱', '𝙲', '𝙳', '𝙴', '𝙵', '𝙶', '𝙷', '𝙸', '𝙹', '𝙺', '𝙻', '𝙼',
386 '𝙽', '𝙾', '𝙿', '𝚀', '𝚁', '𝚂', '𝚃', '𝚄', '𝚅', '𝚆', '𝚇', '𝚈', '𝚉'
387 ];
388 /**
389 * @type {Array<string>}
390 */
391 this.smallLatinMonospace =
392 [
393 '𝚊', '𝚋', '𝚌', '𝚍', '𝚎', '𝚏', '𝚐', '𝚑', '𝚒', '𝚓', '𝚔', '𝚕', '𝚖',
394 '𝚗', '𝚘', '𝚙', '𝚚', '𝚛', '𝚜', '𝚝', '𝚞', '𝚟', '𝚠', '𝚡', '𝚢', '𝚣'
395 ];
396 /**
397 * @type {Array<string>}
398 */
399 this.latinDoubleStruckItalic =
400 [
401 'ⅅ', 'ⅆ', 'ⅇ', 'ⅈ', 'ⅉ'
402 ];
403 427
404 // Greek Alphabets 428 // Greek Alphabets
405 /** 429 /**
406 * @type {Array<string>} 430 * @type {Array<string>}
407 */ 431 */
408 this.capitalGreek = 432 this.capitalGreek = [
409 [ 433 'Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ',
410 'Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 434 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω'
411 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω' 435 ];
412 ]; 436 /**
413 /** 437 * @type {Array<string>}
414 * @type {Array<string>} 438 */
415 */ 439 this.smallGreek = [
416 this.smallGreek = 440 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν',
417 [ 441 'ξ', 'ο', 'π', 'ρ', 'ς', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'
418 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 442 ];
419 'ξ', 'ο', 'π', 'ρ', 'ς', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω' 443 /**
420 ]; 444 * @type {Array<string>}
421 /** 445 */
422 * @type {Array<string>} 446 this.capitalGreekBold = [
423 */ 447 '𝚨', '𝚩', '𝚪', '𝚫', '𝚬', '𝚭', '𝚮', '𝚯', '𝚰', '𝚱', '𝚲', '𝚳',
424 this.capitalGreekBold = 448 '𝚴', '𝚵', '𝚶', '𝚷', '𝚸', '𝚺', '𝚻', '𝚼', '𝚽', '𝚾', '𝚿', '𝛀'
425 [ 449 ];
426 '𝚨', '𝚩', '𝚪', '𝚫', '𝚬', '𝚭', '𝚮', '𝚯', '𝚰', '𝚱', '𝚲', '𝚳', '𝚴', 450 /**
427 '𝚵', '𝚶', '𝚷', '𝚸', '𝚺', '𝚻', '𝚼', '𝚽', '𝚾', '𝚿', '𝛀' 451 * @type {Array<string>}
428 ]; 452 */
429 /** 453 this.smallGreekBold = [
430 * @type {Array<string>} 454 '𝛂', '𝛃', '𝛄', '𝛅', '𝛆', '𝛇', '𝛈', '𝛉', '𝛊', '𝛋', '𝛌', '𝛍', '𝛎',
431 */ 455 '𝛏', '𝛐', '𝛑', '𝛒', '𝛓', '𝛔', '𝛕', '𝛖', '𝛗', '𝛘', '𝛙', '𝛚'
432 this.smallGreekBold = 456 ];
433 [ 457 /**
434 '𝛂', '𝛃', '𝛄', '𝛅', '𝛆', '𝛇', '𝛈', '𝛉', '𝛊', '𝛋', '𝛌', '𝛍', '𝛎', 458 * @type {Array<string>}
435 '𝛏', '𝛐', '𝛑', '𝛒', '𝛓', '𝛔', '𝛕', '𝛖', '𝛗', '𝛘', '𝛙', '𝛚' 459 */
436 ]; 460 this.capitalGreekItalic = [
437 /** 461 '𝛢', '𝛣', '𝛤', '𝛥', '𝛦', '𝛧', '𝛨', '𝛩', '𝛪', '𝛫', '𝛬', '𝛭',
438 * @type {Array<string>} 462 '𝛮', '𝛯', '𝛰', '𝛱', '𝛲', '𝛴', '𝛵', '𝛶', '𝛷', '𝛸', '𝛹', '𝛺'
439 */ 463 ];
440 this.capitalGreekItalic = 464 /**
441 [ 465 * @type {Array<string>}
442 '𝛢', '𝛣', '𝛤', '𝛥', '𝛦', '𝛧', '𝛨', '𝛩', '𝛪', '𝛫', '𝛬', '𝛭', '𝛮', 466 */
443 '𝛯', '𝛰', '𝛱', '𝛲', '𝛴', '𝛵', '𝛶', '𝛷', '𝛸', '𝛹', '𝛺' 467 this.smallGreekItalic = [
444 ]; 468 '𝛼', '𝛽', '𝛾', '𝛿', '𝜀', '𝜁', '𝜂', '𝜃', '𝜄', '𝜅', '𝜆', '𝜇', '𝜈',
445 /** 469 '𝜉', '𝜊', '𝜋', '𝜌', '𝜍', '𝜎', '𝜏', '𝜐', '𝜑', '𝜒', '𝜓', '𝜔'
446 * @type {Array<string>} 470 ];
447 */ 471 /**
448 this.smallGreekItalic = 472 * @type {Array<string>}
449 [ 473 */
450 '𝛼', '𝛽', '𝛾', '𝛿', '𝜀', '𝜁', '𝜂', '𝜃', '𝜄', '𝜅', '𝜆', '𝜇', '𝜈', 474 this.capitalGreekSansSerifBold = [
451 '𝜉', '𝜊', '𝜋', '𝜌', '𝜍', '𝜎', '𝜏', '𝜐', '𝜑', '𝜒', '𝜓', '𝜔' 475 '𝝖', '𝝗', '𝝘', '𝝙', '𝝚', '𝝛', '𝝜', '𝝝', '𝝞', '𝝟', '𝝠', '𝝡',
452 ]; 476 '𝝢', '𝝣', '𝝤', '𝝥', '𝝦', '𝝨', '𝝩', '𝝪', '𝝫', '𝝬', '𝝭', '𝝮'
453 /** 477 ];
454 * @type {Array<string>} 478 /**
455 */ 479 * @type {Array<string>}
456 this.capitalGreekSansSerifBold = 480 */
457 [ 481 this.smallGreekSansSerifBold = [
458 '𝝖', '𝝗', '𝝘', '𝝙', '𝝚', '𝝛', '𝝜', '𝝝', '𝝞', '𝝟', '𝝠', '𝝡', '𝝢', 482 '𝝰', '𝝱', '𝝲', '𝝳', '𝝴', '𝝵', '𝝶', '𝝷', '𝝸', '𝝹', '𝝺', '𝝻', '𝝼',
459 '𝝣', '𝝤', '𝝥', '𝝦', '𝝨', '𝝩', '𝝪', '𝝫', '𝝬', '𝝭', '𝝮' 483 '𝝽', '𝝾', '𝝿', '𝞀', '𝞁', '𝞂', '𝞃', '𝞄', '𝞅', '𝞆', '𝞇', '𝞈'
460 ]; 484 ];
461 /** 485 /**
462 * @type {Array<string>} 486 * @type {Array<string>}
463 */ 487 */
464 this.smallGreekSansSerifBold = 488 this.greekDoubleStruck = ['ℼ', 'ℽ', 'ℾ', 'ℿ'];
465 [
466 '𝝰', '𝝱', '𝝲', '𝝳', '𝝴', '𝝵', '𝝶', '𝝷', '𝝸', '𝝹', '𝝺', '𝝻', '𝝼',
467 '𝝽', '𝝾', '𝝿', '𝞀', '𝞁', '𝞂', '𝞃', '𝞄', '𝞅', '𝞆', '𝞇', '𝞈'
468 ];
469 /**
470 * @type {Array<string>}
471 */
472 this.greekDoubleStruck =
473 [
474 'ℼ', 'ℽ', 'ℾ', 'ℿ'
475 ];
476 489
477 // Other alphabets. 490 // Other alphabets.
478 /** 491 /**
479 * @type {Array<string>} 492 * @type {Array<string>}
480 */ 493 */
481 this.hebrewLetters = 494 this.hebrewLetters = ['ℵ', 'ℶ', 'ℷ', 'ℸ'];
482 [
483 'ℵ', 'ℶ', 'ℷ', 'ℸ'
484 ];
485 495
486 //Operator symbols 496 // Operator symbols
487 /** 497 /**
488 * @type {Array<string>} 498 * @type {Array<string>}
489 */ 499 */
490 this.additions = 500 this.additions = [
491 [ 501 '+', '±', '∓', '∔', '∧', '∨', '∩', '∪', '⊌', '⊓', '⊔', '⊝', '⊞', '⊤', '⊥',
492 '+', '±', '∓', '∔', '∧', '∨', '∩', '∪', '⊌', '⊓', '⊔', '⊝', '⊞', 502 '⊺', '⊻', '⊼', '⋄', '⋎', '⋏', '⋒', '⋓', '△', '▷', '▽', '◁', '⩞', '⊕'
493 '⊤', '⊥', '⊺', '⊻', '⊼', '⋄', '⋎', '⋏', '⋒', '⋓', '△', '▷', '▽', 503 ];
494 '◁', '⩞', '⊕' 504 /**
495 ]; 505 * @type {Array<string>}
496 /** 506 */
497 * @type {Array<string>}
498 */
499 /** 507 /**
500 * Invisible operator for plus. 508 * Invisible operator for plus.
501 * @type {string} 509 * @type {string}
502 * @private 510 * @private
503 */ 511 */
504 this.invisiblePlus_ = cvox.SemanticUtil.numberToUnicode(0x2064); 512 this.invisiblePlus_ = cvox.SemanticUtil.numberToUnicode(0x2064);
505 this.additions.push(this.invisiblePlus_); 513 this.additions.push(this.invisiblePlus_);
506 /** 514 /**
507 * @type {Array<string>} 515 * @type {Array<string>}
508 */ 516 */
509 this.multiplications = 517 this.multiplications = [
510 [ 518 '†', '‡', '∐', '∗', '∘', '∙', '≀', '⊚', '⊛', '⊠', '⊡', '⋅', '⋆', '⋇', '⋉',
511 '†', '‡', '∐', '∗', '∘', '∙', '≀', '⊚', '⊛', '⊠', '⊡', '⋅', '⋆', '⋇', 519 '⋊', '⋋', '⋌', '○'
512 '⋉', '⋊', '⋋', '⋌', '○' 520 ];
513 ];
514 /** 521 /**
515 * Invisible operator for multiplication. 522 * Invisible operator for multiplication.
516 * @type {string} 523 * @type {string}
517 * @private 524 * @private
518 */ 525 */
519 this.invisibleTimes_ = cvox.SemanticUtil.numberToUnicode(0x2062); 526 this.invisibleTimes_ = cvox.SemanticUtil.numberToUnicode(0x2062);
520 this.multiplications.push(this.invisibleTimes_); 527 this.multiplications.push(this.invisibleTimes_);
521 /** 528 /**
522 * @type {Array<string>} 529 * @type {Array<string>}
523 */ 530 */
524 this.subtractions = 531 this.subtractions = [
525 [ 532 '-', '⁒', '⁻', '₋', '−', '∖', '∸', '≂', '⊖', '⊟', '➖',
526 '-', '⁒', '⁻', '₋', '−', '∖', '∸', '≂', '⊖', '⊟', '➖', '⨩', '⨪', 533 '⨩', '⨪', '⨫', '⨬', '⨺', '⩁', '⩬', '﹣', '-', '‐', '‑'
527 '⨫', '⨬', '⨺', '⩁', '⩬', '﹣', '-', '‐', '‑' 534 ];
528 ];
529 /** 535 /**
530 * @type {Array<string>} 536 * @type {Array<string>}
531 */ 537 */
532 this.divisions = 538 this.divisions = ['/', '÷', '⁄', '∕', '⊘', '⟌', '⦼', '⨸'];
533 [
534 '/', '÷', '⁄', '∕', '⊘', '⟌', '⦼', '⨸'
535 ];
536 /** 539 /**
537 * Invisible operator for function application. 540 * Invisible operator for function application.
538 * @type {string} 541 * @type {string}
539 * @private 542 * @private
540 */ 543 */
541 this.functionApplication_ = cvox.SemanticUtil.numberToUnicode(0x2061); 544 this.functionApplication_ = cvox.SemanticUtil.numberToUnicode(0x2061);
542 545
543 //Relation symbols 546 // Relation symbols
544 /** 547 /**
545 * @type {Array<string>} 548 * @type {Array<string>}
546 */ 549 */
547 this.equalities = 550 this.equalities = [
548 [ 551 '=', '~', '⁼', '₌', '∼', '∽', '≃', '≅', '≈', '≊', '≋', '≌', '≍',
549 '=', '~', '⁼', '₌', '∼', '∽', '≃', '≅', '≈', '≊', '≋', '≌', '≍', 552 '≎', '≑', '≒', '≓', '≔', '≕', '≖', '≗', '≘', '≙', '≚', '≛', '≜',
550 '≎', '≑', '≒', '≓', '≔', '≕', '≖', '≗', '≘', '≙', '≚', '≛', '≜', 553 '≝', '≞', '≟', '≡', '≣', '⧤', '⩦', '⩮', '⩯', '⩰', '⩱', '⩲', '⩳',
551 '≝', '≞', '≟', '≡', '≣', '⧤', '⩦', '⩮', '⩯', '⩰', '⩱', '⩲', '⩳', 554 '⩴', '⩵', '⩶', '⩷', '⩸', '⋕', '⩭', '⩪', '⩫', '⩬', '﹦', '='
552 '⩴', '⩵', '⩶', '⩷', '⩸', '⋕', '⩭', '⩪', '⩫', '⩬', '﹦', '=' 555 ];
553 ];
554 /** 556 /**
555 * @type {Array<string>} 557 * @type {Array<string>}
556 */ 558 */
557 this.inequalities = 559 this.inequalities = [
558 [ 560 '<', '>', '≁', '≂', '≄', '≆', '≇', '≉', '≏', '≐', '≠', '≢', '≤', '≥',
559 '<', '>', '≁', '≂', '≄', '≆', '≇', '≉', '≏', '≐', '≠', '≢', '≤', 561 '≦', '≧', '≨', '≩', '≪', '≫', '≬', '≭', '≮', '≯', '≰', '≱', '≲', '≳',
560 '≥', '≦', '≧', '≨', '≩', '≪', '≫', '≬', '≭', '≮', '≯', '≰', '≱', 562 '≴', '≵', '≶', '≷', '≸', '≹', '≺', '≻', '≼', '≽', '≾', '≿', '⊀', '⊁',
561 '≲', '≳', '≴', '≵', '≶', '≷', '≸', '≹', '≺', '≻', '≼', '≽', '≾', 563 '⋖', '⋗', '⋘', '⋙', '⋚', '⋛', '⋜', '⋝', '⋞', '⋟', '⋠', '⋡', '⋢', '⋣',
562 '≿', '⊀', '⊁', '⋖', '⋗', '⋘', '⋙', '⋚', '⋛', '⋜', '⋝', '⋞', '⋟', 564 '⋤', '⋥', '⋦', '⋧', '⋨', '⋩', '⩹', '⩺', '⩻', '⩼', '⩽', '⩾', '⩿', '⪀',
563 '⋠', '⋡', '⋢', '⋣', '⋤', '⋥', '⋦', '⋧', '⋨', '⋩', '⩹', '⩺', '⩻', 565 '⪁', '⪂', '⪃', '⪄', '⪅', '⪆', '⪇', '⪈', '⪉', '⪊', '⪋', '⪌', '⪍', '⪎',
564 '⩼', '⩽', '⩾', '⩿', '⪀', '⪁', '⪂', '⪃', '⪄', '⪅', '⪆', '⪇', '⪈', 566 '⪏', '⪐', '⪑', '⪒', '⪓', '⪔', '⪕', '⪖', '⪗', '⪘', '⪙', '⪚', '⪛', '⪜',
565 '⪉', '⪊', '⪋', '⪌', '⪍', '⪎', '⪏', '⪐', '⪑', '⪒', '⪓', '⪔', '⪕', 567 '⪝', '⪞', '⪟', '⪠', '⪡', '⪢', '⪣', '⪤', '⪥', '⪦', '⪧', '⪨', '⪩', '⪪',
566 '⪖', '⪗', '⪘', '⪙', '⪚', '⪛', '⪜', '⪝', '⪞', '⪟', '⪠', '⪡', '⪢', 568 '⪫', '⪬', '⪭', '⪮', '⪯', '⪰', '⪱', '⪲', '⪳', '⪴', '⪵', '⪶', '⪷', '⪸',
567 '⪣', '⪤', '⪥', '⪦', '⪧', '⪨', '⪩', '⪪', '⪫', '⪬', '⪭', '⪮', '⪯', 569 '⪹', '⪺', '⪻', '⪼', '⫷', '⫸', '⫹', '⫺', '⧀', '⧁', '﹤', '﹥', '<', '>'
568 '⪰', '⪱', '⪲', '⪳', '⪴', '⪵', '⪶', '⪷', '⪸', '⪹', '⪺', '⪻', '⪼', 570 ];
569 '⫷', '⫸', '⫹', '⫺', '⧀', '⧁', '﹤', '﹥', '<', '>'
570 ];
571 /** 571 /**
572 * @type {Array<string>} 572 * @type {Array<string>}
573 */ 573 */
574 this.relations = 574 this.relations = [
575 [ 575 // TODO (sorge): Add all the other relations.
576 // TODO (sorge): Add all the other relations. 576 ];
577 ];
578 /** 577 /**
579 * @type {Array<string>} 578 * @type {Array<string>}
580 */ 579 */
581 this.arrows = 580 this.arrows = [
582 [ 581 '←', '↑', '→', '↓', '↔', '↕', '↖', '↗', '↘', '↙', '↚', '↛', '↜', '↝', '↞',
583 '←', '↑', '→', '↓', '↔', '↕', '↖', '↗', '↘', '↙', '↚', '↛', '↜', 582 '↟', '↠', '↡', '↢', '↣', '↤', '↥', '↦', '↧', '↨', '↩', '↪', '↫', '↬', '↭',
584 '↝', '↞', '↟', '↠', '↡', '↢', '↣', '↤', '↥', '↦', '↧', '↨', '↩', 583 '↮', '↯', '↰', '↱', '↲', '↳', '↴', '↵', '↶', '↷', '↸', '↹', '↺', '↻', '⇄',
585 '↪', '↫', '↬', '↭', '↮', '↯', '↰', '↱', '↲', '↳', '↴', '↵', '↶', 584 '⇅', '⇆', '⇇', '⇈', '⇉', '⇊', '⇍', '⇎', '⇏', '⇐', '⇑', '⇒', '⇓', '⇔', '⇕',
586 '↷', '↸', '↹', '↺', '↻', '⇄', '⇅', '⇆', '⇇', '⇈', '⇉', '⇊', '⇍', 585 '⇖', '⇗', '⇘', '⇙', '⇚', '⇛', '⇜', '⇝', '⇞', '⇟', '⇠', '⇡', '⇢', '⇣', '⇤',
587 '⇎', '⇏', '⇐', '⇑', '⇒', '⇓', '⇔', '⇕', '⇖', '⇗', '⇘', '⇙', '⇚', 586 '⇥', '⇦', '⇧', '⇨', '⇩', '⇪', '⇫', '⇬', '⇭', '⇮', '⇯', '⇰', '⇱', '⇲', '⇳',
588 '⇛', '⇜', '⇝', '⇞', '⇟', '⇠', '⇡', '⇢', '⇣', '⇤', '⇥', '⇦', '⇧', 587 '⇴', '⇵', '⇶', '⇷', '⇸', '⇹', '⇺', '⇻', '⇼', '⇽', '⇾', '⇿', '⌁', '⌃', '⌄',
589 '⇨', '⇩', '⇪', '⇫', '⇬', '⇭', '⇮', '⇯', '⇰', '⇱', '⇲', '⇳', '⇴', 588 '⌤', '⎋', '➔', '➘', '➙', '➚', '➛', '➜', '➝', '➞', '➟', '➠', '➡', '➢', '➣',
590 '⇵', '⇶', '⇷', '⇸', '⇹', '⇺', '⇻', '⇼', '⇽', '⇾', '⇿', '⌁', '⌃', 589 '➤', '➥', '➦', '➧', '➨', '➩', '➪', '➫', '➬', '➭', '➮', '➯', '➱', '➲', '➳',
591 '⌄', '⌤', '⎋', '➔', '➘', '➙', '➚', '➛', '➜', '➝', '➞', '➟', '➠', 590 '➴', '➵', '➶', '➷', '➸', '➹', '➺', '➻', '➼', '➽', '➾', '⟰', '⟱', '⟲', '⟳',
592 '➡', '➢', '➣', '➤', '➥', '➦', '➧', '➨', '➩', '➪', '➫', '➬', '➭', 591 '⟴', '⟵', '⟶', '⟷', '⟸', '⟹', '⟺', '⟻', '⟼', '⟽', '⟾', '⟿', '⤀', '⤁', '⤂',
593 '➮', '➯', '➱', '➲', '➳', '➴', '➵', '➶', '➷', '➸', '➹', '➺', '➻', 592 '⤃', '⤄', '⤅', '⤆', '⤇', '⤈', '⤉', '⤊', '⤋', '⤌', '⤍', '⤎', '⤏', '⤐', '⤑',
594 '➼', '➽', '➾', '⟰', '⟱', '⟲', '⟳', '⟴', '⟵', '⟶', '⟷', '⟸', '⟹', 593 '⤒', '⤓', '⤔', '⤕', '⤖', '⤗', '⤘', '⤙', '⤚', '⤛', '⤜', '⤝', '⤞', '⤟', '⤠',
595 '⟺', '⟻', '⟼', '⟽', '⟾', '⟿', '⤀', '⤁', '⤂', '⤃', '⤄', '⤅', '⤆', 594 '⤡', '⤢', '⤣', '⤤', '⤥', '⤦', '⤧', '⤨', '⤩', '⤪', '⤭', '⤮', '⤯', '⤰', '⤱',
596 '⤇', '⤈', '⤉', '⤊', '⤋', '⤌', '⤍', '⤎', '⤏', '⤐', '⤑', '⤒', '⤓', 595 '⤲', '⤳', '⤴', '⤵', '⤶', '⤷', '⤸', '⤹', '⤺', '⤻', '⤼', '⤽', '⤾', '⤿', '⥀',
597 '⤔', '⤕', '⤖', '⤗', '⤘', '⤙', '⤚', '⤛', '⤜', '⤝', '⤞', '⤟', '⤠', 596 '⥁', '⥂', '⥃', '⥄', '⥅', '⥆', '⥇', '⥈', '⥉', '⥰', '⥱', '⥲', '⥳', '⥴', '⥵',
598 '⤡', '⤢', '⤣', '⤤', '⤥', '⤦', '⤧', '⤨', '⤩', '⤪', '⤭', '⤮', '⤯', 597 '⥶', '⥷', '⥸', '⥹', '⥺', '⥻', '⦳', '⦴', '⦽', '⧪', '⧬', '⧭', '⨗', '⬀', '⬁',
599 '⤰', '⤱', '⤲', '⤳', '⤴', '⤵', '⤶', '⤷', '⤸', '⤹', '⤺', '⤻', '⤼', 598 '⬂', '⬃', '⬄', '⬅', '⬆', '⬇', '⬈', '⬉', '⬊', '⬋', '⬌', '⬍', '⬎', '⬏', '⬐',
600 '⤽', '⤾', '⤿', '⥀', '⥁', '⥂', '⥃', '⥄', '⥅', '⥆', '⥇', '⥈', '⥉', 599 '⬑', '⬰', '⬱', '⬲', '⬳', '⬴', '⬵', '⬶', '⬷', '⬸', '⬹', '⬺', '⬻', '⬼', '⬽',
601 '⥰', '⥱', '⥲', '⥳', '⥴', '⥵', '⥶', '⥷', '⥸', '⥹', '⥺', '⥻', '⦳', 600 '⬾', '⬿', '⭀', '⭁', '⭂', '⭃', '⭄', '⭅', '⭆', '⭇', '⭈', '⭉', '⭊', '⭋', '⭌',
602 '⦴', '⦽', '⧪', '⧬', '⧭', '⨗', '⬀', '⬁', '⬂', '⬃', '⬄', '⬅', '⬆', 601 '←', '↑', '→', '↓',
603 '⬇', '⬈', '⬉', '⬊', '⬋', '⬌', '⬍', '⬎', '⬏', '⬐', '⬑', '⬰', '⬱', 602 // Harpoons
604 '⬲', '⬳', '⬴', '⬵', '⬶', '⬷', '⬸', '⬹', '⬺', '⬻', '⬼', '⬽', '⬾', 603 '↼', '↽', '↾', '↿', '⇀', '⇁', '⇂', '⇃', '⇋', '⇌', '⥊', '⥋', '⥌', '⥍', '⥎',
605 '⬿', '⭀', '⭁', '⭂', '⭃', '⭄', '⭅', '⭆', '⭇', '⭈', '⭉', '⭊', '⭋', 604 '⥏', '⥐', '⥑', '⥒', '⥓', '⥔', '⥕', '⥖', '⥗', '⥘', '⥙', '⥚', '⥛', '⥜', '⥝',
606 '⭌', '←', '↑', '→', '↓', 605 '⥞', '⥟', '⥠', '⥡', '⥢', '⥣', '⥤', '⥥', '⥦', '⥧', '⥨', '⥩', '⥪', '⥫', '⥬',
607 // Harpoons 606 '⥭', '⥮', '⥯', '⥼', '⥽', '⥾', '⥿'
608 '↼', '↽', '↾', '↿', '⇀', '⇁', '⇂', '⇃', '⇋', '⇌', '⥊', '⥋', '⥌', 607 ];
609 '⥍', '⥎', '⥏', '⥐', '⥑', '⥒', '⥓', '⥔', '⥕', '⥖', '⥗', '⥘', '⥙',
610 '⥚', '⥛', '⥜', '⥝', '⥞', '⥟', '⥠', '⥡', '⥢', '⥣', '⥤', '⥥', '⥦',
611 '⥧', '⥨', '⥩', '⥪', '⥫', '⥬', '⥭', '⥮', '⥯', '⥼', '⥽', '⥾', '⥿'
612 ];
613 608
614 //Big operation symbols 609 // Big operation symbols
615 /** 610 /**
616 * @type {Array<string>} 611 * @type {Array<string>}
617 */ 612 */
618 this.sumOps = 613 this.sumOps = [
619 [ 614 '⅀', // double struck
620 '⅀', // double struck 615 '∏', '∐', '∑', '⋀', '⋁', '⋂', '⋃', '⨀', '⨁', '⨂', '⨃',
621 '∏', '∐', '∑', '⋀', '⋁', '⋂', '⋃', '⨀', '⨁', '⨂', '⨃', '⨄', '⨅', 616 '⨄', '⨅', '⨆', '⨇', '⨈', '⨉', '⨊', '⨋', '⫼', '⫿'
622 '⨆', '⨇', '⨈', '⨉', '⨊', '⨋', '⫼', '⫿' 617 ];
623 ];
624 /** 618 /**
625 * @type {Array<string>} 619 * @type {Array<string>}
626 */ 620 */
627 this.intOps = 621 this.intOps = [
628 [ 622 '∫', '∬', '∭', '∮', '∯', '∰', '∱', '∲', '∳', '⨌', '⨍', '⨎', '⨏',
629 '∫', '∬', '∭', '∮', '∯', '∰', '∱', '∲', '∳', '⨌', '⨍', '⨎', '⨏', 623 '⨐', '⨑', '⨒', '⨓', '⨔', '⨕', '⨖', '⨗', '⨘', '⨙', '⨚', '⨛', '⨜'
630 '⨐', '⨑', '⨒', '⨓', '⨔', '⨕', '⨖', '⨗', '⨘', '⨙', '⨚', '⨛', '⨜' 624 ];
631 ];
632 /** 625 /**
633 * @type {Array<string>} 626 * @type {Array<string>}
634 */ 627 */
635 this.prefixOps = 628 this.prefixOps =
636 // TODO (sorge) Insert nabla, differential operators etc. 629 // TODO (sorge) Insert nabla, differential operators etc.
637 [ 630 ['∀', '∃'];
638 '∀', '∃'
639 ];
640 /** 631 /**
641 * @type {Array<string>} 632 * @type {Array<string>}
642 */ 633 */
643 this.operatorBits = 634 this.operatorBits =
644 // TODO (sorge) What to do if single glyphs of big ops occur on their own. 635 // TODO (sorge) What to do if single glyphs of big ops occur on their own.
645 [ 636 ['⌠', '⌡', '⎶', '⎪', '⎮', '⎯', '⎲', '⎳', '⎷'];
646 '⌠', '⌡', '⎶', '⎪', '⎮', '⎯', '⎲', '⎳', '⎷'
647 ];
648 637
649 // Accents. 638 // Accents.
650 // TODO (sorge) Add accented characters. 639 // TODO (sorge) Add accented characters.
651 640
652 // Numbers. 641 // Numbers.
653 // Digits. 642 // Digits.
654 /** 643 /**
655 * @type {Array<string>} 644 * @type {Array<string>}
656 */ 645 */
657 this.digitsNormal = 646 this.digitsNormal = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
658 [
659 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
660 ];
661 /** 647 /**
662 * @type {Array<string>} 648 * @type {Array<string>}
663 */ 649 */
664 this.digitsFullWidth = 650 this.digitsFullWidth =
665 [ 651 ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
666 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
667 ];
668 /** 652 /**
669 * @type {Array<string>} 653 * @type {Array<string>}
670 */ 654 */
671 this.digitsBold = 655 this.digitsBold = ['𝟎', '𝟏', '𝟐', '𝟑', '𝟒', '𝟓', '𝟔', '𝟕', '𝟖', '𝟗'];
672 [
673 '𝟎', '𝟏', '𝟐', '𝟑', '𝟒', '𝟓', '𝟔', '𝟕', '𝟖', '𝟗'
674 ];
675 /** 656 /**
676 * @type {Array<string>} 657 * @type {Array<string>}
677 */ 658 */
678 this.digitsDoubleStruck = 659 this.digitsDoubleStruck = ['𝟘', '𝟙', '𝟚', '𝟛', '𝟜', '𝟝', '𝟞', '𝟟', '𝟠', '𝟡'];
679 [
680 '𝟘', '𝟙', '𝟚', '𝟛', '𝟜', '𝟝', '𝟞', '𝟟', '𝟠', '𝟡'
681 ];
682 /** 660 /**
683 * @type {Array<string>} 661 * @type {Array<string>}
684 */ 662 */
685 this.digitsSansSerif = 663 this.digitsSansSerif = ['𝟢', '𝟣', '𝟤', '𝟥', '𝟦', '𝟧', '𝟨', '𝟩', '𝟪', '𝟫'];
686 [
687 '𝟢', '𝟣', '𝟤', '𝟥', '𝟦', '𝟧', '𝟨', '𝟩', '𝟪', '𝟫'
688 ];
689 /** 664 /**
690 * @type {Array<string>} 665 * @type {Array<string>}
691 */ 666 */
692 this.digitsSansSerifBold = 667 this.digitsSansSerifBold = ['𝟬', '𝟭', '𝟮', '𝟯', '𝟰', '𝟱', '𝟲', '𝟳', '𝟴', '𝟵'];
693 [
694 '𝟬', '𝟭', '𝟮', '𝟯', '𝟰', '𝟱', '𝟲', '𝟳', '𝟴', '𝟵'
695 ];
696 /** 668 /**
697 * @type {Array<string>} 669 * @type {Array<string>}
698 */ 670 */
699 this.digitsMonospace = 671 this.digitsMonospace = ['𝟶', '𝟷', '𝟸', '𝟹', '𝟺', '𝟻', '𝟼', '𝟽', '𝟾', '𝟿'];
700 [
701 '𝟶', '𝟷', '𝟸', '𝟹', '𝟺', '𝟻', '𝟼', '𝟽', '𝟾', '𝟿'
702 ];
703 /** 672 /**
704 * @type {Array<string>} 673 * @type {Array<string>}
705 */ 674 */
706 this.digitsSuperscript = 675 this.digitsSuperscript = ['²', '³', '¹', '⁰', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'];
707 [
708 '²', '³', '¹', '⁰', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'
709 ];
710 /** 676 /**
711 * @type {Array<string>} 677 * @type {Array<string>}
712 */ 678 */
713 this.digitsSubscript = 679 this.digitsSubscript = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'];
714 [
715 '₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'
716 ];
717 /** 680 /**
718 * @type {Array<string>} 681 * @type {Array<string>}
719 */ 682 */
720 this.fractions = 683 this.fractions = [
721 [ 684 '¼', '½', '¾', '⅐', '⅑', '⅒', '⅓', '⅔', '⅕', '⅖',
722 '¼', '½', '¾', '⅐', '⅑', '⅒', '⅓', '⅔', '⅕', '⅖', '⅗', '⅘', '⅙', 685 '⅗', '⅘', '⅙', '⅚', '⅛', '⅜', '⅝', '⅞', '⅟', '↉'
723 '⅚', '⅛', '⅜', '⅝', '⅞', '⅟', '↉' 686 ];
724 ];
725 /** 687 /**
726 * @type {Array<string>} 688 * @type {Array<string>}
727 */ 689 */
728 this.enclosedNumbers = 690 this.enclosedNumbers =
729 // Encircled numbers. 691 // Encircled numbers.
730 [ 692 [
731 '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬', 693 '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪',
732 '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳', '⓪', '⓫', '⓬', '⓭', '⓮', '⓯', 694 '⑫', '⑬', '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳', '⓪', '⓫',
733 '⓰', '⓱', '⓲', '⓳', '⓴', '⓵', '⓶', '⓷', '⓸', '⓹', '⓺', '⓻', '⓼', 695 '⓬', '⓭', '⓮', '⓯', '⓰', '⓱', '⓲', '⓳', '⓴', '⓵', '⓶',
734 '⓽', '⓾', '⓿', '❶', '❷', '❸', '❹', '❺', '❻', '❼', '❽', '❾', '❿', 696 '⓷', '⓸', '⓹', '⓺', '⓻', '⓼', '⓽', '⓾', '⓿', '❶', '❷',
735 '➀', '➁', '➂', '➃', '➄', '➅', '➆', '➇', '➈', '➉', '➊', '➋', '➌', 697 '❸', '❹', '❺', '❻', '❼', '❽', '❾', '❿', '➀', '➁', '➂',
736 '➍', '➎', '➏', '➐', '➑', '➒', '➓', '㉈', '㉉', '㉊', '㉋', '㉌', 698 '➃', '➄', '➅', '➆', '➇', '➈', '➉', '➊', '➋', '➌', '➍',
699 '➎', '➏', '➐', '➑', '➒', '➓', '㉈', '㉉', '㉊', '㉋', '㉌',
737 '㉍', '㉎', '㉏', '㉑', '㉒', '㉓', '㉔', '㉕', '㉖', '㉗', '㉘', 700 '㉍', '㉎', '㉏', '㉑', '㉒', '㉓', '㉔', '㉕', '㉖', '㉗', '㉘',
738 '㉙', '㉚', '㉛', '㉜', '㉝', '㉞', '㉟', '㊱', '㊲', '㊳', '㊴', 701 '㉙', '㉚', '㉛', '㉜', '㉝', '㉞', '㉟', '㊱', '㊲', '㊳', '㊴',
739 '㊵', '㊶', '㊷', '㊸', '㊹', '㊺', '㊻', '㊼', '㊽', '㊾', '㊿']; 702 '㊵', '㊶', '㊷', '㊸', '㊹', '㊺', '㊻', '㊼', '㊽', '㊾', '㊿'
703 ];
740 /** 704 /**
741 * @type {Array<string>} 705 * @type {Array<string>}
742 */ 706 */
743 this.fencedNumbers = 707 this.fencedNumbers =
744 // Numbers in Parenthesis. 708 // Numbers in Parenthesis.
745 [ 709 [
746 '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀', 710 '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽',
747 '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇' 711 '⑾', '⑿', '⒀', '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇'
748 ]; 712 ];
749 /** 713 /**
750 * @type {Array<string>} 714 * @type {Array<string>}
751 */ 715 */
752 this.punctuatedNumbers = 716 this.punctuatedNumbers =
753 // Numbers with other punctuation. 717 // Numbers with other punctuation.
754 ['⒈', '⒉', '⒊', '⒋', '⒌', '⒍', '⒎', '⒏', '⒐', '⒑', '⒒', '⒓', '⒔', 718 [
755 '⒕', '⒖', '⒗', '⒘', '⒙', '⒚', '⒛', // full stop. 719 '⒈', '⒉', '⒊', '⒋', '⒌', '⒍', '⒎', '⒏', '⒐', '⒑', '⒒',
756 '🄀', '🄁', '🄂', '🄃', '🄄', '🄅', '🄆', '🄇', '🄈', '🄉', '🄊' // comma. 720 '⒓', '⒔', '⒕', '⒖', '⒗', '⒘', '⒙', '⒚', '⒛', // full stop.
721 '🄀', '🄁', '🄂', '🄃', '🄄', '🄅', '🄆', '🄇', '🄈', '🄉', '🄊' // comma.
757 ]; 722 ];
758 /** Array of all single digits. 723 /** Array of all single digits.
759 * @type {Array<string>} 724 * @type {Array<string>}
760 */ 725 */
761 this.digits = this.digitsNormal.concat( 726 this.digits = this.digitsNormal.concat(
762 this.digitsFullWidth, this.digitsBold, this.digitsDoubleStruck, 727 this.digitsFullWidth, this.digitsBold, this.digitsDoubleStruck,
763 this.digitsSansSerif, this.digitsSansSerifBold, this.digitsMonospace); 728 this.digitsSansSerif, this.digitsSansSerifBold, this.digitsMonospace);
764 /** Array of all non-digit number symbols. 729 /** Array of all non-digit number symbols.
765 * @type {Array<string>} 730 * @type {Array<string>}
766 */ 731 */
767 this.numbers = this.fractions.concat( 732 this.numbers = this.fractions.concat(
768 this.digitsSuperscript, this.digitsSubscript, 733 this.digitsSuperscript, this.digitsSubscript, this.enclosedNumbers,
769 this.enclosedNumbers, this.fencedNumbers, this.punctuatedNumbers); 734 this.fencedNumbers, this.punctuatedNumbers);
770 /** Array of all number symbols. 735 /** Array of all number symbols.
771 * @type {Array<string>} 736 * @type {Array<string>}
772 */ 737 */
773 this.allNumbers = this.digits.concat(this.numbers); 738 this.allNumbers = this.digits.concat(this.numbers);
774 739
775 // Functions. 740 // Functions.
776 /** 741 /**
777 * @type {Array<string>} 742 * @type {Array<string>}
778 */ 743 */
779 this.trigonometricFunctions = 744 this.trigonometricFunctions = [
780 [ 745 'cos', 'cot', 'csc', 'sec', 'sin', 'tan', 'arccos', 'arccot', 'arccsc',
781 'cos', 'cot', 'csc', 'sec', 'sin', 'tan', 'arccos', 'arccot', 746 'arcsec', 'arcsin', 'arctan'
782 'arccsc', 'arcsec', 'arcsin', 'arctan' 747 ];
783 ];
784 /** 748 /**
785 * @type {Array<string>} 749 * @type {Array<string>}
786 */ 750 */
787 this.hyperbolicFunctions = 751 this.hyperbolicFunctions = [
788 [ 752 'cosh', 'coth', 'csch', 'sech', 'sinh', 'tanh', 'arcosh', 'arcoth',
789 'cosh', 'coth', 'csch', 'sech', 'sinh', 'tanh', 753 'arcsch', 'arsech', 'arsinh', 'artanh', 'arccosh', 'arccoth', 'arccsch',
790 'arcosh', 'arcoth', 'arcsch', 'arsech', 'arsinh', 'artanh', 754 'arcsech', 'arcsinh', 'arctanh'
791 'arccosh', 'arccoth', 'arccsch', 'arcsech', 'arcsinh', 'arctanh' 755 ];
792 ];
793 /** 756 /**
794 * @type {Array<string>} 757 * @type {Array<string>}
795 */ 758 */
796 this.algebraicFunctions = 759 this.algebraicFunctions = ['deg', 'det', 'dim', 'hom', 'ker', 'Tr', 'tr'];
797 [
798 'deg', 'det', 'dim', 'hom', 'ker', 'Tr', 'tr'
799 ];
800 /** 760 /**
801 * @type {Array<string>} 761 * @type {Array<string>}
802 */ 762 */
803 this.elementaryFunctions = 763 this.elementaryFunctions =
804 [ 764 ['log', 'ln', 'lg', 'exp', 'expt', 'gcd', 'gcd', 'arg', 'im', 're', 'Pr'];
805 'log', 'ln', 'lg', 'exp', 'expt', 'gcd', 'gcd', 'arg', 'im', 're', 'Pr'
806 ];
807 /** All predefined prefix functions. 765 /** All predefined prefix functions.
808 * @type {Array<string>} 766 * @type {Array<string>}
809 */ 767 */
810 this.prefixFunctions = this.trigonometricFunctions.concat( 768 this.prefixFunctions = this.trigonometricFunctions.concat(
811 this.hyperbolicFunctions, 769 this.hyperbolicFunctions, this.algebraicFunctions,
812 this.algebraicFunctions, 770 this.elementaryFunctions);
813 this.elementaryFunctions
814 );
815 /** Limit functions are handled separately as they can have lower (and upper) 771 /** Limit functions are handled separately as they can have lower (and upper)
816 * limiting expressions. 772 * limiting expressions.
817 * @type {Array<string>} 773 * @type {Array<string>}
818 */ 774 */
819 this.limitFunctions = 775 this.limitFunctions = [
820 [ 776 'inf', 'lim', 'liminf', 'limsup', 'max', 'min', 'sup', 'injlim', 'projlim'
821 'inf', 'lim', 'liminf', 'limsup', 'max', 'min', 'sup', 'injlim', 777 ];
822 'projlim'
823 ];
824 /** 778 /**
825 * @type {Array<string>} 779 * @type {Array<string>}
826 */ 780 */
827 this.infixFunctions = 781 this.infixFunctions = ['mod', 'rem'];
828 [
829 'mod', 'rem'
830 ];
831 /** 782 /**
832 * Default assignments of semantic attributes. 783 * Default assignments of semantic attributes.
833 * @type {Array<{set: Array<string>, 784 * @type {Array<{set: Array<string>,
834 * role: cvox.SemanticAttr.Role, 785 * role: cvox.SemanticAttr.Role,
835 * type: cvox.SemanticAttr.Type, 786 * type: cvox.SemanticAttr.Type,
836 * font: cvox.SemanticAttr.Font}>} The semantic meaning of the symbol. 787 * font: cvox.SemanticAttr.Font}>} The semantic meaning of the symbol.
837 * @private 788 * @private
838 */ 789 */
839 this.symbolSetToSemantic_ = [ 790 this.symbolSetToSemantic_ = [
840 // Punctuation 791 // Punctuation
841 {set: this.generalPunctuations, 792 {
842 type: cvox.SemanticAttr.Type.PUNCTUATION, 793 set: this.generalPunctuations,
843 role: cvox.SemanticAttr.Role.UNKNOWN 794 type: cvox.SemanticAttr.Type.PUNCTUATION,
844 }, 795 role: cvox.SemanticAttr.Role.UNKNOWN
845 {set: this.ellipses, 796 },
846 type: cvox.SemanticAttr.Type.PUNCTUATION, 797 {
847 role: cvox.SemanticAttr.Role.ELLIPSIS 798 set: this.ellipses,
848 }, 799 type: cvox.SemanticAttr.Type.PUNCTUATION,
849 {set: this.fullStops, 800 role: cvox.SemanticAttr.Role.ELLIPSIS
850 type: cvox.SemanticAttr.Type.PUNCTUATION, 801 },
851 role: cvox.SemanticAttr.Role.FULLSTOP 802 {
852 }, 803 set: this.fullStops,
853 {set: this.dashes, 804 type: cvox.SemanticAttr.Type.PUNCTUATION,
854 type: cvox.SemanticAttr.Type.PUNCTUATION, 805 role: cvox.SemanticAttr.Role.FULLSTOP
855 role: cvox.SemanticAttr.Role.DASH 806 },
856 }, 807 {
857 {set: this.primes, 808 set: this.dashes,
858 type: cvox.SemanticAttr.Type.PUNCTUATION, 809 type: cvox.SemanticAttr.Type.PUNCTUATION,
859 role: cvox.SemanticAttr.Role.PRIME 810 role: cvox.SemanticAttr.Role.DASH
811 },
812 {
813 set: this.primes,
814 type: cvox.SemanticAttr.Type.PUNCTUATION,
815 role: cvox.SemanticAttr.Role.PRIME
860 }, 816 },
861 // Fences 817 // Fences
862 {set: this.leftFences, 818 {
863 type: cvox.SemanticAttr.Type.FENCE, 819 set: this.leftFences,
864 role: cvox.SemanticAttr.Role.OPEN 820 type: cvox.SemanticAttr.Type.FENCE,
865 }, 821 role: cvox.SemanticAttr.Role.OPEN
866 {set: this.rightFences, 822 },
867 type: cvox.SemanticAttr.Type.FENCE, 823 {
868 role: cvox.SemanticAttr.Role.CLOSE 824 set: this.rightFences,
869 }, 825 type: cvox.SemanticAttr.Type.FENCE,
870 {set: this.topFences, 826 role: cvox.SemanticAttr.Role.CLOSE
871 type: cvox.SemanticAttr.Type.FENCE, 827 },
872 role: cvox.SemanticAttr.Role.TOP 828 {
873 }, 829 set: this.topFences,
874 {set: this.bottomFences, 830 type: cvox.SemanticAttr.Type.FENCE,
875 type: cvox.SemanticAttr.Type.FENCE, 831 role: cvox.SemanticAttr.Role.TOP
876 role: cvox.SemanticAttr.Role.BOTTOM 832 },
877 }, 833 {
878 {set: this.neutralFences, 834 set: this.bottomFences,
879 type: cvox.SemanticAttr.Type.FENCE, 835 type: cvox.SemanticAttr.Type.FENCE,
880 role: cvox.SemanticAttr.Role.NEUTRAL 836 role: cvox.SemanticAttr.Role.BOTTOM
837 },
838 {
839 set: this.neutralFences,
840 type: cvox.SemanticAttr.Type.FENCE,
841 role: cvox.SemanticAttr.Role.NEUTRAL
881 }, 842 },
882 // Single characters. 843 // Single characters.
883 // Latin alphabets. 844 // Latin alphabets.
884 {set: this.smallLatin, 845 {
885 type: cvox.SemanticAttr.Type.IDENTIFIER, 846 set: this.smallLatin,
886 role: cvox.SemanticAttr.Role.LATINLETTER, 847 type: cvox.SemanticAttr.Type.IDENTIFIER,
887 font: cvox.SemanticAttr.Font.NORMAL 848 role: cvox.SemanticAttr.Role.LATINLETTER,
888 }, 849 font: cvox.SemanticAttr.Font.NORMAL
889 {set: this.capitalLatin, 850 },
890 type: cvox.SemanticAttr.Type.IDENTIFIER, 851 {
891 role: cvox.SemanticAttr.Role.LATINLETTER, 852 set: this.capitalLatin,
892 font: cvox.SemanticAttr.Font.NORMAL 853 type: cvox.SemanticAttr.Type.IDENTIFIER,
893 }, 854 role: cvox.SemanticAttr.Role.LATINLETTER,
894 {set: this.smallLatinFullWidth, 855 font: cvox.SemanticAttr.Font.NORMAL
895 type: cvox.SemanticAttr.Type.IDENTIFIER, 856 },
896 role: cvox.SemanticAttr.Role.LATINLETTER, 857 {
897 font: cvox.SemanticAttr.Font.NORMAL 858 set: this.smallLatinFullWidth,
898 }, 859 type: cvox.SemanticAttr.Type.IDENTIFIER,
899 {set: this.capitalLatinFullWidth, 860 role: cvox.SemanticAttr.Role.LATINLETTER,
900 type: cvox.SemanticAttr.Type.IDENTIFIER, 861 font: cvox.SemanticAttr.Font.NORMAL
901 role: cvox.SemanticAttr.Role.LATINLETTER, 862 },
902 font: cvox.SemanticAttr.Font.NORMAL 863 {
903 }, 864 set: this.capitalLatinFullWidth,
904 {set: this.smallLatinBold, 865 type: cvox.SemanticAttr.Type.IDENTIFIER,
905 type: cvox.SemanticAttr.Type.IDENTIFIER, 866 role: cvox.SemanticAttr.Role.LATINLETTER,
906 role: cvox.SemanticAttr.Role.LATINLETTER, 867 font: cvox.SemanticAttr.Font.NORMAL
907 font: cvox.SemanticAttr.Font.BOLD 868 },
908 }, 869 {
909 {set: this.capitalLatinBold, 870 set: this.smallLatinBold,
910 type: cvox.SemanticAttr.Type.IDENTIFIER, 871 type: cvox.SemanticAttr.Type.IDENTIFIER,
911 role: cvox.SemanticAttr.Role.LATINLETTER, 872 role: cvox.SemanticAttr.Role.LATINLETTER,
912 font: cvox.SemanticAttr.Font.BOLD 873 font: cvox.SemanticAttr.Font.BOLD
913 }, 874 },
914 {set: this.smallLatinItalic, 875 {
915 type: cvox.SemanticAttr.Type.IDENTIFIER, 876 set: this.capitalLatinBold,
916 role: cvox.SemanticAttr.Role.LATINLETTER, 877 type: cvox.SemanticAttr.Type.IDENTIFIER,
917 font: cvox.SemanticAttr.Font.ITALIC 878 role: cvox.SemanticAttr.Role.LATINLETTER,
918 }, 879 font: cvox.SemanticAttr.Font.BOLD
919 {set: this.capitalLatinItalic, 880 },
920 type: cvox.SemanticAttr.Type.IDENTIFIER, 881 {
921 role: cvox.SemanticAttr.Role.LATINLETTER, 882 set: this.smallLatinItalic,
922 font: cvox.SemanticAttr.Font.ITALIC 883 type: cvox.SemanticAttr.Type.IDENTIFIER,
923 }, 884 role: cvox.SemanticAttr.Role.LATINLETTER,
924 {set: this.smallLatinScript, 885 font: cvox.SemanticAttr.Font.ITALIC
925 type: cvox.SemanticAttr.Type.IDENTIFIER, 886 },
926 role: cvox.SemanticAttr.Role.LATINLETTER, 887 {
927 font: cvox.SemanticAttr.Font.SCRIPT 888 set: this.capitalLatinItalic,
928 }, 889 type: cvox.SemanticAttr.Type.IDENTIFIER,
929 {set: this.capitalLatinScript, 890 role: cvox.SemanticAttr.Role.LATINLETTER,
930 type: cvox.SemanticAttr.Type.IDENTIFIER, 891 font: cvox.SemanticAttr.Font.ITALIC
931 role: cvox.SemanticAttr.Role.LATINLETTER, 892 },
932 font: cvox.SemanticAttr.Font.SCRIPT 893 {
933 }, 894 set: this.smallLatinScript,
934 {set: this.smallLatinBoldScript, 895 type: cvox.SemanticAttr.Type.IDENTIFIER,
935 type: cvox.SemanticAttr.Type.IDENTIFIER, 896 role: cvox.SemanticAttr.Role.LATINLETTER,
936 role: cvox.SemanticAttr.Role.LATINLETTER, 897 font: cvox.SemanticAttr.Font.SCRIPT
937 font: cvox.SemanticAttr.Font.BOLDSCRIPT 898 },
938 }, 899 {
939 {set: this.capitalLatinBoldScript, 900 set: this.capitalLatinScript,
940 type: cvox.SemanticAttr.Type.IDENTIFIER, 901 type: cvox.SemanticAttr.Type.IDENTIFIER,
941 role: cvox.SemanticAttr.Role.LATINLETTER, 902 role: cvox.SemanticAttr.Role.LATINLETTER,
942 font: cvox.SemanticAttr.Font.BOLDSCRIPT 903 font: cvox.SemanticAttr.Font.SCRIPT
943 }, 904 },
944 {set: this.smallLatinFraktur, 905 {
945 type: cvox.SemanticAttr.Type.IDENTIFIER, 906 set: this.smallLatinBoldScript,
946 role: cvox.SemanticAttr.Role.LATINLETTER, 907 type: cvox.SemanticAttr.Type.IDENTIFIER,
947 font: cvox.SemanticAttr.Font.FRAKTUR 908 role: cvox.SemanticAttr.Role.LATINLETTER,
948 }, 909 font: cvox.SemanticAttr.Font.BOLDSCRIPT
949 {set: this.capitalLatinFraktur, 910 },
950 type: cvox.SemanticAttr.Type.IDENTIFIER, 911 {
951 role: cvox.SemanticAttr.Role.LATINLETTER, 912 set: this.capitalLatinBoldScript,
952 font: cvox.SemanticAttr.Font.FRAKTUR 913 type: cvox.SemanticAttr.Type.IDENTIFIER,
953 }, 914 role: cvox.SemanticAttr.Role.LATINLETTER,
954 {set: this.smallLatinDoubleStruck, 915 font: cvox.SemanticAttr.Font.BOLDSCRIPT
955 type: cvox.SemanticAttr.Type.IDENTIFIER, 916 },
956 role: cvox.SemanticAttr.Role.LATINLETTER, 917 {
957 font: cvox.SemanticAttr.Font.DOUBLESTRUCK 918 set: this.smallLatinFraktur,
958 }, 919 type: cvox.SemanticAttr.Type.IDENTIFIER,
959 {set: this.capitalLatinDoubleStruck, 920 role: cvox.SemanticAttr.Role.LATINLETTER,
960 type: cvox.SemanticAttr.Type.IDENTIFIER, 921 font: cvox.SemanticAttr.Font.FRAKTUR
961 role: cvox.SemanticAttr.Role.LATINLETTER, 922 },
962 font: cvox.SemanticAttr.Font.DOUBLESTRUCK 923 {
963 }, 924 set: this.capitalLatinFraktur,
964 {set: this.smallLatinBoldFraktur, 925 type: cvox.SemanticAttr.Type.IDENTIFIER,
965 type: cvox.SemanticAttr.Type.IDENTIFIER, 926 role: cvox.SemanticAttr.Role.LATINLETTER,
966 role: cvox.SemanticAttr.Role.LATINLETTER, 927 font: cvox.SemanticAttr.Font.FRAKTUR
967 font: cvox.SemanticAttr.Font.BOLDFRAKTUR 928 },
968 }, 929 {
969 {set: this.capitalLatinBoldFraktur, 930 set: this.smallLatinDoubleStruck,
970 type: cvox.SemanticAttr.Type.IDENTIFIER, 931 type: cvox.SemanticAttr.Type.IDENTIFIER,
971 role: cvox.SemanticAttr.Role.LATINLETTER, 932 role: cvox.SemanticAttr.Role.LATINLETTER,
972 font: cvox.SemanticAttr.Font.BOLDFRAKTUR 933 font: cvox.SemanticAttr.Font.DOUBLESTRUCK
973 }, 934 },
974 {set: this.smallLatinSansSerif, 935 {
975 type: cvox.SemanticAttr.Type.IDENTIFIER, 936 set: this.capitalLatinDoubleStruck,
976 role: cvox.SemanticAttr.Role.LATINLETTER, 937 type: cvox.SemanticAttr.Type.IDENTIFIER,
977 font: cvox.SemanticAttr.Font.SANSSERIF 938 role: cvox.SemanticAttr.Role.LATINLETTER,
978 }, 939 font: cvox.SemanticAttr.Font.DOUBLESTRUCK
979 {set: this.capitalLatinSansSerif, 940 },
980 type: cvox.SemanticAttr.Type.IDENTIFIER, 941 {
981 role: cvox.SemanticAttr.Role.LATINLETTER, 942 set: this.smallLatinBoldFraktur,
982 font: cvox.SemanticAttr.Font.SANSSERIF 943 type: cvox.SemanticAttr.Type.IDENTIFIER,
983 }, 944 role: cvox.SemanticAttr.Role.LATINLETTER,
984 {set: this.smallLatinSansSerifBold, 945 font: cvox.SemanticAttr.Font.BOLDFRAKTUR
985 type: cvox.SemanticAttr.Type.IDENTIFIER, 946 },
986 role: cvox.SemanticAttr.Role.LATINLETTER, 947 {
987 font: cvox.SemanticAttr.Font.SANSSERIFBOLD 948 set: this.capitalLatinBoldFraktur,
988 }, 949 type: cvox.SemanticAttr.Type.IDENTIFIER,
989 {set: this.capitalLatinSansSerifBold, 950 role: cvox.SemanticAttr.Role.LATINLETTER,
990 type: cvox.SemanticAttr.Type.IDENTIFIER, 951 font: cvox.SemanticAttr.Font.BOLDFRAKTUR
991 role: cvox.SemanticAttr.Role.LATINLETTER, 952 },
992 font: cvox.SemanticAttr.Font.SANSSERIFBOLD 953 {
993 }, 954 set: this.smallLatinSansSerif,
994 {set: this.smallLatinSansSerifItalic, 955 type: cvox.SemanticAttr.Type.IDENTIFIER,
995 type: cvox.SemanticAttr.Type.IDENTIFIER, 956 role: cvox.SemanticAttr.Role.LATINLETTER,
996 role: cvox.SemanticAttr.Role.LATINLETTER, 957 font: cvox.SemanticAttr.Font.SANSSERIF
997 font: cvox.SemanticAttr.Font.SANSSERIFITALIC 958 },
998 }, 959 {
999 {set: this.capitalLatinSansSerifItalic, 960 set: this.capitalLatinSansSerif,
1000 type: cvox.SemanticAttr.Type.IDENTIFIER, 961 type: cvox.SemanticAttr.Type.IDENTIFIER,
1001 role: cvox.SemanticAttr.Role.LATINLETTER, 962 role: cvox.SemanticAttr.Role.LATINLETTER,
1002 font: cvox.SemanticAttr.Font.SANSSERIFITALIC 963 font: cvox.SemanticAttr.Font.SANSSERIF
1003 }, 964 },
1004 {set: this.smallLatinMonospace, 965 {
1005 type: cvox.SemanticAttr.Type.IDENTIFIER, 966 set: this.smallLatinSansSerifBold,
1006 role: cvox.SemanticAttr.Role.LATINLETTER, 967 type: cvox.SemanticAttr.Type.IDENTIFIER,
1007 font: cvox.SemanticAttr.Font.MONOSPACE 968 role: cvox.SemanticAttr.Role.LATINLETTER,
1008 }, 969 font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1009 {set: this.capitalLatinMonospace, 970 },
1010 type: cvox.SemanticAttr.Type.IDENTIFIER, 971 {
1011 role: cvox.SemanticAttr.Role.LATINLETTER, 972 set: this.capitalLatinSansSerifBold,
1012 font: cvox.SemanticAttr.Font.MONOSPACE 973 type: cvox.SemanticAttr.Type.IDENTIFIER,
1013 }, 974 role: cvox.SemanticAttr.Role.LATINLETTER,
1014 {set: this.latinDoubleStruckItalic, 975 font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1015 type: cvox.SemanticAttr.Type.IDENTIFIER, 976 },
1016 role: cvox.SemanticAttr.Role.LATINLETTER, 977 {
1017 font: cvox.SemanticAttr.Font.DOUBLESTRUCKITALIC 978 set: this.smallLatinSansSerifItalic,
979 type: cvox.SemanticAttr.Type.IDENTIFIER,
980 role: cvox.SemanticAttr.Role.LATINLETTER,
981 font: cvox.SemanticAttr.Font.SANSSERIFITALIC
982 },
983 {
984 set: this.capitalLatinSansSerifItalic,
985 type: cvox.SemanticAttr.Type.IDENTIFIER,
986 role: cvox.SemanticAttr.Role.LATINLETTER,
987 font: cvox.SemanticAttr.Font.SANSSERIFITALIC
988 },
989 {
990 set: this.smallLatinMonospace,
991 type: cvox.SemanticAttr.Type.IDENTIFIER,
992 role: cvox.SemanticAttr.Role.LATINLETTER,
993 font: cvox.SemanticAttr.Font.MONOSPACE
994 },
995 {
996 set: this.capitalLatinMonospace,
997 type: cvox.SemanticAttr.Type.IDENTIFIER,
998 role: cvox.SemanticAttr.Role.LATINLETTER,
999 font: cvox.SemanticAttr.Font.MONOSPACE
1000 },
1001 {
1002 set: this.latinDoubleStruckItalic,
1003 type: cvox.SemanticAttr.Type.IDENTIFIER,
1004 role: cvox.SemanticAttr.Role.LATINLETTER,
1005 font: cvox.SemanticAttr.Font.DOUBLESTRUCKITALIC
1018 }, 1006 },
1019 // Greek alphabets. 1007 // Greek alphabets.
1020 {set: this.smallGreek, 1008 {
1021 type: cvox.SemanticAttr.Type.IDENTIFIER, 1009 set: this.smallGreek,
1022 role: cvox.SemanticAttr.Role.GREEKLETTER, 1010 type: cvox.SemanticAttr.Type.IDENTIFIER,
1023 font: cvox.SemanticAttr.Font.NORMAL 1011 role: cvox.SemanticAttr.Role.GREEKLETTER,
1024 }, 1012 font: cvox.SemanticAttr.Font.NORMAL
1025 {set: this.capitalGreek, 1013 },
1026 type: cvox.SemanticAttr.Type.IDENTIFIER, 1014 {
1027 role: cvox.SemanticAttr.Role.GREEKLETTER, 1015 set: this.capitalGreek,
1028 font: cvox.SemanticAttr.Font.NORMAL 1016 type: cvox.SemanticAttr.Type.IDENTIFIER,
1029 }, 1017 role: cvox.SemanticAttr.Role.GREEKLETTER,
1030 {set: this.smallGreekBold, 1018 font: cvox.SemanticAttr.Font.NORMAL
1031 type: cvox.SemanticAttr.Type.IDENTIFIER, 1019 },
1032 role: cvox.SemanticAttr.Role.GREEKLETTER, 1020 {
1033 font: cvox.SemanticAttr.Font.BOLD 1021 set: this.smallGreekBold,
1034 }, 1022 type: cvox.SemanticAttr.Type.IDENTIFIER,
1035 {set: this.capitalGreekBold, 1023 role: cvox.SemanticAttr.Role.GREEKLETTER,
1036 type: cvox.SemanticAttr.Type.IDENTIFIER, 1024 font: cvox.SemanticAttr.Font.BOLD
1037 role: cvox.SemanticAttr.Role.GREEKLETTER, 1025 },
1038 font: cvox.SemanticAttr.Font.BOLD 1026 {
1039 }, 1027 set: this.capitalGreekBold,
1040 {set: this.smallGreekItalic, 1028 type: cvox.SemanticAttr.Type.IDENTIFIER,
1041 type: cvox.SemanticAttr.Type.IDENTIFIER, 1029 role: cvox.SemanticAttr.Role.GREEKLETTER,
1042 role: cvox.SemanticAttr.Role.GREEKLETTER, 1030 font: cvox.SemanticAttr.Font.BOLD
1043 font: cvox.SemanticAttr.Font.ITALIC 1031 },
1044 }, 1032 {
1045 {set: this.capitalGreekItalic, 1033 set: this.smallGreekItalic,
1046 type: cvox.SemanticAttr.Type.IDENTIFIER, 1034 type: cvox.SemanticAttr.Type.IDENTIFIER,
1047 role: cvox.SemanticAttr.Role.GREEKLETTER, 1035 role: cvox.SemanticAttr.Role.GREEKLETTER,
1048 font: cvox.SemanticAttr.Font.ITALIC 1036 font: cvox.SemanticAttr.Font.ITALIC
1049 }, 1037 },
1050 {set: this.smallGreekSansSerifBold, 1038 {
1051 type: cvox.SemanticAttr.Type.IDENTIFIER, 1039 set: this.capitalGreekItalic,
1052 role: cvox.SemanticAttr.Role.GREEKLETTER, 1040 type: cvox.SemanticAttr.Type.IDENTIFIER,
1053 font: cvox.SemanticAttr.Font.SANSSERIFBOLD 1041 role: cvox.SemanticAttr.Role.GREEKLETTER,
1054 }, 1042 font: cvox.SemanticAttr.Font.ITALIC
1055 {set: this.capitalGreekSansSerifBold, 1043 },
1056 type: cvox.SemanticAttr.Type.IDENTIFIER, 1044 {
1057 role: cvox.SemanticAttr.Role.GREEKLETTER, 1045 set: this.smallGreekSansSerifBold,
1058 font: cvox.SemanticAttr.Font.SANSSERIFBOLD 1046 type: cvox.SemanticAttr.Type.IDENTIFIER,
1059 }, 1047 role: cvox.SemanticAttr.Role.GREEKLETTER,
1060 {set: this.greekDoubleStruck, 1048 font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1061 type: cvox.SemanticAttr.Type.IDENTIFIER, 1049 },
1062 role: cvox.SemanticAttr.Role.GREEKLETTER, 1050 {
1063 font: cvox.SemanticAttr.Font.DOUBLESTRUCK 1051 set: this.capitalGreekSansSerifBold,
1052 type: cvox.SemanticAttr.Type.IDENTIFIER,
1053 role: cvox.SemanticAttr.Role.GREEKLETTER,
1054 font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1055 },
1056 {
1057 set: this.greekDoubleStruck,
1058 type: cvox.SemanticAttr.Type.IDENTIFIER,
1059 role: cvox.SemanticAttr.Role.GREEKLETTER,
1060 font: cvox.SemanticAttr.Font.DOUBLESTRUCK
1064 }, 1061 },
1065 // Other alphabets. 1062 // Other alphabets.
1066 {set: this.hebrewLetters, 1063 {
1067 type: cvox.SemanticAttr.Type.IDENTIFIER, 1064 set: this.hebrewLetters,
1068 role: cvox.SemanticAttr.Role.OTHERLETTER, 1065 type: cvox.SemanticAttr.Type.IDENTIFIER,
1069 font: cvox.SemanticAttr.Font.NORMAL 1066 role: cvox.SemanticAttr.Role.OTHERLETTER,
1067 font: cvox.SemanticAttr.Font.NORMAL
1070 }, 1068 },
1071 // Numbers. 1069 // Numbers.
1072 {set: this.digitsNormal, 1070 {
1073 type: cvox.SemanticAttr.Type.NUMBER, 1071 set: this.digitsNormal,
1074 role: cvox.SemanticAttr.Role.INTEGER, 1072 type: cvox.SemanticAttr.Type.NUMBER,
1075 font: cvox.SemanticAttr.Font.NORMAL 1073 role: cvox.SemanticAttr.Role.INTEGER,
1076 }, 1074 font: cvox.SemanticAttr.Font.NORMAL
1077 {set: this.digitsFullWidth, 1075 },
1078 type: cvox.SemanticAttr.Type.NUMBER, 1076 {
1079 role: cvox.SemanticAttr.Role.INTEGER, 1077 set: this.digitsFullWidth,
1080 font: cvox.SemanticAttr.Font.NORMAL 1078 type: cvox.SemanticAttr.Type.NUMBER,
1081 }, 1079 role: cvox.SemanticAttr.Role.INTEGER,
1082 {set: this.digitsBold, 1080 font: cvox.SemanticAttr.Font.NORMAL
1083 type: cvox.SemanticAttr.Type.NUMBER, 1081 },
1084 role: cvox.SemanticAttr.Role.INTEGER, 1082 {
1085 font: cvox.SemanticAttr.Font.BOLD 1083 set: this.digitsBold,
1086 }, 1084 type: cvox.SemanticAttr.Type.NUMBER,
1087 {set: this.digitsDoubleStruck, 1085 role: cvox.SemanticAttr.Role.INTEGER,
1088 type: cvox.SemanticAttr.Type.NUMBER, 1086 font: cvox.SemanticAttr.Font.BOLD
1089 role: cvox.SemanticAttr.Role.INTEGER, 1087 },
1090 font: cvox.SemanticAttr.Font.DOUBLESTRUCK 1088 {
1091 }, 1089 set: this.digitsDoubleStruck,
1092 {set: this.digitsSansSerif, 1090 type: cvox.SemanticAttr.Type.NUMBER,
1093 type: cvox.SemanticAttr.Type.NUMBER, 1091 role: cvox.SemanticAttr.Role.INTEGER,
1094 role: cvox.SemanticAttr.Role.INTEGER, 1092 font: cvox.SemanticAttr.Font.DOUBLESTRUCK
1095 font: cvox.SemanticAttr.Font.SANSSERIF 1093 },
1096 }, 1094 {
1097 {set: this.digitsSansSerifBold, 1095 set: this.digitsSansSerif,
1098 type: cvox.SemanticAttr.Type.NUMBER, 1096 type: cvox.SemanticAttr.Type.NUMBER,
1099 role: cvox.SemanticAttr.Role.INTEGER, 1097 role: cvox.SemanticAttr.Role.INTEGER,
1100 font: cvox.SemanticAttr.Font.SANSSERIFBOLD 1098 font: cvox.SemanticAttr.Font.SANSSERIF
1101 }, 1099 },
1102 {set: this.digitsMonospace, 1100 {
1103 type: cvox.SemanticAttr.Type.NUMBER, 1101 set: this.digitsSansSerifBold,
1104 role: cvox.SemanticAttr.Role.INTEGER, 1102 type: cvox.SemanticAttr.Type.NUMBER,
1105 font: cvox.SemanticAttr.Font.MONOSPACE 1103 role: cvox.SemanticAttr.Role.INTEGER,
1106 }, 1104 font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1107 {set: this.numbers, 1105 },
1108 type: cvox.SemanticAttr.Type.NUMBER, 1106 {
1109 role: cvox.SemanticAttr.Role.INTEGER 1107 set: this.digitsMonospace,
1108 type: cvox.SemanticAttr.Type.NUMBER,
1109 role: cvox.SemanticAttr.Role.INTEGER,
1110 font: cvox.SemanticAttr.Font.MONOSPACE
1111 },
1112 {
1113 set: this.numbers,
1114 type: cvox.SemanticAttr.Type.NUMBER,
1115 role: cvox.SemanticAttr.Role.INTEGER
1110 }, 1116 },
1111 // Operators. 1117 // Operators.
1112 {set: this.additions, 1118 {
1113 type: cvox.SemanticAttr.Type.OPERATOR, 1119 set: this.additions,
1114 role: cvox.SemanticAttr.Role.ADDITION 1120 type: cvox.SemanticAttr.Type.OPERATOR,
1115 }, 1121 role: cvox.SemanticAttr.Role.ADDITION
1116 {set: this.multiplications, 1122 },
1117 type: cvox.SemanticAttr.Type.OPERATOR, 1123 {
1118 role: cvox.SemanticAttr.Role.MULTIPLICATION 1124 set: this.multiplications,
1119 }, 1125 type: cvox.SemanticAttr.Type.OPERATOR,
1120 {set: this.subtractions, 1126 role: cvox.SemanticAttr.Role.MULTIPLICATION
1121 type: cvox.SemanticAttr.Type.OPERATOR, 1127 },
1122 role: cvox.SemanticAttr.Role.SUBTRACTION 1128 {
1123 }, 1129 set: this.subtractions,
1124 {set: this.divisions, 1130 type: cvox.SemanticAttr.Type.OPERATOR,
1125 type: cvox.SemanticAttr.Type.OPERATOR, 1131 role: cvox.SemanticAttr.Role.SUBTRACTION
1126 role: cvox.SemanticAttr.Role.DIVISION 1132 },
1127 }, 1133 {
1128 {set: this.prefixOps, 1134 set: this.divisions,
1129 type: cvox.SemanticAttr.Type.PREFIXOP, 1135 type: cvox.SemanticAttr.Type.OPERATOR,
1130 role: cvox.SemanticAttr.Role.PREFIXFUNC 1136 role: cvox.SemanticAttr.Role.DIVISION
1137 },
1138 {
1139 set: this.prefixOps,
1140 type: cvox.SemanticAttr.Type.PREFIXOP,
1141 role: cvox.SemanticAttr.Role.PREFIXFUNC
1131 }, 1142 },
1132 // Relations 1143 // Relations
1133 {set: this.equalities, 1144 {
1134 type: cvox.SemanticAttr.Type.RELATION, 1145 set: this.equalities,
1135 role: cvox.SemanticAttr.Role.EQUALITY 1146 type: cvox.SemanticAttr.Type.RELATION,
1136 }, 1147 role: cvox.SemanticAttr.Role.EQUALITY
1137 {set: this.inequalities, 1148 },
1138 type: cvox.SemanticAttr.Type.RELATION, 1149 {
1139 role: cvox.SemanticAttr.Role.INEQUALITY 1150 set: this.inequalities,
1140 }, 1151 type: cvox.SemanticAttr.Type.RELATION,
1141 {set: this.relations, 1152 role: cvox.SemanticAttr.Role.INEQUALITY
1142 type: cvox.SemanticAttr.Type.RELATION, 1153 },
1143 role: cvox.SemanticAttr.Role.UNKNOWN 1154 {
1144 }, 1155 set: this.relations,
1145 {set: this.arrows, 1156 type: cvox.SemanticAttr.Type.RELATION,
1146 type: cvox.SemanticAttr.Type.RELATION, 1157 role: cvox.SemanticAttr.Role.UNKNOWN
1147 role: cvox.SemanticAttr.Role.ARROW 1158 },
1159 {
1160 set: this.arrows,
1161 type: cvox.SemanticAttr.Type.RELATION,
1162 role: cvox.SemanticAttr.Role.ARROW
1148 }, 1163 },
1149 // Large operators 1164 // Large operators
1150 {set: this.sumOps, 1165 {
1151 type: cvox.SemanticAttr.Type.LARGEOP, 1166 set: this.sumOps,
1152 role: cvox.SemanticAttr.Role.SUM}, 1167 type: cvox.SemanticAttr.Type.LARGEOP,
1153 {set: this.intOps, 1168 role: cvox.SemanticAttr.Role.SUM
1154 type: cvox.SemanticAttr.Type.LARGEOP, 1169 },
1155 role: cvox.SemanticAttr.Role.INTEGRAL}, 1170 {
1171 set: this.intOps,
1172 type: cvox.SemanticAttr.Type.LARGEOP,
1173 role: cvox.SemanticAttr.Role.INTEGRAL
1174 },
1156 // Functions 1175 // Functions
1157 {set: this.limitFunctions, 1176 {
1158 type: cvox.SemanticAttr.Type.FUNCTION, 1177 set: this.limitFunctions,
1159 role: cvox.SemanticAttr.Role.LIMFUNC}, 1178 type: cvox.SemanticAttr.Type.FUNCTION,
1160 {set: this.prefixFunctions, 1179 role: cvox.SemanticAttr.Role.LIMFUNC
1161 type: cvox.SemanticAttr.Type.FUNCTION, 1180 },
1162 role: cvox.SemanticAttr.Role.PREFIXFUNC}, 1181 {
1163 {set: this.infixFunctions, 1182 set: this.prefixFunctions,
1164 type: cvox.SemanticAttr.Type.OPERATOR, 1183 type: cvox.SemanticAttr.Type.FUNCTION,
1165 role: cvox.SemanticAttr.Role.MULTIPLICATION 1184 role: cvox.SemanticAttr.Role.PREFIXFUNC
1166 } 1185 },
1167 // TODO (sorge) Add some of the remaining elements. 1186 {
1187 set: this.infixFunctions,
1188 type: cvox.SemanticAttr.Type.OPERATOR,
1189 role: cvox.SemanticAttr.Role.MULTIPLICATION
1190 } // TODO (sorge) Add some of the remaining elements.
1168 ]; 1191 ];
1169 }; 1192 };
1170 goog.addSingletonGetter(cvox.SemanticAttr); 1193 goog.addSingletonGetter(cvox.SemanticAttr);
1171 1194
1172 1195
1173 /** 1196 /**
1174 * Union type of semantic attributes. 1197 * Union type of semantic attributes.
1175 * @typedef {cvox.SemanticAttr.Type|cvox.SemanticAttr.Role} 1198 * @typedef {cvox.SemanticAttr.Type|cvox.SemanticAttr.Role}
1176 */ 1199 */
1177 cvox.SemanticAttr.Attr; 1200 cvox.SemanticAttr.Attr;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1255 /** 1278 /**
1256 * Mapping for roles of nodes. 1279 * Mapping for roles of nodes.
1257 * Roles are more specific than types. 1280 * Roles are more specific than types.
1258 * @enum {string} 1281 * @enum {string}
1259 */ 1282 */
1260 cvox.SemanticAttr.Role = { 1283 cvox.SemanticAttr.Role = {
1261 // Punctuation. 1284 // Punctuation.
1262 ELLIPSIS: 'ellipsis', 1285 ELLIPSIS: 'ellipsis',
1263 FULLSTOP: 'fullstop', 1286 FULLSTOP: 'fullstop',
1264 DASH: 'dash', 1287 DASH: 'dash',
1265 PRIME: 'prime', // Superscript. 1288 PRIME: 'prime', // Superscript.
1266 VBAR: 'vbar', // A vertical bar. 1289 VBAR: 'vbar', // A vertical bar.
1267 OPENFENCE: 'openfence', 1290 OPENFENCE: 'openfence',
1268 CLOSEFENCE: 'closefence', 1291 CLOSEFENCE: 'closefence',
1269 APPLICATION: 'application', // Function Application. 1292 APPLICATION: 'application', // Function Application.
1270 1293
1271 // Fences. 1294 // Fences.
1272 OPEN: 'open', 1295 OPEN: 'open',
1273 CLOSE: 'close', 1296 CLOSE: 'close',
1274 TOP: 'top', 1297 TOP: 'top',
1275 BOTTOM: 'bottom', 1298 BOTTOM: 'bottom',
1276 NEUTRAL: 'neutral', 1299 NEUTRAL: 'neutral',
1277 1300
1278 // Letters. 1301 // Letters.
1279 LATINLETTER: 'latinletter', 1302 LATINLETTER: 'latinletter',
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1426 1449
1427 /** 1450 /**
1428 * Decide when two fences match. Currently we match any right to left 1451 * Decide when two fences match. Currently we match any right to left
1429 * or bottom to top fence and neutral to neutral. 1452 * or bottom to top fence and neutral to neutral.
1430 * @param {cvox.SemanticAttr.Role} open Opening fence. 1453 * @param {cvox.SemanticAttr.Role} open Opening fence.
1431 * @param {cvox.SemanticAttr.Role} close Closing fence. 1454 * @param {cvox.SemanticAttr.Role} close Closing fence.
1432 * @return {boolean} True if the fences are matching. 1455 * @return {boolean} True if the fences are matching.
1433 */ 1456 */
1434 cvox.SemanticAttr.isMatchingFenceRole = function(open, close) { 1457 cvox.SemanticAttr.isMatchingFenceRole = function(open, close) {
1435 return (open == cvox.SemanticAttr.Role.OPEN && 1458 return (open == cvox.SemanticAttr.Role.OPEN &&
1436 close == cvox.SemanticAttr.Role.CLOSE) || 1459 close == cvox.SemanticAttr.Role.CLOSE) ||
1437 (open == cvox.SemanticAttr.Role.NEUTRAL && 1460 (open == cvox.SemanticAttr.Role.NEUTRAL &&
1438 close == cvox.SemanticAttr.Role.NEUTRAL) || 1461 close == cvox.SemanticAttr.Role.NEUTRAL) ||
1439 (open == cvox.SemanticAttr.Role.TOP && 1462 (open == cvox.SemanticAttr.Role.TOP &&
1440 close == cvox.SemanticAttr.Role.BOTTOM); 1463 close == cvox.SemanticAttr.Role.BOTTOM);
1441 }; 1464 };
1442 1465
1443 1466
1444 /** 1467 /**
1445 * Decide when opening and closing fences match. For neutral fences they have to 1468 * Decide when opening and closing fences match. For neutral fences they have to
1446 * be the same. 1469 * be the same.
1447 * @param {string} open Opening fence. 1470 * @param {string} open Opening fence.
1448 * @param {string} close Closing fence. 1471 * @param {string} close Closing fence.
1449 * @return {boolean} True if the fences are matching. 1472 * @return {boolean} True if the fences are matching.
1450 */ 1473 */
1451 cvox.SemanticAttr.isMatchingFence = function(open, close) { 1474 cvox.SemanticAttr.isMatchingFence = function(open, close) {
1452 return cvox.SemanticAttr.getInstance().isMatchingFence_(open, close); 1475 return cvox.SemanticAttr.getInstance().isMatchingFence_(open, close);
1453 }; 1476 };
1454 1477
1455 1478
1456 /** 1479 /**
1457 * Determines if a fence is an opening fence. 1480 * Determines if a fence is an opening fence.
1458 * @param {cvox.SemanticAttr.Role} fence Opening fence. 1481 * @param {cvox.SemanticAttr.Role} fence Opening fence.
1459 * @return {boolean} True if the fence is open or neutral. 1482 * @return {boolean} True if the fence is open or neutral.
1460 */ 1483 */
1461 cvox.SemanticAttr.isOpeningFence = function(fence) { 1484 cvox.SemanticAttr.isOpeningFence = function(fence) {
1462 return (fence == cvox.SemanticAttr.Role.OPEN || 1485 return (
1463 fence == cvox.SemanticAttr.Role.NEUTRAL); 1486 fence == cvox.SemanticAttr.Role.OPEN ||
1487 fence == cvox.SemanticAttr.Role.NEUTRAL);
1464 }; 1488 };
1465 1489
1466 1490
1467 /** 1491 /**
1468 * Determines if a fence is a closing fence. 1492 * Determines if a fence is a closing fence.
1469 * @param {cvox.SemanticAttr.Role} fence Closing fence. 1493 * @param {cvox.SemanticAttr.Role} fence Closing fence.
1470 * @return {boolean} True if the fence is close or neutral. 1494 * @return {boolean} True if the fence is close or neutral.
1471 */ 1495 */
1472 cvox.SemanticAttr.isClosingFence = function(fence) { 1496 cvox.SemanticAttr.isClosingFence = function(fence) {
1473 return (fence == cvox.SemanticAttr.Role.CLOSE || 1497 return (
1474 fence == cvox.SemanticAttr.Role.NEUTRAL); 1498 fence == cvox.SemanticAttr.Role.CLOSE ||
1499 fence == cvox.SemanticAttr.Role.NEUTRAL);
1475 }; 1500 };
1476 1501
1477 1502
1478 // TODO (sorge) Make this depended on position in the alphabets. 1503 // TODO (sorge) Make this depended on position in the alphabets.
1479 /** 1504 /**
1480 * Check if a character is a small 'd' in some font. 1505 * Check if a character is a small 'd' in some font.
1481 * @param {!string} chr The character string. 1506 * @param {!string} chr The character string.
1482 * @return {boolean} True if the character is indeed a single small d. 1507 * @return {boolean} True if the character is indeed a single small d.
1483 */ 1508 */
1484 cvox.SemanticAttr.isCharacterD = function(chr) { 1509 cvox.SemanticAttr.isCharacterD = function(chr) {
1485 var Ds = ['d', 'ⅆ', 'd', '𝐝', '𝑑', '𝒹', '𝓭', '𝔡', 1510 var Ds =
1486 '𝕕', '𝖉', '𝖽', '𝗱', '𝘥', '𝚍']; 1511 ['d', 'ⅆ', 'd', '𝐝', '𝑑', '𝒹', '𝓭', '𝔡', '𝕕', '𝖉', '𝖽', '𝗱', '𝘥', '𝚍'];
1487 return Ds.indexOf(chr) != -1; 1512 return Ds.indexOf(chr) != -1;
1488 }; 1513 };
1489 1514
1490 1515
1491 /** 1516 /**
1492 * Decide when opening and closing fences match. For neutral fences they have to 1517 * Decide when opening and closing fences match. For neutral fences they have to
1493 * be the same. 1518 * be the same.
1494 * @param {!string} open Opening fence. 1519 * @param {!string} open Opening fence.
1495 * @param {!string} close Closing fence. 1520 * @param {!string} close Closing fence.
1496 * @return {boolean} True if the fences are matching. 1521 * @return {boolean} True if the fences are matching.
(...skipping 12 matching lines...) Expand all
1509 * Lookup the semantic meaning of a symbol in terms of type and role. 1534 * Lookup the semantic meaning of a symbol in terms of type and role.
1510 * @param {!string} symbol The symbol to which we want to determine the meaning. 1535 * @param {!string} symbol The symbol to which we want to determine the meaning.
1511 * @return {{role: cvox.SemanticAttr.Role, 1536 * @return {{role: cvox.SemanticAttr.Role,
1512 * type: cvox.SemanticAttr.Type, 1537 * type: cvox.SemanticAttr.Type,
1513 * font: cvox.SemanticAttr.Font}} The semantic meaning of the symbol. 1538 * font: cvox.SemanticAttr.Font}} The semantic meaning of the symbol.
1514 * @private 1539 * @private
1515 */ 1540 */
1516 cvox.SemanticAttr.prototype.lookupMeaning_ = function(symbol) { 1541 cvox.SemanticAttr.prototype.lookupMeaning_ = function(symbol) {
1517 for (var i = 0, set; set = this.symbolSetToSemantic_[i]; i++) { 1542 for (var i = 0, set; set = this.symbolSetToSemantic_[i]; i++) {
1518 if (set.set.indexOf(symbol) != -1) { 1543 if (set.set.indexOf(symbol) != -1) {
1519 return {role: set.role || cvox.SemanticAttr.Role.UNKNOWN, 1544 return {
1520 type: set.type || cvox.SemanticAttr.Type.UNKNOWN, 1545 role: set.role || cvox.SemanticAttr.Role.UNKNOWN,
1521 font: set.font || cvox.SemanticAttr.Font.UNKNOWN 1546 type: set.type || cvox.SemanticAttr.Type.UNKNOWN,
1522 }; 1547 font: set.font || cvox.SemanticAttr.Font.UNKNOWN
1548 };
1523 } 1549 }
1524 } 1550 }
1525 return {role: cvox.SemanticAttr.Role.UNKNOWN, 1551 return {
1526 type: cvox.SemanticAttr.Type.UNKNOWN, 1552 role: cvox.SemanticAttr.Role.UNKNOWN,
1527 font: cvox.SemanticAttr.Font.UNKNOWN 1553 type: cvox.SemanticAttr.Type.UNKNOWN,
1528 }; 1554 font: cvox.SemanticAttr.Font.UNKNOWN
1555 };
1529 }; 1556 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698