* refactor(engine): 语音独立工具改用原生托盘菜单,移除 WebView2 托盘菜单改用 Win32 弹出菜单,设置项改为用关联编辑器打开 config.toml,关于页改为消息框。删除 window_webview2 与两份 HTML 资源,windows-app 特性不再依赖 webview2 端口。 * refactor(server): 移除 WebView2,候选窗、工具栏、托盘菜单与设置窗口只保留 Direct2D 删除 src/webview2 与 webview_utils,小窗口的置顶、皮肤重载和工具栏状态缓存移到 window/small_windows,presenter 成为唯一路径,D2D 下的置顶时序与 cloak 行为保持不变。设置进程去掉 WebView2 宿主、鼠标转发与启动图,只构建原生窗口;旧快捷方式传入的 --d2d / --webview2 被忽略。删除 appearance.ui_backend 与 appearance.settings_ui_backend(读取、写入、设置页下拉框与两份配置模板),升级时由模板合并丢弃旧值。设置窗口的图片资源移到 server/assets/settings,安装到数据目录的 assets\settings。不再链接 WebView2Loader,vcpkg 去掉 webview2 端口。 * build(installer): 打包与 CI 不再处理 WebView2 页面和运行时 Prepare-PackageFiles 去掉 -UiHtmlDirectory 与 html 暂存,改为暂存 server/assets/settings;安装器不再检查 WebView2 Runtime、不再创建 ProgramData 下的 WebView2 用户数据目录,升级和卸载时清理旧版留下的 webview2 / webview2-settings 与数据目录里的 html。CI 删除设置页构建、契约同步检查和候选窗 DOM 测试,release 的打包任务不再依赖网页产物;dependabot 去掉 npm。第三方声明去掉 WebView2Loader。 * refactor(ui-html): 删除 WebView2 页面与设置页前端工程 候选窗、工具栏、托盘菜单、设置页、主题和契约副本都已没有使用者;设置窗口用到的图片资源已移到 server/assets/settings。sync-contracts.py 与 pnpm/Vite/TypeScript 工程一并删除,契约仍以 engine/contracts/webview 为唯一来源。 * docs(server): 文档改为只描述 Direct2D 界面 仓库地图去掉 ui-html,组件边界、uiAccess 与置顶时序、设置窗口和配置读写的说明改写为 Direct2D 唯一界面;安装说明去掉 WebView2 Runtime 检查,打包命令去掉 -UiHtmlDirectory;engine/contracts/webview 的说明改为设置窗口是唯一使用者,名字是历史遗留。 * docs(skins): 皮肤说明不再区分 WebView2 与 D2D 渲染器 v2 字段去掉「仅 WebView2」,改为说明由 Direct2D 原生渲染、部分字段仍在补全;颜色必须带 # 改为清单格式约定。随包的 skins/niya-demo/skin.toml 不改,免得用户机器上的同名皮肤在升级时被当成已修改而改名备份。 * docs(ui): demo 说明文字不再提 WebView2
50 lines
3.8 KiB
Markdown
50 lines
3.8 KiB
Markdown
# Input engine (engine/)
|
|
|
|
[中文 README](README.md) · [Website](https://msime.app)
|
|
|
|
The C++ conversion engine behind Metasequoia IME for Windows: input sessions, candidate lookup, helpcodes, the shared contracts and the voice module.
|
|
|
|
This directory used to be a submodule of `metasequoiaime/MSIME-Engine`. It is now a component of this repository, a sibling of `server/`, `ui/`, `windows/` and `installer/`. Its upstream commit, and exactly what the Windows specialization removed, are recorded in [UPSTREAM.md](UPSTREAM.md). **Treat it as first-party code**: reviewed, formatted and tested like anything else here, no longer merged from upstream.
|
|
|
|
| Directory | Purpose |
|
|
| --- | --- |
|
|
| `core/`, `quanpin/`, `shuangpin/`, `english/`, `japanese/` | Input sessions and candidate lookup |
|
|
| `contracts/` | The authoritative IPC wire format, dictionary format, punctuation policy and settings-window message schema |
|
|
| `helpcode/` | Helpcode (形码) tables and generators |
|
|
| `local_modes/`, `providers/`, `user_dictionary/` | Local modes, online candidate sources, the user dictionary |
|
|
| `voice/` | Recording, WAV encoding, recognition and text cleanup; builds independently |
|
|
| `googlepinyinime-rev/`, `ngram/kenlm/`, `utfcpp/`, `voice/third_party/` | Vendored third-party code, kept in its upstream formatting and licence |
|
|
|
|
Integration is through `<metasequoia/session.h>`. See [runtime architecture](docs/runtime-architecture.md).
|
|
|
|
## Build
|
|
|
|
The product build does not build this directory on its own: `server/CMakeLists.txt` pulls it in with `add_subdirectory`, so CI compiles and exercises the engine through the server and the TSF frontend. After changing something here, run the server's build and tests.
|
|
|
|
Building it standalone still works and is much faster while working on the engine. Dependencies are CMake 3.25+, a C++17 compiler, Boost, fmt, spdlog and SQLite3.
|
|
|
|
```powershell
|
|
vcpkg install --triplet x64-windows-static
|
|
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows-static
|
|
cmake --build build --config Release --parallel
|
|
ctest --test-dir build -C Release --output-on-failure --timeout 20
|
|
```
|
|
|
|
`ctest` runs every engine target registered in the root `CMakeLists.txt`: the segmentation, IPC and punctuation contracts, the platform API, data paths, runtime isolation, dictionary state and the per-mode session tests. `tests/` additionally holds a separate Windows-only project that is **not** part of that build — add new tests to the registered targets so they actually run.
|
|
|
|
Formatting is driven from the repository root by `scripts/format.sh`, using the `.clang-format` in this directory (`voice/` has its own with a wider column limit). The vendored third-party trees and the generated headers are excluded.
|
|
|
|
## Contract rules
|
|
|
|
The IPC wire format, opcodes, voice framing and settings-window message definitions live in `contracts/` and are the single source of truth. Consumers include the same headers; do not restate them on either side. Dictionary naming is defined by `contracts/dictionary/format.json`, shared with the repository root's `scripts/dictionary_product.py`.
|
|
|
|
## Data and licensing
|
|
|
|
The dictionaries are neither stored nor built here. They arrive as a release pinned by tag and digest in `product-lock.json` and are downloaded at build time; the pipeline that produced them left with the specialization. Per-source licensing is tracked in [NOTICE.md](NOTICE.md) — read it before redistributing the built databases.
|
|
|
|
Recognition goes through a cloud provider; local Whisper inference was removed. The only committed model is `voice/assets/models/silero_vad.onnx`, loaded solely by the standalone Windows host that is off by default.
|
|
|
|
## Licence
|
|
|
|
GPL-3.0. Vendored `googlepinyinime-rev`, `ngram/kenlm` (LGPL-2.1-or-later), `utfcpp` and `voice/third_party/miniaudio` keep their upstream licences.
|