ttf2eot
Advanced tools
Comparing version 3.0.0 to 3.1.0
231
index.js
@@ -7,5 +7,4 @@ /* | ||
'use strict'; | ||
'use strict' | ||
/** | ||
@@ -15,14 +14,14 @@ * Offsets in EOT file structure. Refer to EOTPrefix in OpenTypeUtilities.cpp | ||
var EOT_OFFSET = { | ||
LENGTH: 0, | ||
FONT_LENGTH: 4, | ||
VERSION: 8, | ||
CHARSET: 26, | ||
MAGIC: 34, | ||
FONT_PANOSE: 16, | ||
ITALIC: 27, | ||
WEIGHT: 28, | ||
UNICODE_RANGE: 36, | ||
LENGTH: 0, | ||
FONT_LENGTH: 4, | ||
VERSION: 8, | ||
CHARSET: 26, | ||
MAGIC: 34, | ||
FONT_PANOSE: 16, | ||
ITALIC: 27, | ||
WEIGHT: 28, | ||
UNICODE_RANGE: 36, | ||
CODEPAGE_RANGE: 52, | ||
CHECKSUM_ADJUSTMENT: 60 | ||
}; | ||
} | ||
@@ -33,33 +32,33 @@ /** | ||
var SFNT_OFFSET = { | ||
// sfntHeader: | ||
NUMTABLES: 4, | ||
// sfntHeader: | ||
NUMTABLES: 4, | ||
// TableDirectoryEntry | ||
TABLE_TAG: 0, | ||
TABLE_OFFSET: 8, | ||
TABLE_LENGTH: 12, | ||
// TableDirectoryEntry | ||
TABLE_TAG: 0, | ||
TABLE_OFFSET: 8, | ||
TABLE_LENGTH: 12, | ||
// OS2Table | ||
OS2_WEIGHT: 4, | ||
OS2_FONT_PANOSE: 32, | ||
OS2_UNICODE_RANGE: 42, | ||
OS2_FS_SELECTION: 62, | ||
// OS2Table | ||
OS2_WEIGHT: 4, | ||
OS2_FONT_PANOSE: 32, | ||
OS2_UNICODE_RANGE: 42, | ||
OS2_FS_SELECTION: 62, | ||
OS2_CODEPAGE_RANGE: 78, | ||
// headTable | ||
HEAD_CHECKSUM_ADJUSTMENT: 8, | ||
// headTable | ||
HEAD_CHECKSUM_ADJUSTMENT: 8, | ||
// nameTable | ||
NAMETABLE_FORMAT: 0, | ||
NAMETABLE_COUNT: 2, | ||
NAMETABLE_STRING_OFFSET: 4, | ||
// nameTable | ||
NAMETABLE_FORMAT: 0, | ||
NAMETABLE_COUNT: 2, | ||
NAMETABLE_STRING_OFFSET: 4, | ||
// nameRecord | ||
NAME_PLATFORM_ID: 0, | ||
NAME_ENCODING_ID: 2, | ||
NAME_LANGUAGE_ID: 4, | ||
NAME_NAME_ID: 6, | ||
NAME_LENGTH: 8, | ||
NAME_OFFSET: 10 | ||
}; | ||
// nameRecord | ||
NAME_PLATFORM_ID: 0, | ||
NAME_ENCODING_ID: 2, | ||
NAME_LANGUAGE_ID: 4, | ||
NAME_NAME_ID: 6, | ||
NAME_LENGTH: 8, | ||
NAME_OFFSET: 10 | ||
} | ||
@@ -70,8 +69,8 @@ /** | ||
var SIZEOF = { | ||
SFNT_TABLE_ENTRY: 16, | ||
SFNT_HEADER: 12, | ||
SFNT_NAMETABLE: 6, | ||
SFNT_NAMETABLE_ENTRY: 12, | ||
SFNT_TABLE_ENTRY: 16, | ||
SFNT_HEADER: 12, | ||
SFNT_NAMETABLE: 6, | ||
SFNT_NAMETABLE_ENTRY: 12, | ||
EOT_PREFIX: 82 | ||
}; | ||
} | ||
@@ -82,7 +81,7 @@ /** | ||
var MAGIC = { | ||
EOT_VERSION: 0x00020001, | ||
EOT_MAGIC: 0x504c, | ||
EOT_CHARSET: 1, | ||
LANGUAGE_ENGLISH: 0x0409 | ||
}; | ||
EOT_VERSION: 0x00020001, | ||
EOT_MAGIC: 0x504c, | ||
EOT_CHARSET: 1, | ||
LANGUAGE_ENGLISH: 0x0409 | ||
} | ||
@@ -93,14 +92,14 @@ /** | ||
*/ | ||
function strbuf(str) { | ||
var arr = Buffer.alloc(str.length + 4); | ||
function strbuf (str) { | ||
var arr = Buffer.alloc(str.length + 4) | ||
arr.writeUint16LE(str.length, 0); | ||
arr.writeUint16LE(str.length, 0) | ||
for (var i = 0; i < str.length; i += 2) { | ||
arr.writeUint16LE(str.readUint16BE(i), i + 2); | ||
arr.writeUint16LE(str.readUint16BE(i), i + 2) | ||
} | ||
arr.writeUint16LE(0, arr.length - 2); | ||
arr.writeUint16LE(0, arr.length - 2) | ||
return arr; | ||
return arr | ||
} | ||
@@ -114,53 +113,55 @@ | ||
// | ||
function ttf2eot(arr) { | ||
arr = Buffer.from(arr.buffer, arr.byteOffset, arr.length); | ||
function ttf2eot (arr) { | ||
arr = Buffer.from(arr.buffer, arr.byteOffset, arr.length) | ||
var out = Buffer.alloc(SIZEOF.EOT_PREFIX, 0); | ||
var i, j; | ||
var out = Buffer.alloc(SIZEOF.EOT_PREFIX, 0) | ||
var i, j | ||
out.writeUint32LE (arr.length, EOT_OFFSET.FONT_LENGTH); | ||
out.writeUint32LE (MAGIC.EOT_VERSION, EOT_OFFSET.VERSION); | ||
out.writeUint8 (MAGIC.EOT_CHARSET, EOT_OFFSET.CHARSET); | ||
out.writeUint16LE (MAGIC.EOT_MAGIC, EOT_OFFSET.MAGIC); | ||
out.writeUint32LE(arr.length, EOT_OFFSET.FONT_LENGTH) | ||
out.writeUint32LE(MAGIC.EOT_VERSION, EOT_OFFSET.VERSION) | ||
out.writeUint8(MAGIC.EOT_CHARSET, EOT_OFFSET.CHARSET) | ||
out.writeUint16LE(MAGIC.EOT_MAGIC, EOT_OFFSET.MAGIC) | ||
var familyName = Buffer.of(0), | ||
subfamilyName = Buffer.of(0), | ||
fullName = Buffer.of(0), | ||
versionString = Buffer.of(0); | ||
var familyName = Buffer.of(0) | ||
var subfamilyName = Buffer.of(0) | ||
var fullName = Buffer.of(0) | ||
var versionString = Buffer.of(0) | ||
var haveOS2 = false, | ||
haveName = false, | ||
haveHead = false; | ||
var haveOS2 = false | ||
var haveName = false | ||
var haveHead = false | ||
var numTables = arr.readUint16BE (SFNT_OFFSET.NUMTABLES); | ||
var numTables = arr.readUint16BE(SFNT_OFFSET.NUMTABLES) | ||
for (i = 0; i < numTables; ++i) { | ||
var data = arr.subarray(SIZEOF.SFNT_HEADER + i * SIZEOF.SFNT_TABLE_ENTRY); | ||
var data = arr.subarray(SIZEOF.SFNT_HEADER + i * SIZEOF.SFNT_TABLE_ENTRY) | ||
var tableEntry = { | ||
tag: String.fromCharCode.apply(null, data.subarray(SFNT_OFFSET.TABLE_TAG, SFNT_OFFSET.TABLE_TAG + 4)), | ||
offset: data.readUint32BE (SFNT_OFFSET.TABLE_OFFSET), | ||
length: data.readUint32BE (SFNT_OFFSET.TABLE_LENGTH) | ||
}; | ||
offset: data.readUint32BE(SFNT_OFFSET.TABLE_OFFSET), | ||
length: data.readUint32BE(SFNT_OFFSET.TABLE_LENGTH) | ||
} | ||
var table = arr.subarray(tableEntry.offset, tableEntry.offset + tableEntry.length); | ||
var table = arr.subarray(tableEntry.offset, tableEntry.offset + tableEntry.length) | ||
if (tableEntry.tag === 'OS/2') { | ||
haveOS2 = true; | ||
haveOS2 = true | ||
var OS2Version = table.readUint16BE() | ||
for (j = 0; j < 10; ++j) { | ||
out.writeUint8 (table.readUint8 (SFNT_OFFSET.OS2_FONT_PANOSE + j), EOT_OFFSET.FONT_PANOSE + j); | ||
out.writeUint8(table.readUint8(SFNT_OFFSET.OS2_FONT_PANOSE + j), EOT_OFFSET.FONT_PANOSE + j) | ||
} | ||
/*jshint bitwise:false */ | ||
out.writeUint8 (table.readUint16BE (SFNT_OFFSET.OS2_FS_SELECTION) & 0x01, EOT_OFFSET.ITALIC); | ||
out.writeUint32LE (table.readUint16BE (SFNT_OFFSET.OS2_WEIGHT), EOT_OFFSET.WEIGHT); | ||
out.writeUint8(table.readUint16BE(SFNT_OFFSET.OS2_FS_SELECTION) & 0x01, EOT_OFFSET.ITALIC) | ||
out.writeUint32LE(table.readUint16BE(SFNT_OFFSET.OS2_WEIGHT), EOT_OFFSET.WEIGHT) | ||
for (j = 0; j < 4; ++j) { | ||
out.writeUint32LE (table.readUint32BE (SFNT_OFFSET.OS2_UNICODE_RANGE + j * 4), | ||
EOT_OFFSET.UNICODE_RANGE + j * 4); | ||
out.writeUint32LE(table.readUint32BE(SFNT_OFFSET.OS2_UNICODE_RANGE + j * 4), | ||
EOT_OFFSET.UNICODE_RANGE + j * 4) | ||
} | ||
for (j = 0; j < 2; ++j) { | ||
out.writeUint32LE (table.readUint32BE (SFNT_OFFSET.OS2_CODEPAGE_RANGE + j * 4), | ||
EOT_OFFSET.CODEPAGE_RANGE + j * 4); | ||
if (OS2Version >= 1) { | ||
for (j = 0; j < 2; ++j) { | ||
out.writeUint32LE(table.readUint32BE(SFNT_OFFSET.OS2_CODEPAGE_RANGE + j * 4), | ||
EOT_OFFSET.CODEPAGE_RANGE + j * 4) | ||
} | ||
} | ||
@@ -170,25 +171,25 @@ | ||
haveHead = true; | ||
out.writeUint32LE (table.readUint32BE (SFNT_OFFSET.HEAD_CHECKSUM_ADJUSTMENT), EOT_OFFSET.CHECKSUM_ADJUSTMENT); | ||
haveHead = true | ||
out.writeUint32LE(table.readUint32BE(SFNT_OFFSET.HEAD_CHECKSUM_ADJUSTMENT), EOT_OFFSET.CHECKSUM_ADJUSTMENT) | ||
} else if (tableEntry.tag === 'name') { | ||
haveName = true; | ||
haveName = true | ||
var nameTable = { | ||
format: table.readUint16BE (SFNT_OFFSET.NAMETABLE_FORMAT), | ||
count: table.readUint16BE (SFNT_OFFSET.NAMETABLE_COUNT), | ||
stringOffset: table.readUint16BE (SFNT_OFFSET.NAMETABLE_STRING_OFFSET) | ||
}; | ||
format: table.readUint16BE(SFNT_OFFSET.NAMETABLE_FORMAT), | ||
count: table.readUint16BE(SFNT_OFFSET.NAMETABLE_COUNT), | ||
stringOffset: table.readUint16BE(SFNT_OFFSET.NAMETABLE_STRING_OFFSET) | ||
} | ||
for (j = 0; j < nameTable.count; ++j) { | ||
var nameRecord = table.subarray(SIZEOF.SFNT_NAMETABLE + j * SIZEOF.SFNT_NAMETABLE_ENTRY); | ||
var nameRecord = table.subarray(SIZEOF.SFNT_NAMETABLE + j * SIZEOF.SFNT_NAMETABLE_ENTRY) | ||
var name = { | ||
platformID: nameRecord.readUint16BE (SFNT_OFFSET.NAME_PLATFORM_ID), | ||
encodingID: nameRecord.readUint16BE (SFNT_OFFSET.NAME_ENCODING_ID), | ||
languageID: nameRecord.readUint16BE (SFNT_OFFSET.NAME_LANGUAGE_ID), | ||
nameID: nameRecord.readUint16BE (SFNT_OFFSET.NAME_NAME_ID), | ||
length: nameRecord.readUint16BE (SFNT_OFFSET.NAME_LENGTH), | ||
offset: nameRecord.readUint16BE (SFNT_OFFSET.NAME_OFFSET) | ||
}; | ||
platformID: nameRecord.readUint16BE(SFNT_OFFSET.NAME_PLATFORM_ID), | ||
encodingID: nameRecord.readUint16BE(SFNT_OFFSET.NAME_ENCODING_ID), | ||
languageID: nameRecord.readUint16BE(SFNT_OFFSET.NAME_LANGUAGE_ID), | ||
nameID: nameRecord.readUint16BE(SFNT_OFFSET.NAME_NAME_ID), | ||
length: nameRecord.readUint16BE(SFNT_OFFSET.NAME_LENGTH), | ||
offset: nameRecord.readUint16BE(SFNT_OFFSET.NAME_OFFSET) | ||
} | ||
@@ -198,17 +199,17 @@ if (name.platformID === 3 && name.encodingID === 1 && name.languageID === MAGIC.LANGUAGE_ENGLISH) { | ||
nameTable.stringOffset + name.offset, | ||
nameTable.stringOffset + name.offset + name.length)); | ||
nameTable.stringOffset + name.offset + name.length)) | ||
switch (name.nameID) { | ||
case 1: | ||
familyName = s; | ||
break; | ||
familyName = s | ||
break | ||
case 2: | ||
subfamilyName = s; | ||
break; | ||
subfamilyName = s | ||
break | ||
case 4: | ||
fullName = s; | ||
break; | ||
fullName = s | ||
break | ||
case 5: | ||
versionString = s; | ||
break; | ||
versionString = s | ||
break | ||
} | ||
@@ -218,7 +219,7 @@ } | ||
} | ||
if (haveOS2 && haveName && haveHead) { break; } | ||
if (haveOS2 && haveName && haveHead) { break } | ||
} | ||
if (!(haveOS2 && haveName && haveHead)) { | ||
throw new Error ('Required section not found'); | ||
throw new Error('Required section not found') | ||
} | ||
@@ -233,11 +234,11 @@ | ||
fullName, | ||
Buffer.from([ 0, 0 ]), | ||
Buffer.from([0, 0]), | ||
arr | ||
]); | ||
]) | ||
eot.writeUint32LE (eot.length, EOT_OFFSET.LENGTH); // Calculate overall length | ||
eot.writeUint32LE(eot.length, EOT_OFFSET.LENGTH) // Calculate overall length | ||
return new Uint8Array(eot.buffer, eot.byteOffset, eot.length); | ||
return new Uint8Array(eot.buffer, eot.byteOffset, eot.length) | ||
} | ||
module.exports = ttf2eot; | ||
module.exports = ttf2eot |
{ | ||
"name": "ttf2eot", | ||
"version": "3.0.0", | ||
"version": "3.1.0", | ||
"description": "Convert TTF font to EOT", | ||
@@ -22,4 +22,4 @@ "keywords": [ | ||
"scripts": { | ||
"lint": "./node_modules/.bin/eslint .", | ||
"test": "npm run lint && ./node_modules/.bin/mocha" | ||
"lint": "standardx . -v", | ||
"test": "npm run lint && mocha" | ||
}, | ||
@@ -30,5 +30,5 @@ "dependencies": { | ||
"devDependencies": { | ||
"eslint": "^2.3.0", | ||
"mocha": "^2.4.5" | ||
"mocha": "^9.2.0", | ||
"standardx": "^7.0.0" | ||
} | ||
} |
@@ -8,16 +8,15 @@ #!/usr/bin/env node | ||
'use strict'; | ||
'use strict' | ||
var fs = require('fs'); | ||
var ArgumentParser = require('argparse').ArgumentParser; | ||
var fs = require('fs') | ||
var ArgumentParser = require('argparse').ArgumentParser | ||
var ttf2eot = require('./index.js'); | ||
var ttf2eot = require('./index.js') | ||
var parser = new ArgumentParser ({ | ||
var parser = new ArgumentParser({ | ||
add_help: true, | ||
description: 'TTF to EOT font converter' | ||
}); | ||
}) | ||
parser.add_argument ( | ||
parser.add_argument( | ||
'infile', | ||
@@ -28,5 +27,5 @@ { | ||
} | ||
); | ||
) | ||
parser.add_argument ( | ||
parser.add_argument( | ||
'outfile', | ||
@@ -37,5 +36,5 @@ { | ||
} | ||
); | ||
) | ||
parser.add_argument ( | ||
parser.add_argument( | ||
'-v', '--version', | ||
@@ -47,28 +46,27 @@ { | ||
} | ||
); | ||
) | ||
/* eslint-disable no-console */ | ||
var args = parser.parse_args(); | ||
var args = parser.parse_args() | ||
var input; | ||
var input | ||
try { | ||
if (args.infile) { | ||
input = fs.readFileSync(args.infile); | ||
input = fs.readFileSync(args.infile) | ||
} else { | ||
input = fs.readFileSync(process.stdin.fd); | ||
input = fs.readFileSync(process.stdin.fd) | ||
} | ||
} catch (e) { | ||
console.error("Can't open input file (%s)", args.infile || 'stdin'); | ||
process.exit(1); | ||
console.error("Can't open input file (%s)", args.infile || 'stdin') | ||
process.exit(1) | ||
} | ||
var eot = ttf2eot(input); | ||
var eot = ttf2eot(input) | ||
if (args.outfile) { | ||
fs.writeFileSync(args.outfile, eot); | ||
fs.writeFileSync(args.outfile, eot) | ||
} else { | ||
process.stdout.write(eot); | ||
process.stdout.write(eot) | ||
} | ||
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
245
9734
5
1