Files
msime-windows/scripts/ci/test-engine.ps1
T
Jia Suiandfanlusky d414268b5f [Feat] U 模式重构为部件拆字反查 (#973)
* feat(engine,server,windows,ui-html,installer): U 模式重构为部件拆字反查 (#971)

把 U 模式从 Unicode 十六进制码位输入改成部件拆字反查:Shift+U 后输入各
组成部分的拼音连写(晶 = ririri)即可出字,候选上反显注音。

- 引擎:新增 local_modes/radical_query(前缀匹配、字频降序),数据表
  engine/radical/decomposition.txt 与生成脚本;LocalInputMode::Unicode
  改为 Radical;删除 unicode_query。
- Server:g_radical_mode_triggered + IsRadicalCompositionActive + 候选分发,
  用 cpp-pinyin 反显注音;删除 Unicode 码位路径。
- 前端 TSF:删除 U 模式的十六进制/数字特例与影子预判,按普通组合处理。
- 配置:utility.unicode_mode 改为 utility.radical_mode。
- 部署:assets 登记 radical_decomposition,安装器与 CI 拷表。

数据来源 mirtlecn/rime-radical-pinyin (GPL-3.0),授权见 engine/radical/NOTICE.md。

* feat(server): U 模式反显拼音改为带调风格(jīng)

* fix(server,installer): 修复 U 模式 CI(拆字表打包夹具与 clang-format)

* fix(engine,server): 修正 U 模式按键错位、重复候选与配置迁移

- Server 在 U 模式不再吞掉撇号、分号、斜杠、大写字母等键:TSF 已把它们记进按键缓冲,
  吞掉又不重同步会让两侧串和光标错位。照常插入,含非 a-z 的码查不出候选
- 拆字查询全码命中排在仅前缀命中之前,同一个字的几种拆法只出一次
- 升级合并把旧键 utility.unicode_mode 的值带到 utility.radical_mode,读取时也兜底旧键
- 生成脚本只收汉字,重建拆字表去掉 abc 码下的 51 行数字、字母与符号
- 开着 U 模式时在后台预热拆字表与 cpp-pinyin 词典,避开首个按键的冷加载
- Server 按会话的 RuntimePaths 查拆字表,删掉走全局数据目录的便捷重载
- cpp-pinyin 初始化合并到 utils/hanzi_pinyin,设置页导入注音共用;U 模式与快捷短语的收键分支合并

---------

Co-authored-by: fanlusky <1730976608@qq.com>
2026-10-16 01:01:18 +08:00

38 lines
2.4 KiB
PowerShell

param(
[Parameter(Mandatory = $true)][string]$BuildDir,
[Parameter(Mandatory = $true)][string]$StagingRoot
)
# Runs the engine's own test suite against the product's exact dictionaries.
#
# The Server build pulls the engine in with BUILD_TESTING off (see server/CMakeLists.txt), so these
# tests never ran in CI. Some of them are the only coverage for behaviour the Server tests cannot
# see -- the user journal's connection handling and the data-directory cleanup contract among them.
# The data layout mirrors test-server.ps1.
$ErrorActionPreference = 'Stop'
$automationRoot = (Resolve-Path (Join-Path $PSScriptRoot '../..')).Path
$helpcodes = Join-Path $automationRoot 'engine/helpcode/helpcodes'
if (-not (Test-Path -LiteralPath $helpcodes -PathType Container)) {
throw "Helpcodes not found at $helpcodes; the engine is vendored in-tree, so this is an incomplete checkout"
}
$radical = Join-Path $automationRoot 'engine/radical/decomposition.txt'
if (-not (Test-Path -LiteralPath $radical -PathType Leaf)) {
throw "Radical decomposition table not found at $radical; the engine is vendored in-tree, so this is an incomplete checkout"
}
python (Join-Path $automationRoot 'scripts/product_lock.py') fetch-dictionaries --staging-root $StagingRoot
if ($LASTEXITCODE -ne 0) { throw 'Could not provision locked dictionaries' }
$verified = (Resolve-Path (Join-Path $StagingRoot 'MetasequoiaImeDict/out')).Path
# Isolate LOCALAPPDATA as well, so no installed dictionary or user journal is ever touched.
$env:LOCALAPPDATA = Join-Path (Resolve-Path $StagingRoot).Path 'user-local'
$data = Join-Path $env:LOCALAPPDATA 'metasequoiaime'
New-Item -ItemType Directory -Force -Path $data | Out-Null
Copy-Item (Join-Path $verified '*') -Destination $data -Force
Copy-Item $helpcodes -Destination $data -Recurse -Force
# U 模式的拆字表按 assets 清单的 radical/decomposition.txt 相对路径部署。
New-Item -ItemType Directory -Force -Path (Join-Path $data 'radical') | Out-Null
Copy-Item $radical -Destination (Join-Path $data 'radical') -Force
Copy-Item (Join-Path $automationRoot 'server/assets/tables/*') -Destination $data -Force
Copy-Item (Join-Path $automationRoot 'server/assets/config/config.toml') -Destination $data -Force
$env:METASEQUOIA_IME_DATA_DIR = $data
ctest --no-tests=error --test-dir $BuildDir -C Release --output-on-failure --timeout 120
if ($LASTEXITCODE -ne 0) { throw 'Engine tests failed for the locked product' }