Update \unicode to work with SVG, and to better handle fonts and sizes. Also fix HTML-CSS font size when fontfamily is specified
This commit is contained in:
parent
52755c4c3d
commit
af2cd3476f
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -12,5 +12,5 @@
|
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
MathJax.Extension["TeX/unicode"]={version:"1.1",unicode:{},config:MathJax.Hub.CombineConfig("TeX.unicode",{fonts:"STIXGeneral,'Arial Unicode MS'"})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var d=MathJax.InputJax.TeX;var a=MathJax.ElementJax.mml;var c=MathJax.Extension["TeX/unicode"].config.fonts;var b=MathJax.Extension["TeX/unicode"].unicode;d.Definitions.macros.unicode="Unicode";d.Parse.Augment({Unicode:function(f){var j=this.GetBrackets(f),e;if(j){if(j.replace(/ /g,"").match(/^(\d+(\.\d*)?|\.\d+),(\d+(\.\d*)?|\.\d+)$/)){j=j.replace(/ /g,"").split(/,/);e=this.GetBrackets(f)}else{e=j;j=null}}var k=this.trimSpaces(this.GetArgument(f)),i=parseInt(k.match(/^x/)?"0"+k:k);b[i]=[800,200,500,0,500,{isUnknown:true,isUnicode:true,font:c}];if(j){b[i][0]=Math.floor(j[0]*1000);b[i][1]=Math.floor(j[1]*1000)}var g=this.stack.env.font,h={};if(e){h.fontfamily=e.replace(/"/g,"'");if(g){if(g.match(/bold/)){h.fontweight="bold"}if(g.match(/italic/)){h.fontstyle="italic"}}b[i][5].font=e+","+c}else{if(g){h.mathvariant=g}}this.Push(a.mtext(a.entity("#"+k)).With(h))}})});MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var a=MathJax.OutputJax["HTML-CSS"];var c=MathJax.Extension["TeX/unicode"].unicode;var b=a.lookupChar;a.Augment({lookupChar:function(e,f){var d=b.call(this,e,f);if(d[f][5]&&d[f][5].isUnknown&&c[f]){d[f]=c[f]}return d}});MathJax.Hub.Startup.signal.Post("TeX unicode Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/unicode.js");
|
||||
MathJax.Extension["TeX/unicode"]={version:"1.1",unicode:{},config:MathJax.Hub.CombineConfig("TeX.unicode",{fonts:"STIXGeneral,'Arial Unicode MS'"})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var c=MathJax.InputJax.TeX;var a=MathJax.ElementJax.mml;var b=MathJax.Extension["TeX/unicode"].unicode;c.Definitions.macros.unicode="Unicode";c.Parse.Augment({Unicode:function(e){var i=this.GetBrackets(e),d;if(i){if(i.replace(/ /g,"").match(/^(\d+(\.\d*)?|\.\d+),(\d+(\.\d*)?|\.\d+)$/)){i=i.replace(/ /g,"").split(/,/);d=this.GetBrackets(e)}else{d=i;i=null}}var j=this.trimSpaces(this.GetArgument(e)),h=parseInt(j.match(/^x/)?"0"+j:j);if(!b[h]){b[h]=[800,200,d,h]}else{if(!d){d=b[h][2]}}if(i){b[h][0]=Math.floor(i[0]*1000);b[h][1]=Math.floor(i[1]*1000)}var f=this.stack.env.font,g={};if(d){b[h][2]=g.fontfamily=d.replace(/"/g,"'");if(f){if(f.match(/bold/)){g.fontweight="bold"}if(f.match(/italic|-mathit/)){g.fontstyle="italic"}}}else{if(f){g.mathvariant=f}}g.unicode=[].concat(b[h]);this.Push(a.mtext(a.entity("#"+j)).With(g))}});MathJax.Hub.Startup.signal.Post("TeX unicode Ready")});MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var a=MathJax.ElementJax.mml;var c=MathJax.Extension["TeX/unicode"].config.fonts;var b=a.mbase.prototype.HTMLgetVariant;a.mbase.Augment({HTMLgetVariant:function(){var d=b.call(this);if(d.unicode){delete d.unicode;delete d.FONTS}if(!this.unicode){return d}d.unicode=true;if(!d.defaultFont){d=MathJax.Hub.Insert({},d);d.defaultFont={family:c}}var e=this.unicode[2];if(e){e+=","+c}else{e=c}d.defaultFont[this.unicode[3]]=[this.unicode[0],this.unicode[1],500,0,500,{isUnknown:true,isUnicode:true,font:e}];return d}})});MathJax.Hub.Register.StartupHook("SVG Jax Ready",function(){var a=MathJax.ElementJax.mml;var c=MathJax.Extension["TeX/unicode"].config.fonts;var b=a.mbase.prototype.SVGgetVariant;a.mbase.Augment({SVGgetVariant:function(){var d=b.call(this);if(d.unicode){delete d.unicode;delete d.FONTS}if(!this.unicode){return d}d.unicode=true;if(!d.forceFamily){d=MathJax.Hub.Insert({},d)}d.defaultFamily=c;d.noRemap=true;d.h=this.unicode[0];d.d=this.unicode[1];return d}})});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/unicode.js");
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -14,7 +14,7 @@
|
|||
* \unicode[.55,0.05][Geramond]{x22D6} % same taken from Geramond font
|
||||
* \unicode[Garamond]{x22D6} % same, but with default height, depth of .8,.2
|
||||
*
|
||||
* Once a size and font are provided for a given conde point, they need
|
||||
* Once a size and font are provided for a given code point, they need
|
||||
* not be specified again in subsequent \unicode calls for that character.
|
||||
* Note that a font list can be given, but Internet Explorer has a buggy
|
||||
* implementation of font-family where it only looks in the first
|
||||
|
@ -69,7 +69,6 @@ MathJax.Extension["TeX/unicode"] = {
|
|||
MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
||||
var TEX = MathJax.InputJax.TeX;
|
||||
var MML = MathJax.ElementJax.mml;
|
||||
var FONTS = MathJax.Extension["TeX/unicode"].config.fonts;
|
||||
var UNICODE = MathJax.Extension["TeX/unicode"].unicode;
|
||||
|
||||
//
|
||||
|
@ -89,44 +88,77 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
|
|||
}
|
||||
var n = this.trimSpaces(this.GetArgument(name)),
|
||||
N = parseInt(n.match(/^x/) ? "0"+n : n);
|
||||
UNICODE[N] = [800,200,500,0,500,{isUnknown:true, isUnicode:true, font:FONTS}];
|
||||
if (!UNICODE[N]) {UNICODE[N] = [800,200,font,N]}
|
||||
else if (!font) {font = UNICODE[N][2]}
|
||||
if (HD) {
|
||||
UNICODE[N][0] = Math.floor(HD[0]*1000);
|
||||
UNICODE[N][1] = Math.floor(HD[1]*1000);
|
||||
}
|
||||
var variant = this.stack.env.font, def = {};
|
||||
if (font) {
|
||||
def.fontfamily = font.replace(/"/g,"'");
|
||||
UNICODE[N][2] = def.fontfamily = font.replace(/"/g,"'");
|
||||
if (variant) {
|
||||
if (variant.match(/bold/)) {def.fontweight = "bold"}
|
||||
if (variant.match(/italic/)) {def.fontstyle = "italic"}
|
||||
if (variant.match(/italic|-mathit/)) {def.fontstyle = "italic"}
|
||||
}
|
||||
UNICODE[N][5].font = font+","+FONTS
|
||||
} else if (variant) {def.mathvariant = variant}
|
||||
def.unicode = [].concat(UNICODE[N]); // make a copy
|
||||
this.Push(MML.mtext(MML.entity("#"+n)).With(def));
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||
var HTMLCSS = MathJax.OutputJax["HTML-CSS"];
|
||||
var UNICODE = MathJax.Extension["TeX/unicode"].unicode;
|
||||
|
||||
//
|
||||
// Override lookupChar to add unicode character to font
|
||||
//
|
||||
var save_lookupChar = HTMLCSS.lookupChar;
|
||||
HTMLCSS.Augment({
|
||||
lookupChar: function (variant,n) {
|
||||
var font = save_lookupChar.call(this,variant,n);
|
||||
if (font[n][5] && font[n][5].isUnknown && UNICODE[n]) {font[n] = UNICODE[n]}
|
||||
return font;
|
||||
}
|
||||
});
|
||||
|
||||
MathJax.Hub.Startup.signal.Post("TeX unicode Ready");
|
||||
|
||||
});
|
||||
|
||||
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
|
||||
var MML = MathJax.ElementJax.mml;
|
||||
var FONTS = MathJax.Extension["TeX/unicode"].config.fonts;
|
||||
|
||||
//
|
||||
// Override getVariant to make one that includes the font and size
|
||||
//
|
||||
var GETVARIANT = MML.mbase.prototype.HTMLgetVariant;
|
||||
MML.mbase.Augment({
|
||||
HTMLgetVariant: function () {
|
||||
var variant = GETVARIANT.call(this);
|
||||
if (variant.unicode) {delete variant.unicode; delete variant.FONTS} // clear font cache in case of restart
|
||||
if (!this.unicode) {return variant}
|
||||
variant.unicode = true;
|
||||
if (!variant.defaultFont) {
|
||||
variant = MathJax.Hub.Insert({},variant); // make a copy
|
||||
variant.defaultFont = {family:FONTS};
|
||||
}
|
||||
var family = this.unicode[2]; if (family) {family += ","+FONTS} else {family = FONTS}
|
||||
variant.defaultFont[this.unicode[3]] = [
|
||||
this.unicode[0],this.unicode[1],500,0,500,
|
||||
{isUnknown:true, isUnicode:true, font:family}
|
||||
];
|
||||
return variant;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
||||
var MML = MathJax.ElementJax.mml;
|
||||
var FONTS = MathJax.Extension["TeX/unicode"].config.fonts;
|
||||
|
||||
//
|
||||
// Override getVariant to make one that includes the font and size
|
||||
//
|
||||
var GETVARIANT = MML.mbase.prototype.SVGgetVariant;
|
||||
MML.mbase.Augment({
|
||||
SVGgetVariant: function () {
|
||||
var variant = GETVARIANT.call(this);
|
||||
if (variant.unicode) {delete variant.unicode; delete variant.FONTS} // clear font cache in case of restart
|
||||
if (!this.unicode) {return variant}
|
||||
variant.unicode = true;
|
||||
if (!variant.forceFamily) {variant = MathJax.Hub.Insert({},variant)} // make a copy
|
||||
variant.defaultFamily = FONTS; variant.noRemap = true;
|
||||
variant.h = this.unicode[0]; variant.d = this.unicode[1];
|
||||
return variant;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/unicode.js");
|
||||
|
|
|
@ -1274,6 +1274,7 @@
|
|||
|
||||
handleFont: function (span,font,force) {
|
||||
span.style.fontFamily = font.family;
|
||||
if (!font.directory) {span.style.fontSize = Math.floor(100/HTMLCSS.scale+.5) + "%"}
|
||||
if (!(HTMLCSS.FontFaceBug && font.isWebFont)) {
|
||||
var style = font.style || "normal", weight = font.weight || "normal";
|
||||
if (style !== "normal" || force) {span.style.fontStyle = style}
|
||||
|
@ -1340,7 +1341,7 @@
|
|||
unknownChar: function (variant,n) {
|
||||
var unknown = (variant.defaultFont || {family:HTMLCSS.config.undefinedFamily});
|
||||
if (variant.bold) {unknown.weight = "bold"}; if (variant.italic) {unknown.style = "italic"}
|
||||
unknown[n] = [800,200,500,0,500,{isUnknown:true}]; // [h,d,w,lw,rw,{data}]
|
||||
if (!unknown[n]) {unknown[n] = [800,200,500,0,500,{isUnknown:true}]} // [h,d,w,lw,rw,{data}]
|
||||
HUB.signal.Post(["HTML-CSS Jax - unknown char",n,variant]);
|
||||
return unknown;
|
||||
},
|
||||
|
|
|
@ -466,8 +466,9 @@
|
|||
var n, c, font, VARIANT, i, m, id, M, RANGES;
|
||||
if (!variant) {variant = this.FONTDATA.VARIANT[MML.VARIANT.NORMAL]}
|
||||
if (variant.forceFamily) {
|
||||
svg.Add(BBOX.TEXT(scale,text,variant.font));
|
||||
text = "";
|
||||
text = BBOX.TEXT(scale,text,variant.font);
|
||||
if (variant.h != null) {text.h = variant.h}; if (variant.d != null) {text.d = variant.d}
|
||||
svg.Add(text); text = "";
|
||||
}
|
||||
VARIANT = variant;
|
||||
for (i = 0, m = text.length; i < m; i++) {
|
||||
|
@ -514,9 +515,13 @@
|
|||
} else if (this.FONTDATA.DELIMITERS[n]) {
|
||||
svg.Add(this.createDelimiter(n,0,1,font),svg.w,0);
|
||||
} else {
|
||||
c = BBOX.G();
|
||||
c.Add(BBOX.TEXT(scale,String.fromCharCode(n),{"font-family":SVG.config.MISSINGFONT}));
|
||||
svg.Add(c,svg.w,0);
|
||||
text = BBOX.TEXT(scale,String.fromCharCode(n),{
|
||||
"font-family":variant.defaultFamily||SVG.config.MISSINGFONT,
|
||||
"font-style":(variant.italic?"italic":""),
|
||||
"font-weight":(variant.bold?"bold":"")
|
||||
})
|
||||
if (variant.h != null) {text.h = variant.h}; if (variant.d != null) {text.d = variant.d}
|
||||
c = BBOX.G(); c.Add(text); svg.Add(c,svg.w,0); text = "";
|
||||
HUB.signal.Post(["SVG Jax - unknown char",n,variant]);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user