fonteditor-core
Version:
fonts (ttf, woff, woff2, eot, svg, otf) parse, write, transform, glyph adjust.
73 lines (69 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _table = _interopRequireDefault(require("./table"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @file hmtx 表
* @author mengke01(kekee000@gmail.com)
*
* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6hmtx.html
*/
var _default = exports.default = _table.default.create('hmtx', [], {
read: function read(reader, ttf) {
var offset = this.offset;
reader.seek(offset);
var numOfLongHorMetrics = ttf.hhea.numOfLongHorMetrics;
var hMetrics = [];
var i;
var hMetric;
for (i = 0; i < numOfLongHorMetrics; ++i) {
hMetric = {};
hMetric.advanceWidth = reader.readUint16();
hMetric.leftSideBearing = reader.readInt16();
hMetrics.push(hMetric);
}
// 最后一个宽度
var advanceWidth = hMetrics[numOfLongHorMetrics - 1].advanceWidth;
var numOfLast = ttf.maxp.numGlyphs - numOfLongHorMetrics;
// 获取后续的hmetrics
for (i = 0; i < numOfLast; ++i) {
hMetric = {};
hMetric.advanceWidth = advanceWidth;
hMetric.leftSideBearing = reader.readInt16();
hMetrics.push(hMetric);
}
return hMetrics;
},
write: function write(writer, ttf) {
var i;
var numOfLongHorMetrics = ttf.hhea.numOfLongHorMetrics;
for (i = 0; i < numOfLongHorMetrics; ++i) {
writer.writeUint16(ttf.glyf[i].advanceWidth);
writer.writeInt16(ttf.glyf[i].leftSideBearing);
}
// 最后一个宽度
var numOfLast = ttf.glyf.length - numOfLongHorMetrics;
for (i = 0; i < numOfLast; ++i) {
writer.writeInt16(ttf.glyf[numOfLongHorMetrics + i].leftSideBearing);
}
return writer;
},
size: function size(ttf) {
// 计算同最后一个advanceWidth相等的元素个数
var numOfLast = 0;
// 最后一个advanceWidth
var advanceWidth = ttf.glyf[ttf.glyf.length - 1].advanceWidth;
for (var i = ttf.glyf.length - 2; i >= 0; i--) {
if (advanceWidth === ttf.glyf[i].advanceWidth) {
numOfLast++;
} else {
break;
}
}
ttf.hhea.numOfLongHorMetrics = ttf.glyf.length - numOfLast;
return 4 * ttf.hhea.numOfLongHorMetrics + 2 * numOfLast;
}
});