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
|
||||
},
|
||||
|
||||
REMAPACCENT: {
|
||||
"\u2192": "\u20D7"
|
||||
},
|
||||
REMAPACCENTUNDER: {
|
||||
},
|
||||
|
||||
DELIMITERS: {
|
||||
0x0028: // (
|
||||
{
|
||||
|
|
|
@ -162,6 +162,12 @@
|
|||
0x2057: "\u2032\u2032\u2032\u2032" // quadruple prime
|
||||
},
|
||||
|
||||
REMAPACCENT: {
|
||||
"\u2192":"\u20D7"
|
||||
},
|
||||
REMAPACCENTUNDER: {
|
||||
},
|
||||
|
||||
PLANE1MAP: [
|
||||
[0x1D400,0x1D419, 0x41, MML.VARIANT.BOLD],
|
||||
[0x1D41A,0x1D433, 0x61, MML.VARIANT.BOLD],
|
||||
|
|
|
@ -1854,24 +1854,47 @@
|
|||
span = this.HTMLhandleSize(this.HTMLcreateSpan(span));
|
||||
if (this.data.length == 0) {return span} else {span.bbox = null}
|
||||
var text = this.data.join("");
|
||||
//
|
||||
// Get the variant, and check for operator size
|
||||
//
|
||||
var variant = this.HTMLgetVariant();
|
||||
var values = this.getValues("largeop","displaystyle");
|
||||
if (values.largeop)
|
||||
{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);
|
||||
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]/))
|
||||
{variant = HTMLCSS.FONTDATA.VARIANT["-STIX-variant"]}
|
||||
//
|
||||
// Typeset contents
|
||||
//
|
||||
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 (!span.bbox) {span.bbox = {w:0, h:0, d:0, rw:0, lw:0}}
|
||||
if (text.length !== 1) {delete span.bbox.skew}
|
||||
//
|
||||
// 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) {
|
||||
// Handle combining characters by adding a non-breaking space and removing that width
|
||||
span.firstChild.nodeValue += HTMLCSS.NBSP;
|
||||
HTMLCSS.createSpace(span,0,0,-span.offsetWidth/HTMLCSS.em);
|
||||
}
|
||||
//
|
||||
// Handle large operator centering
|
||||
//
|
||||
if (values.largeop) {
|
||||
var p = (span.bbox.h - span.bbox.d)/2 - HTMLCSS.TeX.axis_height*span.scale;
|
||||
if (HTMLCSS.safariVerticalAlignBug && span.lastChild.nodeName === "IMG") {
|
||||
|
@ -1891,10 +1914,26 @@
|
|||
span.bbox.w = span.bbox.rw;
|
||||
}
|
||||
}
|
||||
//
|
||||
// Finish up
|
||||
//
|
||||
this.HTMLhandleSpace(span);
|
||||
this.HTMLhandleColor(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: {
|
||||
'*':"\u2217",
|
||||
'"':"\u2033",
|
||||
|
@ -1916,6 +1955,13 @@
|
|||
if (!this.Get("stretchy")) {return false}
|
||||
var c = this.data.join("");
|
||||
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)];
|
||||
return (c && c.dir == direction.substr(0,1));
|
||||
},
|
||||
|
|
|
@ -161,6 +161,12 @@
|
|||
0x2057: "\u2032\u2032\u2032\u2032" // quadruple prime
|
||||
},
|
||||
|
||||
REMAPACCENT: {
|
||||
"\u2192":"\u20D7"
|
||||
},
|
||||
REMAPACCENTUNDER: {
|
||||
},
|
||||
|
||||
PLANE1MAP: [
|
||||
[0x1D400,0x1D419, 0x41, MML.VARIANT.BOLD],
|
||||
[0x1D41A,0x1D433, 0x61, MML.VARIANT.BOLD],
|
||||
|
|
|
@ -1220,13 +1220,28 @@
|
|||
this.SVGgetStyles();
|
||||
var svg = this.svg = this.SVG(); this.SVGhandleSpace(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 values = this.getValues("largeop","displaystyle");
|
||||
if (values.largeop)
|
||||
{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);
|
||||
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++) {
|
||||
if (this.data[i]) {
|
||||
var text = this.data[i].toSVG(variant,scale,this.SVGremap,mapchars), x = svg.w;
|
||||
|
@ -1237,14 +1252,33 @@
|
|||
}
|
||||
svg.Clean();
|
||||
if (this.data.join("").length !== 1) {delete svg.skew}
|
||||
//
|
||||
// Handle large operator centering
|
||||
//
|
||||
if (values.largeop) {
|
||||
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}
|
||||
}
|
||||
//
|
||||
// Finish up
|
||||
//
|
||||
this.SVGhandleColor(svg);
|
||||
this.SVGsaveData(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: {
|
||||
'*':"\u2217",
|
||||
'"':"\u2033",
|
||||
|
@ -1266,6 +1300,13 @@
|
|||
if (!this.Get("stretchy")) {return false}
|
||||
var c = this.data.join("");
|
||||
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)];
|
||||
var can = (c && c.dir == direction.substr(0,1));
|
||||
if (!can) {delete this.svg}
|
||||
|
|
Loading…
Reference in New Issue
Block a user