UNPKG

fonteditor-core

Version:

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

199 lines (197 loc) 5.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _unicodeName = _interopRequireDefault(require("../enum/unicodeName")); var _postName = _interopRequireDefault(require("../enum/postName")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @file ttf字符串相关函数 * @author mengke01(kekee000@gmail.com) * * references: * 1. svg2ttf @ github */ /** * 将unicode编码转换成js内部编码, * 有时候单子节的字符会编码成类似`\u0020`, 这里还原单字节 * * @param {string} str str字符串 * @return {string} 转换后字符串 */ function stringify(str) { if (!str) { return str; } var newStr = ''; for (var i = 0, l = str.length, ch; i < l; i++) { ch = str.charCodeAt(i); if (ch === 0) { continue; } newStr += String.fromCharCode(ch); } return newStr; } var _default = exports.default = { stringify: stringify, /** * 将双字节编码字符转换成`\uxxxx`形式 * * @param {string} str str字符串 * @return {string} 转换后字符串 */ escape: function (_escape) { function escape(_x) { return _escape.apply(this, arguments); } escape.toString = function () { return _escape.toString(); }; return escape; }(function (str) { if (!str) { return str; } return String(str).replace(/[\uff-\uffff]/g, function (c) { return escape(c).replace('%', '\\'); }); }), /** * bytes to string * * @param {Array} bytes 字节数组 * @return {string} string */ getString: function getString(bytes) { var s = ''; for (var i = 0, l = bytes.length; i < l; i++) { s += String.fromCharCode(bytes[i]); } return s; }, /** * 获取unicode的名字值 * * @param {number} unicode unicode * @return {string} 名字 */ getUnicodeName: function getUnicodeName(unicode) { var unicodeNameIndex = _unicodeName.default[unicode]; if (undefined !== unicodeNameIndex) { return _postName.default[unicodeNameIndex]; } return 'uni' + unicode.toString(16).toUpperCase(); }, /** * 转换成utf8的字节数组 * * @param {string} str 字符串 * @return {Array.<byte>} 字节数组 */ toUTF8Bytes: function toUTF8Bytes(str) { str = stringify(str); var byteArray = []; for (var i = 0, l = str.length; i < l; i++) { if (str.charCodeAt(i) <= 0x7F) { byteArray.push(str.charCodeAt(i)); } else { var codePoint = str.codePointAt(i); if (codePoint > 0xffff) { i++; } var h = encodeURIComponent(String.fromCodePoint(codePoint)).slice(1).split('%'); for (var j = 0; j < h.length; j++) { byteArray.push(parseInt(h[j], 16)); } } } return byteArray; }, /** * 转换成usc2的字节数组 * * @param {string} str 字符串 * @return {Array.<byte>} 字节数组 */ toUCS2Bytes: function toUCS2Bytes(str) { str = stringify(str); var byteArray = []; for (var i = 0, l = str.length, ch; i < l; i++) { ch = str.charCodeAt(i); byteArray.push(ch >> 8); byteArray.push(ch & 0xFF); } return byteArray; }, /** * 获取pascal string 字节数组 * * @param {string} str 字符串 * @return {Array.<byte>} byteArray byte数组 */ toPascalStringBytes: function toPascalStringBytes(str) { var bytes = []; var length = str ? str.length < 256 ? str.length : 255 : 0; bytes.push(length); for (var i = 0, l = str.length; i < l; i++) { var c = str.charCodeAt(i); // non-ASCII characters are substituted with '*' bytes.push(c < 128 ? c : 42); } return bytes; }, /** * utf8字节转字符串 * * @param {Array} bytes 字节 * @return {string} 字符串 */ getUTF8String: function getUTF8String(bytes) { var str = ''; for (var i = 0, l = bytes.length; i < l; i++) { if (bytes[i] < 0x7F) { str += String.fromCharCode(bytes[i]); } else { str += '%' + (256 + bytes[i]).toString(16).slice(1); } } return unescape(str); }, /** * ucs2字节转字符串 * * @param {Array} bytes 字节 * @return {string} 字符串 */ getUCS2String: function getUCS2String(bytes) { var str = ''; for (var i = 0, l = bytes.length; i < l; i += 2) { str += String.fromCharCode((bytes[i] << 8) + bytes[i + 1]); } return str; }, /** * 读取 pascal string * * @param {Array.<byte>} byteArray byte数组 * @return {Array.<string>} 读取后的字符串数组 */ getPascalString: function getPascalString(byteArray) { var strArray = []; var i = 0; var l = byteArray.length; while (i < l) { var strLength = byteArray[i++]; var str = ''; while (strLength-- > 0 && i < l) { str += String.fromCharCode(byteArray[i++]); } // 这里需要将unicode转换成js编码 str = stringify(str); strArray.push(str); } return strArray; } };