Make 'cmap' declare the correct header size

This commit is contained in:
Vivien Nicolas 2011-07-04 03:57:25 +02:00
parent 688d7f28f8
commit 17803049a9

View File

@ -573,7 +573,7 @@ var Font = (function Font() {
++end; ++end;
++n; ++n;
} }
ranges.push([start, end]); ranges.push({ start: start, end: end });
} }
return ranges; return ranges;
}; };
@ -589,11 +589,11 @@ var Font = (function Font() {
"\x00\x01" + // encodingID "\x00\x01" + // encodingID
string32(4 + numTables * 8); // start of the table record string32(4 + numTables * 8); // start of the table record
var headerSize = (12 * 2 + (ranges.length * 5 * 2)); var headerSize = ((7 * 2) + (ranges.length * 4 * 2) + (4 * 2) + (glyphs.length * 2));
var segCount = ranges.length + 1; var segCount = ranges.length + 1;
var segCount2 = segCount * 2; var segCount2 = 2 * segCount;
var searchRange = getMaxPower2(segCount) * 2; var searchRange = 2 * getMaxPower2(segCount);
var searchEntry = Math.log(segCount) / Math.log(2); var entrySelector = Math.log(segCount) / Math.log(2);
var rangeShift = 2 * segCount - searchRange; var rangeShift = 2 * segCount - searchRange;
var format314 = "\x00\x04" + // format var format314 = "\x00\x04" + // format
@ -601,7 +601,7 @@ var Font = (function Font() {
"\x00\x00" + // language "\x00\x00" + // language
string16(segCount2) + string16(segCount2) +
string16(searchRange) + string16(searchRange) +
string16(searchEntry) + string16(entrySelector) +
string16(rangeShift); string16(rangeShift);
// Fill up the 4 parallel arrays describing the segments. // Fill up the 4 parallel arrays describing the segments.
@ -613,8 +613,8 @@ var Font = (function Font() {
var bias = 0; var bias = 0;
for (var i = 0; i < segCount - 1; i++) { for (var i = 0; i < segCount - 1; i++) {
var range = ranges[i]; var range = ranges[i];
var start = range[0]; var start = range.start;
var end = range[1]; var end = range.end;
var delta = (bias - start) % 0xffff; var delta = (bias - start) % 0xffff;
bias += (end - start + 1); bias += (end - start + 1);
@ -622,16 +622,15 @@ var Font = (function Font() {
endCount += string16(end); endCount += string16(end);
idDeltas += string16(delta); idDeltas += string16(delta);
idRangeOffsets += string16(0); idRangeOffsets += string16(0);
for (var j = start; j <= end; j++) {
glyphsIds += string16(j);
} }
}
endCount += "\xFF\xFF"; endCount += "\xFF\xFF";
startCount += "\xFF\xFF"; startCount += "\xFF\xFF";
idDeltas += "\x00\x01"; idDeltas += "\x00\x01";
idRangeOffsets += "\x00\x00"; idRangeOffsets += "\x00\x00";
for (var i = 0; i < glyphs.length; i++)
glyphsIds += string16(i);
format314 += endCount + "\x00\x00" + startCount + format314 += endCount + "\x00\x00" + startCount +
idDeltas + idRangeOffsets + glyphsIds; idDeltas + idRangeOffsets + glyphsIds;
@ -833,11 +832,12 @@ var Font = (function Font() {
var encoding = properties.encoding; var encoding = properties.encoding;
var denseRange = ranges[0]; var denseRange = ranges[0];
var start = denseRange[0]; var start = denseRange.start;
var end = denseRange[1]; var end = denseRange.end;
var index = firstCode; var index = firstCode;
for (var j = start; j <= end; j++) for (var j = start; j <= end; j++)
encoding[index++] = glyphs[j - firstCode - 1].unicode; encoding[index++] = glyphs[j - firstCode - 1].unicode;
cmap.data = createCMapTable(glyphs); cmap.data = createCMapTable(glyphs);
} }
} }