Browse Source

Move the checks for problematic Unicode locations from |adjustMapping| to a separate helper function

Jonas Jenwald 10 years ago
parent
commit
a54ec673c5
  1. 35
      src/core/fonts.js

35
src/core/fonts.js

@ -2655,6 +2655,31 @@ var Font = (function FontClosure() {
return readUint32(header, 0) === 0x00010000; return readUint32(header, 0) === 0x00010000;
} }
/**
* Helper function for |adjustMapping|.
* @return {boolean}
*/
function isProblematicUnicodeLocation(code) {
if (code <= 0x1F) { // Control chars
return true;
}
if (code >= 0x80 && code <= 0x9F) { // Control chars
return true;
}
if (code >= 0xFFF0 && code <= 0xFFFF) { // Specials Unicode block
return true;
}
switch (code) {
case 0x7F: // Control char
case 0xA0: // Non breaking space
case 0xAD: // Soft hyphen
case 0x0E33: // Thai character SARA AM
case 0x25CC: // Dotted circle (combining mark)
return true;
}
return false;
}
/** /**
* Rebuilds the char code to glyph ID map by trying to replace the char codes * Rebuilds the char code to glyph ID map by trying to replace the char codes
* with their unicode value. It also moves char codes that are in known * with their unicode value. It also moves char codes that are in known
@ -2694,15 +2719,7 @@ var Font = (function FontClosure() {
// characters probably aren't in the correct position (fixes an issue // characters probably aren't in the correct position (fixes an issue
// with firefox and thuluthfont). // with firefox and thuluthfont).
if ((usedFontCharCodes[fontCharCode] !== undefined || if ((usedFontCharCodes[fontCharCode] !== undefined ||
fontCharCode <= 0x1f || // Control chars isProblematicUnicodeLocation(fontCharCode) ||
fontCharCode === 0x7F || // Control char
fontCharCode === 0xAD || // Soft hyphen
fontCharCode === 0xA0 || // Non breaking space
fontCharCode === 0x0E33 || // Thai character SARA AM
fontCharCode === 0x25CC || // Dotted circle (combining mark)
(fontCharCode >= 0x80 && fontCharCode <= 0x9F) || // Control chars
// Prevent drawing characters in the specials unicode block.
(fontCharCode >= 0xFFF0 && fontCharCode <= 0xFFFF) ||
(isSymbolic && isIdentityUnicode)) && (isSymbolic && isIdentityUnicode)) &&
nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END) { // Room left. nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END) { // Room left.
// Loop to try and find a free spot in the private use area. // Loop to try and find a free spot in the private use area.

Loading…
Cancel
Save