34 lines
1.1 KiB
Plaintext
34 lines
1.1 KiB
Plaintext
|
// The `ltag` table stores IETF BCP-47 language tags. It allows supporting
|
||
|
// languages for which TrueType does not assign a numeric code.
|
||
|
// https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6ltag.html
|
||
|
// http://www.w3.org/International/articles/language-tags/
|
||
|
// http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
|
||
|
|
||
|
import check from '../check';
|
||
|
import parse from '../parse';
|
||
|
|
||
|
function parseLtagTable(data, start) {
|
||
|
const p = new parse.Parser(data, start);
|
||
|
const tableVersion = p.parseULong();
|
||
|
check.argument(tableVersion === 1, 'Unsupported ltag table version.');
|
||
|
// The 'ltag' specification does not define any flags; skip the field.
|
||
|
p.skip('uLong', 1);
|
||
|
const numTags = p.parseULong();
|
||
|
|
||
|
const tags = [];
|
||
|
for (let i = 0; i < numTags; i++) {
|
||
|
let tag = '';
|
||
|
const offset = start + p.parseUShort();
|
||
|
const length = p.parseUShort();
|
||
|
for (let j = offset; j < offset + length; ++j) {
|
||
|
tag += String.fromCharCode(data.getInt8(j));
|
||
|
}
|
||
|
|
||
|
tags.push(tag);
|
||
|
}
|
||
|
|
||
|
return tags;
|
||
|
}
|
||
|
|
||
|
export default { parse: parseLtagTable };
|