Cim 2.0.0 发布

2025年12月7日,Cim(通用输入法)2.0.0 版本正式发布。此次更新包含主版本变更,主要特点包括 libcim 的 ABI(应用二进制接口)变更、新增 Qt6 支持以及插件架构的重构。

主要变更事项如下:

1. 支持 Qt6 输入法模块

新增了对 Qt6 环境的配置支持(检测 core、gui、widgets 路径)。configure 脚本现在可以在 FreeBSD 和 Linux 发行版上检测 Qt6 的平台特定路径。

  • 实现了 libqt6im-cim.so 库,通过 QPlatformInputContext 将 Qt6 事件传递给 Cim。
  • 实现了 CimQic 类,用于处理预编辑(Preedit)绘制、提交、周边文本(surrounding text)处理及光标更新。
  • 在构建配置中添加了 --disable-qt6 选项,可用于禁用 Qt6 支持。

2. 核心架构重构及 ABI 变更

libcim 库的主版本号升级为 2,因此中断了对旧版本的 ABI 兼容性。

  • 引入不透明句柄(Opaque Handle): CimIc 结构体已更改为使用不透明句柄 CimIcHandle 和虚函数表(vtable),以隐藏实现细节。
  • 动态分派: 引入了 CimIcVTableCimPlugin 结构体,以支持插件的动态分派(Dynamic Dispatch)。
  • API 命名规则变更: 实例创建及销毁函数从 cim_ic_new/free 更改为 cim_ic_create/destroy

3. 数据类型及 API 标准化

提高了整个 API 中数据类型的明确性。

  • API 已更新,使用 uint32_t 表示大小和数量,使用 int32_t 表示坐标。
  • 标准化了回调签名,并统一使用了 nullptr

4. 其他改进事项

  • C 标准: 默认启用 C2x(C23) 标准支持,可通过 --disable-c2x 选项禁用。
  • 安全性增强: 改进了 c_mem 函数群中的大小检查(零大小检查)以及 c_utf8_strncpy 的安全性。
  • Ruby 绑定: 添加了 libcim/cim.rb,用于通过 Fiddle 测试 Cim。
  • 字符串工具: 添加了 c_str_sprintf 实现。

本次发布重点在于结构现代化以及确保对 Qt6 环境的扩展性。现有用户可能需要因 API 和 ABI 的变更而修改代码。

Cim 源代码可在 https://nimfsoft.art/zh/cim/ 下载。