 Jia Suiandfanlusky
|
1499027f04
|
fix(engine,server): 光标落在拼音首单元内部不再收起候选窗 (#940)
* fix(engine,server): 光标落在拼音首单元内部不再收起候选窗
quantized_prefix_end() 把光标 floor 到完整单元边界后,prefix_end==0 同时表示「真串首」与「首单元内部」。后者被 Server 的 IsCaretPrefixEmpty 当成串首,候选窗整窗收起(全拼 nihaoya 选你好后剩 ya 左移即消失)。
floor 结果为 0 且 caret>0(首单元内部)时改返回 raw.size(),落回整串解码;prefix_end()==0 当且仅当 caret==0,只有真串首才隐藏。segment_raw_boundaries() 与 #187「前缀只切完整单元」的契约不变。
* fix(engine,server): 首单元内部的光标向上取整到首单元末尾
上一提交让首单元内部的光标落回整串解码,prefix_end() 因此报告整串已解码,
与实际光标位置不符:Server 选词时 caret_prefix_selection 为假,不复位组合
光标,造词后剩余串带着旧光标位置;首单元与后续单元的取整方向也不一致。
改为向上取整到首单元末尾(只有一个单元时即整串)。prefix_end() == 0 仍当且
仅当 caret == 0,前缀选词走正常的光标复位路径。同步更新引擎与
input_key_policy.h 中描述旧规则的注释和相应测试。
---------
Co-authored-by: fanlusky <1730976608@qq.com>
|
2026-10-15 01:37:58 +08:00 |
|
Jia Sui
|
54c41d34b2
|
fix(engine): reset_cache 连带失效 caret 前缀候选缓存
|
2026-09-23 21:32:59 +08:00 |
|
Jia Sui
|
096c0ccb10
|
feat(server): 前缀重算接线与仅前缀选词结算
编辑键后按门控(协商 composition-restore 且非 UILess、非英文/特殊模式)
把 caret 喂给会话做前缀重解;caret 回到串尾显式清 caret_,串尾行为
与现状一致。前缀选词复用 advance_composition_after_selection 的头部
消费语义:剩余 raw 即后缀、caret 归 0,NeedToCreateWord 帧带契约既有的
可选 caret 字段(协议零新增);学习/调频/AI 上下文走既有链路。
空前缀时收起 Server 自有候选窗并守卫假候选兜底与 ShowCandidate。
门控谓词与边界补真值表单测;回归测试钉住「移回串尾恢复整串解码」。
|
2026-09-22 16:09:05 +08:00 |
|
Jia Sui
|
1cfba58eba
|
feat(engine): 光标驱动的拼音前缀解码与候选重算
caret 从纯显示状态升级为查询管线输入:set_caret 量化到最后一个完整
音节单元边界(只消费 segment_raw_boundaries,#187 契约),前缀候选
独立解码、preedit 保持全串拼音风格;纯移动光标同样重算候选。
IInputScheme::set_raw_input 提升为接口方法以支持不动现场组合的
独立前缀查询。runtime_isolation 两处按 R3/R4 新语义改写(caret 在
音节中间 floor 到空前缀、候选为空是预期状态);新增 caret 前缀
会话单测(engine/tests + server CI 目标,隔离词库夹具,覆盖
全拼 floor、双拼贪心配对、五笔无单元模型、boundary=0 空候选)。
|
2026-09-22 14:56:22 +08:00 |
|