From 3726686d22deac5d299b890bd0f7359053717956 Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Sat, 2 Jul 2011 02:44:57 +0200 Subject: [PATCH] Add a format100 table for Mac --- fonts.js | 44 +++++++++++++++++++++++++++++--------------- utils/fonts_utils.js | 6 +----- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/fonts.js b/fonts.js index e484bc5b3..ff25a08ee 100644 --- a/fonts.js +++ b/fonts.js @@ -437,6 +437,24 @@ var Font = (function () { 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; @@ -444,18 +462,13 @@ var Font = (function () { 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 = ""; @@ -481,13 +494,14 @@ var Font = (function () { } } - 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) { diff --git a/utils/fonts_utils.js b/utils/fonts_utils.js index 532853460..5bd5f2972 100644 --- a/utils/fonts_utils.js +++ b/utils/fonts_utils.js @@ -1,8 +1,6 @@ /* -*- 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. @@ -12,8 +10,6 @@ * 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. @@ -388,7 +384,7 @@ function writeToFile(aBytes, aFilePath) { 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);