From bc9443b25230d7d958aeeb3cda55bba12edd4912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Mon, 3 Jun 2013 17:12:11 +0200 Subject: [PATCH 1/4] Expose some annotations to the Show Math As menu. Fix issue #357. --- unpacked/config/default.js | 14 ++++++++++++++ unpacked/extensions/MathEvents.js | 18 ++++++++++++++++++ unpacked/extensions/MathMenu.js | 19 +++++++++++++++++++ unpacked/jax/element/mml/jax.js | 23 +++++++++++++++++++++-- unpacked/localization/de/MathMenu.js | 9 ++++++++- unpacked/localization/en/MathMenu.js | 8 +++++++- unpacked/localization/fr/MathMenu.js | 8 +++++++- unpacked/localization/it/MathMenu.js | 8 +++++++- 8 files changed, 101 insertions(+), 6 deletions(-) diff --git a/unpacked/config/default.js b/unpacked/config/default.js index a2cd92f30..90b72b4d7 100644 --- a/unpacked/config/default.js +++ b/unpacked/config/default.js @@ -962,6 +962,20 @@ MathJax.Hub.Config({ showFontMenu: false, showContext: false, showDiscoverable: false, + + // + // These are the settings for the Annotation menu. If the root has + // a child that contains one of the following annotation + // formats, the source will be available via the "Show Math As" menu. + // Each format has a list of possible encodings. + // + semanticsAnnotations: { + "TeX": ["TeX", "LaTeX", "application/x-tex"], + "StarMath": ["StarMath 5.0"], + "Maple": ["Maple"], + "Content MathML": ["MathML-Content", "application/mathml-content+xml"], + "OpenMath": ["OpenMath"] + }, // // These are the settings for the Show Source window. The initial diff --git a/unpacked/extensions/MathEvents.js b/unpacked/extensions/MathEvents.js index 552a079d2..597e9b387 100644 --- a/unpacked/extensions/MathEvents.js +++ b/unpacked/extensions/MathEvents.js @@ -161,6 +161,24 @@ source.items[0].name = jax.sourceMenuTitle; source.items[0].format = (jax.sourceMenuFormat||"MathML"); source.items[1].name = INPUT[jax.inputJax].sourceMenuTitle; + + // + // Try and find each known annotation format and enable the menu + // items accordingly. + // + var annotations = source.items[2]; annotations.hidden = true; + var annotationItems = annotations.menu.items; + annotationList = MathJax.Hub.Config.semanticsAnnotations; + for (var i = 0, m = annotationItems.length; i < m; i++) { + var name = annotationItems[i].name[1] + if (jax.root.getAnnotation(name) !== null) { + annotations.hidden = false; + annotationItems[i].hidden = false; + } else { + annotationItems[i].hidden = true; + } + } + var MathPlayer = MENU.menu.Find("Math Settings","MathPlayer"); MathPlayer.hidden = !(jax.outputJax === "NativeMML" && HUB.Browser.hasMathPlayer); return MENU.menu.Post(event); diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js index 1e2aa945e..b854aaf90 100644 --- a/unpacked/extensions/MathMenu.js +++ b/unpacked/extensions/MathMenu.js @@ -711,6 +711,9 @@ } } else if (this.format === "Error") { MENU.ShowSource.Text(MENU.jax.errorText,event); + } else if (CONFIG.semanticsAnnotations[this.format]) { + var annotation = MENU.jax.root.getAnnotation(this.format); + if (annotation.data[0]) MENU.ShowSource.Text(annotation.data[0].toString()); } else { if (MENU.jax.originalText == null) { alert(_("NoOriginalForm","No original form available")); @@ -989,6 +992,20 @@ menu.items.push(items[items.length-2],items[items.length-1]); }; + // + // Create the annotation menu from MathJax.Hub.config.semanticsAnnotations + // + MENU.CreateAnnotationMenu = function () { + if (!MENU.menu) return; + var menu = MENU.menu.Find("Show Math As","Annotation").menu; + var annotations = CONFIG.semanticsAnnotations; + for (var a in annotations) { + if (annotations.hasOwnProperty(a)) { + menu.items.push(ITEM.COMMAND([a,a], MENU.ShowSource, {hidden: true, nativeTouch: true, format: a})); + } + } + }; + /*************************************************************/ HUB.Register.StartupHook("End Config",function () { @@ -1012,6 +1029,7 @@ ITEM.SUBMENU(["Show","Show Math As"], ITEM.COMMAND(["MathMLcode","MathML Code"], MENU.ShowSource, {nativeTouch: true, format: "MathML"}), ITEM.COMMAND(["Original","Original Form"], MENU.ShowSource, {nativeTouch: true}), + ITEM.SUBMENU(["Annotation","Annotation"], {hidden:true}), ITEM.RULE(), ITEM.CHECKBOX(["texHints","Show TeX hints in MathML"], "texHints") ), @@ -1095,6 +1113,7 @@ } MENU.CreateLocaleMenu(); + MENU.CreateAnnotationMenu(); }); MENU.showRenderer = function (show) { diff --git a/unpacked/jax/element/mml/jax.js b/unpacked/jax/element/mml/jax.js index 4c78ea727..dfadcd1ab 100644 --- a/unpacked/jax/element/mml/jax.js +++ b/unpacked/jax/element/mml/jax.js @@ -730,6 +730,10 @@ MathJax.ElementJax.mml.Augment({ {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); } }); @@ -1174,7 +1178,18 @@ MathJax.ElementJax.mml.Augment({ definitionURL: null, encoding: null }, - setTeXclass: MML.mbase.setChildTeXclass + 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].attr.encoding; + if (encoding && encodingList.indexOf(encoding) !== -1) + return this.data[i]; + } + } + return null; + } }); MML.annotation = MML.mbase.Subclass({ type: "annotation", isToken: true, @@ -1235,7 +1250,11 @@ MathJax.ElementJax.mml.Augment({ return ""; }, linebreakContainer: true, - setTeXclass: MML.mbase.setChildTeXclass + 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({ diff --git a/unpacked/localization/de/MathMenu.js b/unpacked/localization/de/MathMenu.js index b5353de0c..78f08eda0 100644 --- a/unpacked/localization/de/MathMenu.js +++ b/unpacked/localization/de/MathMenu.js @@ -184,9 +184,16 @@ MathJax.Localization.addTranslation("de","MathMenu",{ // "Close", EqSource: - "Original MathJax Formel" + "Original MathJax Formel", // "MathJax Equation Source" + "Annotation": "Annotation", + "TeX": "TeX", + "StarMath": "StarMath", + "Maple": "Maple", + "Content MathML": "Content MathML", + "OpenMath": "OpenMath" + } }); diff --git a/unpacked/localization/en/MathMenu.js b/unpacked/localization/en/MathMenu.js index 4363661a4..d389a0c2c 100644 --- a/unpacked/localization/en/MathMenu.js +++ b/unpacked/localization/en/MathMenu.js @@ -145,8 +145,14 @@ MathJax.Localization.addTranslation("en","MathMenu",{ "Close", // NOTE: for closing button in the 'MathJax Menu => SHow Math As' window. EqSource: - "MathJax Equation Source" + "MathJax Equation Source", + "Annotation": "Annotation", + "TeX": "TeX", + "StarMath": "StarMath", + "Maple": "Maple", + "Content MathML": "Content MathML", + "OpenMath": "OpenMath" } }); diff --git a/unpacked/localization/fr/MathMenu.js b/unpacked/localization/fr/MathMenu.js index c2356dd0a..3eb611e4b 100644 --- a/unpacked/localization/fr/MathMenu.js +++ b/unpacked/localization/fr/MathMenu.js @@ -145,8 +145,14 @@ MathJax.Localization.addTranslation("fr","MathMenu",{ "Fermer", EqSource: - "Source de l'\u00E9quation MathJax" + "Source de l'\u00E9quation MathJax", + "Annotation": "d'annotation", + "TeX": "TeX", + "StarMath": "StarMath", + "Maple": "Maple", + "Content MathML": "MathML de contenu", + "OpenMath": "OpenMath" } }); diff --git a/unpacked/localization/it/MathMenu.js b/unpacked/localization/it/MathMenu.js index c65e1b5e6..93f6f0cfc 100644 --- a/unpacked/localization/it/MathMenu.js +++ b/unpacked/localization/it/MathMenu.js @@ -179,9 +179,15 @@ MathJax.Localization.addTranslation("it","MathMenu",{ //"Close", // NOTE: for closing button in the 'MathJax Menu => SHow Math As' window. EqSource: - "Codice sorgente formula MathJax" + "Codice sorgente formula MathJax", //"MathJax Equation Source" + "Annotation": "Annotation", + "TeX": "TeX", + "StarMath": "StarMath", + "Maple": "Maple", + "Content MathML": "Content MathML", + "OpenMath": "OpenMath" } }); From 3653fcccafd9ab7ed322a30a713cec16b3aa2149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Mon, 5 Aug 2013 17:32:08 +0200 Subject: [PATCH 2/4] Address Review comments. --- unpacked/extensions/MathEvents.js | 4 ++-- unpacked/extensions/MathMenu.js | 10 +++++++++- unpacked/localization/de/MathMenu.js | 9 +-------- unpacked/localization/en/MathMenu.js | 8 +------- unpacked/localization/fr/MathMenu.js | 8 +------- unpacked/localization/it/MathMenu.js | 8 +------- 6 files changed, 15 insertions(+), 32 deletions(-) diff --git a/unpacked/extensions/MathEvents.js b/unpacked/extensions/MathEvents.js index 597e9b387..0b16a229a 100644 --- a/unpacked/extensions/MathEvents.js +++ b/unpacked/extensions/MathEvents.js @@ -166,13 +166,13 @@ // Try and find each known annotation format and enable the menu // items accordingly. // - var annotations = source.items[2]; annotations.hidden = true; + var annotations = source.items[2]; annotations.disabled = true; var annotationItems = annotations.menu.items; annotationList = MathJax.Hub.Config.semanticsAnnotations; for (var i = 0, m = annotationItems.length; i < m; i++) { var name = annotationItems[i].name[1] if (jax.root.getAnnotation(name) !== null) { - annotations.hidden = false; + annotations.disabled = false; annotationItems[i].hidden = false; } else { annotationItems[i].hidden = true; diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js index b854aaf90..b5696217b 100644 --- a/unpacked/extensions/MathMenu.js +++ b/unpacked/extensions/MathMenu.js @@ -58,6 +58,14 @@ showLocale: true, // show the "Locale" menu? showLocaleURL: false, // show the "Load from URL" menu? + semanticsAnnotations: { + "TeX": ["TeX", "LaTeX", "application/x-tex"], + "StarMath": ["StarMath 5.0"], + "Maple": ["Maple"], + "Content MathML": ["MathML-Content", "application/mathml-content+xml"], + "OpenMath": ["OpenMath"] + }, + windowSettings: { // for source window status: "no", toolbar: "no", locationbar: "no", menubar: "no", directories: "no", personalbar: "no", resizable: "yes", scrollbars: "yes", @@ -1029,7 +1037,7 @@ ITEM.SUBMENU(["Show","Show Math As"], ITEM.COMMAND(["MathMLcode","MathML Code"], MENU.ShowSource, {nativeTouch: true, format: "MathML"}), ITEM.COMMAND(["Original","Original Form"], MENU.ShowSource, {nativeTouch: true}), - ITEM.SUBMENU(["Annotation","Annotation"], {hidden:true}), + ITEM.SUBMENU(["Annotation","Annotation"], {disabled:true}), ITEM.RULE(), ITEM.CHECKBOX(["texHints","Show TeX hints in MathML"], "texHints") ), diff --git a/unpacked/localization/de/MathMenu.js b/unpacked/localization/de/MathMenu.js index 78f08eda0..b5353de0c 100644 --- a/unpacked/localization/de/MathMenu.js +++ b/unpacked/localization/de/MathMenu.js @@ -184,16 +184,9 @@ MathJax.Localization.addTranslation("de","MathMenu",{ // "Close", EqSource: - "Original MathJax Formel", + "Original MathJax Formel" // "MathJax Equation Source" - "Annotation": "Annotation", - "TeX": "TeX", - "StarMath": "StarMath", - "Maple": "Maple", - "Content MathML": "Content MathML", - "OpenMath": "OpenMath" - } }); diff --git a/unpacked/localization/en/MathMenu.js b/unpacked/localization/en/MathMenu.js index d389a0c2c..4363661a4 100644 --- a/unpacked/localization/en/MathMenu.js +++ b/unpacked/localization/en/MathMenu.js @@ -145,14 +145,8 @@ MathJax.Localization.addTranslation("en","MathMenu",{ "Close", // NOTE: for closing button in the 'MathJax Menu => SHow Math As' window. EqSource: - "MathJax Equation Source", + "MathJax Equation Source" - "Annotation": "Annotation", - "TeX": "TeX", - "StarMath": "StarMath", - "Maple": "Maple", - "Content MathML": "Content MathML", - "OpenMath": "OpenMath" } }); diff --git a/unpacked/localization/fr/MathMenu.js b/unpacked/localization/fr/MathMenu.js index 3eb611e4b..c2356dd0a 100644 --- a/unpacked/localization/fr/MathMenu.js +++ b/unpacked/localization/fr/MathMenu.js @@ -145,14 +145,8 @@ MathJax.Localization.addTranslation("fr","MathMenu",{ "Fermer", EqSource: - "Source de l'\u00E9quation MathJax", + "Source de l'\u00E9quation MathJax" - "Annotation": "d'annotation", - "TeX": "TeX", - "StarMath": "StarMath", - "Maple": "Maple", - "Content MathML": "MathML de contenu", - "OpenMath": "OpenMath" } }); diff --git a/unpacked/localization/it/MathMenu.js b/unpacked/localization/it/MathMenu.js index 93f6f0cfc..c65e1b5e6 100644 --- a/unpacked/localization/it/MathMenu.js +++ b/unpacked/localization/it/MathMenu.js @@ -179,15 +179,9 @@ MathJax.Localization.addTranslation("it","MathMenu",{ //"Close", // NOTE: for closing button in the 'MathJax Menu => SHow Math As' window. EqSource: - "Codice sorgente formula MathJax", + "Codice sorgente formula MathJax" //"MathJax Equation Source" - "Annotation": "Annotation", - "TeX": "TeX", - "StarMath": "StarMath", - "Maple": "Maple", - "Content MathML": "Content MathML", - "OpenMath": "OpenMath" } }); From 932ac5b2427652e9167843a0eaedf95edc0ec1e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Mon, 5 Aug 2013 18:20:58 +0200 Subject: [PATCH 3/4] Remove the space for the key of "Content MathML". --- unpacked/config/default.js | 2 +- unpacked/extensions/MathMenu.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unpacked/config/default.js b/unpacked/config/default.js index 13bbfc58b..878efdd38 100644 --- a/unpacked/config/default.js +++ b/unpacked/config/default.js @@ -972,7 +972,7 @@ MathJax.Hub.Config({ "TeX": ["TeX", "LaTeX", "application/x-tex"], "StarMath": ["StarMath 5.0"], "Maple": ["Maple"], - "Content MathML": ["MathML-Content", "application/mathml-content+xml"], + "ContentMathML": ["MathML-Content", "application/mathml-content+xml"], "OpenMath": ["OpenMath"] }, diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js index b5696217b..78fa39161 100644 --- a/unpacked/extensions/MathMenu.js +++ b/unpacked/extensions/MathMenu.js @@ -62,7 +62,7 @@ "TeX": ["TeX", "LaTeX", "application/x-tex"], "StarMath": ["StarMath 5.0"], "Maple": ["Maple"], - "Content MathML": ["MathML-Content", "application/mathml-content+xml"], + "ContentMathML": ["MathML-Content", "application/mathml-content+xml"], "OpenMath": ["OpenMath"] }, From 17508905a7fa422d7de36bf1d1a7f0dea8fb4398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Wed, 7 Aug 2013 14:14:31 +0200 Subject: [PATCH 4/4] Fix issues reported by Davide. #357 --- unpacked/jax/element/mml/jax.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/unpacked/jax/element/mml/jax.js b/unpacked/jax/element/mml/jax.js index 71deca789..64fc492f2 100644 --- a/unpacked/jax/element/mml/jax.js +++ b/unpacked/jax/element/mml/jax.js @@ -380,7 +380,8 @@ MathJax.ElementJax.mml.Augment({ return false; }, array: function () {if (this.inferred) {return this.data} else {return [this]}}, - toString: function () {return this.type+"("+this.data.join(",")+")"} + 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++) @@ -1184,9 +1185,12 @@ MathJax.ElementJax.mml.Augment({ 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].attr.encoding; - if (encoding && encodingList.indexOf(encoding) !== -1) - return this.data[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;