Modify accents to use better characters in some circumstances (basically the right arrow at the moment)

This commit is contained in:
Davide P. Cervone 2012-01-15 15:26:36 -05:00
parent db55f22ba7
commit 9a092fe68b
14 changed files with 119 additions and 14 deletions

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

View File

@ -114,6 +114,12 @@
0x2758: 0x2223 // VerticalSeparator
},
REMAPACCENT: {
"\u2192": "\u20D7"
},
REMAPACCENTUNDER: {
},
DELIMITERS: {
0x0028: // (
{

View File

@ -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],

View File

@ -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));
},

View File

@ -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],

View File

@ -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}