diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index 1af0c0a08..75a6ad88f 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -1852,7 +1852,8 @@ MathJax.Hub = { locale: "en", // the language to use for messages mpContext: false, // true means pass menu events to MathPlayer in IE mpMouse: false, // true means pass mouse events to MathPlayer in IE - texHints: true // include class names for TeXAtom elements + texHints: true, // include class names for TeXAtom elements + semantics: false // add semantics tag with original form in MathML output }, errorSettings: { diff --git a/unpacked/config/default.js b/unpacked/config/default.js index 995383980..38cca24a8 100644 --- a/unpacked/config/default.js +++ b/unpacked/config/default.js @@ -243,7 +243,8 @@ MathJax.Hub.Config({ context: "MathJax", // or "Browser" for pass-through to browser menu mpContext: false, // true means pass menu events to MathPlayer in IE mpMouse: false, // true means pass mouse events to MathPlayer in IE - texHints: true // include class names for TeXAtom elements + texHints: true, // include class names for TeXAtom elements + semantics: false // add semantics tag with original form in MathML output }, // diff --git a/unpacked/extensions/MathEvents.js b/unpacked/extensions/MathEvents.js index 381548e78..16ee6e603 100644 --- a/unpacked/extensions/MathEvents.js +++ b/unpacked/extensions/MathEvents.js @@ -160,6 +160,7 @@ source.items[0].name = jax.sourceMenuTitle; source.items[0].format = (jax.sourceMenuFormat||"MathML"); source.items[1].name = INPUT[jax.inputJax].sourceMenuTitle; + source.items[5].disabled = !INPUT[jax.inputJax].annotationEncoding; // // Try and find each known annotation format and enable the menu diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js index b60e2afb0..0d60a8d8f 100644 --- a/unpacked/extensions/MathMenu.js +++ b/unpacked/extensions/MathMenu.js @@ -717,7 +717,7 @@ var MML = MathJax.ElementJax.mml; if (MML && typeof(MML.mbase.prototype.toMathML) !== "undefined") { // toMathML() can call MathJax.Hub.RestartAfter, so trap errors and check - try {MENU.ShowSource.Text(MENU.jax.root.toMathML(),event)} catch (err) { + try {MENU.ShowSource.Text(MENU.jax.root.toMathML("",MENU.jax),event)} catch (err) { if (!err.restart) {throw err} CALLBACK.After([this,MENU.ShowSource,EVENT],err.restart); } @@ -1060,7 +1060,8 @@ ITEM.COMMAND(["Original","Original Form"], MENU.ShowSource, {nativeTouch: true}), ITEM.SUBMENU(["Annotation","Annotation"], {disabled:true}), ITEM.RULE(), - ITEM.CHECKBOX(["texHints","Show TeX hints in MathML"], "texHints") + ITEM.CHECKBOX(["texHints","Show TeX hints in MathML"], "texHints"), + ITEM.CHECKBOX(["semantics","Add original form as annotation"], "semantics") ), ITEM.RULE(), ITEM.SUBMENU(["Settings","Math Settings"], diff --git a/unpacked/extensions/toMathML.js b/unpacked/extensions/toMathML.js index a773201e2..4d1a4efa8 100644 --- a/unpacked/extensions/toMathML.js +++ b/unpacked/extensions/toMathML.js @@ -136,6 +136,38 @@ MathJax.Hub.Register.LoadHook("[MathJax]/jax/element/mml/jax.js",function () { } }); + // + // Override math.toMathML in order to add semantics tag + // for the input format, if the user requests that in the + // Show As menu. + // + MML.math.Augment({ + toMathML: function (space,jax) { + var annotation; + if (space == null) {space = ""} + if (jax && jax.originalText && SETTINGS.semantics) + {annotation = MathJax.InputJax[jax.inputJax].annotationEncoding} + var nested = (this.data[0] && this.data[0].data.length > 1); + var tag = this.type, attr = this.toMathMLattributes(); + var data = [], SPACE = space + (annotation ? " " : "") + (nested ? " " : ""); + for (var i = 0, m = this.data.length; i < m; i++) { + if (this.data[i]) {data.push(this.data[i].toMathML(SPACE))} + else {data.push(SPACE+"")} + } + if (data.length === 0 || (data.length === 1 && data[0] === "")) { + if (!annotation) {return "<"+tag+attr+" />"} + data.push(SPACE+""); + } + if (annotation) { + if (nested) {data.unshift(space+" "); data.push(space+" ")} + data.unshift(space+" "); + data.push(space+' '+jax.originalText+""); + data.push(space+" "); + } + return space+"<"+tag+attr+">\n"+data.join("\n")+"\n"+space+""; + } + }); + MML.msubsup.Augment({ toMathML: function (space) { var tag = this.type;