|
|
|
@ -2432,17 +2432,43 @@ var Font = (function FontClosure() {
@@ -2432,17 +2432,43 @@ var Font = (function FontClosure() {
|
|
|
|
|
// length
|
|
|
|
|
var length = data.length; |
|
|
|
|
|
|
|
|
|
// Per spec tables must be 4-bytes align so add padding as needed
|
|
|
|
|
while (data.length & 3) { |
|
|
|
|
data.push(0x00); |
|
|
|
|
// Per spec tables must be 4-bytes align so add padding as needed.
|
|
|
|
|
var paddedLength = length; |
|
|
|
|
while (paddedLength & 3) { |
|
|
|
|
paddedLength++; |
|
|
|
|
} |
|
|
|
|
var i; |
|
|
|
|
var padding = paddedLength - length; |
|
|
|
|
if (padding !== 0) { |
|
|
|
|
// Padding is required. |data| can be an Array, Uint8Array, or
|
|
|
|
|
// Uint16Array. In the latter two cases we need to create slightly larger
|
|
|
|
|
// typed arrays and copy the old contents in. Fortunately that's not a
|
|
|
|
|
// common case.
|
|
|
|
|
var data2; |
|
|
|
|
if (data instanceof Array) { |
|
|
|
|
for (i = 0; i < padding; i++) { |
|
|
|
|
data.push(0); |
|
|
|
|
} |
|
|
|
|
} else if (data instanceof Uint8Array) { |
|
|
|
|
data2 = new Uint8Array(paddedLength); |
|
|
|
|
data2.set(data); |
|
|
|
|
data = data2; |
|
|
|
|
} else if (data instanceof Uint16Array) { |
|
|
|
|
data2 = new Uint16Array(paddedLength); |
|
|
|
|
data2.set(data); |
|
|
|
|
data = data2; |
|
|
|
|
} else { |
|
|
|
|
error('bad array kind in createTableEntry'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
while (file.virtualOffset & 3) { |
|
|
|
|
file.virtualOffset++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// checksum
|
|
|
|
|
var checksum = 0, n = data.length; |
|
|
|
|
for (var i = 0; i < n; i += 4) { |
|
|
|
|
for (i = 0; i < n; i += 4) { |
|
|
|
|
checksum = (checksum + int32(data[i], data[i + 1], data[i + 2], |
|
|
|
|
data[i + 3])) | 0; |
|
|
|
|
} |
|
|
|
@ -2451,6 +2477,8 @@ var Font = (function FontClosure() {
@@ -2451,6 +2477,8 @@ var Font = (function FontClosure() {
|
|
|
|
|
string32(offset) + string32(length)); |
|
|
|
|
file.file += tableEntry; |
|
|
|
|
file.virtualOffset += data.length; |
|
|
|
|
|
|
|
|
|
return data; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function isTrueTypeFile(file) { |
|
|
|
@ -4062,13 +4090,7 @@ var Font = (function FontClosure() {
@@ -4062,13 +4090,7 @@ var Font = (function FontClosure() {
|
|
|
|
|
// rewrite the tables but tweak offsets
|
|
|
|
|
for (i = 0; i < numTables; i++) { |
|
|
|
|
table = tables[tablesNames[i]]; |
|
|
|
|
var data = []; |
|
|
|
|
|
|
|
|
|
tableData = table.data; |
|
|
|
|
for (var j = 0, jj = tableData.length; j < jj; j++) { |
|
|
|
|
data.push(tableData[j]); |
|
|
|
|
} |
|
|
|
|
createTableEntry(ttf, table.tag, data); |
|
|
|
|
table.data = createTableEntry(ttf, table.tag, table.data); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Add the table datas
|
|
|
|
@ -4263,7 +4285,7 @@ var Font = (function FontClosure() {
@@ -4263,7 +4285,7 @@ var Font = (function FontClosure() {
|
|
|
|
|
|
|
|
|
|
var field; |
|
|
|
|
for (field in fields) { |
|
|
|
|
createTableEntry(otf, field, fields[field]); |
|
|
|
|
fields[field] = createTableEntry(otf, field, fields[field]); |
|
|
|
|
} |
|
|
|
|
for (field in fields) { |
|
|
|
|
var table = fields[field]; |
|
|
|
|