Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move symbolic font glyphs to private use area if they don't have unicode mappings (issue 2594, bug 789074, bug 865644) #7705

Merged
merged 2 commits into from Dec 10, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/core/fonts.js
Expand Up @@ -879,7 +879,7 @@ var Font = (function FontClosure() {
}

/**
* Helper function for |adjustMapping|.
* Helper function for `adjustMapping`.
* @return {boolean}
*/
function isProblematicUnicodeLocation(code) {
Expand Down Expand Up @@ -922,7 +922,9 @@ var Font = (function FontClosure() {
var fontCharCode = originalCharCode;
// First try to map the value to a unicode position if a non identity map
// was created.
var hasUnicodeValue = false;
if (!isIdentityUnicode && toUnicode.has(originalCharCode)) {
hasUnicodeValue = true;
var unicode = toUnicode.get(fontCharCode);
// TODO: Try to map ligatures to the correct spot.
if (unicode.length === 1) {
Expand All @@ -937,7 +939,7 @@ var Font = (function FontClosure() {
// with firefox and thuluthfont).
if ((usedFontCharCodes[fontCharCode] !== undefined ||
isProblematicUnicodeLocation(fontCharCode) ||
(isSymbolic && isIdentityUnicode)) &&
(isSymbolic && !hasUnicodeValue)) &&
nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END) { // Room left.
// Loop to try and find a free spot in the private use area.
do {
Expand Down
119 changes: 119 additions & 0 deletions src/core/glyphlist.js
Expand Up @@ -1480,6 +1480,7 @@ var getGlyphsUnicode = getLookupTableFactory(function (t) {
t['controlHT'] = 0x0009;
t['controlLF'] = 0x000A;
t['controlNAK'] = 0x0015;
t['controlNULL'] = 0x0000; // Glyph is missing from Adobe's original list.
t['controlRS'] = 0x001E;
t['controlSI'] = 0x000F;
t['controlSO'] = 0x000E;
Expand Down Expand Up @@ -4231,6 +4232,124 @@ var getGlyphsUnicode = getLookupTableFactory(function (t) {
t['zuhiragana'] = 0x305A;
t['zukatakana'] = 0x30BA;
t['.notdef'] = 0x0000;

// TeX-specific glyph names.
t['angbracketleftbig'] = 0x2329;
t['angbracketleftBig'] = 0x2329;
t['angbracketleftbigg'] = 0x2329;
t['angbracketleftBigg'] = 0x2329;
t['angbracketrightBig'] = 0x232A;
t['angbracketrightbig'] = 0x232A;
t['angbracketrightBigg'] = 0x232A;
t['angbracketrightbigg'] = 0x232A;
t['arrowhookleft'] = 0x21AA;
t['arrowhookright'] = 0x21A9;
t['arrowlefttophalf'] = 0x21BC;
t['arrowleftbothalf'] = 0x21BD;
t['arrownortheast'] = 0x2197;
t['arrownorthwest'] = 0x2196;
t['arrowrighttophalf'] = 0x21C0;
t['arrowrightbothalf'] = 0x21C1;
t['arrowsoutheast'] = 0x2198;
t['arrowsouthwest'] = 0x2199;
t['backslashbig'] = 0x2216;
t['backslashBig'] = 0x2216;
t['backslashBigg'] = 0x2216;
t['backslashbigg'] = 0x2216;
t['bardbl'] = 0x2016;
t['bracehtipdownleft'] = 0xFE37;
t['bracehtipdownright'] = 0xFE37;
t['bracehtipupleft'] = 0xFE38;
t['bracehtipupright'] = 0xFE38;
t['braceleftBig'] = 0x007B;
t['braceleftbig'] = 0x007B;
t['braceleftbigg'] = 0x007B;
t['braceleftBigg'] = 0x007B;
t['bracerightBig'] = 0x007D;
t['bracerightbig'] = 0x007D;
t['bracerightbigg'] = 0x007D;
t['bracerightBigg'] = 0x007D;
t['bracketleftbig'] = 0x005B;
t['bracketleftBig'] = 0x005B;
t['bracketleftbigg'] = 0x005B;
t['bracketleftBigg'] = 0x005B;
t['bracketrightBig'] = 0x005D;
t['bracketrightbig'] = 0x005D;
t['bracketrightbigg'] = 0x005D;
t['bracketrightBigg'] = 0x005D;
t['ceilingleftbig'] = 0x2308;
t['ceilingleftBig'] = 0x2308;
t['ceilingleftBigg'] = 0x2308;
t['ceilingleftbigg'] = 0x2308;
t['ceilingrightbig'] = 0x2309;
t['ceilingrightBig'] = 0x2309;
t['ceilingrightbigg'] = 0x2309;
t['ceilingrightBigg'] = 0x2309;
t['circledotdisplay'] = 0x2299;
t['circledottext'] = 0x2299;
t['circlemultiplydisplay'] = 0x2297;
t['circlemultiplytext'] = 0x2297;
t['circleplusdisplay'] = 0x2295;
t['circleplustext'] = 0x2295;
t['contintegraldisplay'] = 0x222E;
t['contintegraltext'] = 0x222E;
t['coproductdisplay'] = 0x2210;
t['coproducttext'] = 0x2210;
t['floorleftBig'] = 0x230A;
t['floorleftbig'] = 0x230A;
t['floorleftbigg'] = 0x230A;
t['floorleftBigg'] = 0x230A;
t['floorrightbig'] = 0x230B;
t['floorrightBig'] = 0x230B;
t['floorrightBigg'] = 0x230B;
t['floorrightbigg'] = 0x230B;
t['hatwide'] = 0x0302;
t['hatwider'] = 0x0302;
t['hatwidest'] = 0x0302;
t['intercal'] = 0x1D40;
t['integraldisplay'] = 0x222B;
t['integraltext'] = 0x222B;
t['intersectiondisplay'] = 0x22C2;
t['intersectiontext'] = 0x22C2;
t['logicalanddisplay'] = 0x2227;
t['logicalandtext'] = 0x2227;
t['logicalordisplay'] = 0x2228;
t['logicalortext'] = 0x2228;
t['parenleftBig'] = 0x0028;
t['parenleftbig'] = 0x0028;
t['parenleftBigg'] = 0x0028;
t['parenleftbigg'] = 0x0028;
t['parenrightBig'] = 0x0029;
t['parenrightbig'] = 0x0029;
t['parenrightBigg'] = 0x0029;
t['parenrightbigg'] = 0x0029;
t['prime'] = 0x2032;
t['productdisplay'] = 0x220F;
t['producttext'] = 0x220F;
t['radicalbig'] = 0x221A;
t['radicalBig'] = 0x221A;
t['radicalBigg'] = 0x221A;
t['radicalbigg'] = 0x221A;
t['radicalbt'] = 0x221A;
t['radicaltp'] = 0x221A;
t['radicalvertex'] = 0x221A;
t['slashbig'] = 0x002F;
t['slashBig'] = 0x002F;
t['slashBigg'] = 0x002F;
t['slashbigg'] = 0x002F;
t['summationdisplay'] = 0x2211;
t['summationtext'] = 0x2211;
t['tildewide'] = 0x02DC;
t['tildewider'] = 0x02DC;
t['tildewidest'] = 0x02DC;
t['uniondisplay'] = 0x22C3;
t['unionmultidisplay'] = 0x228E;
t['unionmultitext'] = 0x228E;
t['unionsqdisplay'] = 0x2294;
t['unionsqtext'] = 0x2294;
t['uniontext'] = 0x22C3;
t['vextenddouble'] = 0x2225;
t['vextendsingle'] = 0x2223;
});

var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {
Expand Down