UNPKG

fonteditor-core

Version:

fonts (ttf, woff, woff2, eot, svg, otf) parse, write, transform, glyph adjust.

200 lines (196 loc) 6.44 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _struct = _interopRequireDefault(require("./struct")); var _error = _interopRequireDefault(require("../error")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * @file ttf表基类 * @author mengke01(kekee000@gmail.com) */ /* eslint-disable no-invalid-this */ /** * 读取表结构 * * @param {Reader} reader reader对象 * @return {Object} 当前对象 */ function read(reader) { var offset = this.offset; if (undefined !== offset) { reader.seek(offset); } var me = this; this.struct.forEach(function (item) { var name = item[0]; var type = item[1]; var typeName = null; switch (type) { case _struct.default.Int8: case _struct.default.Uint8: case _struct.default.Int16: case _struct.default.Uint16: case _struct.default.Int32: case _struct.default.Uint32: typeName = _struct.default.names[type]; me[name] = reader.read(typeName); break; case _struct.default.Fixed: me[name] = reader.readFixed(); break; case _struct.default.LongDateTime: me[name] = reader.readLongDateTime(); break; case _struct.default.Bytes: me[name] = reader.readBytes(reader.offset, item[2] || 0); break; case _struct.default.Char: me[name] = reader.readChar(); break; case _struct.default.String: me[name] = reader.readString(reader.offset, item[2] || 0); break; default: _error.default.raise(10003, name, type); } }); return this.valueOf(); } /** * 写表结构 * * @param {Object} writer writer对象 * @param {Object} ttf 已解析的ttf对象 * * @return {Writer} 返回writer对象 */ function write(writer, ttf) { var table = ttf[this.name]; if (!table) { _error.default.raise(10203, this.name); } this.struct.forEach(function (item) { var name = item[0]; var type = item[1]; var typeName = null; switch (type) { case _struct.default.Int8: case _struct.default.Uint8: case _struct.default.Int16: case _struct.default.Uint16: case _struct.default.Int32: case _struct.default.Uint32: typeName = _struct.default.names[type]; writer.write(typeName, table[name]); break; case _struct.default.Fixed: writer.writeFixed(table[name]); break; case _struct.default.LongDateTime: writer.writeLongDateTime(table[name]); break; case _struct.default.Bytes: writer.writeBytes(table[name], item[2] || 0); break; case _struct.default.Char: writer.writeChar(table[name]); break; case _struct.default.String: writer.writeString(table[name], item[2] || 0); break; default: _error.default.raise(10003, name, type); } }); return writer; } /** * 获取ttf表的size大小 * * @param {string} name 表名 * @return {number} 表大小 */ function size() { var sz = 0; this.struct.forEach(function (item) { var type = item[1]; switch (type) { case _struct.default.Int8: case _struct.default.Uint8: sz += 1; break; case _struct.default.Int16: case _struct.default.Uint16: sz += 2; break; case _struct.default.Int32: case _struct.default.Uint32: case _struct.default.Fixed: sz += 4; break; case _struct.default.LongDateTime: sz += 8; break; case _struct.default.Bytes: sz += item[2] || 0; break; case _struct.default.Char: sz += 1; break; case _struct.default.String: sz += item[2] || 0; break; default: _error.default.raise(10003, name, type); } }); return sz; } /** * 获取对象的值 * * @return {*} 当前对象的值 */ function valueOf() { var val = {}; var me = this; this.struct.forEach(function (item) { val[item[0]] = me[item[0]]; }); return val; } var _default = exports.default = { read: read, write: write, size: size, valueOf: valueOf, /** * 创建一个表结构 * * @param {string} name 表名 * @param {Array<[string, number]>} struct 表结构 * @param {Object} proto 原型 * @return {Function} 表构造函数 */ create: function create(name, struct, proto) { var Table = /*#__PURE__*/_createClass(function Table(offset) { _classCallCheck(this, Table); this.name = name; this.struct = struct; this.offset = offset; }); Table.prototype.read = read; Table.prototype.write = write; Table.prototype.size = size; Table.prototype.valueOf = valueOf; Object.assign(Table.prototype, proto); return Table; } };