write OTF header using a string, not an array
This commit is contained in:
parent
e46a88b1dc
commit
f337d6105c
32
fonts.js
32
fonts.js
@ -326,29 +326,39 @@ var Font = (function () {
|
|||||||
convert: function font_convert(aFont, aProperties) {
|
convert: function font_convert(aFont, aProperties) {
|
||||||
var otf = new Uint8Array(kMaxFontFileSize);
|
var otf = new Uint8Array(kMaxFontFileSize);
|
||||||
|
|
||||||
function createOpenTypeHeader(aFile, aOffsets, aNumTables) {
|
function s2a(s) {
|
||||||
|
var a = [];
|
||||||
|
for (var i = 0; i < s.length; ++i)
|
||||||
|
a[i] = s.charCodeAt(i);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createOpenTypeHeader(aFile, aOffsets, numTables) {
|
||||||
|
var header = "";
|
||||||
|
|
||||||
|
function WriteHeader16(value) {
|
||||||
|
header += String.fromCharCode(value >> 8);
|
||||||
|
header += String.fromCharCode(value & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
// sfnt version (4 bytes)
|
// sfnt version (4 bytes)
|
||||||
var version = [0x4F, 0x54, 0x54, 0X4F];
|
header += "\x4F\x54\x54\x4F";
|
||||||
|
|
||||||
// numTables (2 bytes)
|
// numTables (2 bytes)
|
||||||
var numTables = aNumTables;
|
WriteHeader16(numTables);
|
||||||
|
|
||||||
// searchRange (2 bytes)
|
// searchRange (2 bytes)
|
||||||
var tablesMaxPower2 = FontsUtils.getMaxPower2(numTables);
|
var tablesMaxPower2 = FontsUtils.getMaxPower2(numTables);
|
||||||
var searchRange = tablesMaxPower2 * 16;
|
var searchRange = tablesMaxPower2 * 16;
|
||||||
|
WriteHeader16(searchRange);
|
||||||
|
|
||||||
// entrySelector (2 bytes)
|
// entrySelector (2 bytes)
|
||||||
var entrySelector = Math.log(tablesMaxPower2) / Math.log(2);
|
WriteHeader16(Math.log(tablesMaxPower2) / Math.log(2));
|
||||||
|
|
||||||
// rangeShift (2 bytes)
|
// rangeShift (2 bytes)
|
||||||
var rangeShift = numTables * 16 - searchRange;
|
WriteHeader16(numTables * 16 - searchRange);
|
||||||
|
|
||||||
var header = [].concat(version,
|
aFile.set(s2a(header), aOffsets.currentOffset);
|
||||||
FontsUtils.integerToBytes(numTables, 2),
|
|
||||||
FontsUtils.integerToBytes(searchRange, 2),
|
|
||||||
FontsUtils.integerToBytes(entrySelector, 2),
|
|
||||||
FontsUtils.integerToBytes(rangeShift, 2));
|
|
||||||
aFile.set(header, aOffsets.currentOffset);
|
|
||||||
aOffsets.currentOffset += header.length;
|
aOffsets.currentOffset += header.length;
|
||||||
aOffsets.virtualOffset += header.length;
|
aOffsets.virtualOffset += header.length;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user