glyphs.push({ unicode: 0x0000 });
var ranges = getRanges(glyphs);
+ var numTables = 2;
+ var kFormat100ArraySize = 256;
+ var cmap = "\x00\x00" + // version
+ string16(numTables) + // numTables
+ "\x00\x01" + // platformID
+ "\x00\x00" + // encodingID
+ string32(4 + numTables * 8) + // start of the table record
+ "\x00\x03" + // platformID
+ "\x00\x01" + // encodingID
+ string32(4 + numTables * 8 + 6 + kFormat100ArraySize); // start of the table record
+
+ var format100 = "\x00\x00" + // format
+ string16(6 + kFormat100ArraySize) + // length
+ "\x00\x00"; // language
+
+ for (var i = 0; i < kFormat100ArraySize; i++)
+ format100 += String.fromCharCode(i);
+
var headerSize = (12 * 2 + (ranges.length * 4 * 2));
var segCount = ranges.length + 1;
var segCount2 = segCount * 2;
var searchEntry = Math.log(segCount) / Math.log(2);
var rangeShift = 2 * segCount - searchRange;
- var cmap = "\x00\x00" + // version
- "\x00\x01" + // numTables
- "\x00\x03" + // platformID
- "\x00\x01" + // encodingID
- "\x00\x00\x00\x0C" + // start of the table record
- "\x00\x04" + // format
- string16(headerSize) + // length
- "\x00\x00" + // languages
- string16(segCount2) +
- string16(searchRange) +
- string16(searchEntry) +
- string16(rangeShift);
+ var format314 = "\x00\x04" + // format
+ string16(headerSize) + // length
+ "\x00\x00" + // language
+ string16(segCount2) +
+ string16(searchRange) +
+ string16(searchEntry) +
+ string16(rangeShift);
// Fill up the 4 parallel arrays describing the segments.
var startCount = "";
}
}
- startCount += "\xFF\xFF";
endCount += "\xFF\xFF";
+ startCount += "\xFF\xFF";
idDeltas += "\x00\x01";
idRangeOffsets += "\x00\x00";
+ format314 += endCount + "\x00\x00" + startCount +
+ idDeltas + idRangeOffsets + glyphsIds;
- return stringToArray(cmap + endCount + "\x00\x00" + startCount +
- idDeltas + idRangeOffsets + glyphsIds);
+ return stringToArray(cmap + format100 + format314);
};
function createOS2Table(properties) {
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
-"use strict";
-
/**
* The Type2 reader code below is only used for debugging purpose since Type2
* is only a CharString format and is never used directly as a Font file.
* CharString or to understand the structure of the CFF format.
*/
-"use strict";
-
/**
* Build a charset by assigning the glyph name and the human readable form
* of the glyph data.
var stream = Cc["@mozilla.org/network/file-output-stream;1"]
.createInstance(Ci.nsIFileOutputStream);
- stream.init(file, 0x04 | 0x08 | 0x20, 600, 0);
+ stream.init(file, 0x04 | 0x08 | 0x20, 0600, 0);
var bos = Cc["@mozilla.org/binaryoutputstream;1"]
.createInstance(Ci.nsIBinaryOutputStream);