Modify accents to use better characters in some circumstances (basically the right arrow at the moment)
This commit is contained in:
parent
db55f22ba7
commit
9a092fe68b
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
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
File diff suppressed because one or more lines are too long
|
@ -114,6 +114,12 @@
|
||||||
0x2758: 0x2223 // VerticalSeparator
|
0x2758: 0x2223 // VerticalSeparator
|
||||||
},
|
},
|
||||||
|
|
||||||
|
REMAPACCENT: {
|
||||||
|
"\u2192": "\u20D7"
|
||||||
|
},
|
||||||
|
REMAPACCENTUNDER: {
|
||||||
|
},
|
||||||
|
|
||||||
DELIMITERS: {
|
DELIMITERS: {
|
||||||
0x0028: // (
|
0x0028: // (
|
||||||
{
|
{
|
||||||
|
|
|
@ -162,6 +162,12 @@
|
||||||
0x2057: "\u2032\u2032\u2032\u2032" // quadruple prime
|
0x2057: "\u2032\u2032\u2032\u2032" // quadruple prime
|
||||||
},
|
},
|
||||||
|
|
||||||
|
REMAPACCENT: {
|
||||||
|
"\u2192":"\u20D7"
|
||||||
|
},
|
||||||
|
REMAPACCENTUNDER: {
|
||||||
|
},
|
||||||
|
|
||||||
PLANE1MAP: [
|
PLANE1MAP: [
|
||||||
[0x1D400,0x1D419, 0x41, MML.VARIANT.BOLD],
|
[0x1D400,0x1D419, 0x41, MML.VARIANT.BOLD],
|
||||||
[0x1D41A,0x1D433, 0x61, MML.VARIANT.BOLD],
|
[0x1D41A,0x1D433, 0x61, MML.VARIANT.BOLD],
|
||||||
|
|
|
@ -1854,24 +1854,47 @@
|
||||||
span = this.HTMLhandleSize(this.HTMLcreateSpan(span));
|
span = this.HTMLhandleSize(this.HTMLcreateSpan(span));
|
||||||
if (this.data.length == 0) {return span} else {span.bbox = null}
|
if (this.data.length == 0) {return span} else {span.bbox = null}
|
||||||
var text = this.data.join("");
|
var text = this.data.join("");
|
||||||
|
//
|
||||||
|
// Get the variant, and check for operator size
|
||||||
|
//
|
||||||
var variant = this.HTMLgetVariant();
|
var variant = this.HTMLgetVariant();
|
||||||
var values = this.getValues("largeop","displaystyle");
|
var values = this.getValues("largeop","displaystyle");
|
||||||
if (values.largeop)
|
if (values.largeop)
|
||||||
{variant = HTMLCSS.FONTDATA.VARIANT[values.displaystyle ? "-largeOp" : "-smallOp"]}
|
{variant = HTMLCSS.FONTDATA.VARIANT[values.displaystyle ? "-largeOp" : "-smallOp"]}
|
||||||
var parent = this.Parent(),
|
//
|
||||||
isScript = (parent.isa(MML.msubsup) && this !== parent.data[0]),
|
// Get character translation for superscript and accents
|
||||||
|
//
|
||||||
|
var parent = this.CoreParent(),
|
||||||
|
isScript = (parent && parent.isa(MML.msubsup) && this !== parent.data[parent.base]),
|
||||||
mapchars = (isScript?this.HTMLremapChars:null);
|
mapchars = (isScript?this.HTMLremapChars:null);
|
||||||
|
if (text.length === 1 && parent && parent.isa(MML.munderover) &&
|
||||||
|
this.CoreText(parent.data[parent.base]).length === 1) {
|
||||||
|
var over = parent.data[parent.over], under = parent.data[parent.under];
|
||||||
|
if (over && this === over.CoreMO() && parent.Get("accent")) {mapchars = HTMLCSS.FONTDATA.REMAPACCENT}
|
||||||
|
else if (under && this === under.CoreMO() && parent.Get("accentunder")) {mapchars = HTMLCSS.FONTDATA.REMAPACCENTUNDER}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// STIX fonts need quotes from variant font
|
||||||
|
//
|
||||||
if (isScript && HTMLCSS.fontInUse === "STIX" && text.match(/['`"\u00B4]/))
|
if (isScript && HTMLCSS.fontInUse === "STIX" && text.match(/['`"\u00B4]/))
|
||||||
{variant = HTMLCSS.FONTDATA.VARIANT["-STIX-variant"]}
|
{variant = HTMLCSS.FONTDATA.VARIANT["-STIX-variant"]}
|
||||||
|
//
|
||||||
|
// Typeset contents
|
||||||
|
//
|
||||||
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,this.HTMLremap,mapchars)}}
|
{if (this.data[i]) {this.data[i].toHTML(span,variant,this.HTMLremap,mapchars)}}
|
||||||
if (!span.bbox) {span.bbox = {w:0, h:0, d:0, rw:0, lw:0}}
|
if (!span.bbox) {span.bbox = {w:0, h:0, d:0, rw:0, lw:0}}
|
||||||
if (text.length !== 1) {delete span.bbox.skew}
|
if (text.length !== 1) {delete span.bbox.skew}
|
||||||
if (HTMLCSS.AccentBug && span.bbox.w === 0 && text.length === 1 && span.firstChild) {
|
//
|
||||||
// Handle combining characters by adding a non-breaking space and removing that width
|
// Handle combining characters by adding a non-breaking space and removing that width
|
||||||
|
//
|
||||||
|
if (HTMLCSS.AccentBug && span.bbox.w === 0 && text.length === 1 && span.firstChild) {
|
||||||
span.firstChild.nodeValue += HTMLCSS.NBSP;
|
span.firstChild.nodeValue += HTMLCSS.NBSP;
|
||||||
HTMLCSS.createSpace(span,0,0,-span.offsetWidth/HTMLCSS.em);
|
HTMLCSS.createSpace(span,0,0,-span.offsetWidth/HTMLCSS.em);
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// Handle large operator centering
|
||||||
|
//
|
||||||
if (values.largeop) {
|
if (values.largeop) {
|
||||||
var p = (span.bbox.h - span.bbox.d)/2 - HTMLCSS.TeX.axis_height*span.scale;
|
var p = (span.bbox.h - span.bbox.d)/2 - HTMLCSS.TeX.axis_height*span.scale;
|
||||||
if (HTMLCSS.safariVerticalAlignBug && span.lastChild.nodeName === "IMG") {
|
if (HTMLCSS.safariVerticalAlignBug && span.lastChild.nodeName === "IMG") {
|
||||||
|
@ -1891,10 +1914,26 @@
|
||||||
span.bbox.w = span.bbox.rw;
|
span.bbox.w = span.bbox.rw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// Finish up
|
||||||
|
//
|
||||||
this.HTMLhandleSpace(span);
|
this.HTMLhandleSpace(span);
|
||||||
this.HTMLhandleColor(span);
|
this.HTMLhandleColor(span);
|
||||||
return span;
|
return span;
|
||||||
},
|
},
|
||||||
|
CoreParent: function () {
|
||||||
|
var parent = this;
|
||||||
|
while (parent && parent.isEmbellished() &&
|
||||||
|
parent.CoreMO() === this && !parent.isa(MML.math)) {parent = parent.Parent()}
|
||||||
|
return parent;
|
||||||
|
},
|
||||||
|
CoreText: function (parent) {
|
||||||
|
if (!parent) {return ""}
|
||||||
|
if (parent.isEmbellished()) {return parent.CoreMO().data.join("")}
|
||||||
|
while (parent.isa(MML.mrow) && parent.data.length === 1 && parent.data[0])
|
||||||
|
{parent = parent.data[0]}
|
||||||
|
if (!parent.isToken) {return ""} else {return parent.data.join("")}
|
||||||
|
},
|
||||||
HTMLremapChars: {
|
HTMLremapChars: {
|
||||||
'*':"\u2217",
|
'*':"\u2217",
|
||||||
'"':"\u2033",
|
'"':"\u2033",
|
||||||
|
@ -1916,6 +1955,13 @@
|
||||||
if (!this.Get("stretchy")) {return false}
|
if (!this.Get("stretchy")) {return false}
|
||||||
var c = this.data.join("");
|
var c = this.data.join("");
|
||||||
if (c.length > 1) {return false}
|
if (c.length > 1) {return false}
|
||||||
|
var parent = this.CoreParent();
|
||||||
|
if (parent && parent.isa(MML.munderover) &&
|
||||||
|
this.CoreText(parent.data[parent.base]).length === 1) {
|
||||||
|
var over = parent.data[parent.over], under = parent.data[parent.under];
|
||||||
|
if (over && this === over.CoreMO() && parent.Get("accent")) {c = HTMLCSS.FONTDATA.REMAPACCENT[c]||c}
|
||||||
|
else if (under && this === under.CoreMO() && parent.Get("accentunder")) {c = HTMLCSS.FONTDATA.REMAPACCENTUNDER[c]||c}
|
||||||
|
}
|
||||||
c = HTMLCSS.FONTDATA.DELIMITERS[c.charCodeAt(0)];
|
c = HTMLCSS.FONTDATA.DELIMITERS[c.charCodeAt(0)];
|
||||||
return (c && c.dir == direction.substr(0,1));
|
return (c && c.dir == direction.substr(0,1));
|
||||||
},
|
},
|
||||||
|
|
|
@ -161,6 +161,12 @@
|
||||||
0x2057: "\u2032\u2032\u2032\u2032" // quadruple prime
|
0x2057: "\u2032\u2032\u2032\u2032" // quadruple prime
|
||||||
},
|
},
|
||||||
|
|
||||||
|
REMAPACCENT: {
|
||||||
|
"\u2192":"\u20D7"
|
||||||
|
},
|
||||||
|
REMAPACCENTUNDER: {
|
||||||
|
},
|
||||||
|
|
||||||
PLANE1MAP: [
|
PLANE1MAP: [
|
||||||
[0x1D400,0x1D419, 0x41, MML.VARIANT.BOLD],
|
[0x1D400,0x1D419, 0x41, MML.VARIANT.BOLD],
|
||||||
[0x1D41A,0x1D433, 0x61, MML.VARIANT.BOLD],
|
[0x1D41A,0x1D433, 0x61, MML.VARIANT.BOLD],
|
||||||
|
|
|
@ -1220,13 +1220,28 @@
|
||||||
this.SVGgetStyles();
|
this.SVGgetStyles();
|
||||||
var svg = this.svg = this.SVG(); this.SVGhandleSpace(svg);
|
var svg = this.svg = this.SVG(); this.SVGhandleSpace(svg);
|
||||||
if (this.data.length == 0) {svg.Clean(); this.SVGsaveData(svg); return svg}
|
if (this.data.length == 0) {svg.Clean(); this.SVGsaveData(svg); return svg}
|
||||||
|
//
|
||||||
|
// Get the variant, and check for operator size
|
||||||
|
//
|
||||||
var scale = this.SVGgetScale(), variant = this.SVGgetVariant();
|
var scale = this.SVGgetScale(), variant = this.SVGgetVariant();
|
||||||
var values = this.getValues("largeop","displaystyle");
|
var values = this.getValues("largeop","displaystyle");
|
||||||
if (values.largeop)
|
if (values.largeop)
|
||||||
{variant = SVG.FONTDATA.VARIANT[values.displaystyle ? "-largeOp" : "-smallOp"]}
|
{variant = SVG.FONTDATA.VARIANT[values.displaystyle ? "-largeOp" : "-smallOp"]}
|
||||||
var parent = this.Parent(),
|
//
|
||||||
isScript = (parent.isa(MML.msubsup) && this !== parent.data[0]),
|
// Get character translation for superscript and accents
|
||||||
|
//
|
||||||
|
var parent = this.CoreParent(),
|
||||||
|
isScript = (parent && parent.isa(MML.msubsup) && this !== parent.data[0]),
|
||||||
mapchars = (isScript?this.SVGremapChars:null);
|
mapchars = (isScript?this.SVGremapChars:null);
|
||||||
|
if (this.data.join("").length === 1 && parent && parent.isa(MML.munderover) &&
|
||||||
|
this.CoreText(parent.data[parent.base]).length === 1) {
|
||||||
|
var over = parent.data[parent.over], under = parent.data[parent.under];
|
||||||
|
if (over && this === over.CoreMO() && parent.Get("accent")) {mapchars = SVG.FONTDATA.REMAPACCENT}
|
||||||
|
else if (under && this === under.CoreMO() && parent.Get("accentunder")) {mapchars = SVG.FONTDATA.REMAPACCENTUNDER}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Typeset contents
|
||||||
|
//
|
||||||
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]) {
|
if (this.data[i]) {
|
||||||
var text = this.data[i].toSVG(variant,scale,this.SVGremap,mapchars), x = svg.w;
|
var text = this.data[i].toSVG(variant,scale,this.SVGremap,mapchars), x = svg.w;
|
||||||
|
@ -1237,14 +1252,33 @@
|
||||||
}
|
}
|
||||||
svg.Clean();
|
svg.Clean();
|
||||||
if (this.data.join("").length !== 1) {delete svg.skew}
|
if (this.data.join("").length !== 1) {delete svg.skew}
|
||||||
|
//
|
||||||
|
// Handle large operator centering
|
||||||
|
//
|
||||||
if (values.largeop) {
|
if (values.largeop) {
|
||||||
svg.y = (svg.h - svg.d)/2/scale - SVG.TeX.axis_height;
|
svg.y = (svg.h - svg.d)/2/scale - SVG.TeX.axis_height;
|
||||||
if (svg.r > svg.w) {svg.ic = svg.r - svg.w; svg.w = svg.r}
|
if (svg.r > svg.w) {svg.ic = svg.r - svg.w; svg.w = svg.r}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// Finish up
|
||||||
|
//
|
||||||
this.SVGhandleColor(svg);
|
this.SVGhandleColor(svg);
|
||||||
this.SVGsaveData(svg);
|
this.SVGsaveData(svg);
|
||||||
return svg;
|
return svg;
|
||||||
},
|
},
|
||||||
|
CoreParent: function () {
|
||||||
|
var parent = this;
|
||||||
|
while (parent && parent.isEmbellished() &&
|
||||||
|
parent.CoreMO() === this && !parent.isa(MML.math)) {parent = parent.Parent()}
|
||||||
|
return parent;
|
||||||
|
},
|
||||||
|
CoreText: function (parent) {
|
||||||
|
if (!parent) {return ""}
|
||||||
|
if (parent.isEmbellished()) {return parent.CoreMO().data.join("")}
|
||||||
|
while (parent.isa(MML.mrow) && parent.data.length === 1 && parent.data[0])
|
||||||
|
{parent = parent.data[0]}
|
||||||
|
if (!parent.isToken) {return ""} else {return parent.data.join("")}
|
||||||
|
},
|
||||||
SVGremapChars: {
|
SVGremapChars: {
|
||||||
'*':"\u2217",
|
'*':"\u2217",
|
||||||
'"':"\u2033",
|
'"':"\u2033",
|
||||||
|
@ -1266,6 +1300,13 @@
|
||||||
if (!this.Get("stretchy")) {return false}
|
if (!this.Get("stretchy")) {return false}
|
||||||
var c = this.data.join("");
|
var c = this.data.join("");
|
||||||
if (c.length > 1) {return false}
|
if (c.length > 1) {return false}
|
||||||
|
var parent = this.CoreParent();
|
||||||
|
if (parent && parent.isa(MML.munderover) &&
|
||||||
|
this.CoreText(parent.data[parent.base]).length === 1) {
|
||||||
|
var over = parent.data[parent.over], under = parent.data[parent.under];
|
||||||
|
if (over && this === over.CoreMO() && parent.Get("accent")) {c = SVG.FONTDATA.REMAPACCENT[c]||c}
|
||||||
|
else if (under && this === under.CoreMO() && parent.Get("accentunder")) {c = SVG.FONTDATA.REMAPACCENTUNDER[c]||c}
|
||||||
|
}
|
||||||
c = SVG.FONTDATA.DELIMITERS[c.charCodeAt(0)];
|
c = SVG.FONTDATA.DELIMITERS[c.charCodeAt(0)];
|
||||||
var can = (c && c.dir == direction.substr(0,1));
|
var can = (c && c.dir == direction.substr(0,1));
|
||||||
if (!can) {delete this.svg}
|
if (!can) {delete this.svg}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user