| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813 |
- /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
- /* vim: set ts=2 et sw=2 tw=80: */
- /*************************************************************
- *
- * MathJax/jax/element/mml/jax.js
- *
- * Implements the MML ElementJax that holds the internal represetation
- * of the mathematics on the page. Various InputJax will produce this
- * format, and the OutputJax will display it in various formats.
- *
- * ---------------------------------------------------------------------
- *
- * Copyright (c) 2009-2019 The MathJax Consortium
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- MathJax.ElementJax.mml = MathJax.ElementJax({
- mimeType: "jax/mml"
- },{
- id: "mml",
- version: "2.7.7",
- directory: MathJax.ElementJax.directory + "/mml",
- extensionDir: MathJax.ElementJax.extensionDir + "/mml",
- optableDir: MathJax.ElementJax.directory + "/mml/optable"
- });
- MathJax.ElementJax.mml.Augment({
- Init: function () {
- if (arguments.length === 1 && arguments[0].type === "math") {this.root = arguments[0]}
- else {this.root = MathJax.ElementJax.mml.math.apply(this,arguments)}
- if (this.root.attr && this.root.attr.mode) {
- if (!this.root.display && this.root.attr.mode === "display") {
- this.root.display = "block";
- this.root.attrNames.push("display");
- }
- delete this.root.attr.mode;
- for (var i = 0, m = this.root.attrNames.length; i < m; i++) {
- if (this.root.attrNames[i] === "mode") {this.root.attrNames.splice(i,1); break}
- }
- }
- }
- },{
- INHERIT: "_inherit_",
- AUTO: "_auto_",
- SIZE: {
- INFINITY: "infinity",
- SMALL: "small",
- NORMAL: "normal",
- BIG: "big"
- },
- COLOR: {
- TRANSPARENT: "transparent"
- },
- VARIANT: {
- NORMAL: "normal",
- BOLD: "bold",
- ITALIC: "italic",
- BOLDITALIC: "bold-italic",
- DOUBLESTRUCK: "double-struck",
- FRAKTUR: "fraktur",
- BOLDFRAKTUR: "bold-fraktur",
- SCRIPT: "script",
- BOLDSCRIPT: "bold-script",
- SANSSERIF: "sans-serif",
- BOLDSANSSERIF: "bold-sans-serif",
- SANSSERIFITALIC: "sans-serif-italic",
- SANSSERIFBOLDITALIC: "sans-serif-bold-italic",
- MONOSPACE: "monospace",
- INITIAL: "initial",
- TAILED: "tailed",
- LOOPED: "looped",
- STRETCHED: "stretched",
- CALIGRAPHIC: "-tex-caligraphic",
- OLDSTYLE: "-tex-oldstyle"
- },
- FORM: {
- PREFIX: "prefix",
- INFIX: "infix",
- POSTFIX: "postfix"
- },
- LINEBREAK: {
- AUTO: "auto",
- NEWLINE: "newline",
- NOBREAK: "nobreak",
- GOODBREAK: "goodbreak",
- BADBREAK: "badbreak"
- },
- LINEBREAKSTYLE: {
- BEFORE: "before",
- AFTER: "after",
- DUPLICATE: "duplicate",
- INFIXLINBREAKSTYLE: "infixlinebreakstyle"
- },
- INDENTALIGN: {
- LEFT: "left",
- CENTER: "center",
- RIGHT: "right",
- AUTO: "auto",
- ID: "id",
- INDENTALIGN: "indentalign"
- },
- INDENTSHIFT: {
- INDENTSHIFT: "indentshift"
- },
- LINETHICKNESS: {
- THIN: "thin",
- MEDIUM: "medium",
- THICK: "thick"
- },
- NOTATION: {
- LONGDIV: "longdiv",
- ACTUARIAL: "actuarial",
- RADICAL: "radical",
- BOX: "box",
- ROUNDEDBOX: "roundedbox",
- CIRCLE: "circle",
- LEFT: "left",
- RIGHT: "right",
- TOP: "top",
- BOTTOM: "bottom",
- UPDIAGONALSTRIKE: "updiagonalstrike",
- DOWNDIAGONALSTRIKE: "downdiagonalstrike",
- UPDIAGONALARROW: "updiagonalarrow",
- VERTICALSTRIKE: "verticalstrike",
- HORIZONTALSTRIKE: "horizontalstrike",
- PHASORANGLE: "phasorangle",
- MADRUWB: "madruwb"
- },
- ALIGN: {
- TOP: "top",
- BOTTOM: "bottom",
- CENTER: "center",
- BASELINE: "baseline",
- AXIS: "axis",
- LEFT: "left",
- RIGHT: "right"
- },
- LINES: {
- NONE: "none",
- SOLID: "solid",
- DASHED: "dashed"
- },
- SIDE: {
- LEFT: "left",
- RIGHT: "right",
- LEFTOVERLAP: "leftoverlap",
- RIGHTOVERLAP: "rightoverlap"
- },
- WIDTH: {
- AUTO: "auto",
- FIT: "fit"
- },
- ACTIONTYPE: {
- TOGGLE: "toggle",
- STATUSLINE: "statusline",
- TOOLTIP: "tooltip",
- INPUT: "input"
- },
- LENGTH: {
- VERYVERYTHINMATHSPACE: "veryverythinmathspace",
- VERYTHINMATHSPACE: "verythinmathspace",
- THINMATHSPACE: "thinmathspace",
- MEDIUMMATHSPACE: "mediummathspace",
- THICKMATHSPACE: "thickmathspace",
- VERYTHICKMATHSPACE: "verythickmathspace",
- VERYVERYTHICKMATHSPACE: "veryverythickmathspace",
- NEGATIVEVERYVERYTHINMATHSPACE: "negativeveryverythinmathspace",
- NEGATIVEVERYTHINMATHSPACE: "negativeverythinmathspace",
- NEGATIVETHINMATHSPACE: "negativethinmathspace",
- NEGATIVEMEDIUMMATHSPACE: "negativemediummathspace",
- NEGATIVETHICKMATHSPACE: "negativethickmathspace",
- NEGATIVEVERYTHICKMATHSPACE: "negativeverythickmathspace",
- NEGATIVEVERYVERYTHICKMATHSPACE: "negativeveryverythickmathspace"
- },
- OVERFLOW: {
- LINBREAK: "linebreak",
- SCROLL: "scroll",
- ELIDE: "elide",
- TRUNCATE: "truncate",
- SCALE: "scale"
- },
- UNIT: {
- EM: "em",
- EX: "ex",
- PX: "px",
- IN: "in",
- CM: "cm",
- MM: "mm",
- PT: "pt",
- PC: "pc"
- },
- TEXCLASS: {
- ORD: 0,
- OP: 1,
- BIN: 2,
- REL: 3,
- OPEN: 4,
- CLOSE: 5,
- PUNCT: 6,
- INNER: 7,
- VCENTER: 8,
- NONE: -1
- },
- TEXCLASSNAMES: ["ORD", "OP", "BIN", "REL", "OPEN", "CLOSE", "PUNCT", "INNER", "VCENTER"],
- skipAttributes: {
- texClass:true, useHeight:true, texprimestyle:true
- },
- copyAttributes: {
- displaystyle:1, scriptlevel:1, open:1, close:1, form:1,
- actiontype: 1,
- fontfamily:true, fontsize:true, fontweight:true, fontstyle:true,
- color:true, background:true,
- id:true, "class":1, href:true, style:true
- },
- copyAttributeNames: [
- "displaystyle", "scriptlevel", "open", "close", "form", // force these to be copied
- "actiontype",
- "fontfamily", "fontsize", "fontweight", "fontstyle",
- "color", "background",
- "id", "class", "href", "style"
- ],
- nocopyAttributes: {
- fontfamily: true, fontsize: true, fontweight: true, fontstyle: true,
- color: true, background: true,
- id: true, 'class': true, href: true, style: true,
- xmlns: true
- },
- Error: function (message,def) {
- var mml = this.merror(message),
- dir = MathJax.Localization.fontDirection(),
- font = MathJax.Localization.fontFamily();
- if (def) {mml = mml.With(def)}
- if (dir || font) {
- mml = this.mstyle(mml);
- if (dir) {mml.dir = dir}
- if (font) {mml.style.fontFamily = "font-family: "+font}
- }
- return mml;
- }
- });
- (function (MML) {
- MML.mbase = MathJax.Object.Subclass({
- type: "base", isToken: false,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- dir: MML.INHERIT
- },
- noInherit: {},
- noInheritAttribute: {
- texClass: true
- },
- getRemoved: {},
- linebreakContainer: false,
-
- Init: function () {
- this.data = [];
- if (this.inferRow && !(arguments.length === 1 && arguments[0].inferred))
- {this.Append(MML.mrow().With({inferred: true, notParent: true}))}
- this.Append.apply(this,arguments);
- },
- With: function (def) {
- for (var id in def) {if (def.hasOwnProperty(id)) {this[id] = def[id]}}
- return this;
- },
- Append: function () {
- if (this.inferRow && this.data.length) {
- this.data[0].Append.apply(this.data[0],arguments);
- } else {
- for (var i = 0, m = arguments.length; i < m; i++)
- {this.SetData(this.data.length,arguments[i])}
- }
- },
- SetData: function (i,item) {
- if (item != null) {
- if (!(item instanceof MML.mbase))
- {item = (this.isToken || this.isChars ? MML.chars(item) : MML.mtext(item))}
- item.parent = this;
- item.setInherit(this.inheritFromMe ? this : this.inherit);
- }
- this.data[i] = item;
- },
- Parent: function () {
- var parent = this.parent;
- while (parent && parent.notParent) {parent = parent.parent}
- return parent;
- },
- Get: function (name,nodefault,noself) {
- if (!noself) {
- if (this[name] != null) {return this[name]}
- if (this.attr && this.attr[name] != null) {return this.attr[name]}
- }
- // FIXME: should cache these values and get from cache
- // (clear cache when appended to a new object?)
- var parent = this.Parent();
- if (parent && parent["adjustChild_"+name] != null) {
- return (parent["adjustChild_"+name])(this.childPosition(),nodefault);
- }
- var obj = this.inherit; var root = obj;
- while (obj) {
- var value = obj[name]; if (value == null && obj.attr) {value = obj.attr[name]}
- if (obj.removedStyles && obj.getRemoved[name] && value == null) value = obj.removedStyles[obj.getRemoved[name]];
- if (value != null && obj.noInheritAttribute && !obj.noInheritAttribute[name]) {
- var noInherit = obj.noInherit[this.type];
- if (!(noInherit && noInherit[name])) {return value}
- }
- root = obj; obj = obj.inherit;
- }
- if (!nodefault) {
- if (this.defaults[name] === MML.AUTO) {return this.autoDefault(name)}
- if (this.defaults[name] !== MML.INHERIT && this.defaults[name] != null)
- {return this.defaults[name]}
- if (root) {return root.defaults[name]}
- }
- return null;
- },
- hasValue: function (name) {return (this.Get(name,true) != null)},
- getValues: function () {
- var values = {};
- for (var i = 0, m = arguments.length; i < m; i++)
- {values[arguments[i]] = this.Get(arguments[i])}
- return values;
- },
- adjustChild_scriptlevel: function (i,nodef) {return this.Get("scriptlevel",nodef)}, // always inherit from parent
- adjustChild_displaystyle: function (i,nodef) {return this.Get("displaystyle",nodef)}, // always inherit from parent
- adjustChild_texprimestyle: function (i,nodef) {return this.Get("texprimestyle",nodef)}, // always inherit from parent
- hasMMLspacing: function () {return false},
- childPosition: function () {
- var child = this, parent = child.parent;
- while (parent.notParent) {child = parent; parent = child.parent}
- for (var i = 0, m = parent.data.length; i < m; i++) {if (parent.data[i] === child) {return i}}
- return null;
- },
- setInherit: function (obj) {
- if (obj !== this.inherit && this.inherit == null) {
- this.inherit = obj;
- for (var i = 0, m = this.data.length; i < m; i++) {
- if (this.data[i] && this.data[i].setInherit) {this.data[i].setInherit(obj)}
- }
- }
- },
- setTeXclass: function (prev) {
- this.getPrevClass(prev);
- return (typeof(this.texClass) !== "undefined" ? this : prev);
- },
- getPrevClass: function (prev) {
- if (prev) {
- this.prevClass = prev.Get("texClass");
- this.prevLevel = prev.Get("scriptlevel");
- }
- },
- updateTeXclass: function (core) {
- if (core) {
- this.prevClass = core.prevClass; delete core.prevClass;
- this.prevLevel = core.prevLevel; delete core.prevLevel;
- this.texClass = core.Get("texClass");
- }
- },
- texSpacing: function () {
- var prev = (this.prevClass != null ? this.prevClass : MML.TEXCLASS.NONE);
- var tex = (this.Get("texClass") || MML.TEXCLASS.ORD);
- if (prev === MML.TEXCLASS.NONE || tex === MML.TEXCLASS.NONE) {return ""}
- if (prev === MML.TEXCLASS.VCENTER) {prev = MML.TEXCLASS.ORD}
- if (tex === MML.TEXCLASS.VCENTER) {tex = MML.TEXCLASS.ORD}
- var space = this.TEXSPACE[prev][tex];
- if ((this.prevLevel > 0 || this.Get("scriptlevel") > 0) && space >= 0) {return ""}
- return this.TEXSPACELENGTH[Math.abs(space)];
- },
- TEXSPACELENGTH:[
- "",
- MML.LENGTH.THINMATHSPACE,
- MML.LENGTH.MEDIUMMATHSPACE,
- MML.LENGTH.THICKMATHSPACE
- ],
- // See TeXBook Chapter 18 (p. 170)
- TEXSPACE: [
- [ 0,-1, 2, 3, 0, 0, 0, 1], // ORD
- [-1,-1, 0, 3, 0, 0, 0, 1], // OP
- [ 2, 2, 0, 0, 2, 0, 0, 2], // BIN
- [ 3, 3, 0, 0, 3, 0, 0, 3], // REL
- [ 0, 0, 0, 0, 0, 0, 0, 0], // OPEN
- [ 0,-1, 2, 3, 0, 0, 0, 1], // CLOSE
- [ 1, 1, 0, 1, 1, 1, 1, 1], // PUNCT
- [ 1,-1, 2, 3, 1, 0, 1, 1] // INNER
- ],
- autoDefault: function (name) {return ""},
- isSpacelike: function () {return false},
- isEmbellished: function () {return false},
- Core: function () {return this},
- CoreMO: function () {return this},
- childIndex: function(child) {
- if (child == null) return;
- for (var i = 0, m = this.data.length; i < m; i++) if (child === this.data[i]) return i;
- },
- CoreIndex: function () {
- return (this.inferRow ? this.data[0]||this : this).childIndex(this.Core());
- },
- hasNewline: function () {
- if (this.isEmbellished()) {return this.CoreMO().hasNewline()}
- if (this.isToken || this.linebreakContainer) {return false}
- for (var i = 0, m = this.data.length; i < m; i++) {
- if (this.data[i] && this.data[i].hasNewline()) {return true}
- }
- return false;
- },
- array: function () {if (this.inferred) {return this.data} else {return [this]}},
- toString: function () {return this.type+"("+this.data.join(",")+")"},
- getAnnotation: function () {return null}
- },{
- childrenSpacelike: function () {
- for (var i = 0, m = this.data.length; i < m; i++)
- {if (!this.data[i].isSpacelike()) {return false}}
- return true;
- },
- childEmbellished: function () {
- return (this.data[0] && this.data[0].isEmbellished());
- },
- childCore: function () {return (this.inferRow && this.data[0] ? this.data[0].Core() : this.data[0])},
- childCoreMO: function () {return (this.data[0] ? this.data[0].CoreMO() : null)},
- setChildTeXclass: function (prev) {
- if (this.data[0]) {
- prev = this.data[0].setTeXclass(prev);
- this.updateTeXclass(this.data[0]);
- }
- return prev;
- },
- setBaseTeXclasses: function (prev) {
- this.getPrevClass(prev); this.texClass = null;
- if (this.data[0]) {
- if (this.isEmbellished() || this.data[0].isa(MML.mi)) {
- prev = this.data[0].setTeXclass(prev);
- this.updateTeXclass(this.Core());
- } else {this.data[0].setTeXclass(); prev = this}
- } else {prev = this}
- for (var i = 1, m = this.data.length; i < m; i++)
- {if (this.data[i]) {this.data[i].setTeXclass()}}
- return prev;
- },
- setSeparateTeXclasses: function (prev) {
- this.getPrevClass(prev);
- for (var i = 0, m = this.data.length; i < m; i++)
- {if (this.data[i]) {this.data[i].setTeXclass()}}
- if (this.isEmbellished()) {this.updateTeXclass(this.Core())}
- return this;
- }
- });
-
- MML.mi = MML.mbase.Subclass({
- type: "mi", isToken: true,
- texClass: MML.TEXCLASS.ORD,
- defaults: {
- mathvariant: MML.AUTO,
- mathsize: MML.INHERIT,
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- dir: MML.INHERIT
- },
- autoDefault: function (name) {
- if (name === "mathvariant") {
- var mi = (this.data[0]||"").toString();
- return (mi.length === 1 ||
- (mi.length === 2 && mi.charCodeAt(0) >= 0xD800 && mi.charCodeAt(0) < 0xDC00) ?
- MML.VARIANT.ITALIC : MML.VARIANT.NORMAL);
- }
- return "";
- },
- setTeXclass: function (prev) {
- this.getPrevClass(prev);
- var name = this.data.join("");
- if (name.length > 1 && name.match(/^[a-z][a-z0-9]*$/i) &&
- this.texClass === MML.TEXCLASS.ORD) {
- this.texClass = MML.TEXCLASS.OP;
- this.autoOP = true;
- }
- return this;
- }
- });
-
- MML.mn = MML.mbase.Subclass({
- type: "mn", isToken: true,
- texClass: MML.TEXCLASS.ORD,
- defaults: {
- mathvariant: MML.INHERIT,
- mathsize: MML.INHERIT,
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- dir: MML.INHERIT
- }
- });
-
- MML.mo = MML.mbase.Subclass({
- type: "mo", isToken: true,
- defaults: {
- mathvariant: MML.INHERIT,
- mathsize: MML.INHERIT,
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- dir: MML.INHERIT,
- form: MML.AUTO,
- fence: MML.AUTO,
- separator: MML.AUTO,
- lspace: MML.AUTO,
- rspace: MML.AUTO,
- stretchy: MML.AUTO,
- symmetric: MML.AUTO,
- maxsize: MML.AUTO,
- minsize: MML.AUTO,
- largeop: MML.AUTO,
- movablelimits: MML.AUTO,
- accent: MML.AUTO,
- linebreak: MML.LINEBREAK.AUTO,
- lineleading: MML.INHERIT,
- linebreakstyle: MML.AUTO,
- linebreakmultchar: MML.INHERIT,
- indentalign: MML.INHERIT,
- indentshift: MML.INHERIT,
- indenttarget: MML.INHERIT,
- indentalignfirst: MML.INHERIT,
- indentshiftfirst: MML.INHERIT,
- indentalignlast: MML.INHERIT,
- indentshiftlast: MML.INHERIT,
- texClass: MML.AUTO
- },
- defaultDef: {
- form: MML.FORM.INFIX,
- fence: false,
- separator: false,
- lspace: MML.LENGTH.THICKMATHSPACE,
- rspace: MML.LENGTH.THICKMATHSPACE,
- stretchy: false,
- symmetric: false,
- maxsize: MML.SIZE.INFINITY,
- minsize: '0em', //'1em',
- largeop: false,
- movablelimits: false,
- accent: false,
- linebreak: MML.LINEBREAK.AUTO,
- lineleading: "1ex",
- linebreakstyle: "before",
- indentalign: MML.INDENTALIGN.AUTO,
- indentshift: "0",
- indenttarget: "",
- indentalignfirst: MML.INDENTALIGN.INDENTALIGN,
- indentshiftfirst: MML.INDENTSHIFT.INDENTSHIFT,
- indentalignlast: MML.INDENTALIGN.INDENTALIGN,
- indentshiftlast: MML.INDENTSHIFT.INDENTSHIFT,
- texClass: MML.TEXCLASS.REL // for MML, but TeX sets ORD explicitly
- },
- SPACE_ATTR: {lspace: 0x01, rspace: 0x02},
- useMMLspacing: 0x03,
- hasMMLspacing: function () {
- if (this.useMMLspacing) return true;
- return this.form && (this.OPTABLE[this.form]||{})[this.data.join('')];
- },
- autoDefault: function (name,nodefault) {
- var def = this.def;
- if (!def) {
- if (name === "form") {return this.getForm()}
- var mo = this.data.join("");
- var forms = [this.Get("form"),MML.FORM.INFIX,MML.FORM.POSTFIX,MML.FORM.PREFIX];
- for (var i = 0, m = forms.length; i < m; i++) {
- var data = this.OPTABLE[forms[i]][mo];
- if (data) {def = this.makeDef(data); break}
- }
- if (!def) {def = this.CheckRange(mo)}
- if (!def && nodefault) {def = {}} else {
- if (!def) {def = MathJax.Hub.Insert({},this.defaultDef)}
- if (this.parent) {this.def = def} else {def = MathJax.Hub.Insert({},def)}
- def.form = forms[0];
- }
- }
- this.useMMLspacing &= ~(this.SPACE_ATTR[name] || 0);
- if (def[name] != null) {return def[name]}
- else if (!nodefault) {return this.defaultDef[name]}
- return "";
- },
- CheckRange: function (mo) {
- var n = mo.charCodeAt(0);
- if (n >= 0xD800 && n < 0xDC00) {n = (((n-0xD800)<<10)+(mo.charCodeAt(1)-0xDC00))+0x10000}
- for (var i = 0, m = this.RANGES.length; i < m && this.RANGES[i][0] <= n; i++) {
- if (n <= this.RANGES[i][1]) {
- if (this.RANGES[i][3]) {
- var file = MML.optableDir+"/"+this.RANGES[i][3]+".js";
- this.RANGES[i][3] = null;
- MathJax.Hub.RestartAfter(MathJax.Ajax.Require(file));
- }
- var data = MML.TEXCLASSNAMES[this.RANGES[i][2]];
- data = this.OPTABLE.infix[mo] = MML.mo.OPTYPES[data === "BIN" ? "BIN3" : data];
- return this.makeDef(data);
- }
- }
- return null;
- },
- makeDef: function (data) {
- if (data[2] == null) {data[2] = this.defaultDef.texClass}
- if (!data[3]) {data[3] = {}}
- var def = MathJax.Hub.Insert({},data[3]);
- def.lspace = this.SPACE[data[0]]; def.rspace = this.SPACE[data[1]];
- def.texClass = data[2];
- if (def.texClass === MML.TEXCLASS.REL &&
- (this.movablelimits || this.data.join("").match(/^[a-z]+$/i)))
- {def.texClass = MML.TEXCLASS.OP} // mark named operators as OP
- return def;
- },
- getForm: function () {
- var core = this, parent = this.parent, Parent = this.Parent();
- while (Parent && Parent.isEmbellished())
- {core = parent; parent = Parent.parent; Parent = Parent.Parent()}
- if (parent && parent.type === "mrow" && parent.NonSpaceLength() !== 1) {
- if (parent.FirstNonSpace() === core) {return MML.FORM.PREFIX}
- if (parent.LastNonSpace() === core) {return MML.FORM.POSTFIX}
- }
- return MML.FORM.INFIX;
- },
- isEmbellished: function () {return true},
- hasNewline: function () {return (this.Get("linebreak") === MML.LINEBREAK.NEWLINE)},
- CoreParent: function () {
- var parent = this;
- while (parent && parent.isEmbellished() &&
- parent.CoreMO() === this && !parent.isa(MML.math)) {parent = parent.Parent()}
- return parent;
- },
- CoreText: function (parent) {
- if (!parent) {return ""}
- if (parent.isEmbellished()) {return parent.CoreMO().data.join("")}
- while ((((parent.isa(MML.mrow) || parent.isa(MML.TeXAtom) ||
- parent.isa(MML.mstyle) || parent.isa(MML.mphantom)) &&
- parent.data.length === 1) || parent.isa(MML.munderover)) &&
- parent.data[0]) {parent = parent.data[0]}
- if (!parent.isToken) {return ""} else {return parent.data.join("")}
- },
- remapChars: {
- '*':"\u2217",
- '"':"\u2033",
- "\u00B0":"\u2218",
- "\u00B2":"2",
- "\u00B3":"3",
- "\u00B4":"\u2032",
- "\u00B9":"1"
- },
- remap: function (text,map) {
- text = text.replace(/-/g,"\u2212");
- if (map) {
- text = text.replace(/'/g,"\u2032").replace(/`/g,"\u2035");
- if (text.length === 1) {text = map[text]||text}
- }
- return text;
- },
- setTeXclass: function (prev) {
- var values = this.getValues("form","lspace","rspace","fence"); // sets useMMLspacing
- if (this.hasMMLspacing()) {this.texClass = MML.TEXCLASS.NONE; return this}
- if (values.fence && !this.texClass) {
- if (values.form === MML.FORM.PREFIX) {this.texClass = MML.TEXCLASS.OPEN}
- if (values.form === MML.FORM.POSTFIX) {this.texClass = MML.TEXCLASS.CLOSE}
- }
- this.texClass = this.Get("texClass");
- if (this.data.join("") === "\u2061") {
- // force previous node to be texClass OP, and skip this node
- if (prev) {prev.texClass = MML.TEXCLASS.OP; prev.fnOP = true}
- this.texClass = this.prevClass = MML.TEXCLASS.NONE;
- return prev;
- }
- return this.adjustTeXclass(prev);
- },
- adjustTeXclass: function (prev) {
- if (this.texClass === MML.TEXCLASS.NONE) {return prev}
- if (prev) {
- if (prev.autoOP && (this.texClass === MML.TEXCLASS.BIN ||
- this.texClass === MML.TEXCLASS.REL))
- {prev.texClass = MML.TEXCLASS.ORD}
- this.prevClass = prev.texClass || MML.TEXCLASS.ORD;
- this.prevLevel = prev.Get("scriptlevel")
- } else {this.prevClass = MML.TEXCLASS.NONE}
- if (this.texClass === MML.TEXCLASS.BIN &&
- (this.prevClass === MML.TEXCLASS.NONE ||
- this.prevClass === MML.TEXCLASS.BIN ||
- this.prevClass === MML.TEXCLASS.OP ||
- this.prevClass === MML.TEXCLASS.REL ||
- this.prevClass === MML.TEXCLASS.OPEN ||
- this.prevClass === MML.TEXCLASS.PUNCT)) {
- this.texClass = MML.TEXCLASS.ORD;
- } else if (this.prevClass === MML.TEXCLASS.BIN &&
- (this.texClass === MML.TEXCLASS.REL ||
- this.texClass === MML.TEXCLASS.CLOSE ||
- this.texClass === MML.TEXCLASS.PUNCT)) {
- prev.texClass = this.prevClass = MML.TEXCLASS.ORD;
- } else if (this.texClass === MML.TEXCLASS.BIN) {
- //
- // Check if node is the last one in its container since the rule
- // above only takes effect if there is a node that follows.
- //
- var child = this, parent = this.parent;
- while (parent && parent.parent && parent.isEmbellished() &&
- (parent.data.length === 1 ||
- (parent.type !== "mrow" && parent.Core() === child))) // handles msubsup and munderover
- {child = parent; parent = parent.parent}
- if (parent.data[parent.data.length-1] === child) this.texClass = MML.TEXCLASS.ORD;
- }
- return this;
- }
- });
-
- MML.mtext = MML.mbase.Subclass({
- type: "mtext", isToken: true,
- isSpacelike: function () {return true},
- texClass: MML.TEXCLASS.ORD,
- defaults: {
- mathvariant: MML.INHERIT,
- mathsize: MML.INHERIT,
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- dir: MML.INHERIT
- }
- });
- MML.mspace = MML.mbase.Subclass({
- type: "mspace", isToken: true,
- isSpacelike: function () {return true},
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- width: "0em",
- height: "0ex",
- depth: "0ex",
- linebreak: MML.LINEBREAK.AUTO
- },
- hasDimAttr: function () {
- return (this.hasValue("width") || this.hasValue("height") ||
- this.hasValue("depth"));
- },
- hasNewline: function () {
- // The MathML spec says that the linebreak attribute should be ignored
- // if any dimensional attribute is set.
- return (!this.hasDimAttr() &&
- this.Get("linebreak") === MML.LINEBREAK.NEWLINE);
- }
- });
- MML.ms = MML.mbase.Subclass({
- type: "ms", isToken: true,
- texClass: MML.TEXCLASS.ORD,
- defaults: {
- mathvariant: MML.INHERIT,
- mathsize: MML.INHERIT,
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- dir: MML.INHERIT,
- lquote: '"',
- rquote: '"'
- }
- });
- MML.mglyph = MML.mbase.Subclass({
- type: "mglyph", isToken: true,
- texClass: MML.TEXCLASS.ORD,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- alt: "",
- src: "",
- width: MML.AUTO,
- height: MML.AUTO,
- valign: "0em"
- }
- });
- MML.mrow = MML.mbase.Subclass({
- type: "mrow",
- isSpacelike: MML.mbase.childrenSpacelike,
- inferred: false, notParent: false,
- isEmbellished: function () {
- var isEmbellished = false;
- for (var i = 0, m = this.data.length; i < m; i++) {
- if (this.data[i] == null) continue;
- if (this.data[i].isEmbellished()) {
- if (isEmbellished) {return false}
- isEmbellished = true; this.core = i;
- } else if (!this.data[i].isSpacelike()) {return false}
- }
- return isEmbellished;
- },
- NonSpaceLength: function () {
- var n = 0;
- for (var i = 0, m = this.data.length; i < m; i++)
- {if (this.data[i] && !this.data[i].isSpacelike()) {n++}}
- return n;
- },
- FirstNonSpace: function () {
- for (var i = 0, m = this.data.length; i < m; i++)
- {if (this.data[i] && !this.data[i].isSpacelike()) {return this.data[i]}}
- return null;
- },
- LastNonSpace: function () {
- for (var i = this.data.length-1; i >= 0; i--)
- {if (this.data[0] && !this.data[i].isSpacelike()) {return this.data[i]}}
- return null;
- },
- Core: function () {
- if (!(this.isEmbellished()) || typeof(this.core) === "undefined") {return this}
- return this.data[this.core];
- },
- CoreMO: function () {
- if (!(this.isEmbellished()) || typeof(this.core) === "undefined") {return this}
- return this.data[this.core].CoreMO();
- },
- toString: function () {
- if (this.inferred) {return '[' + this.data.join(',') + ']'}
- return this.SUPER(arguments).toString.call(this);
- },
- setTeXclass: function (prev) {
- var i, m = this.data.length;
- if ((this.open || this.close) && (!prev || !prev.fnOP)) {
- //
- // <mrow> came from \left...\right
- // so treat as subexpression (tex class INNER)
- //
- this.getPrevClass(prev); prev = null;
- for (i = 0; i < m; i++)
- {if (this.data[i]) {prev = this.data[i].setTeXclass(prev)}}
- if (!this.hasOwnProperty("texClass")) this.texClass = MML.TEXCLASS.INNER;
- return this;
- } else {
- //
- // Normal <mrow>, so treat as
- // thorugh mrow is not there
- //
- for (i = 0; i < m; i++)
- {if (this.data[i]) {prev = this.data[i].setTeXclass(prev)}}
- if (this.data[0]) {this.updateTeXclass(this.data[0])}
- return prev;
- }
- },
- getAnnotation: function (name) {
- if (this.data.length != 1) return null;
- return this.data[0].getAnnotation(name);
- }
- });
- MML.mfrac = MML.mbase.Subclass({
- type: "mfrac", num: 0, den: 1,
- linebreakContainer: true,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- linethickness: MML.LINETHICKNESS.MEDIUM,
- numalign: MML.ALIGN.CENTER,
- denomalign: MML.ALIGN.CENTER,
- bevelled: false
- },
- adjustChild_displaystyle: function (n) {return false},
- adjustChild_scriptlevel: function (n) {
- var level = this.Get("scriptlevel");
- if (!this.Get("displaystyle") || level > 0) {level++}
- return level;
- },
- adjustChild_texprimestyle: function (n) {
- if (n == this.den) {return true}
- return this.Get("texprimestyle");
- },
- setTeXclass: MML.mbase.setSeparateTeXclasses
- });
- MML.msqrt = MML.mbase.Subclass({
- type: "msqrt",
- inferRow: true,
- linebreakContainer: true,
- texClass: MML.TEXCLASS.ORD,
- setTeXclass: MML.mbase.setSeparateTeXclasses,
- adjustChild_texprimestyle: function (n) {return true}
- });
- MML.mroot = MML.mbase.Subclass({
- type: "mroot",
- linebreakContainer: true,
- texClass: MML.TEXCLASS.ORD,
- adjustChild_displaystyle: function (n) {
- if (n === 1) {return false}
- return this.Get("displaystyle");
- },
- adjustChild_scriptlevel: function (n) {
- var level = this.Get("scriptlevel");
- if (n === 1) {level += 2}
- return level;
- },
- adjustChild_texprimestyle: function (n) {
- if (n === 0) {return true};
- return this.Get("texprimestyle");
- },
- setTeXclass: MML.mbase.setSeparateTeXclasses
- });
- MML.mstyle = MML.mbase.Subclass({
- type: "mstyle",
- isSpacelike: MML.mbase.childrenSpacelike,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- inferRow: true,
- defaults: {
- scriptlevel: MML.INHERIT,
- displaystyle: MML.INHERIT,
- scriptsizemultiplier: Math.sqrt(1/2),
- scriptminsize: "8pt",
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- dir: MML.INHERIT,
- infixlinebreakstyle: MML.LINEBREAKSTYLE.BEFORE,
- decimalseparator: "."
- },
- adjustChild_scriptlevel: function (n) {
- var level = this.scriptlevel;
- if (level == null) {
- level = this.Get("scriptlevel");
- } else if (String(level).match(/^ *[-+]/)) {
- var LEVEL = this.Get("scriptlevel",null,true);
- level = LEVEL + parseInt(level);
- }
- return level;
- },
- inheritFromMe: true,
- noInherit: {
- mpadded: {width: true, height: true, depth: true, lspace: true, voffset: true},
- mtable: {width: true, height: true, depth: true, align: true}
- },
- getRemoved: {fontfamily:"fontFamily", fontweight:"fontWeight", fontstyle:"fontStyle", fontsize:"fontSize"},
- setTeXclass: MML.mbase.setChildTeXclass
- });
- MML.merror = MML.mbase.Subclass({
- type: "merror",
- inferRow: true,
- linebreakContainer: true,
- texClass: MML.TEXCLASS.ORD
- });
- MML.mpadded = MML.mbase.Subclass({
- type: "mpadded",
- inferRow: true,
- isSpacelike: MML.mbase.childrenSpacelike,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- width: "",
- height: "",
- depth: "",
- lspace: 0,
- voffset: 0
- },
- setTeXclass: MML.mbase.setChildTeXclass
- });
- MML.mphantom = MML.mbase.Subclass({
- type: "mphantom",
- texClass: MML.TEXCLASS.ORD,
- inferRow: true,
- isSpacelike: MML.mbase.childrenSpacelike,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- setTeXclass: MML.mbase.setChildTeXclass
- });
- MML.mfenced = MML.mbase.Subclass({
- type: "mfenced",
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- open: '(',
- close: ')',
- separators: ','
- },
- addFakeNodes: function () {
- var values = this.getValues("open","close","separators");
- values.open = values.open.replace(/[ \t\n\r]/g,"");
- values.close = values.close.replace(/[ \t\n\r]/g,"");
- values.separators = values.separators.replace(/[ \t\n\r]/g,"");
- //
- // Create a fake node for the open item
- //
- if (values.open !== "") {
- this.SetData("open",MML.mo(values.open).With({
- fence:true, form:MML.FORM.PREFIX, texClass:MML.TEXCLASS.OPEN
- }));
- }
- //
- // Create fake nodes for the separators
- //
- if (values.separators !== "") {
- while (values.separators.length < this.data.length)
- {values.separators += values.separators.charAt(values.separators.length-1)}
- for (var i = 1, m = this.data.length; i < m; i++) {
- if (this.data[i])
- {this.SetData("sep"+i,MML.mo(values.separators.charAt(i-1)).With({separator:true}))}
- }
- }
- //
- // Create fake node for the close item
- //
- if (values.close !== "") {
- this.SetData("close",MML.mo(values.close).With({
- fence:true, form:MML.FORM.POSTFIX, texClass:MML.TEXCLASS.CLOSE
- }));
- }
- },
- texClass: MML.TEXCLASS.OPEN,
- setTeXclass: function (prev) {
- this.addFakeNodes();
- this.getPrevClass(prev);
- if (this.data.open) {prev = this.data.open.setTeXclass(prev)}
- if (this.data[0]) {prev = this.data[0].setTeXclass(prev)}
- for (var i = 1, m = this.data.length; i < m; i++) {
- if (this.data["sep"+i]) {prev = this.data["sep"+i].setTeXclass(prev)}
- if (this.data[i]) {prev = this.data[i].setTeXclass(prev)}
- }
- if (this.data.close) {prev = this.data.close.setTeXclass(prev)}
- this.updateTeXclass(this.data.open);
- this.texClass = MML.TEXCLASS.INNER;
- return prev;
- }
- });
- MML.menclose = MML.mbase.Subclass({
- type: "menclose",
- inferRow: true,
- linebreakContainer: true,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- notation: MML.NOTATION.LONGDIV,
- texClass: MML.TEXCLASS.ORD
- },
- setTeXclass: MML.mbase.setSeparateTeXclasses
- });
- MML.msubsup = MML.mbase.Subclass({
- type: "msubsup", base: 0, sub: 1, sup: 2,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- subscriptshift: "",
- superscriptshift: "",
- texClass: MML.AUTO
- },
- autoDefault: function (name) {
- if (name === "texClass")
- {return (this.isEmbellished() ? this.CoreMO().Get(name) : MML.TEXCLASS.ORD)}
- return 0;
- },
- adjustChild_displaystyle: function (n) {
- if (n > 0) {return false}
- return this.Get("displaystyle");
- },
- adjustChild_scriptlevel: function (n) {
- var level = this.Get("scriptlevel");
- if (n > 0) {level++}
- return level;
- },
- adjustChild_texprimestyle: function (n) {
- if (n === this.sub) {return true}
- return this.Get("texprimestyle");
- },
- setTeXclass: MML.mbase.setBaseTeXclasses
- });
-
- MML.msub = MML.msubsup.Subclass({type: "msub"});
- MML.msup = MML.msubsup.Subclass({type: "msup", sub:2, sup:1});
- MML.mmultiscripts = MML.msubsup.Subclass({
- type: "mmultiscripts",
- adjustChild_texprimestyle: function (n) {
- if (n % 2 === 1) {return true}
- return this.Get("texprimestyle");
- }
- });
- MML.mprescripts = MML.mbase.Subclass({type: "mprescripts"});
- MML.none = MML.mbase.Subclass({type: "none"});
-
- MML.munderover = MML.mbase.Subclass({
- type: "munderover",
- base: 0, under: 1, over: 2, sub: 1, sup: 2,
- ACCENTS: ["", "accentunder", "accent"],
- linebreakContainer: true,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- accent: MML.AUTO,
- accentunder: MML.AUTO,
- align: MML.ALIGN.CENTER,
- texClass: MML.AUTO,
- subscriptshift: "", // when converted to msubsup by moveablelimits
- superscriptshift: "" // when converted to msubsup by moveablelimits
- },
- autoDefault: function (name) {
- if (name === "texClass")
- {return (this.isEmbellished() ? this.CoreMO().Get(name) : MML.TEXCLASS.ORD)}
- if (name === "accent" && this.data[this.over]) {return this.data[this.over].CoreMO().Get("accent")}
- if (name === "accentunder" && this.data[this.under]) {return this.data[this.under].CoreMO().Get("accent")}
- return false;
- },
- adjustChild_displaystyle: function (n) {
- if (n > 0) {return false}
- return this.Get("displaystyle");
- },
- adjustChild_scriptlevel: function (n) {
- var level = this.Get("scriptlevel");
- var force = (this.data[this.base] && !this.Get("displaystyle") &&
- this.data[this.base].CoreMO().Get("movablelimits"));
- if (n == this.under && (force || !this.Get("accentunder"))) {level++}
- if (n == this.over && (force || !this.Get("accent"))) {level++}
- return level;
- },
- adjustChild_texprimestyle: function (n) {
- if (n === this.base && this.data[this.over]) {return true}
- return this.Get("texprimestyle");
- },
- setTeXclass: MML.mbase.setBaseTeXclasses
- });
-
- MML.munder = MML.munderover.Subclass({type: "munder"});
- MML.mover = MML.munderover.Subclass({
- type: "mover", over: 1, under: 2, sup: 1, sub: 2,
- ACCENTS: ["", "accent", "accentunder"]
- });
- MML.mtable = MML.mbase.Subclass({
- type: "mtable",
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- align: MML.ALIGN.AXIS,
- rowalign: MML.ALIGN.BASELINE,
- columnalign: MML.ALIGN.CENTER,
- groupalign: "{left}",
- alignmentscope: true,
- columnwidth: MML.WIDTH.AUTO,
- width: MML.WIDTH.AUTO,
- rowspacing: "1ex",
- columnspacing: ".8em",
- rowlines: MML.LINES.NONE,
- columnlines: MML.LINES.NONE,
- frame: MML.LINES.NONE,
- framespacing: "0.4em 0.5ex",
- equalrows: false,
- equalcolumns: false,
- displaystyle: false,
- side: MML.SIDE.RIGHT,
- minlabelspacing: "0.8em",
- texClass: MML.TEXCLASS.ORD,
- useHeight: 1
- },
- adjustChild_displaystyle: function () {
- return (this.displaystyle != null ? this.displaystyle : this.defaults.displaystyle);
- },
- inheritFromMe: true,
- noInherit: {
- mover: {align: true},
- munder: {align: true},
- munderover: {align: true},
- mtable: {
- align: true, rowalign: true, columnalign: true, groupalign: true,
- alignmentscope: true, columnwidth: true, width: true, rowspacing: true,
- columnspacing: true, rowlines: true, columnlines: true, frame: true,
- framespacing: true, equalrows: true, equalcolumns: true, displaystyle: true,
- side: true, minlabelspacing: true, texClass: true, useHeight: 1
- }
- },
- linebreakContainer: true,
- Append: function () {
- for (var i = 0, m = arguments.length; i < m; i++) {
- if (!((arguments[i] instanceof MML.mtr) ||
- (arguments[i] instanceof MML.mlabeledtr))) {arguments[i] = MML.mtr(arguments[i])}
- }
- this.SUPER(arguments).Append.apply(this,arguments);
- },
- setTeXclass: MML.mbase.setSeparateTeXclasses
- });
- MML.mtr = MML.mbase.Subclass({
- type: "mtr",
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- rowalign: MML.INHERIT,
- columnalign: MML.INHERIT,
- groupalign: MML.INHERIT
- },
- inheritFromMe: true,
- noInherit: {
- mrow: {rowalign: true, columnalign: true, groupalign: true},
- mtable: {rowalign: true, columnalign: true, groupalign: true}
- },
- linebreakContainer: true,
- Append: function () {
- for (var i = 0, m = arguments.length; i < m; i++) {
- if (!(arguments[i] instanceof MML.mtd)) {arguments[i] = MML.mtd(arguments[i])}
- }
- this.SUPER(arguments).Append.apply(this,arguments);
- },
- setTeXclass: MML.mbase.setSeparateTeXclasses
- });
- MML.mtd = MML.mbase.Subclass({
- type: "mtd",
- inferRow: true,
- linebreakContainer: true,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- rowspan: 1,
- columnspan: 1,
- rowalign: MML.INHERIT,
- columnalign: MML.INHERIT,
- groupalign: MML.INHERIT
- },
- setTeXclass: MML.mbase.setSeparateTeXclasses
- });
- MML.maligngroup = MML.mbase.Subclass({
- type: "maligngroup",
- isSpacelike: function () {return true},
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- groupalign: MML.INHERIT
- },
- inheritFromMe: true,
- noInherit: {
- mrow: {groupalign: true},
- mtable: {groupalign: true}
- }
- });
- MML.malignmark = MML.mbase.Subclass({
- type: "malignmark",
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- edge: MML.SIDE.LEFT
- },
- isSpacelike: function () {return true}
- });
- MML.mlabeledtr = MML.mtr.Subclass({
- type: "mlabeledtr"
- });
-
- MML.maction = MML.mbase.Subclass({
- type: "maction",
- defaults: {
- mathbackground: MML.INHERIT,
- mathcolor: MML.INHERIT,
- actiontype: MML.ACTIONTYPE.TOGGLE,
- selection: 1
- },
- selected: function () {return this.data[this.Get("selection")-1] || MML.NULL},
- isEmbellished: function () {return this.selected().isEmbellished()},
- isSpacelike: function () {return this.selected().isSpacelike()},
- Core: function () {return this.selected().Core()},
- CoreMO: function () {return this.selected().CoreMO()},
- setTeXclass: function (prev) {
- if (this.Get("actiontype") === MML.ACTIONTYPE.TOOLTIP && this.data[1]) {
- // Make sure tooltip has proper spacing when typeset (see issue #412)
- this.data[1].setTeXclass();
- }
- var selected = this.selected();
- prev = selected.setTeXclass(prev);
- this.updateTeXclass(selected);
- return prev;
- }
- });
-
- MML.semantics = MML.mbase.Subclass({
- type: "semantics", notParent: true,
- isEmbellished: MML.mbase.childEmbellished,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- defaults: {
- definitionURL: null,
- encoding: null
- },
- setTeXclass: MML.mbase.setChildTeXclass,
- getAnnotation: function (name) {
- var encodingList = MathJax.Hub.config.MathMenu.semanticsAnnotations[name];
- if (encodingList) {
- for (var i = 0, m = this.data.length; i < m; i++) {
- var encoding = this.data[i].Get("encoding");
- if (encoding) {
- for (var j = 0, n = encodingList.length; j < n; j++) {
- if (encodingList[j] === encoding) return this.data[i];
- }
- }
- }
- }
- return null;
- }
- });
- MML.annotation = MML.mbase.Subclass({
- type: "annotation", isChars: true,
- linebreakContainer: true,
- defaults: {
- definitionURL: null,
- encoding: null,
- cd: "mathmlkeys",
- name: "",
- src: null
- }
- });
- MML["annotation-xml"] = MML.mbase.Subclass({
- type: "annotation-xml",
- linebreakContainer: true,
- defaults: {
- definitionURL: null,
- encoding: null,
- cd: "mathmlkeys",
- name: "",
- src: null
- }
- });
- MML.math = MML.mstyle.Subclass({
- type: "math",
- defaults: {
- mathvariant: MML.VARIANT.NORMAL,
- mathsize: MML.SIZE.NORMAL,
- mathcolor: "", // should be "black", but allow it to inherit from surrounding text
- mathbackground: MML.COLOR.TRANSPARENT,
- dir: "ltr",
- scriptlevel: 0,
- displaystyle: MML.AUTO,
- display: "inline",
- maxwidth: "",
- overflow: MML.OVERFLOW.LINEBREAK,
- altimg: "",
- 'altimg-width': "",
- 'altimg-height': "",
- 'altimg-valign': "",
- alttext: "",
- cdgroup: "",
- scriptsizemultiplier: Math.sqrt(1/2),
- scriptminsize: "8px", // should be 8pt, but that's too big
- infixlinebreakstyle: MML.LINEBREAKSTYLE.BEFORE,
- lineleading: "1ex",
- indentshift: "auto", // use user configuration
- indentalign: MML.INDENTALIGN.AUTO,
- indentalignfirst: MML.INDENTALIGN.INDENTALIGN,
- indentshiftfirst: MML.INDENTSHIFT.INDENTSHIFT,
- indentalignlast: MML.INDENTALIGN.INDENTALIGN,
- indentshiftlast: MML.INDENTSHIFT.INDENTSHIFT,
- decimalseparator: ".",
- texprimestyle: false // is it in TeX's C' style?
- },
- autoDefault: function (name) {
- if (name === "displaystyle") {return this.Get("display") === "block"}
- return "";
- },
- linebreakContainer: true,
- setTeXclass: MML.mbase.setChildTeXclass,
- getAnnotation: function (name) {
- if (this.data.length != 1) return null;
- return this.data[0].getAnnotation(name);
- }
- });
-
- MML.chars = MML.mbase.Subclass({
- type: "chars",
- Append: function () {this.data.push.apply(this.data,arguments)},
- value: function () {return this.data.join("")},
- toString: function () {return this.data.join("")}
- });
-
- MML.entity = MML.mbase.Subclass({
- type: "entity",
- Append: function () {this.data.push.apply(this.data,arguments)},
- value: function () {
- if (this.data[0].substr(0,2) === "#x") {return parseInt(this.data[0].substr(2),16)}
- else if (this.data[0].substr(0,1) === "#") {return parseInt(this.data[0].substr(1))}
- else {return 0} // FIXME: look up named entities from table
- },
- toString: function () {
- var n = this.value();
- if (n <= 0xFFFF) {return String.fromCharCode(n)}
- n -= 0x10000;
- return String.fromCharCode((n>>10)+0xD800)
- + String.fromCharCode((n&0x3FF)+0xDC00);
- }
- });
-
- MML.xml = MML.mbase.Subclass({
- type: "xml",
- Init: function () {
- this.div = document.createElement("div");
- return this.SUPER(arguments).Init.apply(this,arguments);
- },
- Append: function () {
- for (var i = 0, m = arguments.length; i < m; i++) {
- var node = this.Import(arguments[i]);
- this.data.push(node);
- this.div.appendChild(node);
- }
- },
- Import: function (node) {
- if (document.importNode) {return document.importNode(node,true)}
- //
- // IE < 9 doesn't have importNode, so fake it.
- //
- var nNode, i, m;
- if (node.nodeType === 1) { // ELEMENT_NODE
- nNode = document.createElement(node.nodeName);
- for (i = 0, m = node.attributes.length; i < m; i++) {
- var attribute = node.attributes[i];
- if (attribute.specified && attribute.nodeValue != null && attribute.nodeValue != '')
- {nNode.setAttribute(attribute.nodeName,attribute.nodeValue)}
- if (attribute.nodeName === "style") {nNode.style.cssText = attribute.nodeValue}
- }
- if (node.className) {nNode.className = node.className}
- } else if (node.nodeType === 3 || node.nodeType === 4) { // TEXT_NODE or CDATA_SECTION_NODE
- nNode = document.createTextNode(node.nodeValue);
- } else if (node.nodeType === 8) { // COMMENT_NODE
- nNode = document.createComment(node.nodeValue);
- } else {
- return document.createTextNode('');
- }
- for (i = 0, m = node.childNodes.length; i < m; i++)
- {nNode.appendChild(this.Import(node.childNodes[i]))}
- return nNode;
- },
- value: function () {return this.div},
- toString: function () {return this.div.innerHTML}
- });
-
- MML.TeXAtom = MML.mbase.Subclass({
- type: "texatom",
- linebreakContainer: true,
- inferRow: true, notParent: true,
- texClass: MML.TEXCLASS.ORD,
- Core: MML.mbase.childCore,
- CoreMO: MML.mbase.childCoreMO,
- isEmbellished: MML.mbase.childEmbellished,
- setTeXclass: function (prev) {
- this.data[0].setTeXclass();
- return this.adjustTeXclass(prev);
- },
- adjustTeXclass: MML.mo.prototype.adjustTeXclass
- });
-
- MML.NULL = MML.mbase().With({type:"null"});
- var TEXCLASS = MML.TEXCLASS;
-
- var MO = {
- ORD: [0,0,TEXCLASS.ORD],
- ORD11: [1,1,TEXCLASS.ORD],
- ORD21: [2,1,TEXCLASS.ORD],
- ORD02: [0,2,TEXCLASS.ORD],
- ORD55: [5,5,TEXCLASS.ORD],
- OP: [1,2,TEXCLASS.OP,{largeop: true, movablelimits: true, symmetric: true}],
- OPFIXED: [1,2,TEXCLASS.OP,{largeop: true, movablelimits: true}],
- INTEGRAL: [0,1,TEXCLASS.OP,{largeop: true, symmetric: true}],
- INTEGRAL2: [1,2,TEXCLASS.OP,{largeop: true, symmetric: true}],
- BIN3: [3,3,TEXCLASS.BIN],
- BIN4: [4,4,TEXCLASS.BIN],
- BIN01: [0,1,TEXCLASS.BIN],
- BIN5: [5,5,TEXCLASS.BIN],
- TALLBIN: [4,4,TEXCLASS.BIN,{stretchy: true}],
- BINOP: [4,4,TEXCLASS.BIN,{largeop: true, movablelimits: true}],
- REL: [5,5,TEXCLASS.REL],
- REL1: [1,1,TEXCLASS.REL,{stretchy: true}],
- REL4: [4,4,TEXCLASS.REL],
- RELSTRETCH: [5,5,TEXCLASS.REL,{stretchy: true}],
- RELACCENT: [5,5,TEXCLASS.REL,{accent: true}],
- WIDEREL: [5,5,TEXCLASS.REL,{accent: true, stretchy: true}],
- OPEN: [0,0,TEXCLASS.OPEN,{fence: true, stretchy: true, symmetric: true}],
- CLOSE: [0,0,TEXCLASS.CLOSE,{fence: true, stretchy: true, symmetric: true}],
- INNER: [0,0,TEXCLASS.INNER],
- PUNCT: [0,3,TEXCLASS.PUNCT],
- ACCENT: [0,0,TEXCLASS.ORD,{accent: true}],
- WIDEACCENT: [0,0,TEXCLASS.ORD,{accent: true, stretchy: true}]
- };
- MML.mo.Augment({
- SPACE: [
- '0em',
- '0.1111em',
- '0.1667em',
- '0.2222em',
- '0.2667em',
- '0.3333em'
- ],
- RANGES: [
- [0x20,0x7F,TEXCLASS.REL,"BasicLatin"],
- [0xA0,0xFF,TEXCLASS.ORD,"Latin1Supplement"],
- [0x100,0x17F,TEXCLASS.ORD],
- [0x180,0x24F,TEXCLASS.ORD],
- [0x2B0,0x2FF,TEXCLASS.ORD,"SpacingModLetters"],
- [0x300,0x36F,TEXCLASS.ORD,"CombDiacritMarks"],
- [0x370,0x3FF,TEXCLASS.ORD,"GreekAndCoptic"],
- [0x1E00,0x1EFF,TEXCLASS.ORD],
- [0x2000,0x206F,TEXCLASS.PUNCT,"GeneralPunctuation"],
- [0x2070,0x209F,TEXCLASS.ORD],
- [0x20A0,0x20CF,TEXCLASS.ORD],
- [0x20D0,0x20FF,TEXCLASS.ORD,"CombDiactForSymbols"],
- [0x2100,0x214F,TEXCLASS.ORD,"LetterlikeSymbols"],
- [0x2150,0x218F,TEXCLASS.ORD],
- [0x2190,0x21FF,TEXCLASS.REL,"Arrows"],
- [0x2200,0x22FF,TEXCLASS.BIN,"MathOperators"],
- [0x2300,0x23FF,TEXCLASS.ORD,"MiscTechnical"],
- [0x2460,0x24FF,TEXCLASS.ORD],
- [0x2500,0x259F,TEXCLASS.ORD],
- [0x25A0,0x25FF,TEXCLASS.ORD,"GeometricShapes"],
- [0x2700,0x27BF,TEXCLASS.ORD,"Dingbats"],
- [0x27C0,0x27EF,TEXCLASS.ORD,"MiscMathSymbolsA"],
- [0x27F0,0x27FF,TEXCLASS.REL,"SupplementalArrowsA"],
- [0x2900,0x297F,TEXCLASS.REL,"SupplementalArrowsB"],
- [0x2980,0x29FF,TEXCLASS.ORD,"MiscMathSymbolsB"],
- [0x2A00,0x2AFF,TEXCLASS.BIN,"SuppMathOperators"],
- [0x2B00,0x2BFF,TEXCLASS.ORD,"MiscSymbolsAndArrows"],
- [0x1D400,0x1D7FF,TEXCLASS.ORD]
- ],
- OPTABLE: {
- prefix: {
- '\u2200': MO.ORD21, // for all
- '\u2202': MO.ORD21, // partial differential
- '\u2203': MO.ORD21, // there exists
- '\u2207': MO.ORD21, // nabla
- '\u220F': MO.OP, // n-ary product
- '\u2210': MO.OP, // n-ary coproduct
- '\u2211': MO.OP, // n-ary summation
- '\u2212': MO.BIN01, // minus sign
- '\u2213': MO.BIN01, // minus-or-plus sign
- '\u221A': [1,1,TEXCLASS.ORD,{stretchy: true}], // square root
- '\u2220': MO.ORD, // angle
- '\u222B': MO.INTEGRAL, // integral
- '\u222E': MO.INTEGRAL, // contour integral
- '\u22C0': MO.OP, // n-ary logical and
- '\u22C1': MO.OP, // n-ary logical or
- '\u22C2': MO.OP, // n-ary intersection
- '\u22C3': MO.OP, // n-ary union
- '\u2308': MO.OPEN, // left ceiling
- '\u230A': MO.OPEN, // left floor
- '\u27E8': MO.OPEN, // mathematical left angle bracket
- '\u27EE': MO.OPEN, // mathematical left flattened parenthesis
- '\u2A00': MO.OP, // n-ary circled dot operator
- '\u2A01': MO.OP, // n-ary circled plus operator
- '\u2A02': MO.OP, // n-ary circled times operator
- '\u2A04': MO.OP, // n-ary union operator with plus
- '\u2A06': MO.OP, // n-ary square union operator
- '\u00AC': MO.ORD21, // not sign
- '\u00B1': MO.BIN01, // plus-minus sign
- '(': MO.OPEN, // left parenthesis
- '+': MO.BIN01, // plus sign
- '-': MO.BIN01, // hyphen-minus
- '[': MO.OPEN, // left square bracket
- '{': MO.OPEN, // left curly bracket
- '|': MO.OPEN // vertical line
- },
- postfix: {
- '!': [1,0,TEXCLASS.CLOSE], // exclamation mark
- '&': MO.ORD, // ampersand
- '\u2032': MO.ORD02, // prime
- '\u203E': MO.WIDEACCENT, // overline
- '\u2309': MO.CLOSE, // right ceiling
- '\u230B': MO.CLOSE, // right floor
- '\u23DE': MO.WIDEACCENT, // top curly bracket
- '\u23DF': MO.WIDEACCENT, // bottom curly bracket
- '\u266D': MO.ORD02, // music flat sign
- '\u266E': MO.ORD02, // music natural sign
- '\u266F': MO.ORD02, // music sharp sign
- '\u27E9': MO.CLOSE, // mathematical right angle bracket
- '\u27EF': MO.CLOSE, // mathematical right flattened parenthesis
- '\u02C6': MO.WIDEACCENT, // modifier letter circumflex accent
- '\u02C7': MO.WIDEACCENT, // caron
- '\u02C9': MO.WIDEACCENT, // modifier letter macron
- '\u02CA': MO.ACCENT, // modifier letter acute accent
- '\u02CB': MO.ACCENT, // modifier letter grave accent
- '\u02D8': MO.ACCENT, // breve
- '\u02D9': MO.ACCENT, // dot above
- '\u02DC': MO.WIDEACCENT, // small tilde
- '\u0302': MO.WIDEACCENT, // combining circumflex accent
- '\u00A8': MO.ACCENT, // diaeresis
- '\u00AF': MO.WIDEACCENT, // macron
- ')': MO.CLOSE, // right parenthesis
- ']': MO.CLOSE, // right square bracket
- '^': MO.WIDEACCENT, // circumflex accent
- '_': MO.WIDEACCENT, // low line
- '`': MO.ACCENT, // grave accent
- '|': MO.CLOSE, // vertical line
- '}': MO.CLOSE, // right curly bracket
- '~': MO.WIDEACCENT // tilde
- },
- infix: {
- '': MO.ORD, // empty <mo>
- '%': [3,3,TEXCLASS.ORD], // percent sign
- '\u2022': MO.BIN4, // bullet
- '\u2026': MO.INNER, // horizontal ellipsis
- '\u2044': MO.TALLBIN, // fraction slash
- '\u2061': MO.ORD, // function application
- '\u2062': MO.ORD, // invisible times
- '\u2063': [0,0,TEXCLASS.ORD,{linebreakstyle:"after", separator: true}], // invisible separator
- '\u2064': MO.ORD, // invisible plus
- '\u2190': MO.WIDEREL, // leftwards arrow
- '\u2191': MO.RELSTRETCH, // upwards arrow
- '\u2192': MO.WIDEREL, // rightwards arrow
- '\u2193': MO.RELSTRETCH, // downwards arrow
- '\u2194': MO.WIDEREL, // left right arrow
- '\u2195': MO.RELSTRETCH, // up down arrow
- '\u2196': MO.RELSTRETCH, // north west arrow
- '\u2197': MO.RELSTRETCH, // north east arrow
- '\u2198': MO.RELSTRETCH, // south east arrow
- '\u2199': MO.RELSTRETCH, // south west arrow
- '\u21A6': MO.WIDEREL, // rightwards arrow from bar
- '\u21A9': MO.WIDEREL, // leftwards arrow with hook
- '\u21AA': MO.WIDEREL, // rightwards arrow with hook
- '\u21BC': MO.WIDEREL, // leftwards harpoon with barb upwards
- '\u21BD': MO.WIDEREL, // leftwards harpoon with barb downwards
- '\u21C0': MO.WIDEREL, // rightwards harpoon with barb upwards
- '\u21C1': MO.WIDEREL, // rightwards harpoon with barb downwards
- '\u21CC': MO.WIDEREL, // rightwards harpoon over leftwards harpoon
- '\u21D0': MO.WIDEREL, // leftwards double arrow
- '\u21D1': MO.RELSTRETCH, // upwards double arrow
- '\u21D2': MO.WIDEREL, // rightwards double arrow
- '\u21D3': MO.RELSTRETCH, // downwards double arrow
- '\u21D4': MO.WIDEREL, // left right double arrow
- '\u21D5': MO.RELSTRETCH, // up down double arrow
- '\u2208': MO.REL, // element of
- '\u2209': MO.REL, // not an element of
- '\u220B': MO.REL, // contains as member
- '\u2212': MO.BIN4, // minus sign
- '\u2213': MO.BIN4, // minus-or-plus sign
- '\u2215': MO.TALLBIN, // division slash
- '\u2216': MO.BIN4, // set minus
- '\u2217': MO.BIN4, // asterisk operator
- '\u2218': MO.BIN4, // ring operator
- '\u2219': MO.BIN4, // bullet operator
- '\u221D': MO.REL, // proportional to
- '\u2223': MO.REL, // divides
- '\u2225': MO.REL, // parallel to
- '\u2227': MO.BIN4, // logical and
- '\u2228': MO.BIN4, // logical or
- '\u2229': MO.BIN4, // intersection
- '\u222A': MO.BIN4, // union
- '\u223C': MO.REL, // tilde operator
- '\u2240': MO.BIN4, // wreath product
- '\u2243': MO.REL, // asymptotically equal to
- '\u2245': MO.REL, // approximately equal to
- '\u2248': MO.REL, // almost equal to
- '\u224D': MO.REL, // equivalent to
- '\u2250': MO.REL, // approaches the limit
- '\u2260': MO.REL, // not equal to
- '\u2261': MO.REL, // identical to
- '\u2264': MO.REL, // less-than or equal to
- '\u2265': MO.REL, // greater-than or equal to
- '\u226A': MO.REL, // much less-than
- '\u226B': MO.REL, // much greater-than
- '\u227A': MO.REL, // precedes
- '\u227B': MO.REL, // succeeds
- '\u2282': MO.REL, // subset of
- '\u2283': MO.REL, // superset of
- '\u2286': MO.REL, // subset of or equal to
- '\u2287': MO.REL, // superset of or equal to
- '\u228E': MO.BIN4, // multiset union
- '\u2291': MO.REL, // square image of or equal to
- '\u2292': MO.REL, // square original of or equal to
- '\u2293': MO.BIN4, // square cap
- '\u2294': MO.BIN4, // square cup
- '\u2295': MO.BIN4, // circled plus
- '\u2296': MO.BIN4, // circled minus
- '\u2297': MO.BIN4, // circled times
- '\u2298': MO.BIN4, // circled division slash
- '\u2299': MO.BIN4, // circled dot operator
- '\u22A2': MO.REL, // right tack
- '\u22A3': MO.REL, // left tack
- '\u22A4': MO.ORD55, // down tack
- '\u22A5': MO.REL, // up tack
- '\u22A8': MO.REL, // true
- '\u22C4': MO.BIN4, // diamond operator
- '\u22C5': MO.BIN4, // dot operator
- '\u22C6': MO.BIN4, // star operator
- '\u22C8': MO.REL, // bowtie
- '\u22EE': MO.ORD55, // vertical ellipsis
- '\u22EF': MO.INNER, // midline horizontal ellipsis
- '\u22F1': [5,5,TEXCLASS.INNER], // down right diagonal ellipsis
- '\u25B3': MO.BIN4, // white up-pointing triangle
- '\u25B5': MO.BIN4, // white up-pointing small triangle
- '\u25B9': MO.BIN4, // white right-pointing small triangle
- '\u25BD': MO.BIN4, // white down-pointing triangle
- '\u25BF': MO.BIN4, // white down-pointing small triangle
- '\u25C3': MO.BIN4, // white left-pointing small triangle
- '\u2758': MO.REL, // light vertical bar
- '\u27F5': MO.WIDEREL, // long leftwards arrow
- '\u27F6': MO.WIDEREL, // long rightwards arrow
- '\u27F7': MO.WIDEREL, // long left right arrow
- '\u27F8': MO.WIDEREL, // long leftwards double arrow
- '\u27F9': MO.WIDEREL, // long rightwards double arrow
- '\u27FA': MO.WIDEREL, // long left right double arrow
- '\u27FC': MO.WIDEREL, // long rightwards arrow from bar
- '\u2A2F': MO.BIN4, // vector or cross product
- '\u2A3F': MO.BIN4, // amalgamation or coproduct
- '\u2AAF': MO.REL, // precedes above single-line equals sign
- '\u2AB0': MO.REL, // succeeds above single-line equals sign
- '\u00B1': MO.BIN4, // plus-minus sign
- '\u00B7': MO.BIN4, // middle dot
- '\u00D7': MO.BIN4, // multiplication sign
- '\u00F7': MO.BIN4, // division sign
- '*': MO.BIN3, // asterisk
- '+': MO.BIN4, // plus sign
- ',': [0,3,TEXCLASS.PUNCT,{linebreakstyle:"after", separator: true}], // comma
- '-': MO.BIN4, // hyphen-minus
- '.': [3,3,TEXCLASS.ORD], // full stop
- '/': MO.ORD11, // solidus
- ':': [1,2,TEXCLASS.REL], // colon
- ';': [0,3,TEXCLASS.PUNCT,{linebreakstyle:"after", separator: true}], // semicolon
- '<': MO.REL, // less-than sign
- '=': MO.REL, // equals sign
- '>': MO.REL, // greater-than sign
- '?': [1,1,TEXCLASS.CLOSE], // question mark
- '\\': MO.ORD, // reverse solidus
- '^': MO.ORD11, // circumflex accent
- '_': MO.ORD11, // low line
- '|': [2,2,TEXCLASS.ORD,{fence: true, stretchy: true, symmetric: true}], // vertical line
- '#': MO.ORD, // #
- '$': MO.ORD, // $
- '\u002E': [0,3,TEXCLASS.PUNCT,{separator: true}], // \ldotp
- '\u02B9': MO.ORD, // prime
- '\u0300': MO.ACCENT, // \grave
- '\u0301': MO.ACCENT, // \acute
- '\u0303': MO.WIDEACCENT, // \tilde
- '\u0304': MO.ACCENT, // \bar
- '\u0306': MO.ACCENT, // \breve
- '\u0307': MO.ACCENT, // \dot
- '\u0308': MO.ACCENT, // \ddot
- '\u030C': MO.ACCENT, // \check
- '\u0332': MO.WIDEACCENT, // horizontal line
- '\u0338': MO.REL4, // \not
- '\u2015': [0,0,TEXCLASS.ORD,{stretchy: true}], // horizontal line
- '\u2017': [0,0,TEXCLASS.ORD,{stretchy: true}], // horizontal line
- '\u2020': MO.BIN3, // \dagger
- '\u2021': MO.BIN3, // \ddagger
- '\u20D7': MO.ACCENT, // \vec
- '\u2111': MO.ORD, // \Im
- '\u2113': MO.ORD, // \ell
- '\u2118': MO.ORD, // \wp
- '\u211C': MO.ORD, // \Re
- '\u2205': MO.ORD, // \emptyset
- '\u221E': MO.ORD, // \infty
- '\u2305': MO.BIN3, // barwedge
- '\u2306': MO.BIN3, // doublebarwedge
- '\u2322': MO.REL4, // \frown
- '\u2323': MO.REL4, // \smile
- '\u2329': MO.OPEN, // langle
- '\u232A': MO.CLOSE, // rangle
- '\u23AA': MO.ORD, // \bracevert
- '\u23AF': [0,0,TEXCLASS.ORD,{stretchy: true}], // \underline
- '\u23B0': MO.OPEN, // \lmoustache
- '\u23B1': MO.CLOSE, // \rmoustache
- '\u2500': MO.ORD, // horizontal line
- '\u25EF': MO.BIN3, // \bigcirc
- '\u2660': MO.ORD, // \spadesuit
- '\u2661': MO.ORD, // \heartsuit
- '\u2662': MO.ORD, // \diamondsuit
- '\u2663': MO.ORD, // \clubsuit
- '\u3008': MO.OPEN, // langle
- '\u3009': MO.CLOSE, // rangle
- '\uFE37': MO.WIDEACCENT, // horizontal brace down
- '\uFE38': MO.WIDEACCENT // horizontal brace up
- }
- }
- },{
- OPTYPES: MO
- });
-
- //
- // These are not in the W3C table, but FF works this way,
- // and it makes sense, so add it here
- //
- var OPTABLE = MML.mo.prototype.OPTABLE;
- OPTABLE.infix["^"] = MO.WIDEREL;
- OPTABLE.infix["_"] = MO.WIDEREL;
- OPTABLE.prefix["\u2223"] = MO.OPEN;
- OPTABLE.prefix["\u2225"] = MO.OPEN;
- OPTABLE.postfix["\u2223"] = MO.CLOSE;
- OPTABLE.postfix["\u2225"] = MO.CLOSE;
-
- })(MathJax.ElementJax.mml);
- MathJax.ElementJax.mml.loadComplete("jax.js");
|