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+""+tag+">";
+ }
+ });
+
MML.msubsup.Augment({
toMathML: function (space) {
var tag = this.type;