commit 6dad7d5a9e801b0b5a451214f73a2b101b32cf0d
parent c8dc3a20f761f86e5d1878205409fe438d918fd3
Author: Davide P. Cervone <dpvc@union.edu>
Date: Tue, 14 May 2013 14:54:38 -0400
Merge branch 'safe-patch' into v2.2-beta
Diffstat:
3 files changed, 54 insertions(+), 27 deletions(-)
diff --git a/unpacked/config/Safe.js b/unpacked/config/Safe.js
@@ -29,7 +29,9 @@
* limitations under the License.
*/
-if (!MathJax.Hub.config.extensions) {MathJax.Hub.config.extensions = []}
-MathJax.Hub.config.extensions.push("Safe.js");
+MathJax.Hub.Register.StartupHook("End Config", function () {
+ if (!MathJax.Hub.config.extensions) {MathJax.Hub.config.extensions = []}
+ MathJax.Hub.config.extensions.push("Safe.js");
+});
-MathJax.Ajax.loadComplete("[MathJax]/config/Safe.js");
-\ No newline at end of file
+MathJax.Ajax.loadComplete("[MathJax]/config/Safe.js");
diff --git a/unpacked/extensions/Safe.js b/unpacked/extensions/Safe.js
@@ -97,6 +97,20 @@
config: CONFIG,
div1: document.createElement("div"), // for CSS processing
div2: document.createElement("div"),
+
+ //
+ // Methods called for MathML attribute processing
+ //
+ filter: {
+ "class": "filterClass",
+ style: "filterStyles",
+ id: "filterID",
+ fontsize: "filterFontSize",
+ mathsize: "filterFontSize",
+ scriptminsize: "filterFontSize",
+ scriptsizemultiplier: "filterSizeMultiplier",
+ scriptlevel: "filterScriptLevel"
+ },
//
// Filter HREF URL's
@@ -113,12 +127,12 @@
//
filterClass: function (CLASS) {
if (ALLOW.classes === "none" ||
- (ALLOW.classes !== "all" && !CLASS.match(/^MJX-/))) {CLASS = null}
+ (ALLOW.classes !== "all" && !CLASS.match(/^MJX-[-a-zA-Z0-9_.]+$/))) {CLASS = null}
return CLASS;
},
filterID: function (id) {
if (ALLOW.cssIDs === "none" ||
- (ALLOW.cssIDs !== "all" && !id.match(/^MJX-/))) {id = null}
+ (ALLOW.cssIDs !== "all" && !id.match(/^MJX-[-a-zA-Z0-9_.]+$/))) {id = null}
return id;
},
@@ -172,6 +186,23 @@
},
//
+ // Filter scriptsizemultiplier
+ //
+ filterSizeMultiplier: function (size) {
+ if (ALLOW.fontsize === "none") {size = null}
+ else if (ALLOW.fontsize !== "all") {size = Math.min(1,Math.max(.6,size)).toString()}
+ return size;
+ },
+ //
+ // Filter scriptLevel
+ //
+ filterScriptLevel: function (level) {
+ if (ALLOW.fontsize === "none") {level = null}
+ else if (ALLOW.fontsize !== "all") {level = Math.max(0,level).toString()}
+ return level;
+ },
+
+ //
// Filter TeX extension names
//
filterRequire: function (name) {
@@ -242,9 +273,10 @@
});
HUB.Register.StartupHook("TeX Jax Ready",function () {
- var TEX = MathJax.InputJax.TeX;
+ var TEX = MathJax.InputJax.TeX,
+ PARSE = TEX.Parse, METHOD = SAFE.filter;
- TEX.Parse.Augment({
+ PARSE.Augment({
//
// Implements \require{name} with filtering
@@ -258,11 +290,9 @@
//
// Controls \mmlToken attributes
//
- MmlTokenAllow: {
- fontsize: (ALLOW.fontsize === "all"),
- id: (ALLOW.cssIDs === "all"),
- "class": (ALLOW.classes === "all"),
- style: (ALLOW.styles === "all")
+ MmlFilterAttribute: function (name,value) {
+ if (METHOD[name]) {value = SAFE[METHOD[name]](value)}
+ return value;
},
//
@@ -292,16 +322,9 @@
});
HUB.Register.StartupHook("MathML Jax Ready",function () {
- var PARSE = MathJax.InputJax.MathML.Parse;
+ var PARSE = MathJax.InputJax.MathML.Parse,
+ METHOD = SAFE.filter;
- var METHOD = {
- href: "filterURL",
- "class": "filterClass",
- id: "filterID",
- fontsize: "filterFontSize",
- style: "filterStyles"
- };
-
//
// Filter MathML attributes
//
diff --git a/unpacked/jax/input/TeX/jax.js b/unpacked/jax/input/TeX/jax.js
@@ -1441,15 +1441,18 @@
"%1 is not a recognized attribute for %2",
match[1],type]);
}
- var value = match[2].replace(/^(['"])(.*)\1$/,"$2");
- if (value.toLowerCase() === "true") {value = true}
- else if (value.toLowerCase() === "false") {value = false}
- def[match[1]] = value;
- def.attrNames.push(match[1]);
+ var value = this.MmlFilterAttribute(match[1],match[2].replace(/^(['"])(.*)\1$/,"$2"));
+ if (value) {
+ if (value.toLowerCase() === "true") {value = true}
+ else if (value.toLowerCase() === "false") {value = false}
+ def[match[1]] = value;
+ def.attrNames.push(match[1]);
+ }
attr = attr.substr(match[0].length);
}
this.Push(this.mmlToken(MML[type](data).With(def)));
},
+ MmlFilterAttribute: function (name,value) {return value},
MmlTokenAllow: {
fontfamily:1, fontsize:1, fontweight:1, fontstyle:1,
color:1, background:1,