Files
NapCatQQ/.pnpm-store/v3/files/b7/8eeb9fc9eda39675617d5a3b11059f055e1a4f89da8df171bd14731345bbda6e41e3a04a41ec318099aa04b4184b5a47cbccfd41b0a431dccebdef5cd63f63
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

84 lines
2.0 KiB
Plaintext

/**
* @file ttf转icon
* @author mengke01(kekee000@gmail.com)
*/
import TTFReader from './ttfreader';
import error from './error';
import config from './data/default';
import {getSymbolId} from './ttf2symbol';
/**
* listUnicode
*
* @param {Array} unicode unicode
* @return {string} unicode string
*/
function listUnicode(unicode) {
return unicode.map((u) => '\\' + u.toString(16)).join(',');
}
/**
* ttf数据结构转icon数据结构
*
* @param {ttfObject} ttf ttfObject对象
* @param {Object} options 选项
* @param {Object} options.metadata 字体相关的信息
* @param {Object} options.iconPrefix icon 前缀
* @return {Object} icon obj
*/
function ttfobject2icon(ttf, options = {}) {
const glyfList = [];
// glyf 信息
const filtered = ttf.glyf.filter((g) => g.name !== '.notdef'
&& g.name !== '.null'
&& g.name !== 'nonmarkingreturn'
&& g.unicode && g.unicode.length);
filtered.forEach((g, i) => {
glyfList.push({
code: '&#x' + g.unicode[0].toString(16) + ';',
codeName: listUnicode(g.unicode),
name: g.name,
id: getSymbolId(g, i)
});
});
return {
fontFamily: ttf.name.fontFamily || config.name.fontFamily,
iconPrefix: options.iconPrefix || 'icon',
glyfList
};
}
/**
* ttf格式转换成icon
*
* @param {ArrayBuffer|ttfObject} ttfBuffer ttf缓冲数组或者ttfObject对象
* @param {Object} options 选项
* @param {Object} options.metadata 字体相关的信息
*
* @return {Object} icon object
*/
export default function ttf2icon(ttfBuffer, options = {}) {
// 读取ttf二进制流
if (ttfBuffer instanceof ArrayBuffer) {
const reader = new TTFReader();
const ttfObject = reader.read(ttfBuffer);
reader.dispose();
return ttfobject2icon(ttfObject, options);
}
// 读取ttfObject
else if (ttfBuffer.version && ttfBuffer.glyf) {
return ttfobject2icon(ttfBuffer, options);
}
error.raise(10101);
}