Merge branch 'develop' into issue703
This commit is contained in:
commit
3614cd1671
Binary file not shown.
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 725 B After Width: | Height: | Size: 552 B |
|
@ -107,7 +107,7 @@ Type text in the box below:<br/>
|
||||||
Preview is shown here:
|
Preview is shown here:
|
||||||
<div id="MathPreview" style="border:1px solid; padding: 3px; width:50%; margin-top:5px"></div>
|
<div id="MathPreview" style="border:1px solid; padding: 3px; width:50%; margin-top:5px"></div>
|
||||||
<div id="MathBuffer" style="border:1px solid; padding: 3px; width:50%; margin-top:5px;
|
<div id="MathBuffer" style="border:1px solid; padding: 3px; width:50%; margin-top:5px;
|
||||||
visibility:hidden; position:absolute; top:0; left: 0"><div>
|
visibility:hidden; position:absolute; top:0; left: 0"></div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
Preview.Init();
|
Preview.Init();
|
||||||
|
|
|
@ -46,7 +46,7 @@ if (window.MathJax) {window.MathJax = {AuthorConfig: window.MathJax}}
|
||||||
// MathJax.isPacked = true; // This line is uncommented by the packer.
|
// MathJax.isPacked = true; // This line is uncommented by the packer.
|
||||||
|
|
||||||
MathJax.version = "2.3";
|
MathJax.version = "2.3";
|
||||||
MathJax.fileversion = "2.3.1";
|
MathJax.fileversion = "2.3.2";
|
||||||
|
|
||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
|
||||||
|
@ -543,7 +543,7 @@ MathJax.fileversion = "2.3.1";
|
||||||
call: function () {this.callback(this); this.Process()},
|
call: function () {this.callback(this); this.Process()},
|
||||||
|
|
||||||
//
|
//
|
||||||
// A listener calls this to register intrest in the signal (so it will be called
|
// A listener calls this to register interest in the signal (so it will be called
|
||||||
// when posts occur). If ignorePast is true, it will not be sent the post history.
|
// when posts occur). If ignorePast is true, it will not be sent the post history.
|
||||||
//
|
//
|
||||||
Interest: function (callback,ignorePast,priority) {
|
Interest: function (callback,ignorePast,priority) {
|
||||||
|
@ -580,7 +580,7 @@ MathJax.fileversion = "2.3.1";
|
||||||
//
|
//
|
||||||
// Execute the message hooks for the given message
|
// Execute the message hooks for the given message
|
||||||
//
|
//
|
||||||
ExecuteHooks: function (msg,more) {
|
ExecuteHooks: function (msg) {
|
||||||
var type = ((msg instanceof Array) ? msg[0] : msg);
|
var type = ((msg instanceof Array) ? msg[0] : msg);
|
||||||
if (!this.hooks[type]) {return null}
|
if (!this.hooks[type]) {return null}
|
||||||
return this.hooks[type].Execute(msg);
|
return this.hooks[type].Execute(msg);
|
||||||
|
@ -1135,7 +1135,7 @@ MathJax.Localization = {
|
||||||
var result = [], match, last = 0;
|
var result = [], match, last = 0;
|
||||||
regex.lastIndex = 0;
|
regex.lastIndex = 0;
|
||||||
while (match = regex.exec(string)) {
|
while (match = regex.exec(string)) {
|
||||||
result.push(string.substr(last,match.index));
|
result.push(string.substr(last,match.index-last));
|
||||||
result.push.apply(result,match.slice(1));
|
result.push.apply(result,match.slice(1));
|
||||||
last = match.index + match[0].length;
|
last = match.index + match[0].length;
|
||||||
}
|
}
|
||||||
|
@ -1557,7 +1557,9 @@ MathJax.Message = {
|
||||||
|
|
||||||
browsers: {
|
browsers: {
|
||||||
MSIE: function (browser) {
|
MSIE: function (browser) {
|
||||||
MathJax.Hub.config.styles["#MathJax_Message"].position = "absolute";
|
MathJax.Message.msieFixedPositionBug = ((document.documentMode||0) < 7);
|
||||||
|
if (MathJax.Message.msieFixedPositionBug)
|
||||||
|
{MathJax.Hub.config.styles["#MathJax_Message"].position = "absolute"}
|
||||||
MathJax.Message.quirks = (document.compatMode === "BackCompat");
|
MathJax.Message.quirks = (document.compatMode === "BackCompat");
|
||||||
},
|
},
|
||||||
Chrome: function (browser) {
|
Chrome: function (browser) {
|
||||||
|
@ -1580,7 +1582,7 @@ MathJax.Message = {
|
||||||
}
|
}
|
||||||
if (!this.div) {
|
if (!this.div) {
|
||||||
var frame = document.body;
|
var frame = document.body;
|
||||||
if (MathJax.Hub.Browser.isMSIE) {
|
if (this.msieFixedPositionBug && window.attachEvent) {
|
||||||
frame = this.frame = this.addDiv(document.body); frame.removeAttribute("id");
|
frame = this.frame = this.addDiv(document.body); frame.removeAttribute("id");
|
||||||
frame.style.position = "absolute";
|
frame.style.position = "absolute";
|
||||||
frame.style.border = frame.style.margin = frame.style.padding = "0px";
|
frame.style.border = frame.style.margin = frame.style.padding = "0px";
|
||||||
|
@ -2359,21 +2361,6 @@ MathJax.Hub.Startup = {
|
||||||
MathJax.Hub.config.menuSettings.locale = this.params.locale;
|
MathJax.Hub.config.menuSettings.locale = this.params.locale;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Check for user cookie configuration
|
|
||||||
//
|
|
||||||
var user = MathJax.HTML.Cookie.Get("user");
|
|
||||||
if (user.URL || user.Config) {
|
|
||||||
if (confirm(
|
|
||||||
MathJax.Localization._("CookieConfig",
|
|
||||||
"MathJax has found a user-configuration cookie that includes code to "+
|
|
||||||
"be run. Do you want to run it?\n\n"+
|
|
||||||
"(You should press Cancel unless you set up the cookie yourself.)")
|
|
||||||
)) {
|
|
||||||
if (user.URL) {this.queue.Push(["Require",MathJax.Ajax,user.URL])}
|
|
||||||
if (user.Config) {this.queue.Push(new Function(user.Config))}
|
|
||||||
} else {MathJax.HTML.Cookie.Set("user",{})}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Run the config files, if any are given in the parameter list
|
// Run the config files, if any are given in the parameter list
|
||||||
//
|
//
|
||||||
if (this.params.config) {
|
if (this.params.config) {
|
||||||
|
@ -2554,6 +2541,7 @@ MathJax.Hub.Startup = {
|
||||||
// if needed later on.
|
// if needed later on.
|
||||||
//
|
//
|
||||||
MenuZoom: function () {
|
MenuZoom: function () {
|
||||||
|
if (MathJax.Hub.config.showMathMenu) {
|
||||||
if (!MathJax.Extension.MathMenu) {
|
if (!MathJax.Extension.MathMenu) {
|
||||||
setTimeout(
|
setTimeout(
|
||||||
function () {
|
function () {
|
||||||
|
@ -2575,6 +2563,7 @@ MathJax.Hub.Startup = {
|
||||||
2000
|
2000
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -2954,24 +2943,24 @@ MathJax.Hub.Startup = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,'')
|
CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,'')
|
||||||
.replace(/^(https?:\/\/(cdn.mathjax.org|c328740.ssl.cf1.rackcdn.com)\/mathjax\/)(latest)/,
|
.replace(/^(https?:\/\/(cdn.mathjax.org|[0-9a-f]+(-[0-9a-f]+)?.ssl.cf1.rackcdn.com)\/mathjax\/)(latest)/,
|
||||||
"$1"+BASE.version+"-$3");
|
"$1"+BASE.version+"-$4");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BASE.Ajax.config = CONFIG;
|
BASE.Ajax.config = CONFIG;
|
||||||
|
|
||||||
|
var AGENT = navigator.userAgent;
|
||||||
var BROWSERS = {
|
var BROWSERS = {
|
||||||
isMac: (navigator.platform.substr(0,3) === "Mac"),
|
isMac: (navigator.platform.substr(0,3) === "Mac"),
|
||||||
isPC: (navigator.platform.substr(0,3) === "Win"),
|
isPC: (navigator.platform.substr(0,3) === "Win"),
|
||||||
isMSIE: (window.ActiveXObject != null && window.clipboardData != null),
|
isMSIE: ("ActiveXObject" in window && "clipboardData" in window),
|
||||||
isFirefox: (navigator.userAgent.match(/Gecko/) != null &&
|
isFirefox: (AGENT.match(/Gecko\//) && !AGENT.match(/like Gecko/)),
|
||||||
navigator.userAgent.match(/KHTML/) == null),
|
isSafari: (AGENT.match(/ (Apple)?WebKit\//) != null &&
|
||||||
isSafari: (navigator.userAgent.match(/ (Apple)?WebKit\//) != null &&
|
|
||||||
(!window.chrome || window.chrome.loadTimes == null)),
|
(!window.chrome || window.chrome.loadTimes == null)),
|
||||||
isChrome: (window.chrome != null && window.chrome.loadTimes != null),
|
isChrome: (window.chrome != null && window.chrome.loadTimes != null),
|
||||||
isOpera: (window.opera != null && window.opera.version != null),
|
isOpera: (window.opera != null && window.opera.version != null),
|
||||||
isKonqueror: (window.hasOwnProperty && window.hasOwnProperty("konqueror") && navigator.vendor == "KDE"),
|
isKonqueror: ("konqueror" in window && navigator.vendor == "KDE"),
|
||||||
versionAtLeast: function (v) {
|
versionAtLeast: function (v) {
|
||||||
var bv = (this.version).split('.'); v = (new String(v)).split('.');
|
var bv = (this.version).split('.'); v = (new String(v)).split('.');
|
||||||
for (var i = 0, m = v.length; i < m; i++)
|
for (var i = 0, m = v.length; i < m; i++)
|
||||||
|
@ -2985,7 +2974,7 @@ MathJax.Hub.Startup = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var AGENT = navigator.userAgent
|
var xAGENT = AGENT
|
||||||
.replace(/^Mozilla\/(\d+\.)+\d+ /,"") // remove initial Mozilla, which is never right
|
.replace(/^Mozilla\/(\d+\.)+\d+ /,"") // remove initial Mozilla, which is never right
|
||||||
.replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"") // remove linux version
|
.replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"") // remove linux version
|
||||||
.replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,""); // special case for these
|
.replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,""); // special case for these
|
||||||
|
@ -2997,11 +2986,11 @@ MathJax.Hub.Startup = {
|
||||||
if (browser === "Mac" || browser === "PC") continue;
|
if (browser === "Mac" || browser === "PC") continue;
|
||||||
HUB.Browser = HUB.Insert(new String(browser),BROWSERS);
|
HUB.Browser = HUB.Insert(new String(browser),BROWSERS);
|
||||||
var VERSION = new RegExp(
|
var VERSION = new RegExp(
|
||||||
".*(Version)/((?:\\d+\\.)+\\d+)|" + // for Safari and Opera10
|
".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|" + // for Safari, Opera10, and IE11+
|
||||||
".*("+browser+")"+(browser == "MSIE" ? " " : "/")+"((?:\\d+\\.)*\\d+)|"+ // for one of the main browser
|
".*("+browser+")"+(browser == "MSIE" ? " " : "/")+"((?:\\d+\\.)*\\d+)|"+ // for one of the main browser
|
||||||
"(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"); // for unrecognized browser
|
"(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"); // for unrecognized browser
|
||||||
var MATCH = VERSION.exec(AGENT) || ["","","","unknown","0.0"];
|
var MATCH = VERSION.exec(xAGENT) || ["","","","unknown","0.0"];
|
||||||
HUB.Browser.name = (MATCH[1] == "Version" ? browser : (MATCH[3] || MATCH[5]));
|
HUB.Browser.name = (MATCH[1] != "" ? browser : (MATCH[3] || MATCH[5]));
|
||||||
HUB.Browser.version = MATCH[2] || MATCH[4] || MATCH[6];
|
HUB.Browser.version = MATCH[2] || MATCH[4] || MATCH[6];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3025,9 +3014,9 @@ MathJax.Hub.Startup = {
|
||||||
browser.noContextMenu = browser.isMobile;
|
browser.noContextMenu = browser.isMobile;
|
||||||
},
|
},
|
||||||
Firefox: function (browser) {
|
Firefox: function (browser) {
|
||||||
if ((browser.version === "0.0" || navigator.userAgent.match(/Firefox/) == null) &&
|
if ((browser.version === "0.0" || AGENT.match(/Firefox/) == null) &&
|
||||||
navigator.product === "Gecko") {
|
navigator.product === "Gecko") {
|
||||||
var rv = navigator.userAgent.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);
|
var rv = AGENT.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);
|
||||||
if (rv) {browser.version = rv[1]}
|
if (rv) {browser.version = rv[1]}
|
||||||
else {
|
else {
|
||||||
var date = (navigator.buildID||navigator.productSub||"0").substr(0,8);
|
var date = (navigator.buildID||navigator.productSub||"0").substr(0,8);
|
||||||
|
@ -3044,8 +3033,8 @@ MathJax.Hub.Startup = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
browser.isMobile = (navigator.appVersion.match(/Android/i) != null ||
|
browser.isMobile = (navigator.appVersion.match(/Android/i) != null ||
|
||||||
navigator.userAgent.match(/ Fennec\//) != null ||
|
AGENT.match(/ Fennec\//) != null ||
|
||||||
navigator.userAgent.match(/Mobile/) != null);
|
AGENT.match(/Mobile/) != null);
|
||||||
},
|
},
|
||||||
Opera: function (browser) {browser.version = opera.version()},
|
Opera: function (browser) {browser.version = opera.version()},
|
||||||
MSIE: function (browser) {
|
MSIE: function (browser) {
|
||||||
|
|
|
@ -76,7 +76,18 @@ MathJax.Hub.Config({
|
||||||
// A comma-separated list of input and output jax to initialize at startup.
|
// A comma-separated list of input and output jax to initialize at startup.
|
||||||
// Their main code is loaded only when they are actually used, so it is not
|
// Their main code is loaded only when they are actually used, so it is not
|
||||||
// inefficient to include jax that may not actually be used on the page. These
|
// inefficient to include jax that may not actually be used on the page. These
|
||||||
// are found in the MathJax/jax directory.
|
// are found in the MathJax/jax directory. The choices include
|
||||||
|
//
|
||||||
|
// input/TeX
|
||||||
|
// input/MathML
|
||||||
|
// input/AsciiMath
|
||||||
|
//
|
||||||
|
// output/HTML-CSS
|
||||||
|
// output/NativeMML
|
||||||
|
// output/SVG
|
||||||
|
//
|
||||||
|
// If you change the input jax, you may need to include the appropriate
|
||||||
|
// preprocessor in the extensions array below.
|
||||||
//
|
//
|
||||||
jax: ["input/TeX", "output/HTML-CSS"],
|
jax: ["input/TeX", "output/HTML-CSS"],
|
||||||
|
|
||||||
|
@ -86,6 +97,10 @@ MathJax.Hub.Config({
|
||||||
//
|
//
|
||||||
// Example: extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js"],
|
// Example: extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js"],
|
||||||
//
|
//
|
||||||
|
// You may wish to include "mml2jax.js" if you are using "input/MathML" in the
|
||||||
|
// jax array above, and "asciimath2jax.js" if you using "input/AsciiMath".
|
||||||
|
// Include "jsmath2jax.js" if you are converting from using jsMath to MathJax.
|
||||||
|
//
|
||||||
extensions: ["tex2jax.js"],
|
extensions: ["tex2jax.js"],
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -195,7 +210,7 @@ MathJax.Hub.Config({
|
||||||
// reposition the browser to the #hash location from the page URL after
|
// reposition the browser to the #hash location from the page URL after
|
||||||
// typesetting for the page.
|
// typesetting for the page.
|
||||||
//
|
//
|
||||||
positionToHash: false,
|
positionToHash: true,
|
||||||
|
|
||||||
//
|
//
|
||||||
// These control whether to attach the MathJax contextual menu to the
|
// These control whether to attach the MathJax contextual menu to the
|
||||||
|
@ -569,6 +584,22 @@ MathJax.Hub.Config({
|
||||||
// These parameters control the AsciiMath input jax.
|
// These parameters control the AsciiMath input jax.
|
||||||
//
|
//
|
||||||
AsciiMath: {
|
AsciiMath: {
|
||||||
|
//
|
||||||
|
// Determines whether the unicode positions for phi and varphi are
|
||||||
|
// to be swapped or not. (Unicode originally had these reversed, and
|
||||||
|
// many fonts have them reversed as well.) When set to true, phi
|
||||||
|
// and varphi will correspond to the LaTeX macros of the same name.
|
||||||
|
//
|
||||||
|
fixphi: true,
|
||||||
|
|
||||||
|
//
|
||||||
|
// Determines whether the MathML should be marked so that the HTML-CSS
|
||||||
|
// and SVG output jax will use MathML spacing rules rather than TeX
|
||||||
|
// spacing rules. Since AsciiMath was designed for MathML output, the
|
||||||
|
// MathML rules are used by default.
|
||||||
|
//
|
||||||
|
useMathMLspacing: true,
|
||||||
|
|
||||||
//
|
//
|
||||||
// Determines whether limits are placed above and below operators,
|
// Determines whether limits are placed above and below operators,
|
||||||
// or next to them. (AsciiMath doesn't have separate in-line and
|
// or next to them. (AsciiMath doesn't have separate in-line and
|
||||||
|
|
|
@ -241,8 +241,8 @@
|
||||||
if (HUB.Browser.isMSIE) {
|
if (HUB.Browser.isMSIE) {
|
||||||
if (CONFIG.messageStyle.position === "fixed") {
|
if (CONFIG.messageStyle.position === "fixed") {
|
||||||
MathJax.Message.Init(); // make sure MathJax_MSIE_frame exists
|
MathJax.Message.Init(); // make sure MathJax_MSIE_frame exists
|
||||||
frame = document.getElementById("MathJax_MSIE_Frame");
|
frame = document.getElementById("MathJax_MSIE_Frame") || frame;
|
||||||
CONFIG.messageStyle.position = "absolute";
|
if (frame !== document.body) {CONFIG.messageStyle.position = "absolute"}
|
||||||
}
|
}
|
||||||
} else {delete CONFIG.messageStyle.filter}
|
} else {delete CONFIG.messageStyle.filter}
|
||||||
CONFIG.messageStyle.maxWidth = (document.body.clientWidth-75) + "px";
|
CONFIG.messageStyle.maxWidth = (document.body.clientWidth-75) + "px";
|
||||||
|
|
|
@ -440,9 +440,11 @@
|
||||||
// Preload images so they show up with the menu
|
// Preload images so they show up with the menu
|
||||||
//
|
//
|
||||||
getImages: function () {
|
getImages: function () {
|
||||||
|
if (SETTINGS.discoverable) {
|
||||||
var menu = new Image();
|
var menu = new Image();
|
||||||
menu.src = CONFIG.button.src;
|
menu.src = CONFIG.button.src;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -761,8 +761,10 @@
|
||||||
var H = (w.outerHeight-w.innerHeight)||30, W = (w.outerWidth-w.innerWidth)||30, x, y;
|
var H = (w.outerHeight-w.innerHeight)||30, W = (w.outerWidth-w.innerWidth)||30, x, y;
|
||||||
W = Math.max(100,Math.min(Math.floor(.5*screen.width),table.offsetWidth+W+25));
|
W = Math.max(100,Math.min(Math.floor(.5*screen.width),table.offsetWidth+W+25));
|
||||||
H = Math.max(40,Math.min(Math.floor(.5*screen.height),table.offsetHeight+H+25));
|
H = Math.max(40,Math.min(Math.floor(.5*screen.height),table.offsetHeight+H+25));
|
||||||
|
if (MENU.prototype.msieHeightBug) {H += 35}; // for title bar in XP
|
||||||
w.resizeTo(W,H);
|
w.resizeTo(W,H);
|
||||||
if (event && event.screenX != null) {
|
var X; try {X = event.screenX} catch (e) {}; // IE8 throws an error accessing screenX
|
||||||
|
if (event && X != null) {
|
||||||
x = Math.max(0,Math.min(event.screenX-Math.floor(W/2), screen.width-W-20));
|
x = Math.max(0,Math.min(event.screenX-Math.floor(W/2), screen.width-W-20));
|
||||||
y = Math.max(0,Math.min(event.screenY-Math.floor(H/2), screen.height-H-20));
|
y = Math.max(0,Math.min(event.screenY-Math.floor(H/2), screen.height-H-20));
|
||||||
w.moveTo(x,y);
|
w.moveTo(x,y);
|
||||||
|
@ -955,9 +957,11 @@
|
||||||
var isIE8 = browser.versionAtLeast("8.0") && document.documentMode > 7;
|
var isIE8 = browser.versionAtLeast("8.0") && document.documentMode > 7;
|
||||||
MENU.Augment({
|
MENU.Augment({
|
||||||
margin: 20,
|
margin: 20,
|
||||||
msieBackgroundBug: (document.documentMode < 9),
|
msieBackgroundBug: ((document.documentMode||0) < 9),
|
||||||
msieFixedPositionBug: (quirks || !isIE8),
|
msieFixedPositionBug: (quirks || !isIE8),
|
||||||
msieAboutBug: quirks
|
msieAboutBug: quirks,
|
||||||
|
msieHeightBug: ((document.documentMode||0) < 9)
|
||||||
|
// height of window doesn't include title bar in XP
|
||||||
});
|
});
|
||||||
if (isIE9) {
|
if (isIE9) {
|
||||||
delete CONFIG.styles["#MathJax_About"].filter;
|
delete CONFIG.styles["#MathJax_About"].filter;
|
||||||
|
|
|
@ -29,7 +29,7 @@ MathJax.Extension["TeX/AMScd"] = {
|
||||||
config: MathJax.Hub.CombineConfig("TeX.CD",{
|
config: MathJax.Hub.CombineConfig("TeX.CD",{
|
||||||
colspace: "5pt",
|
colspace: "5pt",
|
||||||
rowspace: "5pt",
|
rowspace: "5pt",
|
||||||
harrowsize: "2.25em",
|
harrowsize: "2.75em",
|
||||||
varrowsize: "1.75em",
|
varrowsize: "1.75em",
|
||||||
hideHorizontalLabels: false
|
hideHorizontalLabels: false
|
||||||
})
|
})
|
||||||
|
@ -66,7 +66,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
},
|
},
|
||||||
|
|
||||||
CD_arrow: function (name) {
|
CD_arrow: function (name) {
|
||||||
var c = this.string[this.i];
|
var c = this.string.charAt(this.i);
|
||||||
if (!c.match(/[><VA.|=]/)) {return this.Other(name)} else {this.i++}
|
if (!c.match(/[><VA.|=]/)) {return this.Other(name)} else {this.i++}
|
||||||
|
|
||||||
var top = this.stack.Top();
|
var top = this.stack.Top();
|
||||||
|
@ -80,7 +80,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
|
|
||||||
var mml;
|
var mml;
|
||||||
var hdef = {minsize: top.minw, stretchy:true},
|
var hdef = {minsize: top.minw, stretchy:true},
|
||||||
vdef = {minsize: top.minh, stretchy:true, symmetric:true};
|
vdef = {minsize: top.minh, stretchy:true, symmetric:true, lspace:0, rspace:0};
|
||||||
|
|
||||||
if (c === ".") {}
|
if (c === ".") {}
|
||||||
else if (c === "|") {mml = this.mmlToken(MML.mo("\u2225").With(vdef))}
|
else if (c === "|") {mml = this.mmlToken(MML.mo("\u2225").With(vdef))}
|
||||||
|
@ -130,6 +130,14 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
this.CD_cell(name);
|
this.CD_cell(name);
|
||||||
},
|
},
|
||||||
CD_cell: function (name) {
|
CD_cell: function (name) {
|
||||||
|
var top = this.stack.Top();
|
||||||
|
if ((top.table||[]).length % 2 === 0 && (top.row||[]).length === 0) {
|
||||||
|
//
|
||||||
|
// Add a strut to the first cell in even rows to get
|
||||||
|
// better spacing of arrow rows.
|
||||||
|
//
|
||||||
|
this.Push(MML.mpadded().With({height:"8.5pt",depth:"2pt"}));
|
||||||
|
}
|
||||||
this.Push(STACKITEM.cell().With({isEntry:true, name:name}));
|
this.Push(STACKITEM.cell().With({isEntry:true, name:name}));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@ MathJax.Extension["TeX/AMSmath"] = {
|
||||||
|
|
||||||
number: 0, // current equation number
|
number: 0, // current equation number
|
||||||
startNumber: 0, // current starting equation number (for when equation is restarted)
|
startNumber: 0, // current starting equation number (for when equation is restarted)
|
||||||
|
IDs: {}, // IDs used in previous equations
|
||||||
|
eqIDs: {}, // IDs used in this equation
|
||||||
labels: {}, // the set of labels
|
labels: {}, // the set of labels
|
||||||
eqlabels: {}, // labels in the current equation
|
eqlabels: {}, // labels in the current equation
|
||||||
refs: [] // array of jax with unresolved references
|
refs: [] // array of jax with unresolved references
|
||||||
|
@ -187,7 +189,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
global.label = label;
|
global.label = label;
|
||||||
if (AMS.labels[label] || AMS.eqlabels[label])
|
if (AMS.labels[label] || AMS.eqlabels[label])
|
||||||
{TEX.Error(["MultipleLabel","Label '%1' multiply defined",label])}
|
{TEX.Error(["MultipleLabel","Label '%1' multiply defined",label])}
|
||||||
AMS.eqlabels[label] = "???"; // will be replaced by tag value later
|
AMS.eqlabels[label] = {tag:"???", id:""}; // will be replaced by tag value later
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -197,11 +199,10 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
HandleRef: function (name,eqref) {
|
HandleRef: function (name,eqref) {
|
||||||
var label = this.GetArgument(name);
|
var label = this.GetArgument(name);
|
||||||
var ref = AMS.labels[label] || AMS.eqlabels[label];
|
var ref = AMS.labels[label] || AMS.eqlabels[label];
|
||||||
if (!ref) {ref = "??"; AMS.badref = !AMS.refUpdate}
|
if (!ref) {ref = {tag:"???",id:""}; AMS.badref = !AMS.refUpdate}
|
||||||
var tag = ref; if (eqref) {tag = CONFIG.formatTag(tag)}
|
var tag = ref.tag; if (eqref) {tag = CONFIG.formatTag(tag)}
|
||||||
if (CONFIG.useLabelIds) {ref = label}
|
|
||||||
this.Push(MML.mrow.apply(MML,this.InternalMath(tag)).With({
|
this.Push(MML.mrow.apply(MML,this.InternalMath(tag)).With({
|
||||||
href:CONFIG.formatURL(CONFIG.formatID(ref)), "class":"MathJax_ref"
|
href:CONFIG.formatURL(ref.id), "class":"MathJax_ref"
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -209,7 +210,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
* Handle \DeclareMathOperator
|
* Handle \DeclareMathOperator
|
||||||
*/
|
*/
|
||||||
HandleDeclareOp: function (name) {
|
HandleDeclareOp: function (name) {
|
||||||
var limits = (this.GetStar() ? "\\limits" : "");
|
var limits = (this.GetStar() ? "" : "\\nolimits");
|
||||||
var cs = this.trimSpaces(this.GetArgument(name));
|
var cs = this.trimSpaces(this.GetArgument(name));
|
||||||
if (cs.charAt(0) == "\\") {cs = cs.substr(1)}
|
if (cs.charAt(0) == "\\") {cs = cs.substr(1)}
|
||||||
var op = this.GetArgument(name);
|
var op = this.GetArgument(name);
|
||||||
|
@ -218,7 +219,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
},
|
},
|
||||||
|
|
||||||
HandleOperatorName: function (name) {
|
HandleOperatorName: function (name) {
|
||||||
var limits = (this.GetStar() ? "\\limits" : "\\nolimits");
|
var limits = (this.GetStar() ? "" : "\\nolimits");
|
||||||
var op = this.trimSpaces(this.GetArgument(name));
|
var op = this.trimSpaces(this.GetArgument(name));
|
||||||
op = op.replace(/\*/g,'\\text{*}').replace(/-/g,'\\text{-}');
|
op = op.replace(/\*/g,'\\text{*}').replace(/-/g,'\\text{-}');
|
||||||
this.string = '\\mathop{\\rm '+op+'}'+limits+" "+this.string.slice(this.i);
|
this.string = '\\mathop{\\rm '+op+'}'+limits+" "+this.string.slice(this.i);
|
||||||
|
@ -423,7 +424,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
if (!global.notag) {
|
if (!global.notag) {
|
||||||
AMS.number++; global.tagID = CONFIG.formatNumber(AMS.number.toString());
|
AMS.number++; global.tagID = CONFIG.formatNumber(AMS.number.toString());
|
||||||
var mml = TEX.Parse("\\text{"+CONFIG.formatTag(global.tagID)+"}",{}).mml();
|
var mml = TEX.Parse("\\text{"+CONFIG.formatTag(global.tagID)+"}",{}).mml();
|
||||||
global.tag = MML.mtd(mml.With({id:CONFIG.formatID(global.tagID)}));
|
global.tag = MML.mtd(mml).With({id:CONFIG.formatID(global.tagID)});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -433,11 +434,40 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
getTag: function () {
|
getTag: function () {
|
||||||
var global = this.global, tag = global.tag; global.tagged = true;
|
var global = this.global, tag = global.tag; global.tagged = true;
|
||||||
if (global.label) {
|
if (global.label) {
|
||||||
AMS.eqlabels[global.label] = global.tagID;
|
|
||||||
if (CONFIG.useLabelIds) {tag.id = CONFIG.formatID(global.label)}
|
if (CONFIG.useLabelIds) {tag.id = CONFIG.formatID(global.label)}
|
||||||
|
AMS.eqlabels[global.label] = {tag:global.tagID, id:tag.id};
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// Check for repeated ID's (either in the document or as
|
||||||
|
// a previous tag) and find a unique related one. (#240)
|
||||||
|
//
|
||||||
|
if (document.getElementById(tag.id) || AMS.IDs[tag.id] || AMS.eqIDs[tag.id]) {
|
||||||
|
var i = 0, ID;
|
||||||
|
do {i++; ID = tag.id+"_"+i}
|
||||||
|
while (document.getElementById(ID) || AMS.IDs[ID] || AMS.eqIDs[ID]);
|
||||||
|
tag.id = ID; if (global.label) {AMS.eqlabels[global.label].id = ID}
|
||||||
|
}
|
||||||
|
AMS.eqIDs[tag.id] = 1;
|
||||||
delete global.tag; delete global.tagID; delete global.label;
|
delete global.tag; delete global.tagID; delete global.label;
|
||||||
return tag;
|
return tag;
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the initial <mo> to have form="infix" and lspace="0",
|
||||||
|
* skipping any initial space or empty braces (TeXAtom with child
|
||||||
|
* being an empty inferred row).
|
||||||
|
*/
|
||||||
|
fixInitialMO: function (data) {
|
||||||
|
for (var i = 0, m = data.length; i < m; i++) {
|
||||||
|
if (data[i] && (data[i].type !== "mspace" &&
|
||||||
|
(data[i].type !== "texatom" || (data[i].data[0] && data[i].data[0].data.length)))) {
|
||||||
|
if (data[i].isEmbellished()) {
|
||||||
|
var core = data[i].CoreMO();
|
||||||
|
core.form = MML.FORM.INFIX; core.lspace = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -453,6 +483,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
stack.global.tagged = !numbered && !stack.global.forcetag; // prevent automatic tagging in starred environments
|
stack.global.tagged = !numbered && !stack.global.forcetag; // prevent automatic tagging in starred environments
|
||||||
},
|
},
|
||||||
EndEntry: function () {
|
EndEntry: function () {
|
||||||
|
if (this.table.length) {this.fixInitialMO(this.data)}
|
||||||
var mtd = MML.mtd.apply(MML,this.data);
|
var mtd = MML.mtd.apply(MML,this.data);
|
||||||
if (this.data.shove) {mtd.columnalign = this.data.shove}
|
if (this.data.shove) {mtd.columnalign = this.data.shove}
|
||||||
this.row.push(mtd);
|
this.row.push(mtd);
|
||||||
|
@ -499,6 +530,11 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
stack.global.notags = (taggable ? null : name);
|
stack.global.notags = (taggable ? null : name);
|
||||||
stack.global.tagged = !numbered && !stack.global.forcetag; // prevent automatic tagging in starred environments
|
stack.global.tagged = !numbered && !stack.global.forcetag; // prevent automatic tagging in starred environments
|
||||||
},
|
},
|
||||||
|
EndEntry: function () {
|
||||||
|
if (this.row.length) {this.fixInitialMO(this.data)}
|
||||||
|
this.row.push(MML.mtd.apply(MML,this.data));
|
||||||
|
this.data = [];
|
||||||
|
},
|
||||||
EndRow: function () {
|
EndRow: function () {
|
||||||
var mtr = MML.mtr;
|
var mtr = MML.mtr;
|
||||||
if (!this.global.tag && this.numbered) {this.autoTag()}
|
if (!this.global.tag && this.numbered) {this.autoTag()}
|
||||||
|
@ -562,12 +598,13 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
TEX.prefilterHooks.Add(function (data) {
|
TEX.prefilterHooks.Add(function (data) {
|
||||||
AMS.display = data.display;
|
AMS.display = data.display;
|
||||||
AMS.number = AMS.startNumber; // reset equation numbers (in case the equation restarted)
|
AMS.number = AMS.startNumber; // reset equation numbers (in case the equation restarted)
|
||||||
AMS.eqlabels = {}; AMS.badref = false;
|
AMS.eqlabels = AMS.eqIDs = {}; AMS.badref = false;
|
||||||
if (AMS.refUpdate) {AMS.number = data.script.MathJax.startNumber}
|
if (AMS.refUpdate) {AMS.number = data.script.MathJax.startNumber}
|
||||||
});
|
});
|
||||||
TEX.postfilterHooks.Add(function (data) {
|
TEX.postfilterHooks.Add(function (data) {
|
||||||
data.script.MathJax.startNumber = AMS.startNumber;
|
data.script.MathJax.startNumber = AMS.startNumber;
|
||||||
AMS.startNumber = AMS.number; // equation numbers for next equation
|
AMS.startNumber = AMS.number; // equation numbers for next equation
|
||||||
|
MathJax.Hub.Insert(AMS.IDs,AMS.eqIDs); // save IDs from this equation
|
||||||
MathJax.Hub.Insert(AMS.labels,AMS.eqlabels); // save labels from this equation
|
MathJax.Hub.Insert(AMS.labels,AMS.eqlabels); // save labels from this equation
|
||||||
if (AMS.badref && !data.math.texError) {AMS.refs.push(data.script)} // reprocess later
|
if (AMS.badref && !data.math.texError) {AMS.refs.push(data.script)} // reprocess later
|
||||||
});
|
});
|
||||||
|
@ -595,7 +632,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
//
|
//
|
||||||
TEX.resetEquationNumbers = function (n,keepLabels) {
|
TEX.resetEquationNumbers = function (n,keepLabels) {
|
||||||
AMS.startNumber = (n || 0);
|
AMS.startNumber = (n || 0);
|
||||||
if (!keepLabels) {AMS.labels = {}}
|
if (!keepLabels) {AMS.labels = AMS.IDs = {}}
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MathJax.Extension["TeX/bbox"] = {
|
MathJax.Extension["TeX/bbox"] = {
|
||||||
version: "2.3"
|
version: "2.3.1"
|
||||||
};
|
};
|
||||||
|
|
||||||
MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
|
@ -61,7 +61,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||||
var bbox = this.GetBrackets(name,""),
|
var bbox = this.GetBrackets(name,""),
|
||||||
math = this.ParseArg(name);
|
math = this.ParseArg(name);
|
||||||
var parts = bbox.split(/,/), def, background, style;
|
var parts = bbox.split(/,/), def, background, style;
|
||||||
for (var i in parts) {
|
for (var i = 0, m = parts.length; i < m; i++) {
|
||||||
var part = parts[i].replace(/^\s+/,'').replace(/\s+$/,'');
|
var part = parts[i].replace(/^\s+/,'').replace(/\s+$/,'');
|
||||||
var match = part.match(/^(\.\d+|\d+(\.\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);
|
var match = part.match(/^(\.\d+|\d+(\.\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);
|
||||||
if (match) {
|
if (match) {
|
||||||
|
|
|
@ -167,7 +167,7 @@ MathJax.Extension.mml2jax = {
|
||||||
html = "<"+node.nodeName.toLowerCase();
|
html = "<"+node.nodeName.toLowerCase();
|
||||||
for (i = 0, m = node.attributes.length; i < m; i++) {
|
for (i = 0, m = node.attributes.length; i < m; i++) {
|
||||||
var attribute = node.attributes[i];
|
var attribute = node.attributes[i];
|
||||||
if (attribute.specified) {
|
if (attribute.specified && attribute.nodeName.substr(0,10) !== "_moz-math-") {
|
||||||
// Opera 11.5 beta turns xmlns into xmlns:xmlns, so put it back (*** check after 11.5 is out ***)
|
// Opera 11.5 beta turns xmlns into xmlns:xmlns, so put it back (*** check after 11.5 is out ***)
|
||||||
html += " "+attribute.nodeName.toLowerCase().replace(/xmlns:xmlns/,"xmlns")+"=";
|
html += " "+attribute.nodeName.toLowerCase().replace(/xmlns:xmlns/,"xmlns")+"=";
|
||||||
var value = attribute.nodeValue; // IE < 8 doesn't properly set style by setAttributes
|
var value = attribute.nodeValue; // IE < 8 doesn't properly set style by setAttributes
|
||||||
|
@ -250,10 +250,12 @@ MathJax.Extension.mml2jax = {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
// We register the preprocessors with the following priorities:
|
// We register the preprocessors with the following priorities:
|
||||||
// - mml2jax.js: 5
|
// - mml2jax.js: 5
|
||||||
// - jsMath2jax.js: 8
|
// - jsMath2jax.js: 8
|
||||||
// - asciimath2jax.js, tex2jax.js: 10 (default)
|
// - asciimath2jax.js, tex2jax.js: 10 (default)
|
||||||
// See issues 18 and 484 and the other *2jax.js files.
|
// See issues 18 and 484 and the other *2jax.js files.
|
||||||
|
//
|
||||||
MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.mml2jax],5);
|
MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.mml2jax],5);
|
||||||
MathJax.Ajax.loadComplete("[MathJax]/extensions/mml2jax.js");
|
MathJax.Ajax.loadComplete("[MathJax]/extensions/mml2jax.js");
|
||||||
|
|
|
@ -38,10 +38,10 @@ MathJax.Hub.Register.LoadHook("[MathJax]/jax/element/mml/jax.js",function () {
|
||||||
if (space == null) {space = ""}
|
if (space == null) {space = ""}
|
||||||
var tag = this.type, attr = this.toMathMLattributes();
|
var tag = this.type, attr = this.toMathMLattributes();
|
||||||
if (tag === "mspace") {return space + "<"+tag+attr+" />"}
|
if (tag === "mspace") {return space + "<"+tag+attr+" />"}
|
||||||
var data = []; var SPACE = (this.isToken ? "" : space+(inferred ? "" : " "));
|
var data = [], SPACE = (this.isToken ? "" : space+(inferred ? "" : " "));
|
||||||
for (var i = 0, m = this.data.length; i < m; i++) {
|
for (var i = 0, m = this.data.length; i < m; i++) {
|
||||||
if (this.data[i]) {data.push(this.data[i].toMathML(SPACE))}
|
if (this.data[i]) {data.push(this.data[i].toMathML(SPACE))}
|
||||||
else if (!this.isToken) {data.push(SPACE+"<mrow />")}
|
else if (!this.isToken && !this.isChars) {data.push(SPACE+"<mrow />")}
|
||||||
}
|
}
|
||||||
if (this.isToken) {return space + "<"+tag+attr+">"+data.join("")+"</"+tag+">"}
|
if (this.isToken) {return space + "<"+tag+attr+">"+data.join("")+"</"+tag+">"}
|
||||||
if (inferred) {return data.join("\n")}
|
if (inferred) {return data.join("\n")}
|
||||||
|
@ -59,7 +59,7 @@ MathJax.Hub.Register.LoadHook("[MathJax]/jax/element/mml/jax.js",function () {
|
||||||
if (!this.attrNames) {
|
if (!this.attrNames) {
|
||||||
if (this.type === "mstyle") {defaults = MML.math.prototype.defaults}
|
if (this.type === "mstyle") {defaults = MML.math.prototype.defaults}
|
||||||
for (var id in defaults) {if (!skip[id] && defaults.hasOwnProperty(id)) {
|
for (var id in defaults) {if (!skip[id] && defaults.hasOwnProperty(id)) {
|
||||||
var force = (id === "open" || id === "close");
|
var force = (id === "open" || id === "close" || id === "form");
|
||||||
if (this[id] != null && (force || this[id] !== defaults[id])) {
|
if (this[id] != null && (force || this[id] !== defaults[id])) {
|
||||||
var value = this[id]; delete this[id];
|
var value = this[id]; delete this[id];
|
||||||
if (force || this.Get(id) !== value)
|
if (force || this.Get(id) !== value)
|
||||||
|
|
|
@ -135,6 +135,7 @@ MathJax.ElementJax.mml.Augment({
|
||||||
UPDIAGONALARROW: "updiagonalarrow",
|
UPDIAGONALARROW: "updiagonalarrow",
|
||||||
VERTICALSTRIKE: "verticalstrike",
|
VERTICALSTRIKE: "verticalstrike",
|
||||||
HORIZONTALSTRIKE: "horizontalstrike",
|
HORIZONTALSTRIKE: "horizontalstrike",
|
||||||
|
PHASORANGLE: "phasorangle",
|
||||||
MADRUWB: "madruwb"
|
MADRUWB: "madruwb"
|
||||||
},
|
},
|
||||||
ALIGN: {
|
ALIGN: {
|
||||||
|
@ -274,7 +275,7 @@ MathJax.ElementJax.mml.Augment({
|
||||||
SetData: function (i,item) {
|
SetData: function (i,item) {
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
if (!(item instanceof MML.mbase))
|
if (!(item instanceof MML.mbase))
|
||||||
{item = (this.isToken ? MML.chars(item) : MML.mtext(item))}
|
{item = (this.isToken || this.isChars ? MML.chars(item) : MML.mtext(item))}
|
||||||
item.parent = this;
|
item.parent = this;
|
||||||
item.setInherit(this.inheritFromMe ? this : this.inherit);
|
item.setInherit(this.inheritFromMe ? this : this.inherit);
|
||||||
}
|
}
|
||||||
|
@ -517,7 +518,7 @@ MathJax.ElementJax.mml.Augment({
|
||||||
lspace: MML.LENGTH.THICKMATHSPACE,
|
lspace: MML.LENGTH.THICKMATHSPACE,
|
||||||
rspace: MML.LENGTH.THICKMATHSPACE,
|
rspace: MML.LENGTH.THICKMATHSPACE,
|
||||||
stretchy: false,
|
stretchy: false,
|
||||||
symmetric: true,
|
symmetric: false,
|
||||||
maxsize: MML.SIZE.INFINITY,
|
maxsize: MML.SIZE.INFINITY,
|
||||||
minsize: '0em', //'1em',
|
minsize: '0em', //'1em',
|
||||||
largeop: false,
|
largeop: false,
|
||||||
|
@ -600,8 +601,12 @@ MathJax.ElementJax.mml.Augment({
|
||||||
isEmbellished: function () {return true},
|
isEmbellished: function () {return true},
|
||||||
hasNewline: function () {return (this.Get("linebreak") === MML.LINEBREAK.NEWLINE)},
|
hasNewline: function () {return (this.Get("linebreak") === MML.LINEBREAK.NEWLINE)},
|
||||||
setTeXclass: function (prev) {
|
setTeXclass: function (prev) {
|
||||||
this.getValues("lspace","rspace"); // sets useMMLspacing
|
var values = this.getValues("form","lspace","rspace","fence"); // sets useMMLspacing
|
||||||
if (this.useMMLspacing) {this.texClass = MML.TEXCLASS.NONE; return this}
|
if (this.useMMLspacing) {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");
|
this.texClass = this.Get("texClass");
|
||||||
if (this.data.join("") === "\u2061") {
|
if (this.data.join("") === "\u2061") {
|
||||||
// force previous node to be texClass OP, and skip this node
|
// force previous node to be texClass OP, and skip this node
|
||||||
|
@ -746,10 +751,27 @@ MathJax.ElementJax.mml.Augment({
|
||||||
return this.SUPER(arguments).toString.call(this);
|
return this.SUPER(arguments).toString.call(this);
|
||||||
},
|
},
|
||||||
setTeXclass: function (prev) {
|
setTeXclass: function (prev) {
|
||||||
for (var i = 0, m = this.data.length; i < m; i++)
|
var i, m = this.data.length;
|
||||||
|
if (this.open || this.close) {
|
||||||
|
//
|
||||||
|
// <mrow> came from \left...\right
|
||||||
|
// so treat as subexpression (tex class INNER)
|
||||||
|
//
|
||||||
|
this.getPrevClass(prev);
|
||||||
|
for (i = 0; i < m; i++)
|
||||||
|
{if (this.data[i]) {prev = this.data[i].setTeXclass(prev)}}
|
||||||
|
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[i]) {prev = this.data[i].setTeXclass(prev)}}
|
||||||
if (this.data[0]) {this.updateTeXclass(this.data[0])}
|
if (this.data[0]) {this.updateTeXclass(this.data[0])}
|
||||||
return prev;
|
return prev;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
getAnnotation: function (name) {
|
getAnnotation: function (name) {
|
||||||
if (this.data.length != 1) return null;
|
if (this.data.length != 1) return null;
|
||||||
|
@ -907,7 +929,11 @@ MathJax.ElementJax.mml.Augment({
|
||||||
values.separators = values.separators.replace(/[ \t\n\r]/g,"");
|
values.separators = values.separators.replace(/[ \t\n\r]/g,"");
|
||||||
// create a fake node for the open item
|
// create a fake node for the open item
|
||||||
if (values.open !== "") {
|
if (values.open !== "") {
|
||||||
this.SetData("open",MML.mo(values.open).With({stretchy:true, texClass:MML.TEXCLASS.OPEN}));
|
this.SetData("open",MML.mo(values.open).With({
|
||||||
|
fence:true, form:MML.FORM.PREFIX, texClass:MML.TEXCLASS.OPEN
|
||||||
|
}));
|
||||||
|
// Clear flag for using MML spacing even though form is specified
|
||||||
|
this.data.open.useMMLspacing &= ~this.data.open.SPACE_ATTR.form;
|
||||||
prev = this.data.open.setTeXclass(prev);
|
prev = this.data.open.setTeXclass(prev);
|
||||||
}
|
}
|
||||||
// get the separators
|
// get the separators
|
||||||
|
@ -921,7 +947,7 @@ MathJax.ElementJax.mml.Augment({
|
||||||
for (var i = 1, m = this.data.length; i < m; i++) {
|
for (var i = 1, m = this.data.length; i < m; i++) {
|
||||||
if (this.data[i]) {
|
if (this.data[i]) {
|
||||||
if (values.separators !== "") {
|
if (values.separators !== "") {
|
||||||
this.SetData("sep"+i,MML.mo(values.separators.charAt(i-1)));
|
this.SetData("sep"+i,MML.mo(values.separators.charAt(i-1)).With({separator:true}));
|
||||||
prev = this.data["sep"+i].setTeXclass(prev);
|
prev = this.data["sep"+i].setTeXclass(prev);
|
||||||
}
|
}
|
||||||
prev = this.data[i].setTeXclass(prev);
|
prev = this.data[i].setTeXclass(prev);
|
||||||
|
@ -929,11 +955,16 @@ MathJax.ElementJax.mml.Augment({
|
||||||
}
|
}
|
||||||
// create fake node for the close item
|
// create fake node for the close item
|
||||||
if (values.close !== "") {
|
if (values.close !== "") {
|
||||||
this.SetData("close",MML.mo(values.close).With({stretchy:true, texClass:MML.TEXCLASS.CLOSE}));
|
this.SetData("close",MML.mo(values.close).With({
|
||||||
|
fence:true, form:MML.FORM.POSTFIX, texClass:MML.TEXCLASS.CLOSE
|
||||||
|
}));
|
||||||
|
// Clear flag for using MML spacing even though form is specified
|
||||||
|
this.data.close.useMMLspacing &= ~this.data.close.SPACE_ATTR.form;
|
||||||
prev = this.data.close.setTeXclass(prev);
|
prev = this.data.close.setTeXclass(prev);
|
||||||
}
|
}
|
||||||
// get the data from the open item
|
// get the data from the open item
|
||||||
this.updateTeXclass(this.data.open);
|
this.updateTeXclass(this.data.open);
|
||||||
|
this.texClass = MML.TEXCLASS.INNER;
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1216,7 +1247,7 @@ MathJax.ElementJax.mml.Augment({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
MML.annotation = MML.mbase.Subclass({
|
MML.annotation = MML.mbase.Subclass({
|
||||||
type: "annotation", isToken: true,
|
type: "annotation", isChars: true,
|
||||||
linebreakContainer: true,
|
linebreakContainer: true,
|
||||||
defaults: {
|
defaults: {
|
||||||
definitionURL: null,
|
definitionURL: null,
|
||||||
|
@ -1692,8 +1723,13 @@ MathJax.ElementJax.mml.Augment({
|
||||||
// These are not in the W3C table, but FF works this way,
|
// These are not in the W3C table, but FF works this way,
|
||||||
// and it makes sense, so add it here
|
// and it makes sense, so add it here
|
||||||
//
|
//
|
||||||
MML.mo.prototype.OPTABLE.infix["^"] = MO.WIDEREL;
|
var OPTABLE = MML.mo.prototype.OPTABLE;
|
||||||
MML.mo.prototype.OPTABLE.infix["_"] = MO.WIDEREL;
|
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);
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ MathJax.InputJax.AsciiMath = MathJax.InputJax({
|
||||||
extensionDir: MathJax.InputJax.extensionDir + "/AsciiMath",
|
extensionDir: MathJax.InputJax.extensionDir + "/AsciiMath",
|
||||||
|
|
||||||
config: {
|
config: {
|
||||||
|
fixphi: true, // switch phi and varphi unicode values
|
||||||
|
useMathMLspacing: true, // use MathML spacing rather than TeX spacing?
|
||||||
displaystyle: true, // put limits above and below operators
|
displaystyle: true, // put limits above and below operators
|
||||||
decimalsign: "." // can change to "," but watch out for "(1,2)"
|
decimalsign: "." // can change to "," but watch out for "(1,2)"
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
MML.mbase.Augment({
|
MML.mbase.Augment({
|
||||||
firstChild: null,
|
firstChild: null,
|
||||||
lastChild: null,
|
lastChild: null,
|
||||||
nodeValue: "",
|
nodeValue: null,
|
||||||
nextSibling: null,
|
nextSibling: null,
|
||||||
Init: function () {
|
Init: function () {
|
||||||
var obj = MBASEINIT.apply(this,arguments) || this;
|
var obj = MBASEINIT.apply(this,arguments) || this;
|
||||||
|
@ -117,7 +117,6 @@
|
||||||
if (!this.firstChild) {this.firstChild = node}
|
if (!this.firstChild) {this.firstChild = node}
|
||||||
this.Append(node);
|
this.Append(node);
|
||||||
this.lastChild = node;
|
this.lastChild = node;
|
||||||
this.nodeValue += node.nodeValue;
|
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
|
@ -132,9 +131,6 @@
|
||||||
else {this.lastChild = this.childNodes[this.childNodes.length-1]}
|
else {this.lastChild = this.childNodes[this.childNodes.length-1]}
|
||||||
}
|
}
|
||||||
if (i) {this.childNodes[i-1].nextSibling = node.nextSibling}
|
if (i) {this.childNodes[i-1].nextSibling = node.nextSibling}
|
||||||
this.nodeValue = "";
|
|
||||||
for (i = 0, m = this.childNodes.length; i < m; i++)
|
|
||||||
{this.nodeValue += this.childNodes[i].nodeValue}
|
|
||||||
node.nextSibling = node.parent = null;
|
node.nextSibling = node.parent = null;
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
|
@ -145,9 +141,6 @@
|
||||||
if (i) {this.childNodes[i-1].nextSibling = node} else {this.firstChild = node}
|
if (i) {this.childNodes[i-1].nextSibling = node} else {this.firstChild = node}
|
||||||
if (i >= m-1) {this.lastChild = node}
|
if (i >= m-1) {this.lastChild = node}
|
||||||
this.SetData(i,node); node.nextSibling = old.nextSibling;
|
this.SetData(i,node); node.nextSibling = old.nextSibling;
|
||||||
this.nodeValue = "";
|
|
||||||
for (i = 0, m = this.childNodes.length; i < m; i++)
|
|
||||||
{this.nodeValue += this.childNodes[i].nodeValue}
|
|
||||||
old.nextSibling = old.parent = null;
|
old.nextSibling = old.parent = null;
|
||||||
return old;
|
return old;
|
||||||
},
|
},
|
||||||
|
@ -167,7 +160,11 @@
|
||||||
//
|
//
|
||||||
var document = {
|
var document = {
|
||||||
getElementById: true,
|
getElementById: true,
|
||||||
createElementNS: function (ns,type) {return MML[type]()},
|
createElementNS: function (ns,type) {
|
||||||
|
var node = MML[type]();
|
||||||
|
if (type === "mo" && ASCIIMATH.config.useMathMLspacing) {node.useMMLspacing = 0x80}
|
||||||
|
return node;
|
||||||
|
},
|
||||||
createTextNode: function (text) {return MML.chars(text).With({nodeValue:text})},
|
createTextNode: function (text) {return MML.chars(text).With({nodeValue:text})},
|
||||||
createDocumentFragment: function () {return DOCFRAG()}
|
createDocumentFragment: function () {return DOCFRAG()}
|
||||||
};
|
};
|
||||||
|
@ -1199,6 +1196,11 @@ ASCIIMATH.Augment({
|
||||||
// Old versions use the "decimal" option, so take it into account if it
|
// Old versions use the "decimal" option, so take it into account if it
|
||||||
// is defined by the user. See issue 384.
|
// is defined by the user. See issue 384.
|
||||||
decimalsign = (ASCIIMATH.config.decimal || ASCIIMATH.config.decimalsign);
|
decimalsign = (ASCIIMATH.config.decimal || ASCIIMATH.config.decimalsign);
|
||||||
|
// fix pi and var phi, if requested
|
||||||
|
for (var i = 0, m = AMsymbols.length; i < m; i++) {
|
||||||
|
if (AMsymbols[i].input === "phi") {AMsymbols[i].output = "\u03D5"}
|
||||||
|
if (AMsymbols[i].input === "varphi") {AMsymbols[i].output = "\u03C6"; i = m}
|
||||||
|
}
|
||||||
INITASCIIMATH();
|
INITASCIIMATH();
|
||||||
AMinitSymbols();
|
AMinitSymbols();
|
||||||
},
|
},
|
||||||
|
|
|
@ -157,7 +157,7 @@
|
||||||
var child = node.childNodes[i];
|
var child = node.childNodes[i];
|
||||||
if (child.nodeName === "#comment") continue;
|
if (child.nodeName === "#comment") continue;
|
||||||
if (child.nodeName === "#text") {
|
if (child.nodeName === "#text") {
|
||||||
if (mml.isToken && !mml.mmlSelfClosing) {
|
if ((mml.isToken || mml.isChars) && !mml.mmlSelfClosing) {
|
||||||
var text = child.nodeValue.replace(/&([a-z][a-z0-9]*);/ig,this.replaceEntity);
|
var text = child.nodeValue.replace(/&([a-z][a-z0-9]*);/ig,this.replaceEntity);
|
||||||
mml.Append(MML.chars(this.trimSpace(text)));
|
mml.Append(MML.chars(this.trimSpace(text)));
|
||||||
} else if (child.nodeValue.match(/\S/)) {
|
} else if (child.nodeValue.match(/\S/)) {
|
||||||
|
|
|
@ -424,6 +424,7 @@
|
||||||
'%': 'Comment',
|
'%': 'Comment',
|
||||||
'&': 'Entry',
|
'&': 'Entry',
|
||||||
'#': 'Hash',
|
'#': 'Hash',
|
||||||
|
'\u00A0': 'Space',
|
||||||
'\u2019': 'Prime'
|
'\u2019': 'Prime'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -935,6 +936,8 @@
|
||||||
textrm: ['Macro','\\mathord{\\rm\\text{#1}}',1],
|
textrm: ['Macro','\\mathord{\\rm\\text{#1}}',1],
|
||||||
textit: ['Macro','\\mathord{\\it{\\text{#1}}}',1],
|
textit: ['Macro','\\mathord{\\it{\\text{#1}}}',1],
|
||||||
textbf: ['Macro','\\mathord{\\bf{\\text{#1}}}',1],
|
textbf: ['Macro','\\mathord{\\bf{\\text{#1}}}',1],
|
||||||
|
textsf: ['Macro','\\mathord{\\sf{\\text{#1}}}',1],
|
||||||
|
texttt: ['Macro','\\mathord{\\tt{\\text{#1}}}',1],
|
||||||
pmb: ['Macro','\\rlap{#1}\\kern1px{#1}',1],
|
pmb: ['Macro','\\rlap{#1}\\kern1px{#1}',1],
|
||||||
TeX: ['Macro','T\\kern-.14em\\lower.5ex{E}\\kern-.115em X'],
|
TeX: ['Macro','T\\kern-.14em\\lower.5ex{E}\\kern-.115em X'],
|
||||||
LaTeX: ['Macro','L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX'],
|
LaTeX: ['Macro','L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX'],
|
||||||
|
@ -944,6 +947,7 @@
|
||||||
not: 'Not',
|
not: 'Not',
|
||||||
dots: 'Dots',
|
dots: 'Dots',
|
||||||
space: 'Tilde',
|
space: 'Tilde',
|
||||||
|
'\u00A0': 'Tilde',
|
||||||
|
|
||||||
|
|
||||||
// LaTeX
|
// LaTeX
|
||||||
|
@ -1531,7 +1535,7 @@
|
||||||
MakeBig: function (name,mclass,size) {
|
MakeBig: function (name,mclass,size) {
|
||||||
size *= TEXDEF.p_height;
|
size *= TEXDEF.p_height;
|
||||||
size = String(size).replace(/(\.\d\d\d).+/,'$1')+"em";
|
size = String(size).replace(/(\.\d\d\d).+/,'$1')+"em";
|
||||||
var delim = this.GetDelimiter(name);
|
var delim = this.GetDelimiter(name,true);
|
||||||
this.Push(MML.TeXAtom(MML.mo(delim).With({
|
this.Push(MML.TeXAtom(MML.mo(delim).With({
|
||||||
minsize: size, maxsize: size,
|
minsize: size, maxsize: size,
|
||||||
fence: true, stretchy: true, symmetric: true
|
fence: true, stretchy: true, symmetric: true
|
||||||
|
@ -1667,7 +1671,7 @@
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (n) {this.Push(MML.mspace().With({depth:n}))}
|
if (n) {this.Push(MML.mspace().With({depth:n}))}
|
||||||
this.Push(MML.mo().With({linebreak:MML.LINEBREAK.NEWLINE}));
|
this.Push(MML.mspace().With({linebreak:MML.LINEBREAK.NEWLINE}));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
emPerInch: 7.2,
|
emPerInch: 7.2,
|
||||||
|
@ -1805,7 +1809,7 @@
|
||||||
* Check if the next character is a space
|
* Check if the next character is a space
|
||||||
*/
|
*/
|
||||||
nextIsSpace: function () {
|
nextIsSpace: function () {
|
||||||
return this.string.charAt(this.i).match(/[ \n\r\t]/);
|
return this.string.charAt(this.i).match(/\s/);
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1886,11 +1890,12 @@
|
||||||
/*
|
/*
|
||||||
* Get the name of a delimiter (check it in the delimiter list).
|
* Get the name of a delimiter (check it in the delimiter list).
|
||||||
*/
|
*/
|
||||||
GetDelimiter: function (name) {
|
GetDelimiter: function (name,braceOK) {
|
||||||
while (this.nextIsSpace()) {this.i++}
|
while (this.nextIsSpace()) {this.i++}
|
||||||
var c = this.string.charAt(this.i);
|
var c = this.string.charAt(this.i); this.i++;
|
||||||
if (this.i < this.string.length) {
|
if (this.i <= this.string.length) {
|
||||||
this.i++; if (c == "\\") {c += this.GetCS(name)}
|
if (c == "\\") {c += this.GetCS(name)}
|
||||||
|
else if (c === "{" && braceOK) {this.i--; c = this.GetArgument(name)}
|
||||||
if (TEXDEF.delimiter[c] != null) {return this.convertDelimiter(c)}
|
if (TEXDEF.delimiter[c] != null) {return this.convertDelimiter(c)}
|
||||||
}
|
}
|
||||||
TEX.Error(["MissingOrUnrecognizedDelim",
|
TEX.Error(["MissingOrUnrecognizedDelim",
|
||||||
|
@ -2125,8 +2130,7 @@
|
||||||
* Create an mrow that has stretchy delimiters at either end, as needed
|
* Create an mrow that has stretchy delimiters at either end, as needed
|
||||||
*/
|
*/
|
||||||
fenced: function (open,mml,close) {
|
fenced: function (open,mml,close) {
|
||||||
var mrow = MML.mrow();
|
var mrow = MML.mrow().With({open:open, close:close, texClass:MML.TEXCLASS.INNER});
|
||||||
mrow.open = open; mrow.close = close;
|
|
||||||
if (open) {mrow.Append(MML.mo(open).With({fence:true, stretchy:true, texClass:MML.TEXCLASS.OPEN}))}
|
if (open) {mrow.Append(MML.mo(open).With({fence:true, stretchy:true, texClass:MML.TEXCLASS.OPEN}))}
|
||||||
if (mml.type === "mrow") {mrow.Append.apply(mrow,mml.data)} else {mrow.Append(mml)}
|
if (mml.type === "mrow") {mrow.Append.apply(mrow,mml.data)} else {mrow.Append(mml)}
|
||||||
if (close) {mrow.Append(MML.mo(close).With({fence:true, stretchy:true, texClass:MML.TEXCLASS.CLOSE}))}
|
if (close) {mrow.Append(MML.mo(close).With({fence:true, stretchy:true, texClass:MML.TEXCLASS.CLOSE}))}
|
||||||
|
|
|
@ -183,6 +183,27 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MML.NOTATION.PHASORANGLE:
|
||||||
|
W -= 2*p; p = (H+D)/2; W += p;
|
||||||
|
if (HTMLCSS.useVML) {
|
||||||
|
if (!vml) {vml = this.HTMLvml(stack,H,D,W,t,values.mathcolor)}
|
||||||
|
this.HTMLvmlElement(vml,"shape",{
|
||||||
|
style: {width:this.HTMLpx(W), height:this.HTMLpx(H+D)},
|
||||||
|
path: "m "+this.HTMLpt(p+t/2,t/2)+
|
||||||
|
" l "+this.HTMLpt(t/2,H+D-t)+" "+this.HTMLpt(W-t/2,H+D-t)+" e",
|
||||||
|
coordsize: this.HTMLpt(W,H+D)
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (!svg) {svg = this.HTMLsvg(stack,H,D,W,t,values.mathcolor)}
|
||||||
|
this.HTMLsvgElement(svg.firstChild,"path",{
|
||||||
|
d: "M "+this.HTMLpx(p)+",1" +
|
||||||
|
"L 1,"+this.HTMLpx(H+D-t)+" L "+this.HTMLpx(W)+","+this.HTMLpx(H+D-t)
|
||||||
|
});
|
||||||
|
HTMLCSS.placeBox(svg.parentNode,0,-D,true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MML.NOTATION.MADRUWB:
|
case MML.NOTATION.MADRUWB:
|
||||||
frame.style.borderBottom = SOLID;
|
frame.style.borderBottom = SOLID;
|
||||||
frame.style.borderRight = SOLID; if (!HTMLCSS.msieBorderWidthBug) {B = R = t}
|
frame.style.borderRight = SOLID; if (!HTMLCSS.msieBorderWidthBug) {B = R = t}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
var VERSION = "2.3";
|
var VERSION = "2.3.1";
|
||||||
var MML = MathJax.ElementJax.mml,
|
var MML = MathJax.ElementJax.mml,
|
||||||
HTMLCSS = MathJax.OutputJax["HTML-CSS"];
|
HTMLCSS = MathJax.OutputJax["HTML-CSS"];
|
||||||
|
|
||||||
|
@ -34,18 +34,11 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
span = this.HTMLhandleSize(this.HTMLcreateSpan(span));
|
span = this.HTMLhandleSize(this.HTMLcreateSpan(span));
|
||||||
var values = this.getValues("lquote","rquote");
|
var values = this.getValues("lquote","rquote");
|
||||||
var text = this.data.join(""); // FIXME: handle mglyph?
|
var text = this.data.join(""); // FIXME: handle mglyph?
|
||||||
var pattern = [];
|
|
||||||
if (values.lquote.length === 1) {pattern.push(this.HTMLquoteRegExp(values.lquote))}
|
|
||||||
if (values.rquote.length === 1) {pattern.push(this.HTMLquoteRegExp(values.rquote))}
|
|
||||||
if (pattern.length) {text = text.replace(RegExp("("+pattern.join("|")+")","g"),"\\$1")}
|
|
||||||
this.HTMLhandleVariant(span,this.HTMLgetVariant(),values.lquote+text+values.rquote);
|
this.HTMLhandleVariant(span,this.HTMLgetVariant(),values.lquote+text+values.rquote);
|
||||||
this.HTMLhandleSpace(span);
|
this.HTMLhandleSpace(span);
|
||||||
this.HTMLhandleColor(span);
|
this.HTMLhandleColor(span);
|
||||||
this.HTMLhandleDir(span);
|
this.HTMLhandleDir(span);
|
||||||
return span;
|
return span;
|
||||||
},
|
|
||||||
HTMLquoteRegExp: function (string) {
|
|
||||||
return string.replace(/([.*+?|{}()\[\]\\])/g,"\\$1");
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
MML.ms.prototype.defaults.mathvariant = 'monospace';
|
MML.ms.prototype.defaults.mathvariant = 'monospace';
|
||||||
|
|
|
@ -41,16 +41,17 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
var stack = HTMLCSS.createStack(span);
|
var stack = HTMLCSS.createStack(span);
|
||||||
var scale = this.HTMLgetScale(), mu = this.HTMLgetMu(span), LABEL = -1;
|
var scale = this.HTMLgetScale(), mu = this.HTMLgetMu(span), LABEL = -1;
|
||||||
|
|
||||||
var H = [], D = [], W = [], A = [], C = [], i, j, J = -1, m, M, s, row, cell, mo, entries = [];
|
var H = [], D = [], W = [], A = [], C = [], i, j, J = -1,
|
||||||
var LHD = HTMLCSS.FONTDATA.baselineskip * scale * values.useHeight, HD,
|
m, M, s, row, cell, mo, entries = [], HD;
|
||||||
LH = HTMLCSS.FONTDATA.lineH * scale, LD = HTMLCSS.FONTDATA.lineD * scale;
|
var LH = HTMLCSS.FONTDATA.lineH * scale * values.useHeight,
|
||||||
|
LD = HTMLCSS.FONTDATA.lineD * scale * values.useHeight;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create cells and measure columns and rows
|
// Create cells and measure columns and rows
|
||||||
//
|
//
|
||||||
for (i = 0, m = this.data.length; i < m; i++) {
|
for (i = 0, m = this.data.length; i < m; i++) {
|
||||||
row = this.data[i]; s = (row.type === "mlabeledtr" ? LABEL : 0);
|
row = this.data[i]; s = (row.type === "mlabeledtr" ? LABEL : 0);
|
||||||
A[i] = []; H[i] = D[i] = 0;
|
A[i] = []; H[i] = LH; D[i] = LD;
|
||||||
for (j = s, M = row.data.length + s; j < M; j++) {
|
for (j = s, M = row.data.length + s; j < M; j++) {
|
||||||
if (W[j] == null) {
|
if (W[j] == null) {
|
||||||
if (j > J) {J = j}
|
if (j > J) {J = j}
|
||||||
|
@ -90,8 +91,6 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
if (A[i][j].bbox.w > W[j]) {W[j] = A[i][j].bbox.w}
|
if (A[i][j].bbox.w > W[j]) {W[j] = A[i][j].bbox.w}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (H[0]+D[0]) {H[0] = Math.max(H[0],LH)}
|
|
||||||
if (H[A.length-1]+D[A.length-1]) {D[A.length-1] = Math.max(D[A.length-1],LD)}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Determine spacing and alignment
|
// Determine spacing and alignment
|
||||||
|
@ -146,7 +145,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
// Determine array total height
|
// Determine array total height
|
||||||
//
|
//
|
||||||
HD = H[0] + D[A.length-1];
|
HD = H[0] + D[A.length-1];
|
||||||
for (i = 0, m = A.length-1; i < m; i++) {HD += Math.max((H[i]+D[i] ? LHD : 0),D[i]+H[i+1]+RSPACE[i])}
|
for (i = 0, m = A.length-1; i < m; i++) {HD += Math.max(0,D[i]+H[i+1]+RSPACE[i])}
|
||||||
//
|
//
|
||||||
// Determine frame and line sizes
|
// Determine frame and line sizes
|
||||||
//
|
//
|
||||||
|
@ -179,7 +178,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
Y = 0; fY = -(HD + fy) + H[0];
|
Y = 0; fY = -(HD + fy) + H[0];
|
||||||
for (i = 0, m = n-1; i < m; i++) {
|
for (i = 0, m = n-1; i < m; i++) {
|
||||||
// FIXME: Should handle values.align for final row
|
// FIXME: Should handle values.align for final row
|
||||||
var dY = Math.max((H[i]+D[i] ? LHD : 0),D[i]+H[i+1]+RSPACE[i]);
|
var dY = Math.max(0,D[i]+H[i+1]+RSPACE[i]);
|
||||||
Y += dY; fY += dY;
|
Y += dY; fY += dY;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -280,6 +279,8 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
mo = cell.CoreMO();
|
mo = cell.CoreMO();
|
||||||
var symmetric = mo.symmetric; mo.symmetric = false;
|
var symmetric = mo.symmetric; mo.symmetric = false;
|
||||||
A[i][j].bbox = cell.HTMLstretchV(C[j],H[i],D[i]).bbox; A[i][j].HH = null;
|
A[i][j].bbox = cell.HTMLstretchV(C[j],H[i],D[i]).bbox; A[i][j].HH = null;
|
||||||
|
if (A[i][j].bbox.h > H[i]) {A[i][j].bbox.H = A[i][j].bbox.h; A[i][j].bbox.h = H[i]}
|
||||||
|
if (A[i][j].bbox.d > D[i]) {A[i][j].bbox.D = A[i][j].bbox.d; A[i][j].bbox.d = D[i]}
|
||||||
mo.symmetric = symmetric;
|
mo.symmetric = symmetric;
|
||||||
}
|
}
|
||||||
align = cell.rowalign||this.data[i].rowalign||RALIGN[i];
|
align = cell.rowalign||this.data[i].rowalign||RALIGN[i];
|
||||||
|
@ -290,7 +291,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
align = (cell.columnalign||RCALIGN[i][j]||CALIGN[j]);
|
align = (cell.columnalign||RCALIGN[i][j]||CALIGN[j]);
|
||||||
HTMLCSS.alignBox(A[i][j],align,y+dy);
|
HTMLCSS.alignBox(A[i][j],align,y+dy);
|
||||||
}
|
}
|
||||||
if (i < A.length-1) {y -= Math.max((H[i]+D[i] ? LHD : 0),D[i]+H[i+1]+RSPACE[i])}
|
if (i < A.length-1) {y -= Math.max(0,D[i]+H[i+1]+RSPACE[i])}
|
||||||
}
|
}
|
||||||
y = Y;
|
y = Y;
|
||||||
}
|
}
|
||||||
|
@ -399,7 +400,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||||
//
|
//
|
||||||
y = Y;
|
y = Y;
|
||||||
for (i = 0, m = A.length-1; i < m; i++) {
|
for (i = 0, m = A.length-1; i < m; i++) {
|
||||||
dy = Math.max(LHD,D[i]+H[i+1]+RSPACE[i]);
|
dy = Math.max(0,D[i]+H[i+1]+RSPACE[i]);
|
||||||
if (RLINES[i] !== "none") {
|
if (RLINES[i] !== "none") {
|
||||||
line = HTMLCSS.createRule(stack,1.25/HTMLCSS.em,0,fW); HTMLCSS.addBox(stack,line);
|
line = HTMLCSS.createRule(stack,1.25/HTMLCSS.em,0,fW); HTMLCSS.addBox(stack,line);
|
||||||
line.bbox = {h:1.25/HTMLCSS.em, d:0, w:fW, rw:fW, lw:0};
|
line.bbox = {h:1.25/HTMLCSS.em, d:0, w:fW, rw:fW, lw:0};
|
||||||
|
|
|
@ -75,6 +75,20 @@ MathJax.OutputJax["HTML-CSS"] = MathJax.OutputJax({
|
||||||
"font-size": "90%"
|
"font-size": "90%"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// For mtextFontInherit version of \texttt{}
|
||||||
|
//
|
||||||
|
".MathJax .MJX-monospace": {
|
||||||
|
"font-family": "monospace"
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// For mtextFontInherit version of \textsf{}
|
||||||
|
//
|
||||||
|
".MathJax .MJX-sans-serif": {
|
||||||
|
"font-family": "sans-serif"
|
||||||
|
},
|
||||||
|
|
||||||
"#MathJax_Tooltip": {
|
"#MathJax_Tooltip": {
|
||||||
"background-color": "InfoBackground", color: "InfoText",
|
"background-color": "InfoBackground", color: "InfoText",
|
||||||
border: "1px solid black",
|
border: "1px solid black",
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], italic:true},
|
"italic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], italic:true},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true},
|
"bold-italic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
"bold": {fonts: [MAINBOLD,NORMALBOLD,FRAKTURBOLD,DOUBLESTRUCKBOLD,SANSSERIFBOLD,LATINBOLD,ALPHABETSBOLD,MARKSBOLD,ARROWSBOLD,OPERATORSBOLD,SYMBOLSBOLD,SHAPESBOLD,MISCBOLD,VARIANTSBOLD,SIZE1], bold:true
|
"bold": {fonts: [MAINBOLD,NORMALBOLD,FRAKTURBOLD,DOUBLESTRUCKBOLD,SANSSERIFBOLD,LATINBOLD,ALPHABETSBOLD,MARKSBOLD,ARROWSBOLD,OPERATORSBOLD,SYMBOLSBOLD,SHAPESBOLD,MISCBOLD,VARIANTSBOLD,SIZE1], bold:true
|
||||||
},
|
},
|
||||||
"italic": {fonts: [MAINITALIC,NORMALITALIC,SCRIPTITALIC,DOUBLESTRUCKITALIC,SANSSERIFITALIC,LATINITALIC,ALPHABETSITALIC,MARKSITALIC,MISCITALIC,VARIANTSITALIC,SIZE1], italic:true},
|
"italic": {fonts: [MAINITALIC,NORMALITALIC,SCRIPTITALIC,DOUBLESTRUCKITALIC,SANSSERIFITALIC,LATINITALIC,ALPHABETSITALIC,MARKSITALIC,MISCITALIC,VARIANTSITALIC,SIZE1], italic:true},
|
||||||
"bolditalic": {fonts: [MAINBOLDITALIC,NORMALBOLDITALIC,SCRIPTBOLDITALIC,DOUBLESTRUCKBOLDITALIC,SANSSERIFBOLDITALIC,LATINBOLDITALIC,ALPHABETSBOLDITALIC,MARKSBOLDITALIC,SHAPESBOLDITALIC,MISCBOLDITALIC,VARIANTSBOLDITALIC,SIZE1], bold: true, italic:true},
|
"bold-italic": {fonts: [MAINBOLDITALIC,NORMALBOLDITALIC,SCRIPTBOLDITALIC,DOUBLESTRUCKBOLDITALIC,SANSSERIFBOLDITALIC,LATINBOLDITALIC,ALPHABETSBOLDITALIC,MARKSBOLDITALIC,SHAPESBOLDITALIC,MISCBOLDITALIC,VARIANTSBOLDITALIC,SIZE1], bold: true, italic:true},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
@ -184,7 +184,8 @@
|
||||||
fonts: [SANSSERIF],
|
fonts: [SANSSERIF],
|
||||||
offsetA: 0x1D5A0,
|
offsetA: 0x1D5A0,
|
||||||
offsetN: 0x1D7E2,
|
offsetN: 0x1D7E2,
|
||||||
offsetG: 0xE17D
|
offsetG: 0xE17D,
|
||||||
|
offsetE: 0xE17D
|
||||||
},
|
},
|
||||||
"bold-sans-serif": {
|
"bold-sans-serif": {
|
||||||
fonts: [SANSSERIFBOLD], bold:true,
|
fonts: [SANSSERIFBOLD], bold:true,
|
||||||
|
@ -196,7 +197,8 @@
|
||||||
fonts: [SANSSERIFITALIC], italic: true,
|
fonts: [SANSSERIFITALIC], italic: true,
|
||||||
offsetA: 0x1D608,
|
offsetA: 0x1D608,
|
||||||
offsetN: 0xE1B4,
|
offsetN: 0xE1B4,
|
||||||
offsetG: 0xE1BF
|
offsetG: 0xE1BF,
|
||||||
|
offsetE: 0xE1BF
|
||||||
},
|
},
|
||||||
"sans-serif-bold-italic": {
|
"sans-serif-bold-italic": {
|
||||||
fonts: [SANSSERIFBOLDITALIC], bold:true, italic: true,
|
fonts: [SANSSERIFBOLDITALIC], bold:true, italic: true,
|
||||||
|
@ -223,6 +225,7 @@
|
||||||
{name: "alpha", low: 0x61, high: 0x7A, offset: "A", add: 26},
|
{name: "alpha", low: 0x61, high: 0x7A, offset: "A", add: 26},
|
||||||
{name: "Alpha", low: 0x41, high: 0x5A, offset: "A"},
|
{name: "Alpha", low: 0x41, high: 0x5A, offset: "A"},
|
||||||
{name: "number", low: 0x30, high: 0x39, offset: "N"},
|
{name: "number", low: 0x30, high: 0x39, offset: "N"},
|
||||||
|
{name: "greek-non-unicode", low: 0x03B1, high: 0x03C9, offset: "E", add: 25},
|
||||||
{name: "greek", low: 0x03B1, high: 0x03C9, offset: "G", add: 26},
|
{name: "greek", low: 0x03B1, high: 0x03C9, offset: "G", add: 26},
|
||||||
{name: "Greek", low: 0x0391, high: 0x03F6, offset: "G",
|
{name: "Greek", low: 0x0391, high: 0x03F6, offset: "G",
|
||||||
remap: {0x03F5: 52, 0x03D1: 53, 0x03F0: 54, 0x03D5: 55, 0x03F1: 56, 0x03D6: 57, 0x03F4: 17}}
|
remap: {0x03F5: 52, 0x03D1: 53, 0x03F0: 54, 0x03D5: 55, 0x03F1: 56, 0x03D6: 57, 0x03F4: 17}}
|
||||||
|
@ -241,7 +244,13 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
REMAPACCENT: {
|
REMAPACCENT: {
|
||||||
"\u2192": "\u20D7"
|
"\u007E": "\u0303",
|
||||||
|
"\u2192": "\u20D7",
|
||||||
|
"\u0060": "\u0300",
|
||||||
|
"\u005E": "\u0302",
|
||||||
|
"\u00B4": "\u0301",
|
||||||
|
"\u2032": "\u0301",
|
||||||
|
"\u2035": "\u0300"
|
||||||
},
|
},
|
||||||
|
|
||||||
REMAPACCENTUNDER: {
|
REMAPACCENTUNDER: {
|
||||||
|
|
|
@ -87,9 +87,9 @@
|
||||||
0x1D4A4: 0x2110, 0x1D4A7: 0x2112, 0x1D4A8: 0x2133, 0x1D4AD: 0x211B,
|
0x1D4A4: 0x2110, 0x1D4A7: 0x2112, 0x1D4A8: 0x2133, 0x1D4AD: 0x211B,
|
||||||
0x1D4BA: 0x212F, 0x1D4BC: 0x210A, 0x1D4C4: 0x2134}},
|
0x1D4BA: 0x212F, 0x1D4BC: 0x210A, 0x1D4C4: 0x2134}},
|
||||||
"bold-script": {fonts: [BITALIC], offsetA: 0x1D4D0, bold:true, italic:true},
|
"bold-script": {fonts: [BITALIC], offsetA: 0x1D4D0, bold:true, italic:true},
|
||||||
"sans-serif": {offsetA: 0x1D5A0, offsetN: 0x1D7E2, offsetG: 0xE17D},
|
"sans-serif": {offsetA: 0x1D5A0, offsetN: 0x1D7E2, offsetG: 0xE17D, offsetE: 0xE17D},
|
||||||
"bold-sans-serif": {offsetA: 0x1D5D4, offsetG: 0x1D756, offsetN: 0x1D7EC, bold:true},
|
"bold-sans-serif": {offsetA: 0x1D5D4, offsetG: 0x1D756, offsetN: 0x1D7EC, bold:true},
|
||||||
"sans-serif-italic": {fonts: [ITALIC,NONUNII], offsetA: 0x1D608, offsetN: 0xE1B4, offsetG: 0xE1BF, italic:true},
|
"sans-serif-italic": {fonts: [ITALIC,NONUNII], offsetA: 0x1D608, offsetN: 0xE1B4, offsetG: 0xE1BF, offsetE: 0xE1BF, italic:true},
|
||||||
"sans-serif-bold-italic": {fonts: [BITALIC,"STIXNonUnicode-bold-italic"], offsetA: 0x1D63C, offsetN: 0xE1F6, offsetG: 0x1D790, bold:true, italic:true},
|
"sans-serif-bold-italic": {fonts: [BITALIC,"STIXNonUnicode-bold-italic"], offsetA: 0x1D63C, offsetN: 0xE1F6, offsetG: 0x1D790, bold:true, italic:true},
|
||||||
"monospace": {offsetA: 0x1D670, offsetN: 0x1D7F6,
|
"monospace": {offsetA: 0x1D670, offsetN: 0x1D7F6,
|
||||||
remap: {0x20: [0x20,"-STIX-variant"]}}, // use a special space for monospace (see below)
|
remap: {0x20: [0x20,"-STIX-variant"]}}, // use a special space for monospace (see below)
|
||||||
|
@ -122,6 +122,7 @@
|
||||||
{name: "alpha", low: 0x61, high: 0x7A, offset: "A", add: 26},
|
{name: "alpha", low: 0x61, high: 0x7A, offset: "A", add: 26},
|
||||||
{name: "Alpha", low: 0x41, high: 0x5A, offset: "A"},
|
{name: "Alpha", low: 0x41, high: 0x5A, offset: "A"},
|
||||||
{name: "number", low: 0x30, high: 0x39, offset: "N"},
|
{name: "number", low: 0x30, high: 0x39, offset: "N"},
|
||||||
|
{name: "greek-non-unicode", low: 0x03B1, high: 0x03C9, offset: "E", add: 25},
|
||||||
{name: "greek", low: 0x03B1, high: 0x03C9, offset: "G", add: 26},
|
{name: "greek", low: 0x03B1, high: 0x03C9, offset: "G", add: 26},
|
||||||
{name: "Greek", low: 0x0391, high: 0x03F6, offset: "G",
|
{name: "Greek", low: 0x0391, high: 0x03F6, offset: "G",
|
||||||
remap: {0x03F5: 53, 0x03D1: 54, 0x03F0: 55, 0x03D5: 56, 0x03F1: 57, 0x03D6: 58, 0x03F4: 17}}
|
remap: {0x03F5: 53, 0x03D1: 54, 0x03F0: 55, 0x03D5: 56, 0x03F1: 57, 0x03D6: 58, 0x03F4: 17}}
|
||||||
|
@ -137,7 +138,13 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
REMAPACCENT: {
|
REMAPACCENT: {
|
||||||
"\u2192": "\u20D7"
|
"\u007E": "\u0303",
|
||||||
|
"\u2192": "\u20D7",
|
||||||
|
"\u0060": "\u0300",
|
||||||
|
"\u005E": "\u0302",
|
||||||
|
"\u00B4": "\u0301",
|
||||||
|
"\u2032": "\u0301",
|
||||||
|
"\u2035": "\u0300"
|
||||||
},
|
},
|
||||||
REMAPACCENTUNDER: {
|
REMAPACCENTUNDER: {
|
||||||
},
|
},
|
||||||
|
@ -245,7 +252,7 @@
|
||||||
},
|
},
|
||||||
0x21D1: // \Uparrow
|
0x21D1: // \Uparrow
|
||||||
{
|
{
|
||||||
dir: V, HW: [[.818,GENERAL]], stretch: {top:[0x21D1,GENERAL], ext:[0x2225,GENERAL,.1]}
|
dir: V, HW: [[.818,GENERAL]], stretch: {top:[0x21D1,GENERAL], ext:[0x2225,GENERAL,.082]}
|
||||||
},
|
},
|
||||||
0x21D2: // right double arrow
|
0x21D2: // right double arrow
|
||||||
{
|
{
|
||||||
|
@ -253,7 +260,7 @@
|
||||||
},
|
},
|
||||||
0x21D3: // \Downarrow
|
0x21D3: // \Downarrow
|
||||||
{
|
{
|
||||||
dir: V, HW: [[.818,GENERAL]], stretch: {ext:[0x2225,GENERAL,.1], bot:[0x21D3,GENERAL]}
|
dir: V, HW: [[.818,GENERAL]], stretch: {ext:[0x2225,GENERAL,.082], bot:[0x21D3,GENERAL]}
|
||||||
},
|
},
|
||||||
0x21D4: // left-right double arrow
|
0x21D4: // left-right double arrow
|
||||||
{
|
{
|
||||||
|
@ -263,7 +270,7 @@
|
||||||
0x21D5: // \Updownarrow
|
0x21D5: // \Updownarrow
|
||||||
{
|
{
|
||||||
dir: V, HW: [[.818,GENERAL]],
|
dir: V, HW: [[.818,GENERAL]],
|
||||||
stretch: {top:[0x21D1,GENERAL], ext:[0x2225,GENERAL,.1], bot:[0x21D3,GENERAL]}
|
stretch: {top:[0x21D1,GENERAL], ext:[0x2225,GENERAL,.082], bot:[0x21D3,GENERAL]}
|
||||||
},
|
},
|
||||||
0x221A: // \surd
|
0x221A: // \surd
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,12 +42,19 @@
|
||||||
FontInfo: {
|
FontInfo: {
|
||||||
STIX: {family: "STIXSizeOneSym", testString: "() {} []"},
|
STIX: {family: "STIXSizeOneSym", testString: "() {} []"},
|
||||||
TeX: {family: "MathJax_Size1", testString: "() {} []"},
|
TeX: {family: "MathJax_Size1", testString: "() {} []"},
|
||||||
"STIX-Web": {family: "STIXWeb_Size1", testString: "() {} []"},
|
//
|
||||||
"Asana-Math": {family: "AsanaMath_Size1", testString: "() {} []"},
|
// These are the new web fonts. The strange use of single quotes is because the
|
||||||
"Gyre-Pagella": {family: "GyrePagella_Size1", testString: "() {} []"},
|
// testing routine adds quotes at the beginning and ending, so for this list of
|
||||||
"Gyre-Termes": {family: "GyreTermes_Size1", testString: "() {} []"},
|
// names, we need to take those into account. We need a list because the names are
|
||||||
"Latin-Modern": {family: "LatinModern_Size1", testString: "() {} []"},
|
// not handled consistently between Mac and Windows in the font data, as they are
|
||||||
"Neo-Euler": {family: "NeoEuler_Size1", testString: "() {} []"}
|
// in the TeX and original STIX fonts (sigh).
|
||||||
|
//
|
||||||
|
"STIX-Web": {family: "STIX MathJax Size1','STIXMathJax_Size1-Regular", testString: "() {} []"},
|
||||||
|
"Asana-Math": {family: "Asana MathJax Size1','AsanaMathJax_Size1-Regular'", testString: "() {} []"},
|
||||||
|
"Gyre-Pagella": {family: "Gyre Pagella MathJax Size1','GyrePagellaMathJax_Size1-Regular", testString: "() {} []"},
|
||||||
|
"Gyre-Termes": {family: "Gyre Termes MathJax Size1','GyreTermesMathJax_Size1-Regular", testString: "() {} []"},
|
||||||
|
"Latin-Modern": {family: "Latin Modern MathJax Size1','LatinModernMathJax_Size1-Regular", testString: "() {} []"},
|
||||||
|
"Neo-Euler": {family: "Neo Euler MathJax Size1','NeoEulerMathJax_Size1-Regular", testString: "() {} []"}
|
||||||
},
|
},
|
||||||
comparisonFont: ["sans-serif","monospace","script","Times","Courier","Arial","Helvetica"],
|
comparisonFont: ["sans-serif","monospace","script","Times","Courier","Arial","Helvetica"],
|
||||||
testSize: ["40px","50px","60px","30px","20px"],
|
testSize: ["40px","50px","60px","30px","20px"],
|
||||||
|
@ -84,19 +91,22 @@
|
||||||
this.div.style.fontStyle = (font.style||"normal");
|
this.div.style.fontStyle = (font.style||"normal");
|
||||||
}
|
}
|
||||||
var W = this.getComparisonWidths(font.testString,font.noStyleChar);
|
var W = this.getComparisonWidths(font.testString,font.noStyleChar);
|
||||||
|
var found = null;
|
||||||
if (W) {
|
if (W) {
|
||||||
this.div.style.fontFamily = "'"+font.family+"',"+this.comparisonFont[0];
|
this.div.style.fontFamily = "'"+font.family+"',"+this.comparisonFont[0];
|
||||||
if (this.div.offsetWidth == W[0]) {
|
if (this.div.offsetWidth == W[0]) {
|
||||||
this.div.style.fontFamily = "'"+font.family+"',"+this.comparisonFont[W[2]];
|
this.div.style.fontFamily = "'"+font.family+"',"+this.comparisonFont[W[2]];
|
||||||
if (this.div.offsetWidth == W[1]) {return false}
|
if (this.div.offsetWidth == W[1]) {found = false}
|
||||||
}
|
}
|
||||||
if (this.div.offsetWidth != W[3] || this.div.offsetHeight != W[4]) {
|
if (found === null && (this.div.offsetWidth != W[3] || this.div.offsetHeight != W[4])) {
|
||||||
if (font.noStyleChar || !HTMLCSS.FONTDATA || !HTMLCSS.FONTDATA.hasStyleChar) {return true}
|
if (!font.noStyleChar && HTMLCSS.FONTDATA && HTMLCSS.FONTDATA.hasStyleChar) {
|
||||||
for (var i = 0, m = this.testSize.length; i < m; i++)
|
for (var i = 0, m = this.testSize.length; i < m; i++)
|
||||||
{if (this.testStyleChar(font,this.testSize[i])) {return true}}
|
{if (this.testStyleChar(font,this.testSize[i])) {found = true; m = 0}}
|
||||||
|
} else {found = true}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
if (HTMLCSS.safariTextNodeBug) {this.div.innerHTML = ""} else {this.text.nodeValue = ""}
|
||||||
|
return found;
|
||||||
},
|
},
|
||||||
|
|
||||||
styleChar: "\uEFFD", // width encodes style
|
styleChar: "\uEFFD", // width encodes style
|
||||||
|
@ -224,17 +234,24 @@
|
||||||
"white-space": "nowrap",
|
"white-space": "nowrap",
|
||||||
"float": "none",
|
"float": "none",
|
||||||
"direction": "ltr",
|
"direction": "ltr",
|
||||||
|
"max-width": "none", "max-height": "none",
|
||||||
|
"min-width": 0, "min-height": 0,
|
||||||
border: 0, padding: 0, margin: 0
|
border: 0, padding: 0, margin: 0
|
||||||
},
|
},
|
||||||
|
|
||||||
".MathJax_Display": {
|
".MathJax_Display": {
|
||||||
position: "relative",
|
position: "relative",
|
||||||
display: "block",
|
display: "block!important",
|
||||||
|
"text-indent": 0,
|
||||||
|
"max-width": "none", "max-height": "none",
|
||||||
|
"min-width": 0, "min-height": 0,
|
||||||
width: "100%"
|
width: "100%"
|
||||||
},
|
},
|
||||||
|
|
||||||
".MathJax img, .MathJax nobr, .MathJax a": {
|
".MathJax img, .MathJax nobr, .MathJax a": {
|
||||||
border: 0, padding: 0, margin: 0, "max-width": "none", "max-height": "none",
|
border: 0, padding: 0, margin: 0,
|
||||||
|
"max-width": "none", "max-height": "none",
|
||||||
|
"min-width": 0, "min-height": 0,
|
||||||
"vertical-align": 0, "line-height": "normal",
|
"vertical-align": 0, "line-height": "normal",
|
||||||
"text-decoration": "none"
|
"text-decoration": "none"
|
||||||
},
|
},
|
||||||
|
@ -274,12 +291,14 @@
|
||||||
".MathJax_Processed": {display:"none!important"},
|
".MathJax_Processed": {display:"none!important"},
|
||||||
|
|
||||||
".MathJax_ExBox": {
|
".MathJax_ExBox": {
|
||||||
display:"block", overflow:"hidden",
|
display:"block!important", overflow:"hidden",
|
||||||
width:"1px", height:"60ex"
|
width:"1px", height:"60ex",
|
||||||
|
"min-height": 0, "max-height":"none"
|
||||||
},
|
},
|
||||||
".MathJax .MathJax_EmBox": {
|
".MathJax .MathJax_EmBox": {
|
||||||
display:"block", overflow:"hidden",
|
display:"block!important", overflow:"hidden",
|
||||||
width:"1px", height:"60em"
|
width:"1px", height:"60em",
|
||||||
|
"min-height": 0, "max-height":"none"
|
||||||
},
|
},
|
||||||
|
|
||||||
".MathJax .MathJax_HitBox": {
|
".MathJax .MathJax_HitBox": {
|
||||||
|
@ -579,7 +598,8 @@
|
||||||
//
|
//
|
||||||
var jax = script.MathJax.elementJax, math = jax.root,
|
var jax = script.MathJax.elementJax, math = jax.root,
|
||||||
span = document.getElementById(jax.inputID+"-Frame"),
|
span = document.getElementById(jax.inputID+"-Frame"),
|
||||||
div = (jax.HTMLCSS.display ? span.parentNode : span);
|
div = (jax.HTMLCSS.display ? (span||{}).parentNode : span);
|
||||||
|
if (!div) return;
|
||||||
//
|
//
|
||||||
// Set the font metrics
|
// Set the font metrics
|
||||||
//
|
//
|
||||||
|
@ -1337,24 +1357,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (variant.remap && variant.remap[n]) {
|
if (variant.remap && variant.remap[n]) {
|
||||||
if (variant.remap[n] instanceof Array) {
|
|
||||||
var remap = variant.remap[n];
|
|
||||||
n = remap[0]; variant = this.FONTDATA.VARIANT[remap[1]];
|
|
||||||
} else if (typeof(variant.remap[n]) === "string") {
|
|
||||||
text = variant.remap[n]+text.substr(i+1);
|
|
||||||
i = 0; m = text.length; n = text.charCodeAt(0);
|
|
||||||
} else {
|
|
||||||
n = variant.remap[n];
|
n = variant.remap[n];
|
||||||
if (variant.remap.variant) {variant = this.FONTDATA.VARIANT[variant.remap.variant]}
|
if (variant.remap.variant) {variant = this.FONTDATA.VARIANT[variant.remap.variant]}
|
||||||
}
|
} else if (this.FONTDATA.REMAP[n] && !variant.noRemap) {
|
||||||
}
|
|
||||||
if (this.FONTDATA.REMAP[n] && !variant.noRemap) {
|
|
||||||
n = this.FONTDATA.REMAP[n];
|
n = this.FONTDATA.REMAP[n];
|
||||||
|
}
|
||||||
if (n instanceof Array) {variant = this.FONTDATA.VARIANT[n[1]]; n = n[0]}
|
if (n instanceof Array) {variant = this.FONTDATA.VARIANT[n[1]]; n = n[0]}
|
||||||
if (typeof(n) === "string") {
|
if (typeof(n) === "string") {
|
||||||
text = n+text.substr(i+1);
|
text = n+text.substr(i+1);
|
||||||
i = 0; m = text.length; n = n.charCodeAt(0);
|
m = text.length; i = -1;
|
||||||
}
|
continue;
|
||||||
}
|
}
|
||||||
font = this.lookupChar(variant,n); c = font[n];
|
font = this.lookupChar(variant,n); c = font[n];
|
||||||
if (force || (!this.checkFont(font,SPAN.style) && !c[5].img)) {
|
if (force || (!this.checkFont(font,SPAN.style) && !c[5].img)) {
|
||||||
|
@ -1602,9 +1614,13 @@
|
||||||
for (var i = 0, m = this.data.length; i < m; i++)
|
for (var i = 0, m = this.data.length; i < m; i++)
|
||||||
{if (this.data[i]) {this.data[i].toHTML(span)}}
|
{if (this.data[i]) {this.data[i].toHTML(span)}}
|
||||||
var stretchy = this.HTMLcomputeBBox(span);
|
var stretchy = this.HTMLcomputeBBox(span);
|
||||||
var h = span.bbox.h, d = span.bbox.d;
|
var h = span.bbox.h, d = span.bbox.d, stretched = false;
|
||||||
for (i = 0, m = stretchy.length; i < m; i++) {stretchy[i].HTMLstretchV(span,h,d)}
|
for (i = 0, m = stretchy.length; i < m; i++) {
|
||||||
if (stretchy.length) {this.HTMLcomputeBBox(span,true)}
|
var bbox = stretchy[i].HTMLspanElement().bbox;
|
||||||
|
if (bbox.h !== h || bbox.d !== d)
|
||||||
|
{stretchy[i].HTMLstretchV(span,h,d); stretched = true}
|
||||||
|
}
|
||||||
|
if (stretched) {this.HTMLcomputeBBox(span,true)}
|
||||||
if (this.HTMLlineBreaks(span)) {span = this.HTMLmultiline(span)}
|
if (this.HTMLlineBreaks(span)) {span = this.HTMLmultiline(span)}
|
||||||
this.HTMLhandleSpace(span);
|
this.HTMLhandleSpace(span);
|
||||||
this.HTMLhandleColor(span);
|
this.HTMLhandleColor(span);
|
||||||
|
@ -2158,8 +2174,12 @@
|
||||||
span = this.HTMLhandleSize(this.HTMLcreateSpan(span));
|
span = this.HTMLhandleSize(this.HTMLcreateSpan(span));
|
||||||
var variant = this.HTMLgetVariant();
|
var variant = this.HTMLgetVariant();
|
||||||
// Avoid setting the font style for error text or if mtextFontInherit is set
|
// Avoid setting the font style for error text or if mtextFontInherit is set
|
||||||
if (HTMLCSS.config.mtextFontInherit || this.Parent().type === "merror")
|
if (HTMLCSS.config.mtextFontInherit || this.Parent().type === "merror") {
|
||||||
{variant = {bold:variant.bold, italic:variant.italic, fontInherit: true}}
|
var vname = this.Get("mathvariant");
|
||||||
|
if (vname === "monospace") {span.className += " MJX-monospace"}
|
||||||
|
else if (vname.match(/sans-serif/)) {span.className += " MJX-sans-serif"}
|
||||||
|
variant = {bold:variant.bold, italic:variant.italic, fontInherit: true};
|
||||||
|
}
|
||||||
for (var i = 0, m = this.data.length; i < m; i++)
|
for (var i = 0, m = this.data.length; i < m; i++)
|
||||||
{if (this.data[i]) {this.data[i].toHTML(span,variant)}}
|
{if (this.data[i]) {this.data[i].toHTML(span,variant)}}
|
||||||
if (!span.bbox) {span.bbox = this.HTMLzeroBBox()}
|
if (!span.bbox) {span.bbox = this.HTMLzeroBBox()}
|
||||||
|
@ -2357,10 +2377,15 @@
|
||||||
},
|
},
|
||||||
HTMLcanStretch: function (direction) {return false},
|
HTMLcanStretch: function (direction) {return false},
|
||||||
HTMLhandleSpace: function (span) {
|
HTMLhandleSpace: function (span) {
|
||||||
if (!this.texWithDelims) {
|
if (!this.texWithDelims && !this.useMMLspacing) {
|
||||||
var space = (this.useMMLspacing ? 0 : HTMLCSS.length2em(this.texSpacing()||0)) + .12;
|
//
|
||||||
span.style.paddingLeft = HTMLCSS.Em(space);
|
// Add nulldelimiterspace around the fraction
|
||||||
span.style.paddingRight = HTMLCSS.Em(.12);
|
// (TeXBook pg 150 and Appendix G rule 15e)
|
||||||
|
//
|
||||||
|
var space = HTMLCSS.TeX.nulldelimiterspace;
|
||||||
|
var style = span.firstChild.style;
|
||||||
|
style.marginLeft = style.marginRight = HTMLCSS.Em(space);
|
||||||
|
span.bbox.w += 2*space; span.bbox.r += 2*space;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -2724,23 +2749,31 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
MML.TeXAtom.Augment({
|
MML.TeXAtom.Augment({
|
||||||
toHTML: function (span) {
|
toHTML: function (span,HW,D) {
|
||||||
span = this.HTMLcreateSpan(span);
|
span = this.HTMLcreateSpan(span);
|
||||||
if (this.data[0] != null) {
|
if (this.data[0] != null) {
|
||||||
if (this.texClass === MML.TEXCLASS.VCENTER) {
|
if (this.texClass === MML.TEXCLASS.VCENTER) {
|
||||||
var stack = HTMLCSS.createStack(span);
|
var stack = HTMLCSS.createStack(span);
|
||||||
var box = HTMLCSS.createBox(stack);
|
var box = HTMLCSS.createBox(stack);
|
||||||
HTMLCSS.Measured(this.data[0].toHTML(box),box);
|
var child = this.data[0].toHTML(box);
|
||||||
|
if (D != null) {HTMLCSS.Remeasured(this.data[0].HTMLstretchV(box,HW,D),box)}
|
||||||
|
else if (HW != null) {HTMLCSS.Remeasured(this.data[0].HTMLstretchH(box,HW),box)}
|
||||||
|
else {HTMLCSS.Measured(child,box)}
|
||||||
// FIXME: should the axis height be scaled?
|
// FIXME: should the axis height be scaled?
|
||||||
HTMLCSS.placeBox(box,0,HTMLCSS.TeX.axis_height-(box.bbox.h+box.bbox.d)/2+box.bbox.d);
|
HTMLCSS.placeBox(box,0,HTMLCSS.TeX.axis_height-(box.bbox.h+box.bbox.d)/2+box.bbox.d);
|
||||||
} else {
|
} else {
|
||||||
span.bbox = this.data[0].toHTML(span).bbox;
|
var html = this.data[0].toHTML(span,HW,D);
|
||||||
|
if (D != null) {html = this.data[0].HTMLstretchV(box,HW,D)}
|
||||||
|
else if (HW != null) {html = this.data[0].HTMLstretchH(box,HW)}
|
||||||
|
span.bbox = html.bbox;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.HTMLhandleSpace(span);
|
this.HTMLhandleSpace(span);
|
||||||
this.HTMLhandleColor(span);
|
this.HTMLhandleColor(span);
|
||||||
return span;
|
return span;
|
||||||
}
|
},
|
||||||
|
HTMLstretchH: MML.mbase.HTMLstretchH,
|
||||||
|
HTMLstretchV: MML.mbase.HTMLstretchV
|
||||||
});
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -2869,9 +2902,10 @@
|
||||||
HTMLCSS.Augment({
|
HTMLCSS.Augment({
|
||||||
Em: HTMLCSS.EmRounded, // vertical alignment needs help (since around v20)
|
Em: HTMLCSS.EmRounded, // vertical alignment needs help (since around v20)
|
||||||
cloneNodeBug: true, // Chrome gets heights wrong with the cloned ones
|
cloneNodeBug: true, // Chrome gets heights wrong with the cloned ones
|
||||||
rfuzz: .011,
|
rfuzz: -.02,
|
||||||
AccentBug: true,
|
AccentBug: true,
|
||||||
AdjustSurd: true,
|
AdjustSurd: true,
|
||||||
|
FontFaceBug: (browser.version.substr(0,3) === "32."), // Chrome 32 fails on bold-italic (#735)
|
||||||
negativeBBoxes: true,
|
negativeBBoxes: true,
|
||||||
safariNegativeSpaceBug: true,
|
safariNegativeSpaceBug: true,
|
||||||
safariWebFontSerif: [""],
|
safariWebFontSerif: [""],
|
||||||
|
|
|
@ -101,20 +101,23 @@
|
||||||
"white-space": "nowrap",
|
"white-space": "nowrap",
|
||||||
"float": "none",
|
"float": "none",
|
||||||
"direction": "ltr",
|
"direction": "ltr",
|
||||||
|
"max-width": "none", "max-height": "none",
|
||||||
|
"min-width": 0, "min-height": 0,
|
||||||
border: 0, padding: 0, margin: 0
|
border: 0, padding: 0, margin: 0
|
||||||
},
|
},
|
||||||
|
|
||||||
"span.MathJax_MathML": {
|
"span.MathJax_MathML": {
|
||||||
display: "inline"
|
display: "inline!important"
|
||||||
},
|
},
|
||||||
|
|
||||||
"div.MathJax_MathML": {
|
"div.MathJax_MathML": {
|
||||||
display: "block"
|
display: "block!important"
|
||||||
},
|
},
|
||||||
|
|
||||||
".MathJax_mmlExBox": {
|
".MathJax_mmlExBox": {
|
||||||
display:"block", overflow:"hidden",
|
display:"block!important", overflow:"hidden",
|
||||||
height:"1px", width:"60ex",
|
height:"1px", width:"60ex",
|
||||||
|
"min-height": 0, "max-height":"none",
|
||||||
padding:0, border: 0, margin: 0
|
padding:0, border: 0, margin: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -286,8 +289,8 @@
|
||||||
// Get the jax and the container and set the size
|
// Get the jax and the container and set the size
|
||||||
//
|
//
|
||||||
var jax = script.MathJax.elementJax, math = jax.root;
|
var jax = script.MathJax.elementJax, math = jax.root;
|
||||||
var span = document.getElementById(jax.inputID+"-Frame"),
|
var span = document.getElementById(jax.inputID+"-Frame"); if (!span) return;
|
||||||
container = span.firstChild, mspan = container.firstChild;
|
var container = span.firstChild, mspan = container.firstChild;
|
||||||
this.ex = jax.NativeMML.ex || this.defaultEx;
|
this.ex = jax.NativeMML.ex || this.defaultEx;
|
||||||
this.scale = jax.NativeMML.scale || 1;
|
this.scale = jax.NativeMML.scale || 1;
|
||||||
if (this.scale !== 1) {span.style.fontSize = jax.NativeMML.fontSize}
|
if (this.scale !== 1) {span.style.fontSize = jax.NativeMML.fontSize}
|
||||||
|
@ -974,8 +977,9 @@
|
||||||
tag = nMML.adjustWidths[i];
|
tag = nMML.adjustWidths[i];
|
||||||
var style = tag.getAttribute("style") || "";
|
var style = tag.getAttribute("style") || "";
|
||||||
if (!style.match(/(^|;)\s*min-width:/)) {
|
if (!style.match(/(^|;)\s*min-width:/)) {
|
||||||
mtd.push(tag.scrollWidth);
|
var width = tag.firstChild.scrollWidth;
|
||||||
var width = (tag.scrollWidth/nMML.ex).toFixed(3)+"ex";
|
mtd.push(width);
|
||||||
|
width = (width/nMML.ex).toFixed(3)+"ex";
|
||||||
style = style.replace(/;?\s*$/,"; ");
|
style = style.replace(/;?\s*$/,"; ");
|
||||||
tag.setAttribute("style",style+"min-width:"+width);
|
tag.setAttribute("style",style+"min-width:"+width);
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,6 +178,11 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
svg.Add(BBOX.DLINE(H,D,W,t,values.mathcolor,"down"));
|
svg.Add(BBOX.DLINE(H,D,W,t,values.mathcolor,"down"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MML.NOTATION.PHASORANGLE:
|
||||||
|
borders[2] = true; W -= 2*p; p = (H+D)/2; W += p;
|
||||||
|
svg.Add(BBOX.DLINE(H,D,p,t,values.mathcolor,"up"));
|
||||||
|
break;
|
||||||
|
|
||||||
case MML.NOTATION.MADRUWB:
|
case MML.NOTATION.MADRUWB:
|
||||||
borders[1] = borders[2] = true;
|
borders[1] = borders[2] = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
var VERSION = "2.3";
|
var VERSION = "2.3.1";
|
||||||
var MML = MathJax.ElementJax.mml,
|
var MML = MathJax.ElementJax.mml,
|
||||||
SVG = MathJax.OutputJax.SVG;
|
SVG = MathJax.OutputJax.SVG;
|
||||||
|
|
||||||
|
@ -36,18 +36,11 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
var values = this.getValues("lquote","rquote");
|
var values = this.getValues("lquote","rquote");
|
||||||
var variant = this.SVGgetVariant(), scale = this.SVGgetScale();
|
var variant = this.SVGgetVariant(), scale = this.SVGgetScale();
|
||||||
var text = this.data.join(""); // FIXME: handle mglyph?
|
var text = this.data.join(""); // FIXME: handle mglyph?
|
||||||
var pattern = [];
|
|
||||||
if (values.lquote.length === 1) {pattern.push(this.SVGquoteRegExp(values.lquote))}
|
|
||||||
if (values.rquote.length === 1) {pattern.push(this.SVGquoteRegExp(values.rquote))}
|
|
||||||
if (pattern.length) {text = text.replace(RegExp("("+pattern.join("|")+")","g"),"\\$1")}
|
|
||||||
svg.Add(this.SVGhandleVariant(variant,scale,values.lquote+text+values.rquote));
|
svg.Add(this.SVGhandleVariant(variant,scale,values.lquote+text+values.rquote));
|
||||||
svg.Clean();
|
svg.Clean();
|
||||||
this.SVGhandleColor(svg);
|
this.SVGhandleColor(svg);
|
||||||
this.SVGsaveData(svg);
|
this.SVGsaveData(svg);
|
||||||
return svg;
|
return svg;
|
||||||
},
|
|
||||||
SVGquoteRegExp: function (string) {
|
|
||||||
return string.replace(/([.*+?|{}()\[\]\\])/g,"\\$1");
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
MML.ms.prototype.defaults.mathvariant = 'monospace';
|
MML.ms.prototype.defaults.mathvariant = 'monospace';
|
||||||
|
|
|
@ -45,16 +45,17 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
var scale = this.SVGgetScale(), mu = this.SVGgetMu(svg);
|
var scale = this.SVGgetScale(), mu = this.SVGgetMu(svg);
|
||||||
var LABEL = -1;
|
var LABEL = -1;
|
||||||
|
|
||||||
var H = [], D = [], W = [], A = [], C = [], i, j, J = -1, m, M, s, row, cell, mo;
|
var H = [], D = [], W = [], A = [], C = [], i, j, J = -1,
|
||||||
var LHD = SVG.FONTDATA.baselineskip * scale * values.useHeight, HD,
|
m, M, s, row, cell, mo, HD;
|
||||||
LH = SVG.FONTDATA.lineH * scale, LD = SVG.FONTDATA.lineD * scale;
|
var LH = SVG.FONTDATA.lineH * scale * values.useHeight,
|
||||||
|
LD = SVG.FONTDATA.lineD * scale * values.useHeight;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create cells and measure columns and rows
|
// Create cells and measure columns and rows
|
||||||
//
|
//
|
||||||
for (i = 0, m = this.data.length; i < m; i++) {
|
for (i = 0, m = this.data.length; i < m; i++) {
|
||||||
row = this.data[i]; s = (row.type === "mlabeledtr" ? LABEL : 0);
|
row = this.data[i]; s = (row.type === "mlabeledtr" ? LABEL : 0);
|
||||||
A[i] = []; H[i] = D[i] = 0;
|
A[i] = []; H[i] = LH; D[i] = LD;
|
||||||
for (j = s, M = row.data.length + s; j < M; j++) {
|
for (j = s, M = row.data.length + s; j < M; j++) {
|
||||||
if (W[j] == null) {
|
if (W[j] == null) {
|
||||||
if (j > J) {J = j}
|
if (j > J) {J = j}
|
||||||
|
@ -72,8 +73,8 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
HD = mo.SVGdata.h + mo.SVGdata.d;
|
HD = mo.SVGdata.h + mo.SVGdata.d;
|
||||||
if (HD) {
|
if (HD) {
|
||||||
min = SVG.length2em(min,mu,HD);
|
min = SVG.length2em(min,mu,HD);
|
||||||
if (min*mo.SVGdata.h/HD > H[j]) {H[j] = min*mo.SVGdata.h/HD}
|
if (min*mo.SVGdata.h/HD > H[i]) {H[i] = min*mo.SVGdata.h/HD}
|
||||||
if (min*mo.SVGdata.d/HD > D[j]) {D[j] = min*mo.SVGdata.d/HD}
|
if (min*mo.SVGdata.d/HD > D[i]) {D[i] = min*mo.SVGdata.d/HD}
|
||||||
}
|
}
|
||||||
} else if (mo.SVGcanStretch("Horizontal")) {
|
} else if (mo.SVGcanStretch("Horizontal")) {
|
||||||
min = SVG.length2em(min,mu,mo.SVGdata.w);
|
min = SVG.length2em(min,mu,mo.SVGdata.w);
|
||||||
|
@ -86,8 +87,6 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
if (A[i][j].w > W[j]) {W[j] = A[i][j].w}
|
if (A[i][j].w > W[j]) {W[j] = A[i][j].w}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (H[0]+D[0]) {H[0] = Math.max(H[0],LH)}
|
|
||||||
if (H[A.length-1]+D[A.length-1]) {D[A.length-1] = Math.max(D[A.length-1],LD)}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Determine spacing and alignment
|
// Determine spacing and alignment
|
||||||
|
@ -143,7 +142,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
//
|
//
|
||||||
HD = H[0] + D[A.length-1];
|
HD = H[0] + D[A.length-1];
|
||||||
for (i = 0, m = A.length-1; i < m; i++)
|
for (i = 0, m = A.length-1; i < m; i++)
|
||||||
{HD += Math.max((H[i]+D[i] ? LHD : 0),D[i]+H[i+1]+RSPACE[i])}
|
{HD += Math.max(0,D[i]+H[i+1]+RSPACE[i])}
|
||||||
//
|
//
|
||||||
// Determine frame and line sizes
|
// Determine frame and line sizes
|
||||||
//
|
//
|
||||||
|
@ -176,7 +175,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
Y = 0; fY = -(HD + fy) + H[0];
|
Y = 0; fY = -(HD + fy) + H[0];
|
||||||
for (i = 0, m = n-1; i < m; i++) {
|
for (i = 0, m = n-1; i < m; i++) {
|
||||||
// FIXME: Should handle values.align for final row
|
// FIXME: Should handle values.align for final row
|
||||||
var dY = Math.max((H[i]+D[i] ? LHD : 0),D[i]+H[i+1]+RSPACE[i]);
|
var dY = Math.max(0,D[i]+H[i+1]+RSPACE[i]);
|
||||||
Y += dY; fY += dY;
|
Y += dY; fY += dY;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -274,7 +273,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
align = (cell.columnalign||RCALIGN[i][j]||CALIGN[j])
|
align = (cell.columnalign||RCALIGN[i][j]||CALIGN[j])
|
||||||
C[j].Align(A[i][j],align,0,y+dy);
|
C[j].Align(A[i][j],align,0,y+dy);
|
||||||
}
|
}
|
||||||
if (i < A.length-1) {y -= Math.max((H[i]+D[i] ? LHD : 0),D[i]+H[i+1]+RSPACE[i])}
|
if (i < A.length-1) {y -= Math.max(0,D[i]+H[i+1]+RSPACE[i])}
|
||||||
}
|
}
|
||||||
y = Y;
|
y = Y;
|
||||||
}
|
}
|
||||||
|
@ -307,7 +306,7 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
//
|
//
|
||||||
y = Y - lw/2;
|
y = Y - lw/2;
|
||||||
for (i = 0, m = A.length-1; i < m; i++) {
|
for (i = 0, m = A.length-1; i < m; i++) {
|
||||||
dy = Math.max(LHD,D[i]+H[i+1]+RSPACE[i]);
|
dy = Math.max(0,D[i]+H[i+1]+RSPACE[i]);
|
||||||
if (RLINES[i] !== "none")
|
if (RLINES[i] !== "none")
|
||||||
{svg.Add(BBOX.HLINE(fW,lw,RLINES[i]),0,y-D[i]-(dy-D[i]-H[i+1])/2)}
|
{svg.Add(BBOX.HLINE(fW,lw,RLINES[i]),0,y-D[i]-(dy-D[i]-H[i+1])/2)}
|
||||||
y -= dy;
|
y -= dy;
|
||||||
|
|
|
@ -86,10 +86,13 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
//
|
//
|
||||||
// Start with a fresh SVG element
|
// Start with a fresh SVG element
|
||||||
// and make it full width if we are breaking to a specific width
|
// and make it full width if we are breaking to a specific width
|
||||||
|
// in the top-level math element
|
||||||
//
|
//
|
||||||
svg = this.SVG();
|
svg = this.SVG();
|
||||||
|
if (isTop && parent.type !== "mtd") {
|
||||||
if (SVG.linebreakWidth < SVG.BIGDIMEN) {svg.w = SVG.linebreakWidth}
|
if (SVG.linebreakWidth < SVG.BIGDIMEN) {svg.w = SVG.linebreakWidth}
|
||||||
else {svg.w = SVG.cwidth/SVG.em * 1000}
|
else {svg.w = SVG.cwidth/SVG.em * 1000}
|
||||||
|
}
|
||||||
|
|
||||||
var state = {
|
var state = {
|
||||||
n: 0, Y: 0,
|
n: 0, Y: 0,
|
||||||
|
@ -504,7 +507,8 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||||
//
|
//
|
||||||
// Get the default penalty for this location
|
// Get the default penalty for this location
|
||||||
//
|
//
|
||||||
var W = info.scanW, mo = (info.embellished||this); delete info.embellished;
|
var W = info.scanW, mo = info.embellished; delete info.embellished;
|
||||||
|
if (!mo || !mo.SVGdata) {mo = this}
|
||||||
var svg = mo.SVGdata, w = svg.w + svg.x;
|
var svg = mo.SVGdata, w = svg.w + svg.x;
|
||||||
if (values.linebreakstyle === MML.LINEBREAKSTYLE.AFTER) {W += w; w = 0}
|
if (values.linebreakstyle === MML.LINEBREAKSTYLE.AFTER) {W += w; w = 0}
|
||||||
if (W - info.shift === 0) {return false} // don't break at zero width (FIXME?)
|
if (W - info.shift === 0) {return false} // don't break at zero width (FIXME?)
|
||||||
|
|
|
@ -64,6 +64,19 @@ MathJax.OutputJax.SVG = MathJax.OutputJax({
|
||||||
margin: "1em 0em"
|
margin: "1em 0em"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// For mtextFontInherit version of \texttt{}
|
||||||
|
//
|
||||||
|
".MathJax_SVG .MJX-monospace": {
|
||||||
|
"font-family": "monospace"
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// For mtextFontInherit version of \textsf{}
|
||||||
|
//
|
||||||
|
".MathJax_SVG .MJX-sans-serif": {
|
||||||
|
"font-family": "sans-serif"
|
||||||
|
},
|
||||||
"#MathJax_SVG_Tooltip": {
|
"#MathJax_SVG_Tooltip": {
|
||||||
"background-color": "InfoBackground", color: "InfoText",
|
"background-color": "InfoBackground", color: "InfoText",
|
||||||
border: "1px solid black",
|
border: "1px solid black",
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
"italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], italic:true, offsetA: 0x1D434, offsetG: 0x1D6E2, remap: {0x1D455: 0x210E}},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
"bold-italic": {fonts: [MAIN,NORMAL,MONOSPACE,LATIN,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,MISC,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true, offsetA: 0x1D468, offsetG: 0x1D71C},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
"bold": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold:true
|
"bold": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold:true
|
||||||
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
, offsetA: 0x1D400, offsetG: 0x1D6A8, offsetN: 0x1D7CE},
|
||||||
"italic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], italic:true},
|
"italic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], italic:true},
|
||||||
"bolditalic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true},
|
"bold-italic": {fonts: [MAIN,NORMAL,ALPHABETS,MARKS,ARROWS,OPERATORS,SYMBOLS,SHAPES,VARIANTS,NONUNICODE,SIZE1], bold: true, italic:true},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
|
|
@ -152,7 +152,7 @@
|
||||||
"bold": {fonts: [MAINBOLD,NORMALBOLD,FRAKTURBOLD,DOUBLESTRUCKBOLD,SANSSERIFBOLD,LATINBOLD,ALPHABETSBOLD,MARKSBOLD,ARROWSBOLD,OPERATORSBOLD,SYMBOLSBOLD,SHAPESBOLD,MISCBOLD,VARIANTSBOLD,SIZE1], bold:true
|
"bold": {fonts: [MAINBOLD,NORMALBOLD,FRAKTURBOLD,DOUBLESTRUCKBOLD,SANSSERIFBOLD,LATINBOLD,ALPHABETSBOLD,MARKSBOLD,ARROWSBOLD,OPERATORSBOLD,SYMBOLSBOLD,SHAPESBOLD,MISCBOLD,VARIANTSBOLD,SIZE1], bold:true
|
||||||
},
|
},
|
||||||
"italic": {fonts: [MAINITALIC,NORMALITALIC,SCRIPTITALIC,DOUBLESTRUCKITALIC,SANSSERIFITALIC,LATINITALIC,ALPHABETSITALIC,MARKSITALIC,MISCITALIC,VARIANTSITALIC,SIZE1], italic:true},
|
"italic": {fonts: [MAINITALIC,NORMALITALIC,SCRIPTITALIC,DOUBLESTRUCKITALIC,SANSSERIFITALIC,LATINITALIC,ALPHABETSITALIC,MARKSITALIC,MISCITALIC,VARIANTSITALIC,SIZE1], italic:true},
|
||||||
"bolditalic": {fonts: [MAINBOLDITALIC,NORMALBOLDITALIC,SCRIPTBOLDITALIC,DOUBLESTRUCKBOLDITALIC,SANSSERIFBOLDITALIC,LATINBOLDITALIC,ALPHABETSBOLDITALIC,MARKSBOLDITALIC,SHAPESBOLDITALIC,MISCBOLDITALIC,VARIANTSBOLDITALIC,SIZE1], bold: true, italic:true},
|
"bold-italic": {fonts: [MAINBOLDITALIC,NORMALBOLDITALIC,SCRIPTBOLDITALIC,DOUBLESTRUCKBOLDITALIC,SANSSERIFBOLDITALIC,LATINBOLDITALIC,ALPHABETSBOLDITALIC,MARKSBOLDITALIC,SHAPESBOLDITALIC,MISCBOLDITALIC,VARIANTSBOLDITALIC,SIZE1], bold: true, italic:true},
|
||||||
"double-struck": {
|
"double-struck": {
|
||||||
fonts: [DOUBLESTRUCK],
|
fonts: [DOUBLESTRUCK],
|
||||||
offsetA: 0x1D538,
|
offsetA: 0x1D538,
|
||||||
|
@ -181,7 +181,8 @@
|
||||||
fonts: [SANSSERIF],
|
fonts: [SANSSERIF],
|
||||||
offsetA: 0x1D5A0,
|
offsetA: 0x1D5A0,
|
||||||
offsetN: 0x1D7E2,
|
offsetN: 0x1D7E2,
|
||||||
offsetG: 0xE17D
|
offsetG: 0xE17D,
|
||||||
|
offsetE: 0xE17D
|
||||||
},
|
},
|
||||||
"bold-sans-serif": {
|
"bold-sans-serif": {
|
||||||
fonts: [SANSSERIFBOLD], bold:true,
|
fonts: [SANSSERIFBOLD], bold:true,
|
||||||
|
@ -193,7 +194,8 @@
|
||||||
fonts: [SANSSERIFITALIC], italic: true,
|
fonts: [SANSSERIFITALIC], italic: true,
|
||||||
offsetA: 0x1D608,
|
offsetA: 0x1D608,
|
||||||
offsetN: 0xE1B4,
|
offsetN: 0xE1B4,
|
||||||
offsetG: 0xE1BF
|
offsetG: 0xE1BF,
|
||||||
|
offsetE: 0xE1BF
|
||||||
},
|
},
|
||||||
"sans-serif-bold-italic": {
|
"sans-serif-bold-italic": {
|
||||||
fonts: [SANSSERIFBOLDITALIC], bold:true, italic: true,
|
fonts: [SANSSERIFBOLDITALIC], bold:true, italic: true,
|
||||||
|
@ -220,6 +222,7 @@
|
||||||
{name: "alpha", low: 0x61, high: 0x7A, offset: "A", add: 26},
|
{name: "alpha", low: 0x61, high: 0x7A, offset: "A", add: 26},
|
||||||
{name: "Alpha", low: 0x41, high: 0x5A, offset: "A"},
|
{name: "Alpha", low: 0x41, high: 0x5A, offset: "A"},
|
||||||
{name: "number", low: 0x30, high: 0x39, offset: "N"},
|
{name: "number", low: 0x30, high: 0x39, offset: "N"},
|
||||||
|
{name: "greek-non-unicode", low: 0x03B1, high: 0x03C9, offset: "E", add: 25},
|
||||||
{name: "greek", low: 0x03B1, high: 0x03C9, offset: "G", add: 26},
|
{name: "greek", low: 0x03B1, high: 0x03C9, offset: "G", add: 26},
|
||||||
{name: "Greek", low: 0x0391, high: 0x03F6, offset: "G",
|
{name: "Greek", low: 0x0391, high: 0x03F6, offset: "G",
|
||||||
remap: {0x03F5: 52, 0x03D1: 53, 0x03F0: 54, 0x03D5: 55, 0x03F1: 56, 0x03D6: 57, 0x03F4: 17}}
|
remap: {0x03F5: 52, 0x03D1: 53, 0x03F0: 54, 0x03D5: 55, 0x03F1: 56, 0x03D6: 57, 0x03F4: 17}}
|
||||||
|
@ -238,7 +241,13 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
REMAPACCENT: {
|
REMAPACCENT: {
|
||||||
"\u2192": "\u20D7"
|
"\u007E": "\u0303",
|
||||||
|
"\u2192": "\u20D7",
|
||||||
|
"\u0060": "\u0300",
|
||||||
|
"\u005E": "\u0302",
|
||||||
|
"\u00B4": "\u0301",
|
||||||
|
"\u2032": "\u0301",
|
||||||
|
"\u2035": "\u0300"
|
||||||
},
|
},
|
||||||
|
|
||||||
REMAPACCENTUNDER: {
|
REMAPACCENTUNDER: {
|
||||||
|
|
|
@ -52,12 +52,17 @@
|
||||||
"white-space": "nowrap",
|
"white-space": "nowrap",
|
||||||
"float": "none",
|
"float": "none",
|
||||||
"direction": "ltr",
|
"direction": "ltr",
|
||||||
|
"max-width": "none", "max-height": "none",
|
||||||
|
"min-width": 0, "min-height": 0,
|
||||||
border: 0, padding: 0, margin: 0
|
border: 0, padding: 0, margin: 0
|
||||||
},
|
},
|
||||||
|
|
||||||
".MathJax_SVG_Display": {
|
".MathJax_SVG_Display": {
|
||||||
position: "relative",
|
position: "relative",
|
||||||
display: "block",
|
display: "block!important",
|
||||||
|
"text-indent": 0,
|
||||||
|
"max-width": "none", "max-height": "none",
|
||||||
|
"min-width": 0, "min-height": 0,
|
||||||
width: "100%"
|
width: "100%"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -75,13 +80,15 @@
|
||||||
|
|
||||||
".MathJax_SVG_Processing": {
|
".MathJax_SVG_Processing": {
|
||||||
visibility: "hidden", position:"absolute", top:0, left:0,
|
visibility: "hidden", position:"absolute", top:0, left:0,
|
||||||
width:0, height: 0, overflow:"hidden", display:"block"
|
width:0, height: 0, overflow:"hidden", display:"block!important"
|
||||||
},
|
},
|
||||||
".MathJax_SVG_Processed": {display:"none!important"},
|
".MathJax_SVG_Processed": {display:"none!important"},
|
||||||
|
|
||||||
".MathJax_SVG_ExBox": {
|
".MathJax_SVG_ExBox": {
|
||||||
display:"block", overflow:"hidden",
|
display:"block!important", overflow:"hidden",
|
||||||
width:"1px", height:"60ex"
|
width:"1px", height:"60ex",
|
||||||
|
"min-height": 0, "max-height":"none",
|
||||||
|
padding:0, border: 0, margin: 0
|
||||||
},
|
},
|
||||||
|
|
||||||
"#MathJax_SVG_Tooltip": {
|
"#MathJax_SVG_Tooltip": {
|
||||||
|
@ -289,7 +296,8 @@
|
||||||
//
|
//
|
||||||
var jax = script.MathJax.elementJax, math = jax.root,
|
var jax = script.MathJax.elementJax, math = jax.root,
|
||||||
span = document.getElementById(jax.inputID+"-Frame"),
|
span = document.getElementById(jax.inputID+"-Frame"),
|
||||||
div = (jax.SVG.display ? span.parentNode : span);
|
div = (jax.SVG.display ? (span||{}).parentNode : span);
|
||||||
|
if (!div) return;
|
||||||
//
|
//
|
||||||
// Set the font metrics
|
// Set the font metrics
|
||||||
//
|
//
|
||||||
|
@ -551,25 +559,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (variant.remap && variant.remap[n]) {
|
if (variant.remap && variant.remap[n]) {
|
||||||
if (variant.remap[n] instanceof Array) {
|
|
||||||
var remap = variant.remap[n];
|
|
||||||
n = remap[0]; variant = this.FONTDATA.VARIANT[remap[1]];
|
|
||||||
} else if (typeof(variant.remap[n]) === "string") {
|
|
||||||
text = variant.remap[n]+text.substr(i+1);
|
|
||||||
i = 0; m = text.length; n = text.charCodeAt(0);
|
|
||||||
} else {
|
|
||||||
n = variant.remap[n];
|
n = variant.remap[n];
|
||||||
if (variant.remap.variant) {variant = this.FONTDATA.VARIANT[variant.remap.variant]}
|
if (variant.remap.variant) {variant = this.FONTDATA.VARIANT[variant.remap.variant]}
|
||||||
}
|
} else if (this.FONTDATA.REMAP[n] && !variant.noRemap) {
|
||||||
}
|
|
||||||
if (this.FONTDATA.REMAP[n] && !variant.noRemap) {
|
|
||||||
n = this.FONTDATA.REMAP[n];
|
n = this.FONTDATA.REMAP[n];
|
||||||
|
}
|
||||||
if (n instanceof Array) {variant = this.FONTDATA.VARIANT[n[1]]; n = n[0]}
|
if (n instanceof Array) {variant = this.FONTDATA.VARIANT[n[1]]; n = n[0]}
|
||||||
if (typeof(n) === "string") {
|
if (typeof(n) === "string") {
|
||||||
text = n+text.substr(i+1);
|
text = n+text.substr(i+1);
|
||||||
i = 0; m = text.length;
|
m = text.length; i = -1;
|
||||||
n = n.charCodeAt(0);
|
continue;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
font = this.lookupChar(variant,n); c = font[n];
|
font = this.lookupChar(variant,n); c = font[n];
|
||||||
if (c) {
|
if (c) {
|
||||||
|
@ -859,6 +858,17 @@
|
||||||
},
|
},
|
||||||
Align: function (svg,align,dx,dy) {
|
Align: function (svg,align,dx,dy) {
|
||||||
dx = ({left: dx, center: (this.w - svg.w)/2, right: this.w - svg.w - dx})[align] || 0;
|
dx = ({left: dx, center: (this.w - svg.w)/2, right: this.w - svg.w - dx})[align] || 0;
|
||||||
|
//
|
||||||
|
// If we extend to the left of the current contents,
|
||||||
|
// move the contents to the right and adjust the bounding box
|
||||||
|
//
|
||||||
|
if (dx < 0) {
|
||||||
|
if (this.element.childNodes.length) {
|
||||||
|
this.element.setAttribute("transform","translate("+Math.floor(-dx)+",0)");
|
||||||
|
var g = SVG.Element("g"); g.appendChild(this.element); this.element = g;
|
||||||
|
}
|
||||||
|
this.l -= dx; this.w -= dx; this.r -= dx; dx = 0;
|
||||||
|
}
|
||||||
this.Add(svg,dx,dy);
|
this.Add(svg,dx,dy);
|
||||||
},
|
},
|
||||||
Clean: function () {
|
Clean: function () {
|
||||||
|
@ -883,7 +893,9 @@
|
||||||
{
|
{
|
||||||
var svg = this.svg[i], mml = svg.mml;
|
var svg = this.svg[i], mml = svg.mml;
|
||||||
if (mml) {
|
if (mml) {
|
||||||
|
if (mml.SVGdata.h !== this.sh || mml.SVGdata.d !== this.sd) {
|
||||||
svg = mml.SVGstretchV(this.sh,this.sd);
|
svg = mml.SVGstretchV(this.sh,this.sd);
|
||||||
|
}
|
||||||
mml.SVGdata.HW = this.sh; mml.SVGdata.D = this.sd;
|
mml.SVGdata.HW = this.sh; mml.SVGdata.D = this.sd;
|
||||||
}
|
}
|
||||||
if (svg.ic) {this.ic = svg.ic} else {delete this.ic}
|
if (svg.ic) {this.ic = svg.ic} else {delete this.ic}
|
||||||
|
@ -1040,6 +1052,7 @@
|
||||||
if (!this.SVGdata) {this.SVGdata = {}}
|
if (!this.SVGdata) {this.SVGdata = {}}
|
||||||
this.SVGdata.w = svg.w, this.SVGdata.x = svg.x;
|
this.SVGdata.w = svg.w, this.SVGdata.x = svg.x;
|
||||||
this.SVGdata.h = svg.h, this.SVGdata.d = svg.d;
|
this.SVGdata.h = svg.h, this.SVGdata.d = svg.d;
|
||||||
|
if (svg.y) {this.SVGdata.h += svg.y; this.SVGdata.d -= svg.y}
|
||||||
if (svg.X != null) {this.SVGdata.X = svg.X}
|
if (svg.X != null) {this.SVGdata.X = svg.X}
|
||||||
if (this["class"]) {svg.removeable = false; SVG.Element(svg.element,{"class":this["class"]})}
|
if (this["class"]) {svg.removeable = false; SVG.Element(svg.element,{"class":this["class"]})}
|
||||||
// FIXME: if an element is split by linebreaking, the ID will be the same on both parts
|
// FIXME: if an element is split by linebreaking, the ID will be the same on both parts
|
||||||
|
@ -1476,6 +1489,9 @@
|
||||||
var variant = this.SVGgetVariant(), def = {direction:this.Get("dir")};
|
var variant = this.SVGgetVariant(), def = {direction:this.Get("dir")};
|
||||||
if (variant.bold) {def["font-weight"] = "bold"}
|
if (variant.bold) {def["font-weight"] = "bold"}
|
||||||
if (variant.italic) {def["font-style"] = "italic"}
|
if (variant.italic) {def["font-style"] = "italic"}
|
||||||
|
variant = this.Get("mathvariant");
|
||||||
|
if (variant === "monospace") {def["class"] = "MJX-monospace"}
|
||||||
|
else if (variant.match(/sans-serif/)) {def["class"] = "MJX-sans-serif"}
|
||||||
svg.Add(BBOX.TEXT(scale,this.data.join(""),def)); svg.Clean();
|
svg.Add(BBOX.TEXT(scale,this.data.join(""),def)); svg.Clean();
|
||||||
this.SVGhandleColor(svg);
|
this.SVGhandleColor(svg);
|
||||||
this.SVGsaveData(svg);
|
this.SVGsaveData(svg);
|
||||||
|
@ -1614,18 +1630,20 @@
|
||||||
MML.mfrac.Augment({
|
MML.mfrac.Augment({
|
||||||
toSVG: function () {
|
toSVG: function () {
|
||||||
this.SVGgetStyles();
|
this.SVGgetStyles();
|
||||||
var svg = this.SVG(); this.SVGhandleSpace(svg);
|
var svg = this.SVG();
|
||||||
|
var frac = BBOX(); this.SVGhandleSpace(frac);
|
||||||
var num = this.SVGchildSVG(0), den = this.SVGchildSVG(1);
|
var num = this.SVGchildSVG(0), den = this.SVGchildSVG(1);
|
||||||
var values = this.getValues("displaystyle","linethickness","numalign","denomalign","bevelled");
|
var values = this.getValues("displaystyle","linethickness","numalign","denomalign","bevelled");
|
||||||
var scale = svg.scale = this.SVGgetScale(), isDisplay = values.displaystyle;
|
var scale = svg.scale = frac.scale = this.SVGgetScale(),
|
||||||
|
isDisplay = values.displaystyle;
|
||||||
var a = SVG.TeX.axis_height * scale;
|
var a = SVG.TeX.axis_height * scale;
|
||||||
if (values.bevelled) {
|
if (values.bevelled) {
|
||||||
var delta = (isDisplay ? 400 : 150);
|
var delta = (isDisplay ? 400 : 150);
|
||||||
var H = Math.max(num.h+num.d,den.h+den.d)+2*delta;
|
var H = Math.max(num.h+num.d,den.h+den.d)+2*delta;
|
||||||
var bevel = SVG.createDelimiter(0x2F,H);
|
var bevel = SVG.createDelimiter(0x2F,H);
|
||||||
svg.Add(num,0,(num.d-num.h)/2+a+delta);
|
frac.Add(num,0,(num.d-num.h)/2+a+delta);
|
||||||
svg.Add(bevel,num.w-delta/2,(bevel.d-bevel.h)/2+a);
|
frac.Add(bevel,num.w-delta/2,(bevel.d-bevel.h)/2+a);
|
||||||
svg.Add(den,num.w+bevel.w-delta,(den.d-den.h)/2+a-delta);
|
frac.Add(den,num.w+bevel.w-delta,(den.d-den.h)/2+a-delta);
|
||||||
} else {
|
} else {
|
||||||
var W = Math.max(num.w,den.w);
|
var W = Math.max(num.w,den.w);
|
||||||
var t = SVG.thickness2em(values.linethickness,scale), p,q, u,v;
|
var t = SVG.thickness2em(values.linethickness,scale), p,q, u,v;
|
||||||
|
@ -1637,26 +1655,29 @@
|
||||||
p = Math.max((isDisplay ? 7 : 3) * SVG.TeX.rule_thickness, 2*mt); // force to at least 2 px
|
p = Math.max((isDisplay ? 7 : 3) * SVG.TeX.rule_thickness, 2*mt); // force to at least 2 px
|
||||||
q = (u - num.d) - (den.h - v);
|
q = (u - num.d) - (den.h - v);
|
||||||
if (q < p) {u += (p - q)/2; v += (p - q)/2}
|
if (q < p) {u += (p - q)/2; v += (p - q)/2}
|
||||||
svg.w = W; t = 0;
|
frac.w = W; t = 0;
|
||||||
} else {// \over
|
} else {// \over
|
||||||
p = Math.max((isDisplay ? 2 : 0) * mt + t, t/2 + 1.5*mt); // force to be at least 1.5px
|
p = Math.max((isDisplay ? 2 : 0) * mt + t, t/2 + 1.5*mt); // force to be at least 1.5px
|
||||||
q = (u - num.d) - (a + t/2); if (q < p) {u += p - q}
|
q = (u - num.d) - (a + t/2); if (q < p) {u += p - q}
|
||||||
q = (a - t/2) - (den.h - v); if (q < p) {v += p - q}
|
q = (a - t/2) - (den.h - v); if (q < p) {v += p - q}
|
||||||
svg.Add(BBOX.RECT(t/2,t/2,W+2*t),0,a);
|
frac.Add(BBOX.RECT(t/2,t/2,W+2*t),0,a);
|
||||||
}
|
}
|
||||||
svg.Align(num,values.numalign,t,u);
|
frac.Align(num,values.numalign,t,u);
|
||||||
svg.Align(den,values.denomalign,t,-v);
|
frac.Align(den,values.denomalign,t,-v);
|
||||||
}
|
}
|
||||||
svg.Clean();
|
frac.Clean(); svg.Add(frac,0,0); svg.Clean();
|
||||||
this.SVGhandleColor(svg);
|
this.SVGhandleColor(svg);
|
||||||
this.SVGsaveData(svg);
|
this.SVGsaveData(svg);
|
||||||
return svg;
|
return svg;
|
||||||
},
|
},
|
||||||
SVGcanStretch: function (direction) {return false},
|
SVGcanStretch: function (direction) {return false},
|
||||||
SVGhandleSpace: function (svg) {
|
SVGhandleSpace: function (svg) {
|
||||||
if (!this.texWithDelims) {
|
if (!this.texWithDelims && !this.useMMLspacing) {
|
||||||
svg.x = (this.useMMLspacing ? 0 : SVG.length2em(this.texSpacing()||0)) + 120;
|
//
|
||||||
svg.X = 120;
|
// Add nulldelimiterspace around the fraction
|
||||||
|
// (TeXBook pg 150 and Appendix G rule 15e)
|
||||||
|
//
|
||||||
|
svg.x = svg.X = SVG.TeX.nulldelimiterspace;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1922,6 +1943,17 @@
|
||||||
svg.Add(box); svg.Clean();
|
svg.Add(box); svg.Clean();
|
||||||
this.SVGsaveData(svg);
|
this.SVGsaveData(svg);
|
||||||
//
|
//
|
||||||
|
// If this element is not the top-level math element
|
||||||
|
// remove the transform and return the svg object
|
||||||
|
// (issue #614).
|
||||||
|
//
|
||||||
|
if (!span) {
|
||||||
|
svg.element = svg.element.firstChild; // remove <svg> element
|
||||||
|
svg.element.removeAttribute("transform");
|
||||||
|
svg.removable = true;
|
||||||
|
return svg;
|
||||||
|
}
|
||||||
|
//
|
||||||
// Style the <svg> to get the right size and placement
|
// Style the <svg> to get the right size and placement
|
||||||
//
|
//
|
||||||
var l = Math.max(-svg.l,0), r = Math.max(svg.r-svg.w,0);
|
var l = Math.max(-svg.l,0), r = Math.max(svg.r-svg.w,0);
|
||||||
|
@ -1970,12 +2002,12 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
MML.TeXAtom.Augment({
|
MML.TeXAtom.Augment({
|
||||||
toSVG: function () {
|
toSVG: function (HW,D) {
|
||||||
this.SVGgetStyles();
|
this.SVGgetStyles();
|
||||||
var svg = this.SVG();
|
var svg = this.SVG();
|
||||||
this.SVGhandleSpace(svg);
|
this.SVGhandleSpace(svg);
|
||||||
if (this.data[0] != null) {
|
if (this.data[0] != null) {
|
||||||
var box = this.data[0].toSVG(), y = 0;
|
var box = this.data[0].SVGdataStretched(0,HW,D), y = 0;
|
||||||
if (this.texClass === MML.TEXCLASS.VCENTER) {
|
if (this.texClass === MML.TEXCLASS.VCENTER) {
|
||||||
// FIXME: should the axis height be scaled?
|
// FIXME: should the axis height be scaled?
|
||||||
y = SVG.TeX.axis_height - (box.h+box.d)/2 + box.d;
|
y = SVG.TeX.axis_height - (box.h+box.d)/2 + box.d;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user