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

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/speech_rules/mathml_store_rules.js

Issue 2939273002: DO NOT SUBMIT: what chrome/browser/resources/ could eventually look like with clang-format (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 Speech rules for mathml and mathjax nodes. 6 * @fileoverview Speech rules for mathml and mathjax nodes.
7 */ 7 */
8 8
9 goog.provide('cvox.MathmlStoreRules'); 9 goog.provide('cvox.MathmlStoreRules');
10 10
11 goog.require('cvox.MathStore'); 11 goog.require('cvox.MathStore');
12 goog.require('cvox.MathmlStore'); 12 goog.require('cvox.MathmlStore');
13 goog.require('cvox.MathmlStoreUtil'); 13 goog.require('cvox.MathmlStoreUtil');
14 goog.require('cvox.StoreUtil'); 14 goog.require('cvox.StoreUtil');
15 15
16 16
17 /** 17 /**
18 * Rule initialization. 18 * Rule initialization.
19 * @constructor 19 * @constructor
20 */ 20 */
21 cvox.MathmlStoreRules = function() { 21 cvox.MathmlStoreRules = function() {
22 // Custom functions used in the rules. 22 // Custom functions used in the rules.
23 cvox.MathmlStoreRules.initCustomFunctions_(); 23 cvox.MathmlStoreRules.initCustomFunctions_();
24 cvox.MathmlStoreRules.initDefaultRules_(); // MathML rules. 24 cvox.MathmlStoreRules.initDefaultRules_(); // MathML rules.
25 cvox.MathmlStoreRules.initMathjaxRules_(); // MathJax Rules 25 cvox.MathmlStoreRules.initMathjaxRules_(); // MathJax Rules
26 cvox.MathmlStoreRules.initAliases_(); // MathJax Aliases for MathML rules. 26 cvox.MathmlStoreRules.initAliases_(); // MathJax Aliases for MathML rules.
27 cvox.MathmlStoreRules.initSpecializationRules_(); // Square, cube, etc. 27 cvox.MathmlStoreRules.initSpecializationRules_(); // Square, cube, etc.
28 cvox.MathmlStoreRules.initSemanticRules_(); 28 cvox.MathmlStoreRules.initSemanticRules_();
29 }; 29 };
30 goog.addSingletonGetter(cvox.MathmlStoreRules); 30 goog.addSingletonGetter(cvox.MathmlStoreRules);
31 31
32 32
33 /** 33 /**
34 * @type {cvox.MathStore} 34 * @type {cvox.MathStore}
35 */ 35 */
36 cvox.MathmlStoreRules.mathStore = cvox.MathmlStore.getInstance(); 36 cvox.MathmlStoreRules.mathStore = cvox.MathmlStore.getInstance();
37 /** 37 /**
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 defineDefaultMathmlRule('merror', '[t] ""'); 104 defineDefaultMathmlRule('merror', '[t] ""');
105 defineDefaultMathmlRule('mphantom', '[t] ""'); 105 defineDefaultMathmlRule('mphantom', '[t] ""');
106 106
107 // Token elements. 107 // Token elements.
108 defineDefaultMathmlRule('mtext', '[t] text(); [p] (pause:200)'); 108 defineDefaultMathmlRule('mtext', '[t] text(); [p] (pause:200)');
109 defineDefaultMathmlRule('mi', '[n] text()'); 109 defineDefaultMathmlRule('mi', '[n] text()');
110 defineDefaultMathmlRule('mo', '[n] text() (rate:-0.1)'); 110 defineDefaultMathmlRule('mo', '[n] text() (rate:-0.1)');
111 defineDefaultMathmlRule('mn', '[n] text()'); 111 defineDefaultMathmlRule('mn', '[n] text()');
112 112
113 // Dealing with fonts. 113 // Dealing with fonts.
114 defineRule('mtext-variant', 'default.default', 114 defineRule(
115 'mtext-variant', 'default.default',
115 '[t] "begin"; [t] @mathvariant (pause:150);' + 116 '[t] "begin"; [t] @mathvariant (pause:150);' +
116 '[t] text() (pause:150); [t] "end"; ' + 117 '[t] text() (pause:150); [t] "end"; ' +
117 '[t] @mathvariant (pause:200)', 118 '[t] @mathvariant (pause:200)',
118 'self::mathml:mtext', '@mathvariant', '@mathvariant!="normal"'); 119 'self::mathml:mtext', '@mathvariant', '@mathvariant!="normal"');
119 120
120 defineRule('mi-variant', 'default.default', 121 defineRule(
121 '[t] @mathvariant; [n] text()', 122 'mi-variant', 'default.default', '[t] @mathvariant; [n] text()',
122 'self::mathml:mi', '@mathvariant', '@mathvariant!="normal"'); 123 'self::mathml:mi', '@mathvariant', '@mathvariant!="normal"');
123 124
124 defineRuleAlias('mi-variant', 'self::mathml:mn', // mn 125 defineRuleAlias(
126 'mi-variant', 'self::mathml:mn', // mn
125 '@mathvariant', '@mathvariant!="normal"'); 127 '@mathvariant', '@mathvariant!="normal"');
126 128
127 defineRule('mo-variant', 'default.default', 129 defineRule(
128 '[t] @mathvariant; [n] text() (rate:-0.1)', 130 'mo-variant', 'default.default',
129 'self::mathml:mo', '@mathvariant', '@mathvariant!="normal"'); 131 '[t] @mathvariant; [n] text() (rate:-0.1)', 'self::mathml:mo',
132 '@mathvariant', '@mathvariant!="normal"');
130 133
131 defineDefaultMathmlRule( 134 defineDefaultMathmlRule(
132 'ms', 135 'ms', '[t] "string" (pitch:0.5, rate:0.5); [t] text()');
133 '[t] "string" (pitch:0.5, rate:0.5); [t] text()');
134 136
135 // Script elements. 137 // Script elements.
136 defineDefaultMathmlRule( 138 defineDefaultMathmlRule(
137 'msup', '[n] ./*[1]; [t] "super";' + 139 'msup',
140 '[n] ./*[1]; [t] "super";' +
138 '[n] ./*[2] (pitch:0.35); [p] (pause:300)'); 141 '[n] ./*[2] (pitch:0.35); [p] (pause:300)');
139 defineDefaultMathmlRule( 142 defineDefaultMathmlRule(
140 'msubsup', 143 'msubsup',
141 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' + 144 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' +
142 '[t] "super"; [n] ./*[3] (pitch:0.35); [p] (pause:300)' 145 '[t] "super"; [n] ./*[3] (pitch:0.35); [p] (pause:300)');
143 );
144 defineDefaultMathmlRule( 146 defineDefaultMathmlRule(
145 'msub', 147 'msub',
146 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:300)'); 148 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:300)');
147 defineDefaultMathmlRule( 149 defineDefaultMathmlRule(
148 'mover', '[n] ./*[2] (pitch:0.35); [p] (pause:200);' + 150 'mover',
151 '[n] ./*[2] (pitch:0.35); [p] (pause:200);' +
149 ' [t] "over"; [n] ./*[1]; [p] (pause:400)'); 152 ' [t] "over"; [n] ./*[1]; [p] (pause:400)');
150 defineDefaultMathmlRule( 153 defineDefaultMathmlRule(
151 'munder', 154 'munder',
152 '[n] ./*[2] (pitch:-0.35); [t] "under"; [n] ./*[1]; [p] (pause:400)'); 155 '[n] ./*[2] (pitch:-0.35); [t] "under"; [n] ./*[1]; [p] (pause:400)');
153 defineDefaultMathmlRule( 156 defineDefaultMathmlRule(
154 'munderover', 157 'munderover',
155 '[n] ./*[2] (pitch:-0.35); [t] "under and"; [n] ./*[3] (pitch:0.35);' + 158 '[n] ./*[2] (pitch:-0.35); [t] "under and"; [n] ./*[3] (pitch:0.35);' +
156 ' [t] "over"; [n] ./*[1]; [p] (pause:400)'); 159 ' [t] "over"; [n] ./*[1]; [p] (pause:400)');
157 160
158 // Layout elements. 161 // Layout elements.
159 defineDefaultMathmlRule('mrow', '[m] ./*'); 162 defineDefaultMathmlRule('mrow', '[m] ./*');
160 defineDefaultMathmlRule( 163 defineDefaultMathmlRule(
161 'msqrt', '[t] "Square root of"; [m] ./* (rate:0.2); [p] (pause:400)'); 164 'msqrt', '[t] "Square root of"; [m] ./* (rate:0.2); [p] (pause:400)');
162 defineDefaultMathmlRule( 165 defineDefaultMathmlRule(
163 'mroot', '[t] "root of order"; [n] ./*[2]; [t] "of";' + 166 'mroot',
167 '[t] "root of order"; [n] ./*[2]; [t] "of";' +
164 '[n] ./*[1] (rate:0.2); [p] (pause:400)'); 168 '[n] ./*[1] (rate:0.2); [p] (pause:400)');
165 defineDefaultMathmlRule( 169 defineDefaultMathmlRule(
166 'mfrac', ' [p] (pause:400); [n] ./*[1] (pitch:0.3);' + 170 'mfrac',
171 ' [p] (pause:400); [n] ./*[1] (pitch:0.3);' +
167 ' [t] "divided by"; [n] ./*[2] (pitch:-0.3); [p] (pause:400)'); 172 ' [t] "divided by"; [n] ./*[2] (pitch:-0.3); [p] (pause:400)');
168 defineRule( 173 defineRule(
169 'mfrac', 'default.short', '[p] (pause:200); [t] "start frac";' + 174 'mfrac', 'default.short',
175 '[p] (pause:200); [t] "start frac";' +
170 '[n] ./*[1] (pitch:0.3); [t] "over"; ' + 176 '[n] ./*[1] (pitch:0.3); [t] "over"; ' +
171 '[n] ./*[2] (pitch:-0.3); [p] (pause:400); [t] "end frac"', 177 '[n] ./*[2] (pitch:-0.3); [p] (pause:400); [t] "end frac"',
172 'self::mathml:mfrac'); 178 'self::mathml:mfrac');
173 179
174 180
175 defineRule( 181 defineRule(
176 'mfenced-single', 'default.default', 182 'mfenced-single', 'default.default',
177 '[t] concat(substring(@open, 0 div boolean(@open)), ' + 183 '[t] concat(substring(@open, 0 div boolean(@open)), ' +
178 'substring("(", 0 div not(boolean(@open)))) (context:"opening"); ' + 184 'substring("(", 0 div not(boolean(@open)))) (context:"opening"); ' +
179 '[m] ./* (separator:@separators); ' + 185 '[m] ./* (separator:@separators); ' +
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 'mtable', 'default.default', 230 'mtable', 'default.default',
225 '[t] "matrix"; [m] ./* (ctxtFunc:CTXFnodeCounter,' + 231 '[t] "matrix"; [m] ./* (ctxtFunc:CTXFnodeCounter,' +
226 'context:"row",pause:100)', 232 'context:"row",pause:100)',
227 'self::mathml:mtable'); 233 'self::mathml:mtable');
228 234
229 defineRule( 235 defineRule(
230 'mtr', 'default.default', 236 'mtr', 'default.default',
231 '[m] ./* (ctxtFunc:CTXFnodeCounter,context:"column",pause:100)', 237 '[m] ./* (ctxtFunc:CTXFnodeCounter,context:"column",pause:100)',
232 'self::mathml:mtr'); 238 'self::mathml:mtr');
233 239
234 defineRule( 240 defineRule('mtd', 'default.default', '[m] ./*', 'self::mathml:mtd');
235 'mtd', 'default.default',
236 '[m] ./*', 'self::mathml:mtd');
237 241
238 // Mtable superbrief rules. 242 // Mtable superbrief rules.
239 defineRule( 243 defineRule(
240 'mtable', 'default.superbrief', 244 'mtable', 'default.superbrief',
241 '[t] count(child::mathml:mtr); [t] "by";' + 245 '[t] count(child::mathml:mtr); [t] "by";' +
242 '[t] count(child::mathml:mtr[1]/mathml:mtd); [t] "matrix";', 246 '[t] count(child::mathml:mtr[1]/mathml:mtd); [t] "matrix";',
243 'self::mathml:mtable'); 247 'self::mathml:mtable');
244 248
245 // Mtable short rules. 249 // Mtable short rules.
246 defineRule( 250 defineRule(
247 'mtable', 'default.short', 251 'mtable', 'default.short', '[t] "matrix"; [m] ./*',
248 '[t] "matrix"; [m] ./*',
249 'self::mathml:mtable'); 252 'self::mathml:mtable');
250 253
251 defineRule( 254 defineRule('mtr', 'default.short', '[m] ./*', 'self::mathml:mtr');
252 'mtr', 'default.short',
253 '[m] ./*', 'self::mathml:mtr');
254 255
255 defineRule( 256 defineRule(
256 'mtd', 'default.short', 257 'mtd', 'default.short',
257 '[t] "Element"; [t] count(./preceding-sibling::mathml:mtd)+1;' + 258 '[t] "Element"; [t] count(./preceding-sibling::mathml:mtd)+1;' +
258 '[t] count(./parent::mathml:mtr/preceding-sibling::mathml:mtr)+1;' + 259 '[t] count(./parent::mathml:mtr/preceding-sibling::mathml:mtr)+1;' +
259 '[p] (pause:500); [m] ./*', 260 '[p] (pause:500); [m] ./*',
260 'self::mathml:mtd'); 261 'self::mathml:mtd');
261 262
262 // Mmultiscripts rules. 263 // Mmultiscripts rules.
263 defineRule( 264 defineRule(
264 'mmultiscripts-4', 'default.default', 265 'mmultiscripts-4', 'default.default',
265 '[n] ./*[1]; [p] (pause:200);' + 266 '[n] ./*[1]; [p] (pause:200);' +
266 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' + 267 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' +
267 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' + 268 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' +
268 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' + 269 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' +
269 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);', 270 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);',
270 'self::mathml:mmultiscripts'); 271 'self::mathml:mmultiscripts');
271 defineRule( 272 defineRule(
272 'mmultiscripts-3-1', 'default.default', 273 'mmultiscripts-3-1', 'default.default',
273 '[n] ./*[1]; [p] (pause:200);' + 274 '[n] ./*[1]; [p] (pause:200);' +
274 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' + 275 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' +
275 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' + 276 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' +
276 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);', 277 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);',
277 'self::mathml:mmultiscripts', './mathml:none=./*[2]', 278 'self::mathml:mmultiscripts', './mathml:none=./*[2]',
278 './mathml:mprescripts=./*[4]'); 279 './mathml:mprescripts=./*[4]');
279 defineRule( 280 defineRule(
280 'mmultiscripts-3-2', 'default.default', 281 'mmultiscripts-3-2', 'default.default',
281 '[n] ./*[1]; [p] (pause:200);' + 282 '[n] ./*[1]; [p] (pause:200);' +
282 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' + 283 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' +
283 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' + 284 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' +
284 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);', 285 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);',
285 'self::mathml:mmultiscripts', './mathml:none=./*[3]', 286 'self::mathml:mmultiscripts', './mathml:none=./*[3]',
286 './mathml:mprescripts=./*[4]'); 287 './mathml:mprescripts=./*[4]');
287 defineRule( 288 defineRule(
288 'mmultiscripts-3-3', 'default.default', 289 'mmultiscripts-3-3', 'default.default',
289 '[n] ./*[1]; [p] (pause:200);' + 290 '[n] ./*[1]; [p] (pause:200);' +
290 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' + 291 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:200);' +
291 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' + 292 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' +
292 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);', 293 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);',
293 'self::mathml:mmultiscripts', './mathml:none=./*[5]', 294 'self::mathml:mmultiscripts', './mathml:none=./*[5]',
294 './mathml:mprescripts=./*[4]'); 295 './mathml:mprescripts=./*[4]');
295 defineRule( 296 defineRule(
296 'mmultiscripts-3-4', 'default.default', 297 'mmultiscripts-3-4', 'default.default',
297 '[n] ./*[1]; [p] (pause:200);' + 298 '[n] ./*[1]; [p] (pause:200);' +
298 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' + 299 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' +
299 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' + 300 '[t] "right sub"; [n] ./*[2] (pitch:-0.35); [p] (pause:200);' +
300 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);', 301 '[t] "right super"; [n] ./*[3] (pitch:0.35); [p] (pause:300);',
301 'self::mathml:mmultiscripts', './mathml:none=./*[6]', 302 'self::mathml:mmultiscripts', './mathml:none=./*[6]',
302 './mathml:mprescripts=./*[4]'); 303 './mathml:mprescripts=./*[4]');
303 defineRule( 304 defineRule(
304 'mmultiscripts-2-1', 'default.default', 305 'mmultiscripts-2-1', 'default.default',
305 '[n] ./*[1]; [p] (pause:200);' + 306 '[n] ./*[1]; [p] (pause:200);' +
306 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' + 307 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);' +
307 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:300);', 308 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:300);',
308 'self::mathml:mmultiscripts', './mathml:none=./*[2]', 309 'self::mathml:mmultiscripts', './mathml:none=./*[2]',
309 './mathml:none=./*[3]', './mathml:mprescripts=./*[4]'); 310 './mathml:none=./*[3]', './mathml:mprescripts=./*[4]');
310 defineRule( 311 defineRule(
311 'mmultiscripts-1-1', 'default.default', 312 'mmultiscripts-1-1', 'default.default',
312 '[n] ./*[1]; [p] (pause:200);' + 313 '[n] ./*[1]; [p] (pause:200);' +
313 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:300);', 314 '[t] "left super"; [n] ./*[6] (pitch:0.35); [p] (pause:300);',
314 'self::mathml:mmultiscripts', './mathml:none=./*[2]', 315 'self::mathml:mmultiscripts', './mathml:none=./*[2]',
315 './mathml:none=./*[3]', './mathml:mprescripts=./*[4]', 316 './mathml:none=./*[3]', './mathml:mprescripts=./*[4]',
316 './mathml:none=./*[5]'); 317 './mathml:none=./*[5]');
317 defineRule( 318 defineRule(
318 'mmultiscripts-1-2', 'default.default', 319 'mmultiscripts-1-2', 'default.default',
319 '[n] ./*[1]; [p] (pause:200);' + 320 '[n] ./*[1]; [p] (pause:200);' +
320 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);', 321 '[t] "left sub"; [n] ./*[5] (pitch:-0.35); [p] (pause:200);',
321 'self::mathml:mmultiscripts', './mathml:none=./*[2]', 322 'self::mathml:mmultiscripts', './mathml:none=./*[2]',
322 './mathml:none=./*[3]', './mathml:mprescripts=./*[4]', 323 './mathml:none=./*[3]', './mathml:mprescripts=./*[4]',
323 './mathml:none=./*[6]'); 324 './mathml:none=./*[6]');
324 }; 325 };
325 326
326 327
327 /** 328 /**
328 * Initialize mathJax Rules 329 * Initialize mathJax Rules
329 * @private 330 * @private
330 */ 331 */
331 cvox.MathmlStoreRules.initMathjaxRules_ = function() { 332 cvox.MathmlStoreRules.initMathjaxRules_ = function() {
332 // Initial rule 333 // Initial rule
333 defineRule('mj-math', 'default.default', 334 defineRule(
334 '[n] ./*[1]/*[1]/*[1]', 'self::span[@class="math"]'); 335 'mj-math', 'default.default', '[n] ./*[1]/*[1]/*[1]',
336 'self::span[@class="math"]');
335 337
336 // Token Elements 338 // Token Elements
337 defineRule( 339 defineRule(
338 'mj-leaf', 'default.default', 340 'mj-leaf', 'default.default', '[n] CQFlookupleaf',
339 '[n] CQFlookupleaf', 'self::span[@class="mi"]'); 341 'self::span[@class="mi"]');
340 defineRuleAlias('mj-leaf', 'self::span[@class="mo"]'); 342 defineRuleAlias('mj-leaf', 'self::span[@class="mo"]');
341 defineRuleAlias('mj-leaf', 'self::span[@class="mn"]'); 343 defineRuleAlias('mj-leaf', 'self::span[@class="mn"]');
342 defineRuleAlias('mj-leaf', 'self::span[@class="mtext"]'); 344 defineRuleAlias('mj-leaf', 'self::span[@class="mtext"]');
343 defineRule( 345 defineRule(
344 'mj-mo-ext', 'default.default', 346 'mj-mo-ext', 'default.default', '[n] CQFextender',
345 '[n] CQFextender', 'self::span[@class="mo"]', 347 'self::span[@class="mo"]', './*[1]/*[1]/text()', './*[1]/*[2]/text()');
346 './*[1]/*[1]/text()', './*[1]/*[2]/text()');
347 defineRule( 348 defineRule(
348 'mj-texatom', 'default.default', 349 'mj-texatom', 'default.default', '[n] ./*[1]',
349 '[n] ./*[1]', 'self::span[@class="texatom"]'); 350 'self::span[@class="texatom"]');
350 351
351 // Script elements. 352 // Script elements.
352 defineRule( 353 defineRule(
353 'mj-msubsup', 'default.default', 354 'mj-msubsup', 'default.default',
354 '[n] ./*[1]/*[1]/*[1]; [t] "sub"; [n] ./*[1]/*[3]/*[1] (pitch:-0.35);' + 355 '[n] ./*[1]/*[1]/*[1]; [t] "sub"; [n] ./*[1]/*[3]/*[1] (pitch:-0.35);' +
355 '[p] (pause:200); [t] "super"; [n] ./*[1]/*[2]/*[1] (pitch:0.35);' + 356 '[p] (pause:200); [t] "super"; [n] ./*[1]/*[2]/*[1] (pitch:0.35);' +
356 '[p] (pause:300)', 357 '[p] (pause:300)',
357 'self::span[@class="msubsup"]'); 358 'self::span[@class="msubsup"]');
358 defineRule( 359 defineRule(
359 'mj-msub', 'default.default', 360 'mj-msub', 'default.default',
360 '[n] ./*[1]/*[1]/*[1]; [t] "sub";' + 361 '[n] ./*[1]/*[1]/*[1]; [t] "sub";' +
361 '[n] ./*[1]/*[2]/*[1] (pitch:-0.35); [p] (pause:300)', 362 '[n] ./*[1]/*[2]/*[1] (pitch:-0.35); [p] (pause:300)',
362 'self::span[@class="msub"]'); 363 'self::span[@class="msub"]');
363 defineRule( 364 defineRule(
364 'mj-msup', 'default.default', 365 'mj-msup', 'default.default',
365 '[n] ./*[1]/*[1]/*[1]; [t] "super";' + 366 '[n] ./*[1]/*[1]/*[1]; [t] "super";' +
366 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [p] (pause:300)', 367 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [p] (pause:300)',
367 'self::span[@class="msup"]'); 368 'self::span[@class="msup"]');
368 defineRule( 369 defineRule(
369 'mj-munderover', 'default.default', 370 'mj-munderover', 'default.default',
370 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [t] "under and";' + 371 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [t] "under and";' +
371 '[n] ./*[1]/*[3]/*[1] (pitch:-0.35); [t] "over";' + 372 '[n] ./*[1]/*[3]/*[1] (pitch:-0.35); [t] "over";' +
372 '[n] ./*[1]/*[1]/*[1]; [p] (pause:400)', 373 '[n] ./*[1]/*[1]/*[1]; [p] (pause:400)',
373 'self::span[@class="munderover"]'); 374 'self::span[@class="munderover"]');
374 defineRule( 375 defineRule(
375 'mj-munder', 'default.default', 376 'mj-munder', 'default.default',
376 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [t] "under";' + 377 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [t] "under";' +
377 '[n] ./*[1]/*[1]/*[1]; [p] (pause:400)', 378 '[n] ./*[1]/*[1]/*[1]; [p] (pause:400)',
378 'self::span[@class="munder"]'); 379 'self::span[@class="munder"]');
379 defineRule( 380 defineRule(
380 'mj-mover', 'default.default', 381 'mj-mover', 'default.default',
381 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [t] "over";' + 382 '[n] ./*[1]/*[2]/*[1] (pitch:0.35); [t] "over";' +
382 '[n] ./*[1]/*[1]/*[1]; [p] (pause:400)', 383 '[n] ./*[1]/*[1]/*[1]; [p] (pause:400)',
383 'self::span[@class="mover"]'); 384 'self::span[@class="mover"]');
384 385
385 386
386 // Layout elements. 387 // Layout elements.
387 defineRule( 388 defineRule(
388 'mj-mfrac', 'default.default', 389 'mj-mfrac', 'default.default',
389 '[p] (pause:250); [n] ./*[1]/*[1]/*[1] (pitch:0.3); [p] (pause:250);' + 390 '[p] (pause:250); [n] ./*[1]/*[1]/*[1] (pitch:0.3); [p] (pause:250);' +
390 ' [t] "divided by"; [n] ./*[1]/*[2]/*[1] (pitch:-0.3);' + 391 ' [t] "divided by"; [n] ./*[1]/*[2]/*[1] (pitch:-0.3);' +
391 '[p] (pause:400)', 392 '[p] (pause:400)',
392 'self::span[@class="mfrac"]'); 393 'self::span[@class="mfrac"]');
393 defineRule( 394 defineRule(
394 'mj-msqrt', 'default.default', 395 'mj-msqrt', 'default.default',
395 '[t] "Square root of";' + 396 '[t] "Square root of";' +
396 '[n] ./*[1]/*[1]/*[1] (rate:0.2); [p] (pause:400)', 397 '[n] ./*[1]/*[1]/*[1] (rate:0.2); [p] (pause:400)',
397 'self::span[@class="msqrt"]'); 398 'self::span[@class="msqrt"]');
398 defineRule( 399 defineRule(
399 'mj-mroot', 'default.default', 400 'mj-mroot', 'default.default',
400 '[t] "root of order"; [n] ./*[1]/*[4]/*[1]; [t] "of";' + 401 '[t] "root of order"; [n] ./*[1]/*[4]/*[1]; [t] "of";' +
401 '[n] ./*[1]/*[1]/*[1] (rate:0.2); [p] (pause:400)', 402 '[n] ./*[1]/*[1]/*[1] (rate:0.2); [p] (pause:400)',
402 'self::span[@class="mroot"]'); 403 'self::span[@class="mroot"]');
403 404
404 defineRule( 405 defineRule(
405 'mj-mfenced', 'default.default', 406 'mj-mfenced', 'default.default',
406 '[t] "opening"; [n] ./*[1]; ' + 407 '[t] "opening"; [n] ./*[1]; ' +
407 '[m] ./*[position()>1 and position()<last()];' + 408 '[m] ./*[position()>1 and position()<last()];' +
408 ' [t] "closing"; [n] ./*[last()]', 409 ' [t] "closing"; [n] ./*[last()]',
409 'self::span[@class="mfenced"]'); 410 'self::span[@class="mfenced"]');
410 411
411 // Mtable short rules. 412 // Mtable short rules.
412 defineRuleAlias('mj-leaf', 'self::span[@class="mtable"]'); 413 defineRuleAlias('mj-leaf', 'self::span[@class="mtable"]');
413 // Mmultiscripts rules. 414 // Mmultiscripts rules.
414 defineRuleAlias('mj-leaf', 'self::span[@class="mmultiscripts"]'); 415 defineRuleAlias('mj-leaf', 'self::span[@class="mmultiscripts"]');
415 }; 416 };
416 417
417 418
418 /** 419 /**
419 * Initialize mathJax Aliases 420 * Initialize mathJax Aliases
420 * @private 421 * @private
421 */ 422 */
422 cvox.MathmlStoreRules.initAliases_ = function() { 423 cvox.MathmlStoreRules.initAliases_ = function() {
423 // Space elements 424 // Space elements
424 defineRuleAlias('mspace', 'self::span[@class="mspace"]'); 425 defineRuleAlias('mspace', 'self::span[@class="mspace"]');
425 defineRuleAlias('mstyle', 'self::span[@class="mstyle"]'); 426 defineRuleAlias('mstyle', 'self::span[@class="mstyle"]');
426 defineRuleAlias('mpadded', 'self::span[@class="mpadded"]'); 427 defineRuleAlias('mpadded', 'self::span[@class="mpadded"]');
427 defineRuleAlias('merror', 'self::span[@class="merror"]'); 428 defineRuleAlias('merror', 'self::span[@class="merror"]');
428 defineRuleAlias('mphantom', 'self::span[@class="mphantom"]'); 429 defineRuleAlias('mphantom', 'self::span[@class="mphantom"]');
429 430
430 // Token elements. 431 // Token elements.
431 defineRuleAlias('ms', 'self::span[@class="ms"]'); 432 defineRuleAlias('ms', 'self::span[@class="ms"]');
432 433
433 // Layout elements. 434 // Layout elements.
434 defineRuleAlias('mrow', 'self::span[@class="mrow"]'); 435 defineRuleAlias('mrow', 'self::span[@class="mrow"]');
435 436
436 // The following rules fix bugs in MathJax's LaTeX translation. 437 // The following rules fix bugs in MathJax's LaTeX translation.
437 defineRuleAlias( 438 defineRuleAlias('mj-msub', 'self::span[@class="msubsup"]', 'CQFmathmlmsub');
438 'mj-msub', 'self::span[@class="msubsup"]', 'CQFmathmlmsub');
439 439
440 defineRuleAlias( 440 defineRuleAlias('mj-msup', 'self::span[@class="msubsup"]', 'CQFmathmlmsup');
441 'mj-msup', 'self::span[@class="msubsup"]', 'CQFmathmlmsup');
442 441
443 defineRuleAlias( 442 defineRuleAlias(
444 'mj-munder', 'self::span[@class="munderover"]', 'CQFmathmlmunder'); 443 'mj-munder', 'self::span[@class="munderover"]', 'CQFmathmlmunder');
445 444
446 defineRuleAlias( 445 defineRuleAlias(
447 'mj-mover', 'self::span[@class="munderover"]', 'CQFmathmlmover'); 446 'mj-mover', 'self::span[@class="munderover"]', 'CQFmathmlmover');
448 }; 447 };
449 448
450 449
451 /** 450 /**
452 * Initialize specializations wrt. content of nodes. 451 * Initialize specializations wrt. content of nodes.
453 * @private 452 * @private
454 */ 453 */
455 cvox.MathmlStoreRules.initSpecializationRules_ = function() { 454 cvox.MathmlStoreRules.initSpecializationRules_ = function() {
456 // Some special nodes for square and cube. 455 // Some special nodes for square and cube.
457 // MathML 456 // MathML
458 defineRule( 457 defineRule(
459 'square', 'default.default', 458 'square', 'default.default',
460 '[n] ./*[1]; [t] "square" (pitch:0.35); [p] (pause:300)', 459 '[n] ./*[1]; [t] "square" (pitch:0.35); [p] (pause:300)',
461 'self::mathml:msup', './*[2][text()=2]'); 460 'self::mathml:msup', './*[2][text()=2]');
462 defineRuleAlias( 461 defineRuleAlias(
463 'square', 'self::mathml:msup', 462 'square', 'self::mathml:msup', './mathml:mrow=./*[2]',
464 './mathml:mrow=./*[2]', 'count(./*[2]/*)=1', './*[2]/*[1][text()=2]'); 463 'count(./*[2]/*)=1', './*[2]/*[1][text()=2]');
465 464
466 defineRule( 465 defineRule(
467 'cube', 'default.default', 466 'cube', 'default.default',
468 '[n] ./*[1]; [t] "cube" (pitch:0.35); [p] (pause:300)', 467 '[n] ./*[1]; [t] "cube" (pitch:0.35); [p] (pause:300)',
469 'self::mathml:msup', './*[2][text()=3]'); 468 'self::mathml:msup', './*[2][text()=3]');
470 defineRuleAlias( 469 defineRuleAlias(
471 'cube', 'self::mathml:msup', 470 'cube', 'self::mathml:msup', './mathml:mrow=./*[2]', 'count(./*[2]/*)=1',
472 './mathml:mrow=./*[2]', 'count(./*[2]/*)=1', './*[2]/*[1][text()=3]'); 471 './*[2]/*[1][text()=3]');
473 472
474 defineRule( 473 defineRule(
475 'square-sub', 'default.default', 474 'square-sub', 'default.default',
476 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35);' + 475 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35);' +
477 '[p] (pause:300); [t] "square" (pitch:0.35); [p] (pause:400)', 476 '[p] (pause:300); [t] "square" (pitch:0.35); [p] (pause:400)',
478 'self::mathml:msubsup', './*[3][text()=2]'); 477 'self::mathml:msubsup', './*[3][text()=2]');
479 defineRuleAlias( 478 defineRuleAlias(
480 'square-sub', 'self::mathml:msubsup', 479 'square-sub', 'self::mathml:msubsup', './mathml:mrow=./*[3]',
481 './mathml:mrow=./*[3]', 'count(./*[3]/*)=1', './*[3]/*[1][text()=2]'); 480 'count(./*[3]/*)=1', './*[3]/*[1][text()=2]');
482 481
483 defineRule( 482 defineRule(
484 'cube-sub', 'default.default', 483 'cube-sub', 'default.default',
485 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35);' + 484 '[n] ./*[1]; [t] "sub"; [n] ./*[2] (pitch:-0.35);' +
486 '[p] (pause:300); [t] "cube" (pitch:0.35); [p] (pause:400)', 485 '[p] (pause:300); [t] "cube" (pitch:0.35); [p] (pause:400)',
487 'self::mathml:msubsup', './*[3][text()=3]'); 486 'self::mathml:msubsup', './*[3][text()=3]');
488 defineRuleAlias( 487 defineRuleAlias(
489 'cube-sub', 'self::mathml:msubsup', 488 'cube-sub', 'self::mathml:msubsup', './mathml:mrow=./*[3]',
490 './mathml:mrow=./*[3]', 'count(./*[3]/*)=1', './*[3]/*[1][text()=3]'); 489 'count(./*[3]/*)=1', './*[3]/*[1][text()=3]');
491 490
492 // MathJax 491 // MathJax
493 defineRule( 492 defineRule(
494 'mj-square', 'default.default', 493 'mj-square', 'default.default',
495 '[n] ./*[1]/*[1]/*[1]; [t] "square" (pitch:0.35); [p] (pause:300)', 494 '[n] ./*[1]/*[1]/*[1]; [t] "square" (pitch:0.35); [p] (pause:300)',
496 'self::span[@class="msup"]', './*[1]/*[2]/*[1][text()=2]'); 495 'self::span[@class="msup"]', './*[1]/*[2]/*[1][text()=2]');
497 defineRuleAlias( 496 defineRuleAlias(
498 'mj-square', 'self::span[@class="msup"]', 497 'mj-square', 'self::span[@class="msup"]',
499 './*[1]/*[2]/*[1]=./*[1]/*[2]/span[@class="mrow"]', 498 './*[1]/*[2]/*[1]=./*[1]/*[2]/span[@class="mrow"]',
500 'count(./*[1]/*[2]/*[1]/*)=1', './*[1]/*[2]/*[1]/*[1][text()=2]'); 499 'count(./*[1]/*[2]/*[1]/*)=1', './*[1]/*[2]/*[1]/*[1][text()=2]');
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 'count(./*[1]/*[2]/*[1]/*)=1', './*[1]/*[2]/*[1]/*[1][text()=3]'); 542 'count(./*[1]/*[2]/*[1]/*)=1', './*[1]/*[2]/*[1]/*[1][text()=3]');
544 }; 543 };
545 544
546 545
547 /** 546 /**
548 * Initialize mathJax Aliases 547 * Initialize mathJax Aliases
549 * @private 548 * @private
550 */ 549 */
551 cvox.MathmlStoreRules.initSemanticRules_ = function() { 550 cvox.MathmlStoreRules.initSemanticRules_ = function() {
552 // Initial rule 551 // Initial rule
553 defineRule( 552 defineRule('stree', 'default.default', '[n] ./*[1]', 'self::stree');
554 'stree', 'default.default',
555 '[n] ./*[1]', 'self::stree');
556 553
557 defineRule( 554 defineRule(
558 'multrel', 'default.default', 555 'multrel', 'default.default',
559 '[t] "multirelation"; [m] children/* (sepFunc:CTXFcontentIterator)', 556 '[t] "multirelation"; [m] children/* (sepFunc:CTXFcontentIterator)',
560 'self::multirel'); 557 'self::multirel');
561 558
562 defineRule( 559 defineRule(
563 'variable-equality', 'default.default', 560 'variable-equality', 'default.default',
564 '[t] "equation sequence"; [m] ./children/* ' + 561 '[t] "equation sequence"; [m] ./children/* ' +
565 '(context:"part",ctxtFunc:CTXFnodeCounter,separator:./text())', 562 '(context:"part",ctxtFunc:CTXFnodeCounter,separator:./text())',
566 'self::relseq[@role="equality"]', 'count(./children/*)>2', 563 'self::relseq[@role="equality"]', 'count(./children/*)>2',
567 './children/punct[@role="ellipsis"]');// Make that better! 564 './children/punct[@role="ellipsis"]'); // Make that better!
568 565
569 defineRule( 566 defineRule(
570 'multi-equality', 'default.default', 567 'multi-equality', 'default.default',
571 '[t] "equation sequence"; [m] ./children/* ' + 568 '[t] "equation sequence"; [m] ./children/* ' +
572 '(context:"part",ctxtFunc:CTXFnodeCounter,separator:./text())', 569 '(context:"part",ctxtFunc:CTXFnodeCounter,separator:./text())',
573 'self::relseq[@role="equality"]', 'count(./children/*)>2'); 570 'self::relseq[@role="equality"]', 'count(./children/*)>2');
574 571
575 defineRule( 572 defineRule(
576 'multi-equality', 'default.short', 573 'multi-equality', 'default.short',
577 '[t] "equation sequence"; [m] ./children/* ' + 574 '[t] "equation sequence"; [m] ./children/* ' +
(...skipping 15 matching lines...) Expand all
593 './children/identifier or ./children/number'); 590 './children/identifier or ./children/number');
594 591
595 defineRule( 592 defineRule(
596 'simple-equality2', 'default.default', 593 'simple-equality2', 'default.default',
597 '[n] children/*[1]; [p] (pause:200); [n] text() (pause:200);' + 594 '[n] children/*[1]; [p] (pause:200); [n] text() (pause:200);' +
598 '[n] children/*[2]', 595 '[n] children/*[2]',
599 'self::relseq[@role="equality"]', 'count(./children/*)=2', 596 'self::relseq[@role="equality"]', 'count(./children/*)=2',
600 './children/function or ./children/appl'); 597 './children/function or ./children/appl');
601 598
602 defineRule( 599 defineRule(
603 'multrel', 'default.default', 600 'multrel', 'default.default', '[m] children/* (separator:./text())',
604 '[m] children/* (separator:./text())',
605 'self::relseq'); 601 'self::relseq');
606 602
607 defineRule( 603 defineRule(
608 'binary-operation', 'default.default', 604 'binary-operation', 'default.default',
609 '[m] children/* (separator:text());', 605 '[m] children/* (separator:text());', 'self::infixop');
610 'self::infixop');
611 606
612 defineRule( 607 defineRule(
613 'variable-addition', 'default.default', 608 'variable-addition', 'default.default',
614 '[t] "sum with variable number of summands";' + 609 '[t] "sum with variable number of summands";' +
615 '[p] (pause:400); [m] children/* (separator:./text())', 610 '[p] (pause:400); [m] children/* (separator:./text())',
616 'self::infixop[@role="addition"]', 'count(children/*)>2', 611 'self::infixop[@role="addition"]', 'count(children/*)>2',
617 'children/punct[@role="ellipsis"]');// Make that better! 612 'children/punct[@role="ellipsis"]'); // Make that better!
618 613
619 defineRule( 614 defineRule(
620 'multi-addition', 'default.default', 615 'multi-addition', 'default.default',
621 '[t] "sum with,"; [t] count(./children/*); [t] ", summands";' + 616 '[t] "sum with,"; [t] count(./children/*); [t] ", summands";' +
622 '[p] (pause:400); [m] ./children/* (separator:./text())', 617 '[p] (pause:400); [m] ./children/* (separator:./text())',
623 'self::infixop[@role="addition"]', 'count(./children/*)>2'); 618 'self::infixop[@role="addition"]', 'count(./children/*)>2');
624 619
625 // Prefix Operator 620 // Prefix Operator
626 defineRule( 621 defineRule(
627 'prefix', 'default.default', 622 'prefix', 'default.default',
628 '[t] "prefix"; [n] text(); [t] "of" (pause 150);' + 623 '[t] "prefix"; [n] text(); [t] "of" (pause 150);' +
629 '[n] children/*[1]', 624 '[n] children/*[1]',
630 'self::prefixop'); 625 'self::prefixop');
631 626
632 defineRule( 627 defineRule(
633 'negative', 'default.default', 628 'negative', 'default.default', '[t] "negative"; [n] children/*[1]',
634 '[t] "negative"; [n] children/*[1]',
635 'self::prefixop', 'self::prefixop[@role="negative"]'); 629 'self::prefixop', 'self::prefixop[@role="negative"]');
636 630
637 // Postfix Operator 631 // Postfix Operator
638 defineRule( 632 defineRule(
639 'postfix', 'default.default', 633 'postfix', 'default.default',
640 '[n] children/*[1]; [t] "postfix"; [n] text() (pause 300)', 634 '[n] children/*[1]; [t] "postfix"; [n] text() (pause 300)',
641 'self::postfixop'); 635 'self::postfixop');
642 636
643 defineRule( 637 defineRule('identifier', 'default.default', '[n] text()', 'self::identifier');
644 'identifier', 'default.default',
645 '[n] text()', 'self::identifier');
646 638
647 defineRule( 639 defineRule('number', 'default.default', '[n] text()', 'self::number');
648 'number', 'default.default',
649 '[n] text()', 'self::number');
650 640
651 defineRule( 641 defineRule(
652 'fraction', 'default.default', 642 'fraction', 'default.default',
653 '[p] (pause:250); [n] children/*[1] (pitch:0.3); [p] (pause:250);' + 643 '[p] (pause:250); [n] children/*[1] (pitch:0.3); [p] (pause:250);' +
654 ' [t] "divided by"; [n] children/*[2] (pitch:-0.3); [p] (pause:400)', 644 ' [t] "divided by"; [n] children/*[2] (pitch:-0.3); [p] (pause:400)',
655 'self::fraction'); 645 'self::fraction');
656 646
657 defineRule( 647 defineRule(
658 'superscript', 'default.default', 648 'superscript', 'default.default',
659 '[n] children/*[1]; [t] "super"; [n] children/*[2] (pitch:0.35);' + 649 '[n] children/*[1]; [t] "super"; [n] children/*[2] (pitch:0.35);' +
660 '[p] (pause:300)', 650 '[p] (pause:300)',
661 'self::superscript'); 651 'self::superscript');
662 defineRule( 652 defineRule(
663 'subscript', 'default.default', 653 'subscript', 'default.default',
664 '[n] children/*[1]; [t] "sub"; [n] children/*[2] (pitch:-0.35);' + 654 '[n] children/*[1]; [t] "sub"; [n] children/*[2] (pitch:-0.35);' +
665 '[p] (pause:300)', 655 '[p] (pause:300)',
666 'self::subscript'); 656 'self::subscript');
667 657
668 defineRule( 658 defineRule(
669 'ellipsis', 'default.default', 659 'ellipsis', 'default.default',
670 '[p] (pause:200); [t] "dot dot dot"; [p] (pause:300)', 660 '[p] (pause:200); [t] "dot dot dot"; [p] (pause:300)', 'self::punct',
671 'self::punct', 'self::punct[@role="ellipsis"]'); 661 'self::punct[@role="ellipsis"]');
672 662
673 defineRule( 663 defineRule(
674 'fence-single', 'default.default', 664 'fence-single', 'default.default', '[n] text()', 'self::punct',
675 '[n] text()', 665 'self::punct[@role="openfence"]');
676 'self::punct', 'self::punct[@role="openfence"]'); 666 defineRuleAlias(
677 defineRuleAlias('fence-single', 'self::punct', 667 'fence-single', 'self::punct', 'self::punct[@role="closefence"]');
678 'self::punct[@role="closefence"]'); 668 defineRuleAlias('fence-single', 'self::punct', 'self::punct[@role="vbar"]');
679 defineRuleAlias('fence-single', 'self::punct', 669 defineRuleAlias(
680 'self::punct[@role="vbar"]'); 670 'fence-single', 'self::punct', 'self::punct[@role="application"]');
681 defineRuleAlias('fence-single', 'self::punct',
682 'self::punct[@role="application"]');
683 671
684 // TODO (sorge) Refine punctuations further. 672 // TODO (sorge) Refine punctuations further.
685 defineRule( 673 defineRule(
686 'omit-punct', 'default.default', 674 'omit-punct', 'default.default', '[p] (pause:200);', 'self::punct');
687 '[p] (pause:200);',
688 'self::punct');
689 675
690 defineRule( 676 defineRule('omit-empty', 'default.default', '', 'self::empty');
691 'omit-empty', 'default.default',
692 '',
693 'self::empty');
694 677
695 // Fences rules. 678 // Fences rules.
696 defineRule( 679 defineRule(
697 'fences-open-close', 'default.default', 680 'fences-open-close', 'default.default',
698 '[p] (pause:100); [t] "open"; [n] children/*[1]; [p] (pause:200);' + 681 '[p] (pause:100); [t] "open"; [n] children/*[1]; [p] (pause:200);' +
699 '[t] "close"', 682 '[t] "close"',
700 'self::fenced[@role="leftright"]'); 683 'self::fenced[@role="leftright"]');
701 684
702 defineRule( 685 defineRule(
703 'fences-open-close-in-appl', 'default.default', 686 'fences-open-close-in-appl', 'default.default',
704 '[p] (pause:100); [n] children/*[1]; [p] (pause:200);', 687 '[p] (pause:100); [n] children/*[1]; [p] (pause:200);',
705 'self::fenced[@role="leftright"]', './parent::children/parent::appl'); 688 'self::fenced[@role="leftright"]', './parent::children/parent::appl');
706 689
707 defineRule( 690 defineRule(
708 'fences-neutral', 'default.default', 691 'fences-neutral', 'default.default',
709 '[p] (pause:100); [t] "absolute value of"; [n] children/*[1];' + 692 '[p] (pause:100); [t] "absolute value of"; [n] children/*[1];' +
710 '[p] (pause:350);', 693 '[p] (pause:350);',
711 'self::fenced', 'self::fenced[@role="neutral"]'); 694 'self::fenced', 'self::fenced[@role="neutral"]');
712 695
713 defineRule( 696 defineRule(
714 'omit-fences', 'default.default', 697 'omit-fences', 'default.default',
715 '[p] (pause:500); [n] children/*[1]; [p] (pause:200);', 698 '[p] (pause:500); [n] children/*[1]; [p] (pause:200);', 'self::fenced');
716 'self::fenced');
717 699
718 // Matrix rules. 700 // Matrix rules.
719 defineRule( 701 defineRule(
720 'matrix', 'default.default', 702 'matrix', 'default.default',
721 '[t] "matrix"; [m] children/* ' + 703 '[t] "matrix"; [m] children/* ' +
722 '(ctxtFunc:CTXFnodeCounter,context:"row",pause:100)', 704 '(ctxtFunc:CTXFnodeCounter,context:"row",pause:100)',
723 'self::matrix'); 705 'self::matrix');
724 706
725 defineRule( 707 defineRule(
726 'matrix-row', 'default.default', 708 'matrix-row', 'default.default',
727 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"column",pause:100)', 709 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"column",pause:100)',
728 'self::row[@role="matrix"]'); 710 'self::row[@role="matrix"]');
729 711
730 defineRule( 712 defineRule(
731 'matrix-cell', 'default.default', 713 'matrix-cell', 'default.default', '[n] children/*[1]',
732 '[n] children/*[1]', 'self::cell[@role="matrix"]'); 714 'self::cell[@role="matrix"]');
733 715
734 // Vector rules. 716 // Vector rules.
735 defineRule( 717 defineRule(
736 'vector', 'default.default', 718 'vector', 'default.default',
737 '[t] "vector"; [m] children/* ' + 719 '[t] "vector"; [m] children/* ' +
738 '(ctxtFunc:CTXFnodeCounter,context:"element",pause:100)', 720 '(ctxtFunc:CTXFnodeCounter,context:"element",pause:100)',
739 'self::vector'); 721 'self::vector');
740 722
741 // Cases rules. 723 // Cases rules.
742 defineRule( 724 defineRule(
743 'cases', 'default.default', 725 'cases', 'default.default',
744 '[t] "case statement"; [m] children/* ' + 726 '[t] "case statement"; [m] children/* ' +
745 '(ctxtFunc:CTXFnodeCounter,context:"case",pause:100)', 727 '(ctxtFunc:CTXFnodeCounter,context:"case",pause:100)',
746 'self::cases'); 728 'self::cases');
747 729
748 defineRule( 730 defineRule(
749 'cases-row', 'default.default', 731 'cases-row', 'default.default', '[m] children/*',
750 '[m] children/*', 'self::row[@role="cases"]'); 732 'self::row[@role="cases"]');
751 733
752 defineRule( 734 defineRule(
753 'cases-cell', 'default.default', 735 'cases-cell', 'default.default', '[n] children/*[1]',
754 '[n] children/*[1]', 'self::cell[@role="cases"]'); 736 'self::cell[@role="cases"]');
755 737
756 defineRule( 738 defineRule(
757 'row', 'default.default', 739 'row', 'default.default',
758 '[m] ./* (ctxtFunc:CTXFnodeCounter,context:"column",pause:100)', 740 '[m] ./* (ctxtFunc:CTXFnodeCounter,context:"column",pause:100)',
759 'self::row"'); 741 'self::row"');
760 742
761 defineRule( 743 defineRule(
762 'cases-end', 'default.default', 744 'cases-end', 'default.default',
763 '[t] "case statement"; ' + 745 '[t] "case statement"; ' +
764 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"case",pause:100);' + 746 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"case",pause:100);' +
765 '[t] "end cases"', 747 '[t] "end cases"',
766 'self::cases', 'following-sibling::*'); 748 'self::cases', 'following-sibling::*');
767 749
768 // Multiline rules. 750 // Multiline rules.
769 defineRule( 751 defineRule(
770 'multiline', 'default.default', 752 'multiline', 'default.default',
771 '[t] "multiline equation";' + 753 '[t] "multiline equation";' +
772 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"line",pause:100)', 754 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"line",pause:100)',
773 'self::multiline'); 755 'self::multiline');
774 756
775 defineRule( 757 defineRule('line', 'default.default', '[m] children/*', 'self::line');
776 'line', 'default.default',
777 '[m] children/*', 'self::line');
778 758
779 // Table rules. 759 // Table rules.
780 defineRule( 760 defineRule(
781 'table', 'default.default', 761 'table', 'default.default',
782 '[t] "multiline equation";' + 762 '[t] "multiline equation";' +
783 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"row",pause:200)', 763 '[m] children/* (ctxtFunc:CTXFnodeCounter,context:"row",pause:200)',
784 'self::table'); 764 'self::table');
785 765
786 defineRule( 766 defineRule(
787 'table-row', 'default.default', 767 'table-row', 'default.default', '[m] children/* (pause:100)',
788 '[m] children/* (pause:100)', 'self::row[@role="table"]'); 768 'self::row[@role="table"]');
789 769
790 defineRuleAlias( 770 defineRuleAlias('cases-cell', 'self::cell[@role="table"]');
791 'cases-cell', 'self::cell[@role="table"]');
792 771
793 772
794 // Rules for punctuated expressions. 773 // Rules for punctuated expressions.
795 defineRule( 774 defineRule(
796 'end-punct', 'default.default', 775 'end-punct', 'default.default', '[m] children/*; [p] (pause:300)',
797 '[m] children/*; [p] (pause:300)',
798 'self::punctuated', '@role="endpunct"'); 776 'self::punctuated', '@role="endpunct"');
799 777
800 defineRule( 778 defineRule(
801 'start-punct', 'default.default', 779 'start-punct', 'default.default',
802 '[n] content/*[1]; [p] (pause:200); [m] children/*', 780 '[n] content/*[1]; [p] (pause:200); [m] children/*', 'self::punctuated',
803 'self::punctuated', '@role="startpunct"'); 781 '@role="startpunct"');
804 782
805 defineRule( 783 defineRule(
806 'integral-punct', 'default.default', 784 'integral-punct', 'default.default',
807 '[n] children/*[1] (rate:0.2); [n] children/*[3] (rate:0.2)', 785 '[n] children/*[1] (rate:0.2); [n] children/*[3] (rate:0.2)',
808 'self::punctuated', '@role="integral"'); 786 'self::punctuated', '@role="integral"');
809 787
810 defineRule( 788 defineRule(
811 'punctuated', 'default.default', 789 'punctuated', 'default.default', '[m] children/* (pause:100)',
812 '[m] children/* (pause:100)',
813 'self::punctuated'); 790 'self::punctuated');
814 791
815 // Function rules 792 // Function rules
816 defineRule( 793 defineRule('function', 'default.default', '[n] text()', 'self::function');
817 'function', 'default.default',
818 '[n] text()', 'self::function');
819 794
820 defineRule( 795 defineRule(
821 'appl', 'default.default', 796 'appl', 'default.default',
822 '[n] children/*[1]; [n] content/*[1]; [n] children/*[2]', 'self::appl'); 797 '[n] children/*[1]; [n] content/*[1]; [n] children/*[2]', 'self::appl');
823 798
824 // Limit operator rules 799 // Limit operator rules
825 defineRule( 800 defineRule(
826 'limboth', 'default.default', 801 'limboth', 'default.default',
827 '[n] children/*[1]; [t] "from"; [n] children/*[2]; [t] "to";' + 802 '[n] children/*[1]; [t] "from"; [n] children/*[2]; [t] "to";' +
828 '[n] children/*[3]', 'self::limboth'); 803 '[n] children/*[3]',
804 'self::limboth');
829 805
830 defineRule( 806 defineRule(
831 'sum-only', 'default.default', 807 'sum-only', 'default.default',
832 '[n] children/*[1]; [p] (pause 100); [t] "over"; [n] children/*[2];' + 808 '[n] children/*[1]; [p] (pause 100); [t] "over"; [n] children/*[2];' +
833 '[p] (pause 250);', 809 '[p] (pause 250);',
834 'self::limboth', 'self::limboth[@role="sum"]'); 810 'self::limboth', 'self::limboth[@role="sum"]');
835 811
836 defineRule( 812 defineRule(
837 'limlower', 'default.default', 813 'limlower', 'default.default',
838 '[n] children/*[1]; [t] "over"; [n] children/*[2];', 'self::limlower'); 814 '[n] children/*[1]; [t] "over"; [n] children/*[2];', 'self::limlower');
839 815
840 defineRule( 816 defineRule(
841 'limupper', 'default.default', 817 'limupper', 'default.default',
842 '[n] children/*[1]; [t] "under"; [n] children/*[2];', 'self::limupper'); 818 '[n] children/*[1]; [t] "under"; [n] children/*[2];', 'self::limupper');
843 819
844 // Bigoperator rules 820 // Bigoperator rules
845 defineRule( 821 defineRule('largeop', 'default.default', '[n] text()', 'self::largeop');
846 'largeop', 'default.default',
847 '[n] text()', 'self::largeop');
848 822
849 defineRule( 823 defineRule(
850 'bigop', 'default.default', 824 'bigop', 'default.default',
851 '[n] children/*[1]; [p] (pause 100); [t] "over"; [n] children/*[2];' + 825 '[n] children/*[1]; [p] (pause 100); [t] "over"; [n] children/*[2];' +
852 '[p] (pause 250);', 826 '[p] (pause 250);',
853 'self::bigop'); 827 'self::bigop');
854 828
855 829
856 // Integral rules 830 // Integral rules
857 defineRule( 831 defineRule(
858 'integral', 'default.default', 832 'integral', 'default.default',
859 '[n] children/*[1]; [p] (pause 100); [n] children/*[2]; [p] (pause 200);' + 833 '[n] children/*[1]; [p] (pause 100); [n] children/*[2]; [p] (pause 200);' +
860 '[n] children/*[3] (rate:0.35);', 'self::integral'); 834 '[n] children/*[3] (rate:0.35);',
835 'self::integral');
861 836
862 837
863 defineRule( 838 defineRule(
864 'sqrt', 'default.default', 839 'sqrt', 'default.default',
865 '[t] "Square root of"; [n] children/*[1] (rate:0.2); [p] (pause:400)', 840 '[t] "Square root of"; [n] children/*[1] (rate:0.2); [p] (pause:400)',
866 'self::sqrt'); 841 'self::sqrt');
867 842
868 defineRule( 843 defineRule(
869 'square', 'default.default', 844 'square', 'default.default',
870 '[n] children/*[1]; [t] "square" (pitch:0.35); [p] (pause:300)', 845 '[n] children/*[1]; [t] "square" (pitch:0.35); [p] (pause:300)',
871 'self::superscript', 'children/*[2][text()=2]'); 846 'self::superscript', 'children/*[2][text()=2]');
872 847
873 defineRule( 848 defineRule(
874 'text-no-mult', 'default.default', 849 'text-no-mult', 'default.default',
875 '[n] children/*[1]; [p] (pause:200); [n] children/*[2]', 850 '[n] children/*[1]; [p] (pause:200); [n] children/*[2]', 'self::infixop',
876 'self::infixop', 'children/text'); 851 'children/text');
877 }; 852 };
878 853
879 }); // goog.scope 854 }); // goog.scope
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698