拼音词典扩展(CustomDictLoader)
基本信息
| 属性 | 值 |
|---|---|
| 类型 | PinIn 拼音词典扩展(静态内部类) |
| 实现类 | net.moecraft.nechar.NotEnoughCharacters.CustomDictLoader |
| 父类 | me.towdium.pinin.DictLoader.Default |
| 注入方式 | 构造 PinIn 实例时作为参数传入 |
| 扩展条目数 | 14 |
作用
NotEnoughCharacters 的 @Mod 主类在静态字段初始化时就创建 PinIn 全局实例:
public static final PinIn CONTEXT = new PinIn(new CustomDictLoader()).config()
.accelerate(true)
.commit();
CustomDictLoader 先调用 super.load(feed) 载入 PinIn 默认词典,随后追加 14 个私有使用区(PUA)字形的读音。这些字形是金(钅)偏旁与部分异体字的组合——由于 Unicode 没有为它们分配标准码位,本模组自行在私用区取码并注册多音读法,使含这些字的物品名也能被拼音搜到。
固定设置:.accelerate(true) 开启加速(构造期一次性提交,不可配置)。
扩展字形清单
全部为 feed.accept(charCode, String[] 读音) 形式:
| # | 码位 | 字形 | 读音数组 |
|---|---|---|---|
| 1 | \ue900 |
钅卢 | lu2、jinlu |
| 2 | \ue901 |
钅杜 | du4、jindu |
| 3 | \ue902 |
钅喜 | xi3、jinxi |
| 4 | \ue903 |
钅波 | bo1、jinbo |
| 5 | \ue904 |
钅黑 | hei1、jinhei |
| 6 | \u9fcf |
钅麦 | mai4、jinmai |
| 7 | \ue906 |
钅达 | da2、jinda |
| 8 | \ue907 |
钅仑 | lun2、jinlun |
| 9 | \u9fd4 |
钅哥 | ge1、jinge |
| 10 | \u9fed |
钅尔 | ni3、jiner |
| 11 | \ue90a |
钅夫 | fu1、jinfu |
| 12 | \ue90c |
钅立 | li4、jinli |
| 13 | \u9fec |
石田 | tian2、shitian |
| 14 | \u9feb |
气奥 | ao4、qiao、aoqi |
读音规律:
- 钅系字形(第 1~12 项)均提供双读音:单独的右半部读音(
lu2、du4…)+jin前缀的整字读音(jinlu、jindu…)。 - 钅尔(第 10 项)整字读音为
jiner。 - 最后两项不是钅系:石田提供
tian2/shitian,气奥提供三个读音ao4/qiao/aoqi。
码位分两类
| 类型 | 码位 | 说明 |
|---|---|---|
| BMP 内私用区 | \u9fcf、\u9fd4、\u9fed、\u9fec、\u9feb |
单个 char 即可表示,物品名中出现即可直接匹配 |
| 高位 BMP 私用区 | \ue900~\ue90c |
同样是单 char;但某些字体/资源包会把这些字形以代理对形式传入,需要先归一化 |
代理对 → 单码位的归一化由 NecharUtils.replaceExtraChars 完成,覆盖 \ue900、\ue901、\ue902、\ue903、\ue904、\ue906、\ue907、\ue90a、\ue90c 共 9 个码位(词典中未出现在替换表里的 \u9fcf、\u9fd4、\u9fed、\u9fec、\u9feb 本就不需要代理对形式)。
匹配核心中的 Match.isChinese(char) 把 0xE900 <= i < 0xEA00 判为"中文",正是为了识别这批扩展字形(见 匹配核心 Match)。
配置提交的时机
NotEnoughCharacters.onConfigChange() 把 fuzzy 与 general 分类的全部配置项提交给同一个 CONTEXT:
| 调用顺序 | 配置来源 |
|---|---|
| 1 | .fZh2Z(EnableFZh2Z) |
| 2 | .fSh2S(EnableFSh2S) |
| 3 | .fCh2C(EnableFCh2C) |
| 4 | .fAng2An(EnableFAng2An) |
| 5 | .fIng2In(EnableFIng2In) |
| 6 | .fEng2En(EnableFEng2En) |
| 7 | .fU2V(EnableFU2V) |
| 8 | .keyboard(KeyboardType.get()) |
| 9 | .commit() |
该方法在两个时机被调用:
preInit(FMLPreInitializationEvent)——游戏启动时;NechConfig.setKeyboard(Spell)内部——/nech keyboard切换方案时(只改运行期,见 /nech 命令)。
相关条目
- 配置系统 -
fuzzy与general分类的全部配置项 - 匹配核心 Match -
CONTEXT的调用方与isChinese的码位范围 - NecharUtils.contain - 代理对字形归一化
- /nech 命令 - 运行期切换键盘方案