{"version":3,"file":"font-manager.cjs","sources":["../../../src/utils/font-manager.js"],"sourcesContent":["/**\n * 字体管理器\n */\nimport { GlobalFonts } from '@napi-rs/canvas';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport fs from 'fs-extra';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// 默认字体路径\nconst DEFAULT_FONT_PATH = path.join(__dirname, '../fonts/PatuaOne-Regular.ttf');\nconst DEFAULT_FONT_FAMILY = 'PatuaOne'; // 使用无空格的字体名称\n\n// 已注册的字体\nconst registeredFonts = new Map();\n\n/**\n * 获取所有已注册的字体信息\n * @returns {Array<{fontFamily: string, path: string, options: Object}>}\n */\nexport function getRegisteredFonts() {\n  return Array.from(registeredFonts.entries()).map(([fontFamily, info]) => ({\n    fontFamily,\n    path: info.path,\n    options: info.options,\n  }));\n}\n\n/**\n * 注册字体\n * @param {string} fontPath - 字体文件路径\n * @param {string} fontFamily - 字体族名称\n * @param {Object} options - 选项 { weight, style }\n */\nexport function registerFontFile(fontPath, fontFamily, options = {}) {\n  if (registeredFonts.has(fontFamily)) {\n    return; // 已注册，跳过\n  }\n\n  try {\n    const resolvedPath = path.isAbsolute(fontPath)\n      ? fontPath\n      : path.resolve(process.cwd(), fontPath);\n\n    if (!fs.pathExistsSync(resolvedPath)) {\n      console.warn(`字体文件不存在: ${resolvedPath}`);\n      return;\n    }\n\n    // 注册字体（@napi-rs/canvas 使用 GlobalFonts.registerFromPath）\n    GlobalFonts.registerFromPath(resolvedPath, fontFamily);\n\n    registeredFonts.set(fontFamily, {\n      path: resolvedPath,\n      ...options,\n    });\n\n    // console.log(`字体已注册: ${fontFamily} (${resolvedPath})`);\n  } catch (error) {\n    console.error(`注册字体失败: ${fontFamily}`, error);\n  }\n}\n\n/**\n * 初始化默认字体\n */\nexport function initDefaultFont() {\n  // 注册系统回退字体（Windows）\n  const systemFonts = [\n    // 核心字体\n    { path: 'C:/Windows/Fonts/segoeui.ttf', family: 'SegoeUI' },\n    { path: 'C:/Windows/Fonts/seguiemj.ttf', family: 'Segoe UI Emoji' },\n    { path: 'C:/Windows/Fonts/seguisb.ttf', family: 'Segoe UI Semibold' },\n    { path: 'C:/Windows/Fonts/seguisbi.ttf', family: 'Segoe UI Semibold Italic' },\n    { path: 'C:/Windows/Fonts/seguii.ttf', family: 'Segoe UI Italic' },\n    { path: 'C:/Windows/Fonts/segouil.ttf', family: 'Segoe UI Light' },\n    { path: 'C:/Windows/Fonts/seguiubi.ttf', family: 'Segoe UI' },\n    { path: 'C:/Windows/Fonts/segoeprb.ttf', family: 'Segoe Print' },\n    { path: 'C:/Windows/Fonts/segoesc.ttf', family: 'Segoe Script' },\n    // 中文字体\n    { path: 'C:/Windows/Fonts/msyh.ttc', family: 'Microsoft YaHei' },\n    { path: 'C:/Windows/Fonts/simhei.ttf', family: 'SimHei' },\n    { path: 'C:/Windows/Fonts/simsun.ttc', family: 'SimSun' },\n    // 英文字体\n    { path: 'C:/Windows/Fonts/arial.ttf', family: 'Arial' },\n    { path: 'C:/Windows/Fonts/ariali.ttf', family: 'Arial', style: 'italic' },\n    { path: 'C:/Windows/Fonts/arialbd.ttf', family: 'Arial', weight: 'bold' },\n    { path: 'C:/Windows/Fonts/arialbi.ttf', family: 'Arial', weight: 'bold', style: 'italic' },\n    { path: 'C:/Windows/Fonts/times.ttf', family: 'Times New Roman' },\n    { path: 'C:/Windows/Fonts/consola.ttf', family: 'Consolas' },\n  ];\n\n  // 注册系统字体\n  for (const font of systemFonts) {\n    if (fs.pathExistsSync(font.path)) {\n      registerFontFile(font.path, font.family, {\n        weight: font.weight || 'normal',\n        style: font.style || 'normal',\n      });\n    }\n  }\n\n  // 注册默认字体\n  if (fs.pathExistsSync(DEFAULT_FONT_PATH)) {\n    registerFontFile(DEFAULT_FONT_PATH, DEFAULT_FONT_FAMILY);\n\n    const aliases = [\n      'Patua One',\n      'patuaone',\n      'patuaone Bold',\n      'PatuaOne Bold',\n      'PatuaOne-Regular',\n    ];\n\n    for (const alias of aliases) {\n      try {\n        if (alias.toLowerCase().includes('bold')) {\n          registerFontFile(DEFAULT_FONT_PATH, alias, { weight: 'bold' });\n        } else {\n          registerFontFile(DEFAULT_FONT_PATH, alias);\n        }\n      } catch (e) {\n        // 忽略单个别名注册失败\n      }\n    }\n  } else {\n    console.warn(`默认字体文件不存在: ${DEFAULT_FONT_PATH}`);\n  }\n}\n\n/**\n * 获取字体回退链\n * @param {string} fontFamily - 首选字体\n * @returns {string} 包含回退字体的字体族字符串\n */\nexport function getFontFallbackChain(fontFamily) {\n  // 完整的回退字体链\n  const allFallbacks = [\n    fontFamily,                    // 首选字体\n    'SegoeUI',                     // Segoe UI\n    'Segoe UI',                    // Segoe UI 空格版本\n    'Microsoft YaHei',             // 微软雅黑\n    'Arial',                       // Arial\n    'Segoe UI Emoji',              // Emoji 字体（关键！）\n    'sans-serif',                  // 最终回退\n  ];\n\n  // 过滤掉未注册的字体\n  const availableFonts = allFallbacks.filter(name => {\n    if (!name) return false;\n    const normalizedName = name.replace(/\\s+/g, '').toLowerCase();\n    return registeredFonts.has(name) ||\n           registeredFonts.has(normalizedName) ||\n           Array.from(registeredFonts.keys()).some(key =>\n             key.replace(/\\s+/g, '').toLowerCase() === normalizedName\n           );\n  });\n\n  // 如果只有原始字体，直接返回\n  if (availableFonts.length <= 1) {\n    return fontFamily;\n  }\n\n  return availableFonts.join(', ');\n}\n\n/**\n * 获取默认字体族名称\n */\nexport function getDefaultFontFamily() {\n  return DEFAULT_FONT_FAMILY;\n}\n\n/**\n * 检查字体是否已注册\n */\nexport function isFontRegistered(fontFamily) {\n  return registeredFonts.has(fontFamily);\n}\n\n/**\n * 获取已注册的字体名称列表（仅返回名称）\n */\nexport function getRegisteredFontNames() {\n  return Array.from(registeredFonts.keys());\n}\n\n/**\n * 反注册字体（清理 Worker 中的字体引用）\n * @param {string} fontFamily - 字体族名称\n */\nexport function unregisterFont(fontFamily) {\n  if (registeredFonts.has(fontFamily)) {\n    registeredFonts.delete(fontFamily);\n  }\n}\n\n/**\n * 清空所有已注册的字体\n */\nexport function clearAllFonts() {\n  registeredFonts.clear();\n}\n\n"],"names":["__filename","fileURLToPath","__dirname","GlobalFonts"],"mappings":"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"}