2424import { PropertyList } from '../../Tree/Node.js' ;
2525import { AbstractMmlTokenNode , MmlNode , AttributeList , TEXCLASS } from '../MmlNode.js' ;
2626import { MmlMrow } from './mrow.js' ;
27-
28- /*
29- * Types needed for the operator dictionary
30- */
31- export type OperatorDef = [ number , number , number , PropertyList ] ;
32- export type OperatorList = { [ name : string ] : OperatorDef } ;
33- export type RangeDef = [ number , number , number , string ] ;
34-
35- export function OPDEF ( lspace : number , rspace : number , texClass : number , properties : PropertyList = null ) : OperatorDef {
36- return [ lspace , rspace , texClass , properties ] as OperatorDef ;
37- }
38-
39- /*
40- * The various kinds of operators in the dictionary
41- */
42- export let MO = {
43- ORD : OPDEF ( 0 , 0 , TEXCLASS . ORD ) ,
44- ORD11 : OPDEF ( 1 , 1 , TEXCLASS . ORD ) ,
45- ORD21 : OPDEF ( 2 , 1 , TEXCLASS . ORD ) ,
46- ORD02 : OPDEF ( 0 , 2 , TEXCLASS . ORD ) ,
47- ORD55 : OPDEF ( 5 , 5 , TEXCLASS . ORD ) ,
48- OP : OPDEF ( 1 , 2 , TEXCLASS . OP , { largeop : true , movablelimits : true , symmetric : true } ) ,
49- OPFIXED : OPDEF ( 1 , 2 , TEXCLASS . OP , { largeop : true , movablelimits : true } ) ,
50- INTEGRAL : OPDEF ( 0 , 1 , TEXCLASS . OP , { largeop : true , symmetric : true } ) ,
51- INTEGRAL2 : OPDEF ( 1 , 2 , TEXCLASS . OP , { largeop : true , symmetric : true } ) ,
52- BIN3 : OPDEF ( 3 , 3 , TEXCLASS . BIN ) ,
53- BIN4 : OPDEF ( 4 , 4 , TEXCLASS . BIN ) ,
54- BIN01 : OPDEF ( 0 , 1 , TEXCLASS . BIN ) ,
55- BIN5 : OPDEF ( 5 , 5 , TEXCLASS . BIN ) ,
56- TALLBIN : OPDEF ( 4 , 4 , TEXCLASS . BIN , { stretchy : true } ) ,
57- BINOP : OPDEF ( 4 , 4 , TEXCLASS . BIN , { largeop : true , movablelimits : true } ) ,
58- REL : OPDEF ( 5 , 5 , TEXCLASS . REL ) ,
59- REL1 : OPDEF ( 1 , 1 , TEXCLASS . REL , { stretchy : true } ) ,
60- REL4 : OPDEF ( 4 , 4 , TEXCLASS . REL ) ,
61- RELSTRETCH : OPDEF ( 5 , 5 , TEXCLASS . REL , { stretchy : true } ) ,
62- RELACCENT : OPDEF ( 5 , 5 , TEXCLASS . REL , { accent : true } ) ,
63- WIDEREL : OPDEF ( 5 , 5 , TEXCLASS . REL , { accent : true , stretchy : true } ) ,
64- OPEN : OPDEF ( 0 , 0 , TEXCLASS . OPEN , { fence : true , stretchy : true , symmetric : true } ) ,
65- CLOSE : OPDEF ( 0 , 0 , TEXCLASS . CLOSE , { fence : true , stretchy : true , symmetric : true } ) ,
66- INNER : OPDEF ( 0 , 0 , TEXCLASS . INNER ) ,
67- PUNCT : OPDEF ( 0 , 3 , TEXCLASS . PUNCT ) ,
68- ACCENT : OPDEF ( 0 , 0 , TEXCLASS . ORD , { accent : true } ) ,
69- WIDEACCENT : OPDEF ( 0 , 0 , TEXCLASS . ORD , { accent : true , stretchy : true } )
70- } ;
27+ import { OperatorList , OPTABLE , RangeDef , RANGES } from '../OperatorDictionary.js' ;
7128
7229/*****************************************************************/
7330/*
@@ -116,289 +73,17 @@ export class MmlMo extends AbstractMmlTokenNode {
11673 /*
11774 * Unicode ranges and their default TeX classes
11875 */
119- public static RANGES : RangeDef [ ] = [
120- [ 0x20 , 0x7F , TEXCLASS . REL , 'BasicLatin' ] ,
121- [ 0xA0 , 0xFF , TEXCLASS . ORD , 'Latin1Supplement' ] ,
122- [ 0x100 , 0x17F , TEXCLASS . ORD , 'LatinExtendedA' ] ,
123- [ 0x180 , 0x24F , TEXCLASS . ORD , 'LatinExtendedB' ] ,
124- [ 0x2B0 , 0x2FF , TEXCLASS . ORD , 'SpacingModLetters' ] ,
125- [ 0x300 , 0x36F , TEXCLASS . ORD , 'CombDiacritMarks' ] ,
126- [ 0x370 , 0x3FF , TEXCLASS . ORD , 'GreekAndCoptic' ] ,
127- [ 0x1E00 , 0x1EFF , TEXCLASS . ORD , 'LatinExtendedAdditional' ] ,
128- [ 0x2000 , 0x206F , TEXCLASS . PUNCT , 'GeneralPunctuation' ] ,
129- [ 0x2070 , 0x209F , TEXCLASS . ORD , 'SuperAndSubscripts' ] ,
130- [ 0x20A0 , 0x20CF , TEXCLASS . ORD , 'Currency' ] ,
131- [ 0x20D0 , 0x20FF , TEXCLASS . ORD , 'CombDiactForSymbols' ] ,
132- [ 0x2100 , 0x214F , TEXCLASS . ORD , 'LetterlikeSymbols' ] ,
133- [ 0x2150 , 0x218F , TEXCLASS . ORD , 'NumberForms' ] ,
134- [ 0x2190 , 0x21FF , TEXCLASS . REL , 'Arrows' ] ,
135- [ 0x2200 , 0x22FF , TEXCLASS . BIN , 'MathOperators' ] ,
136- [ 0x2300 , 0x23FF , TEXCLASS . ORD , 'MiscTechnical' ] ,
137- [ 0x2460 , 0x24FF , TEXCLASS . ORD , 'EnclosedAlphaNums' ] ,
138- [ 0x2500 , 0x259F , TEXCLASS . ORD , 'BoxDrawing' ] ,
139- [ 0x25A0 , 0x25FF , TEXCLASS . ORD , 'GeometricShapes' ] ,
140- [ 0x2700 , 0x27BF , TEXCLASS . ORD , 'Dingbats' ] ,
141- [ 0x27C0 , 0x27EF , TEXCLASS . ORD , 'MiscMathSymbolsA' ] ,
142- [ 0x27F0 , 0x27FF , TEXCLASS . REL , 'SupplementalArrowsA' ] ,
143- [ 0x2900 , 0x297F , TEXCLASS . REL , 'SupplementalArrowsB' ] ,
144- [ 0x2980 , 0x29FF , TEXCLASS . ORD , 'MiscMathSymbolsB' ] ,
145- [ 0x2A00 , 0x2AFF , TEXCLASS . BIN , 'SuppMathOperators' ] ,
146- [ 0x2B00 , 0x2BFF , TEXCLASS . ORD , 'MiscSymbolsAndArrows' ] ,
147- [ 0x1D400 , 0x1D7FF , TEXCLASS . ORD , 'MathAlphabets' ]
148- ] ;
76+ public static RANGES : RangeDef [ ] = RANGES ;
14977
15078 /*
151- * The (minimal) Operator Dictionary. Currently this only include the basics .
79+ * The Operator Dictionary.
15280 */
153- public static OPTABLE : { [ form : string ] : OperatorList } = {
154- prefix : {
155- '\u2200' : MO . ORD21 , // for all
156- '\u2202' : MO . ORD21 , // partial differential
157- '\u2203' : MO . ORD21 , // there exists
158- '\u2207' : MO . ORD21 , // nabla
159- '\u220F' : MO . OP , // n-ary product
160- '\u2210' : MO . OP , // n-ary coproduct
161- '\u2211' : MO . OP , // n-ary summation
162- '\u2212' : MO . BIN01 , // minus sign
163- '\u2213' : MO . BIN01 , // minus-or-plus sign
164- '\u221A' : [ 1 , 1 , TEXCLASS . ORD , { stretchy : true } ] , // square root
165- '\u2220' : MO . ORD , // angle
166- '\u222B' : MO . INTEGRAL , // integral
167- '\u222E' : MO . INTEGRAL , // contour integral
168- '\u22C0' : MO . OP , // n-ary logical and
169- '\u22C1' : MO . OP , // n-ary logical or
170- '\u22C2' : MO . OP , // n-ary intersection
171- '\u22C3' : MO . OP , // n-ary union
172- '\u2308' : MO . OPEN , // left ceiling
173- '\u230A' : MO . OPEN , // left floor
174- '\u27E8' : MO . OPEN , // mathematical left angle bracket
175- '\u27EE' : MO . OPEN , // mathematical left flattened parenthesis
176- '\u2A00' : MO . OP , // n-ary circled dot operator
177- '\u2A01' : MO . OP , // n-ary circled plus operator
178- '\u2A02' : MO . OP , // n-ary circled times operator
179- '\u2A04' : MO . OP , // n-ary union operator with plus
180- '\u2A06' : MO . OP , // n-ary square union operator
181- '\u00AC' : MO . ORD21 , // not sign
182- '\u00B1' : MO . BIN01 , // plus-minus sign
183- '(' : MO . OPEN , // left parenthesis
184- '+' : MO . BIN01 , // plus sign
185- '-' : MO . BIN01 , // hyphen-minus
186- '[' : MO . OPEN , // left square bracket
187- '{' : MO . OPEN , // left curly bracket
188- '|' : MO . OPEN // vertical line
189- } ,
190- postfix : {
191- '!' : [ 1 , 0 , TEXCLASS . CLOSE , null ] , // exclamation mark
192- '&' : MO . ORD , // ampersand
193- '\u2032' : MO . ORD02 , // prime
194- '\u203E' : MO . WIDEACCENT , // overline
195- '\u2309' : MO . CLOSE , // right ceiling
196- '\u230B' : MO . CLOSE , // right floor
197- '\u23DE' : MO . WIDEACCENT , // top curly bracket
198- '\u23DF' : MO . WIDEACCENT , // bottom curly bracket
199- '\u266D' : MO . ORD02 , // music flat sign
200- '\u266E' : MO . ORD02 , // music natural sign
201- '\u266F' : MO . ORD02 , // music sharp sign
202- '\u27E9' : MO . CLOSE , // mathematical right angle bracket
203- '\u27EF' : MO . CLOSE , // mathematical right flattened parenthesis
204- '\u02C6' : MO . WIDEACCENT , // modifier letter circumflex accent
205- '\u02C7' : MO . WIDEACCENT , // caron
206- '\u02C9' : MO . WIDEACCENT , // modifier letter macron
207- '\u02CA' : MO . ACCENT , // modifier letter acute accent
208- '\u02CB' : MO . ACCENT , // modifier letter grave accent
209- '\u02D8' : MO . ACCENT , // breve
210- '\u02D9' : MO . ACCENT , // dot above
211- '\u02DC' : MO . WIDEACCENT , // small tilde
212- '\u0302' : MO . WIDEACCENT , // combining circumflex accent
213- '\u00A8' : MO . ACCENT , // diaeresis
214- '\u00AF' : MO . WIDEACCENT , // macron
215- ')' : MO . CLOSE , // right parenthesis
216- ']' : MO . CLOSE , // right square bracket
217- '^' : MO . WIDEACCENT , // circumflex accent
218- '_' : MO . WIDEACCENT , // low line
219- '`' : MO . ACCENT , // grave accent
220- '|' : MO . CLOSE , // vertical line
221- '}' : MO . CLOSE , // right curly bracket
222- '~' : MO . WIDEACCENT // tilde
223- } ,
224- infix : {
225- '' : MO . ORD , // empty <mo>
226- '%' : [ 3 , 3 , TEXCLASS . ORD , null ] , // percent sign
227- '\u2022' : MO . BIN4 , // bullet
228- '\u2026' : MO . INNER , // horizontal ellipsis
229- '\u2044' : MO . TALLBIN , // fraction slash
230- '\u2061' : MO . ORD , // function application
231- '\u2062' : MO . ORD , // invisible times
232- '\u2063' : [ 0 , 0 , TEXCLASS . ORD , { linebreakstyle : 'after' , separator : true } ] , // invisible separator
233- '\u2064' : MO . ORD , // invisible plus
234- '\u2190' : MO . WIDEREL , // leftwards arrow
235- '\u2191' : MO . RELSTRETCH , // upwards arrow
236- '\u2192' : MO . WIDEREL , // rightwards arrow
237- '\u2193' : MO . RELSTRETCH , // downwards arrow
238- '\u2194' : MO . WIDEREL , // left right arrow
239- '\u2195' : MO . RELSTRETCH , // up down arrow
240- '\u2196' : MO . RELSTRETCH , // north west arrow
241- '\u2197' : MO . RELSTRETCH , // north east arrow
242- '\u2198' : MO . RELSTRETCH , // south east arrow
243- '\u2199' : MO . RELSTRETCH , // south west arrow
244- '\u21A6' : MO . WIDEREL , // rightwards arrow from bar
245- '\u21A9' : MO . WIDEREL , // leftwards arrow with hook
246- '\u21AA' : MO . WIDEREL , // rightwards arrow with hook
247- '\u21BC' : MO . WIDEREL , // leftwards harpoon with barb upwards
248- '\u21BD' : MO . WIDEREL , // leftwards harpoon with barb downwards
249- '\u21C0' : MO . WIDEREL , // rightwards harpoon with barb upwards
250- '\u21C1' : MO . WIDEREL , // rightwards harpoon with barb downwards
251- '\u21CC' : MO . WIDEREL , // rightwards harpoon over leftwards harpoon
252- '\u21D0' : MO . WIDEREL , // leftwards double arrow
253- '\u21D1' : MO . RELSTRETCH , // upwards double arrow
254- '\u21D2' : MO . WIDEREL , // rightwards double arrow
255- '\u21D3' : MO . RELSTRETCH , // downwards double arrow
256- '\u21D4' : MO . WIDEREL , // left right double arrow
257- '\u21D5' : MO . RELSTRETCH , // up down double arrow
258- '\u2208' : MO . REL , // element of
259- '\u2209' : MO . REL , // not an element of
260- '\u220B' : MO . REL , // contains as member
261- '\u2212' : MO . BIN4 , // minus sign
262- '\u2213' : MO . BIN4 , // minus-or-plus sign
263- '\u2215' : MO . TALLBIN , // division slash
264- '\u2216' : MO . BIN4 , // set minus
265- '\u2217' : MO . BIN4 , // asterisk operator
266- '\u2218' : MO . BIN4 , // ring operator
267- '\u2219' : MO . BIN4 , // bullet operator
268- '\u221D' : MO . REL , // proportional to
269- '\u2223' : MO . REL , // divides
270- '\u2225' : MO . REL , // parallel to
271- '\u2227' : MO . BIN4 , // logical and
272- '\u2228' : MO . BIN4 , // logical or
273- '\u2229' : MO . BIN4 , // intersection
274- '\u222A' : MO . BIN4 , // union
275- '\u223C' : MO . REL , // tilde operator
276- '\u2240' : MO . BIN4 , // wreath product
277- '\u2243' : MO . REL , // asymptotically equal to
278- '\u2245' : MO . REL , // approximately equal to
279- '\u2248' : MO . REL , // almost equal to
280- '\u224D' : MO . REL , // equivalent to
281- '\u2250' : MO . REL , // approaches the limit
282- '\u2260' : MO . REL , // not equal to
283- '\u2261' : MO . REL , // identical to
284- '\u2264' : MO . REL , // less-than or equal to
285- '\u2265' : MO . REL , // greater-than or equal to
286- '\u226A' : MO . REL , // much less-than
287- '\u226B' : MO . REL , // much greater-than
288- '\u227A' : MO . REL , // precedes
289- '\u227B' : MO . REL , // succeeds
290- '\u2282' : MO . REL , // subset of
291- '\u2283' : MO . REL , // superset of
292- '\u2286' : MO . REL , // subset of or equal to
293- '\u2287' : MO . REL , // superset of or equal to
294- '\u228E' : MO . BIN4 , // multiset union
295- '\u2291' : MO . REL , // square image of or equal to
296- '\u2292' : MO . REL , // square original of or equal to
297- '\u2293' : MO . BIN4 , // square cap
298- '\u2294' : MO . BIN4 , // square cup
299- '\u2295' : MO . BIN4 , // circled plus
300- '\u2296' : MO . BIN4 , // circled minus
301- '\u2297' : MO . BIN4 , // circled times
302- '\u2298' : MO . BIN4 , // circled division slash
303- '\u2299' : MO . BIN4 , // circled dot operator
304- '\u22A2' : MO . REL , // right tack
305- '\u22A3' : MO . REL , // left tack
306- '\u22A4' : MO . ORD55 , // down tack
307- '\u22A5' : MO . REL , // up tack
308- '\u22A8' : MO . REL , // true
309- '\u22C4' : MO . BIN4 , // diamond operator
310- '\u22C5' : MO . BIN4 , // dot operator
311- '\u22C6' : MO . BIN4 , // star operator
312- '\u22C8' : MO . REL , // bowtie
313- '\u22EE' : MO . ORD55 , // vertical ellipsis
314- '\u22EF' : MO . INNER , // midline horizontal ellipsis
315- '\u22F1' : [ 5 , 5 , TEXCLASS . INNER , null ] , // down right diagonal ellipsis
316- '\u25B3' : MO . BIN4 , // white up-pointing triangle
317- '\u25B5' : MO . BIN4 , // white up-pointing small triangle
318- '\u25B9' : MO . BIN4 , // white right-pointing small triangle
319- '\u25BD' : MO . BIN4 , // white down-pointing triangle
320- '\u25BF' : MO . BIN4 , // white down-pointing small triangle
321- '\u25C3' : MO . BIN4 , // white left-pointing small triangle
322- '\u2758' : MO . REL , // light vertical bar
323- '\u27F5' : MO . WIDEREL , // long leftwards arrow
324- '\u27F6' : MO . WIDEREL , // long rightwards arrow
325- '\u27F7' : MO . WIDEREL , // long left right arrow
326- '\u27F8' : MO . WIDEREL , // long leftwards double arrow
327- '\u27F9' : MO . WIDEREL , // long rightwards double arrow
328- '\u27FA' : MO . WIDEREL , // long left right double arrow
329- '\u27FC' : MO . WIDEREL , // long rightwards arrow from bar
330- '\u2A2F' : MO . BIN4 , // vector or cross product
331- '\u2A3F' : MO . BIN4 , // amalgamation or coproduct
332- '\u2AAF' : MO . REL , // precedes above single-line equals sign
333- '\u2AB0' : MO . REL , // succeeds above single-line equals sign
334- '\u00B1' : MO . BIN4 , // plus-minus sign
335- '\u00B7' : MO . BIN4 , // middle dot
336- '\u00D7' : MO . BIN4 , // multiplication sign
337- '\u00F7' : MO . BIN4 , // division sign
338- '*' : MO . BIN3 , // asterisk
339- '+' : MO . BIN4 , // plus sign
340- ',' : [ 0 , 3 , TEXCLASS . PUNCT , { linebreakstyle : 'after' , separator : true } ] , // comma
341- '-' : MO . BIN4 , // hyphen-minus
342- '/' : MO . ORD11 , // solidus
343- ':' : [ 1 , 2 , TEXCLASS . REL , null ] , // colon
344- ';' : [ 0 , 3 , TEXCLASS . PUNCT , { linebreakstyle : 'after' , separator : true } ] , // semicolon
345- '<' : MO . REL , // less-than sign
346- '=' : MO . REL , // equals sign
347- '>' : MO . REL , // greater-than sign
348- '?' : [ 1 , 1 , TEXCLASS . CLOSE , null ] , // question mark
349- '\\' : MO . ORD , // reverse solidus
350- '^' : MO . ORD11 , // circumflex accent
351- '_' : MO . ORD11 , // low line
352- '|' : [ 2 , 2 , TEXCLASS . ORD , { fence : true , stretchy : true , symmetric : true } ] , // vertical line
353- '#' : MO . ORD , // #
354- '$' : MO . ORD , // $
355- '.' : [ 0 , 3 , TEXCLASS . PUNCT , { separator : true } ] , // \ldotp
356- '\u02B9' : MO . ORD , // prime
357- '\u0300' : MO . ACCENT , // \grave
358- '\u0301' : MO . ACCENT , // \acute
359- '\u0303' : MO . WIDEACCENT , // \tilde
360- '\u0304' : MO . ACCENT , // \bar
361- '\u0306' : MO . ACCENT , // \breve
362- '\u0307' : MO . ACCENT , // \dot
363- '\u0308' : MO . ACCENT , // \ddot
364- '\u030C' : MO . ACCENT , // \check
365- '\u0332' : MO . WIDEACCENT , // horizontal line
366- '\u0338' : MO . REL4 , // \not
367- '\u2015' : [ 0 , 0 , TEXCLASS . ORD , { stretchy : true } ] , // horizontal line
368- '\u2017' : [ 0 , 0 , TEXCLASS . ORD , { stretchy : true } ] , // horizontal line
369- '\u2020' : MO . BIN3 , // \dagger
370- '\u2021' : MO . BIN3 , // \ddagger
371- '\u20D7' : MO . ACCENT , // \vec
372- '\u2111' : MO . ORD , // \Im
373- '\u2113' : MO . ORD , // \ell
374- '\u2118' : MO . ORD , // \wp
375- '\u211C' : MO . ORD , // \Re
376- '\u2205' : MO . ORD , // \emptyset
377- '\u221E' : MO . ORD , // \infty
378- '\u2305' : MO . BIN3 , // barwedge
379- '\u2306' : MO . BIN3 , // doublebarwedge
380- '\u2322' : MO . REL4 , // \frown
381- '\u2323' : MO . REL4 , // \smile
382- '\u2329' : MO . OPEN , // langle
383- '\u232A' : MO . CLOSE , // rangle
384- '\u23AA' : MO . ORD , // \bracevert
385- '\u23AF' : [ 0 , 0 , TEXCLASS . ORD , { stretchy : true } ] , // \underline
386- '\u23B0' : MO . OPEN , // \lmoustache
387- '\u23B1' : MO . CLOSE , // \rmoustache
388- '\u2500' : MO . ORD , // horizontal line
389- '\u25EF' : MO . BIN3 , // \bigcirc
390- '\u2660' : MO . ORD , // \spadesuit
391- '\u2661' : MO . ORD , // \heartsuit
392- '\u2662' : MO . ORD , // \diamondsuit
393- '\u2663' : MO . ORD , // \clubsuit
394- '\u3008' : MO . OPEN , // langle
395- '\u3009' : MO . CLOSE , // rangle
396- '\uFE37' : MO . WIDEACCENT , // horizontal brace down
397- '\uFE38' : MO . WIDEACCENT // horizontal brace up
398- }
399- } ;
81+ public static OPTABLE : { [ form : string ] : OperatorList } = OPTABLE ;
40082
401- public texClass = TEXCLASS . REL ; // for MathML, but TeX sets it explicitly in setTeXclass()
83+ /*
84+ * The TeX class of the node is set to REL for MathML, but TeX sets it explicitly in setTeXclass()
85+ */
86+ public texClass = TEXCLASS . REL ;
40287
40388 /*
40489 * @return {string } The mo kind
@@ -544,7 +229,7 @@ export class MmlMo extends AbstractMmlTokenNode {
544229 let mo = this . getText ( ) ;
545230 let [ form1 , form2 , form3 ] = this . getForms ( ) ;
546231 this . attributes . setInherited ( 'form' , form1 ) ;
547- let OPTABLE = MmlMo . OPTABLE ;
232+ let OPTABLE = ( this . constructor as typeof MmlMo ) . OPTABLE ;
548233 let def = OPTABLE [ form1 ] [ mo ] || OPTABLE [ form2 ] [ mo ] || OPTABLE [ form3 ] [ mo ] ;
549234 if ( def ) {
550235 this . texClass = def [ 2 ] ;
@@ -596,7 +281,7 @@ export class MmlMo extends AbstractMmlTokenNode {
596281 if ( mo . length === 2 ) {
597282 n = ( n - 0xD800 ) * 0x400 + mo . charCodeAt ( 1 ) - 0xDC00 + 0x10000 ;
598283 }
599- let ranges = MmlMo . RANGES ;
284+ let ranges = ( this . constructor as typeof MmlMo ) . RANGES ;
600285 for ( const range of ranges ) {
601286 if ( range [ 0 ] <= n && n <= range [ 1 ] ) {
602287 return range ;
@@ -608,15 +293,3 @@ export class MmlMo extends AbstractMmlTokenNode {
608293 return null ;
609294 }
610295}
611-
612- //
613- // These are not in the W3C table, but FF works this way,
614- // and it makes sense, so add them here
615- //
616- let OPTABLE = MmlMo . OPTABLE ;
617- OPTABLE [ 'infix' ] [ '^' ] = MO . WIDEREL ;
618- OPTABLE [ 'infix' ] [ '_' ] = MO . WIDEREL ;
619- OPTABLE [ 'prefix' ] [ '\u2223' ] = MO . OPEN ;
620- OPTABLE [ 'prefix' ] [ '\u2225' ] = MO . OPEN ;
621- OPTABLE [ 'postfix' ] [ '\u2223' ] = MO . CLOSE ;
622- OPTABLE [ 'postfix' ] [ '\u2225' ] = MO . CLOSE ;
0 commit comments