Improve a bit the createNameTable code
This commit is contained in:
parent
4c6c20fc29
commit
1c611d4e32
82
fonts.js
82
fonts.js
@ -616,43 +616,65 @@ var Font = (function () {
|
|||||||
var otf = new Uint8Array(kMaxFontFileSize);
|
var otf = new Uint8Array(kMaxFontFileSize);
|
||||||
|
|
||||||
function createNameTable(name) {
|
function createNameTable(name) {
|
||||||
var names = [
|
// All the strings of the name table should be an odd number of bytes
|
||||||
"See original licence", // Copyright
|
if (name.length % 2)
|
||||||
fontName, // Font family
|
name = name.slice(0, name.length - 1);
|
||||||
"undefined", // Font subfamily (font weight)
|
|
||||||
"uniqueID", // Unique ID
|
var strings = [
|
||||||
fontName, // Full font name
|
"Original licence",// 0.Copyright
|
||||||
"0.1", // Version
|
name, // 1.Font family
|
||||||
"undefined", // Postscript name
|
"Unknown", // 2.Font subfamily (font weight)
|
||||||
"undefined", // Trademark
|
"uniqueID", // 3.Unique ID
|
||||||
"undefined", // Manufacturer
|
name, // 4.Full font name
|
||||||
"undefined" // Designer
|
"Version 0.11", // 5.Version
|
||||||
|
"Unknown", // 6.Postscript name
|
||||||
|
"Unknown", // 7.Trademark
|
||||||
|
"Unknown", // 8.Manufacturer
|
||||||
|
"Unknown" // 9.Designer
|
||||||
];
|
];
|
||||||
|
|
||||||
|
var platforms = ["\x00\x01", "\x00\x03"];
|
||||||
|
var encodings = ["\x00\x00", "\x00\x01"];
|
||||||
|
var languages = ["\x00\x00", "\x04\x09"];
|
||||||
|
|
||||||
|
// Mac want 1-byte per character strings while Windows want
|
||||||
|
// 2-bytes per character, so duplicate the names table
|
||||||
|
var stringsUnicode = [];
|
||||||
|
var names = [strings, stringsUnicode];
|
||||||
|
for (var i = 0; i < strings.length; i++) {
|
||||||
|
var str = strings[i];
|
||||||
|
|
||||||
|
var strUnicode = "";
|
||||||
|
for (var j = 0; j < str.length; j++)
|
||||||
|
strUnicode += string16(str.charCodeAt(j));
|
||||||
|
stringsUnicode.push(strUnicode);
|
||||||
|
}
|
||||||
|
|
||||||
|
var namesRecordCount = platforms.length * names.length;
|
||||||
var nameTable =
|
var nameTable =
|
||||||
"\x00\x00" + // format
|
"\x00\x00" + // format
|
||||||
"\x00\x0A" + // Number of names Record
|
string16(namesRecordCount) + // Number of names Record
|
||||||
"\x00\x7E"; // Storage
|
string16(namesRecordCount * 12 + 6); // Storage
|
||||||
|
|
||||||
// Build the name records field
|
// Build the name records field
|
||||||
var strOffset = 0;
|
var strOffset = 0;
|
||||||
for (var i = 0; i < names.length; i++) {
|
for (var i = 0; i < platforms.length; i++) {
|
||||||
var str = names[i];
|
var names = strings[i];
|
||||||
|
for (var j = 0; j < names.length; j++) {
|
||||||
var nameRecord =
|
var str = names[j];
|
||||||
"\x00\x01" + // platform ID
|
var nameRecord =
|
||||||
"\x00\x00" + // encoding ID
|
platforms[i] + // platform ID
|
||||||
"\x00\x00" + // language ID
|
encodings[i] + // encoding ID
|
||||||
"\x00\x00" + // name ID
|
languages[i] + // language ID
|
||||||
string16(str.length) +
|
string16(i) + // name ID
|
||||||
string16(strOffset);
|
string16(str.length) +
|
||||||
nameTable += nameRecord;
|
string16(strOffset);
|
||||||
|
nameTable += nameRecord;
|
||||||
strOffset += str.length;
|
strOffset += str.length;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nameTable += names.join("");
|
return nameTable + strings.join("") + stringsUnicode.join("");
|
||||||
return nameTable;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Required Tables
|
// Required Tables
|
||||||
@ -758,7 +780,7 @@ var Font = (function () {
|
|||||||
createTableEntry(otf, offsets, "maxp", maxp);
|
createTableEntry(otf, offsets, "maxp", maxp);
|
||||||
|
|
||||||
/** NAME */
|
/** NAME */
|
||||||
name = stringToArray(createNameTable(name));
|
name = stringToArray(createNameTable(fontName));
|
||||||
createTableEntry(otf, offsets, "name", name);
|
createTableEntry(otf, offsets, "name", name);
|
||||||
|
|
||||||
/** POST */
|
/** POST */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user