Filled notdef in the cmap table
This commit is contained in:
parent
a56e5ade22
commit
bfe0356533
49
fonts.js
49
fonts.js
@ -182,11 +182,7 @@ var Font = (function () {
|
||||
return array;
|
||||
};
|
||||
|
||||
function string16(value, signed) {
|
||||
if (signed) {
|
||||
value ^= 0xffff;
|
||||
value += 1;
|
||||
}
|
||||
function string16(value) {
|
||||
return String.fromCharCode((value >> 8) & 0xff) +
|
||||
String.fromCharCode(value & 0xff);
|
||||
};
|
||||
@ -275,6 +271,7 @@ var Font = (function () {
|
||||
};
|
||||
|
||||
function createCMapTable(glyphs) {
|
||||
glyphs.push({unicode: 0x000});
|
||||
var ranges = getRanges(glyphs);
|
||||
|
||||
var headerSize = (12 * 2 + (ranges.length * 4 * 2));
|
||||
@ -308,7 +305,7 @@ var Font = (function () {
|
||||
var range = ranges[i];
|
||||
var start = range[0];
|
||||
var end = range[1];
|
||||
var delta = (((start - 1) - bias) ^ 0xffff) + 1;
|
||||
var delta = (((start - 1) - bias) ^ 0xffff);
|
||||
bias += (end - start + 1);
|
||||
|
||||
startCount += string16(start);
|
||||
@ -734,21 +731,18 @@ var Font = (function () {
|
||||
* while Windows use this data. So be careful if you hack on Linux and
|
||||
* have to touch the 'hmtx' table
|
||||
*/
|
||||
hmtx = "\x01\xF4\x00\x00"; // Fake .notdef
|
||||
hmtx = "\x00\x00\x00\x00"; // Fake .notdef
|
||||
var width = 0, lsb = 0;
|
||||
for (var i = 0; i < charstrings.length; i++) {
|
||||
var charstring = charstrings[i];
|
||||
if (fontCount == 9) {
|
||||
log(charstring.glyph + "::" + charstring.width + "::" + charstring.lsb);
|
||||
}
|
||||
hmtx += string16(charstring.width) + string16(charstring.lsb, true);
|
||||
hmtx += string16(charstring.width) + string16(0);
|
||||
}
|
||||
hmtx = stringToArray(hmtx);
|
||||
createTableEntry(otf, offsets, "hmtx", hmtx);
|
||||
|
||||
/** MAXP */
|
||||
maxp = "\x00\x00\x50\x00" + // Version number
|
||||
string16(charstrings.length + 1); // Num of glyphs (+1 to pass the sanitizer...)
|
||||
string16(charstrings.length + 1); // Num of glyphs
|
||||
maxp = stringToArray(maxp);
|
||||
createTableEntry(otf, offsets, "maxp", maxp);
|
||||
|
||||
@ -1050,35 +1044,14 @@ var Type1Parser = function() {
|
||||
|
||||
command = charStringDictionary["12"][escape];
|
||||
} else {
|
||||
|
||||
// TODO Clean this code
|
||||
Gindex = Gindex || 1;
|
||||
if (value == 13) {
|
||||
width = charstring[1];
|
||||
lsb = charstring[0];
|
||||
//charstring.push(lsb, "hmoveto");
|
||||
charstring.push(lsb, "hmoveto");
|
||||
charstring.splice(0, 1);
|
||||
used = true;
|
||||
continue;
|
||||
} else if (!used && lsb && value == 1) { // hstem
|
||||
charstring[Gindex] += lsb;
|
||||
used = true;
|
||||
} else if (!used && lsb && value == 22) { // hmoveto
|
||||
error("hmoveto: " + charstring[Gindex]);
|
||||
charstring[Gindex] += lsb;
|
||||
used = true;
|
||||
} else if (!used && lsb && value == 14) { // enchar
|
||||
log(glyph);
|
||||
var p = charstring[Gindex];
|
||||
if (IsNum(p)) {
|
||||
charstring[Gindex] += lsb;
|
||||
} else {
|
||||
charstring.splice(Gindex + 1, 0, lsb);
|
||||
}
|
||||
used = true;
|
||||
}
|
||||
var Gindex = charstring.length;
|
||||
|
||||
command = charStringDictionary[value];
|
||||
}
|
||||
|
||||
@ -1107,9 +1080,6 @@ var Type1Parser = function() {
|
||||
charstring.push(value);
|
||||
}
|
||||
|
||||
if (!used && lsb)
|
||||
error("lsb has not been reported in " + fontName + " for charstring: " + charstring);
|
||||
|
||||
return { charstring: charstring, width: width, lsb: lsb };
|
||||
};
|
||||
|
||||
@ -1366,6 +1336,9 @@ CFF.prototype = {
|
||||
var i = 0;
|
||||
while (true) {
|
||||
var obj = charstring[i];
|
||||
if (obj == undefined) {
|
||||
error("unknow charstring command for " + i + " in " + charstring);
|
||||
}
|
||||
if (obj.charAt) {
|
||||
switch (obj) {
|
||||
case "endchar":
|
||||
@ -1379,7 +1352,7 @@ CFF.prototype = {
|
||||
} else if (command.charAt) {
|
||||
var cmd = this.commandsMap[command];
|
||||
if (!cmd)
|
||||
error(command);
|
||||
error("Unknow command: " + command);
|
||||
|
||||
if (IsArray(cmd)) {
|
||||
charstring.splice(j, 1, cmd[0], cmd[1]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user