网站标准宽度app运营策划
web/
2025/9/26 22:00:56/
文章来源:
网站标准宽度,app运营策划,自动跳转到wap网站,中国建设信息化官网1. T9 输入法的中文字典数据
网上可以找到 T9 输入法的中文字典数据#xff0c;但是通常有两个问题#xff1a; 采用 GPL 协议#xff0c;不太适合加入 AWTK。 只支持单个汉字的输入#xff0c;不支持词组的输入。
经过考虑之后#xff0c;决定自己生成 T9 输入法的中…
1. T9 输入法的中文字典数据
网上可以找到 T9 输入法的中文字典数据但是通常有两个问题 采用 GPL 协议不太适合加入 AWTK。 只支持单个汉字的输入不支持词组的输入。
经过考虑之后决定自己生成 T9 输入法的中文字典数据。AWTK 使用了谷歌拼音输入法作为缺省的拼音输入法谷歌拼音输入法的字典数据质量还是不错的写一个工具把谷歌拼音输入法的字典数据转换为 T9 输入法的中文字典数据即可。
谷歌拼音输入法的字典数据原始格式为
汉字 频率 简体/繁体标志 拼音如
中 243213.912993 0 zhong转换工具要做的事情的是 把拼音转换成对应的数字。比 zhong 对应的是 83553。 生成适合查询的格式。本来想复用谷歌拼音输入的引擎但是没有成功最后决定自己写程序来查询。
转换工具完整的代码请参考awtk/tools/t9_gen/to_t9_zh.js 如果需要对字典进行裁剪可以先编辑原始数据然后重新生成数据。 2. T9 输入法的英文字典数据
要生成英文字典数据获取一个英文单词列表并且按照单词的使用频率进行排序。找 github 上找到了这样的数据。
同样需要写个小工具把该数据转成生成适合查询的格式。
转换工具完整的代码请参考awtk/tools/t9_gen/to_t9_en.js 该工具应该同样适用于其它西文语言。 3. 对键盘、输入法框架和编辑器进行改进
为了支持 T9 输入法需要对键盘、输入法框架和编辑器进行改进。 随便提一下SOLID 原则中的开闭原则通常只存在于理想简单情况下一种切实可行的方法是在早期设计时要考虑将来的扩展但也无需过度设计而是每次扩展时都对框架进行完善让它更适应于将来的扩展。 3.1 支持语言切换
同样是在中文环境下你可能需要输入中文也可能需要输入英文。在中文键盘下输入中文在英文键盘下输入英文。 在键盘切换时需要让输入法引擎知道当前的语言。
3.1.1 键盘
如果需要切换语言可以给键盘的页面设置一个 lang 属性用于标识改键盘的语言切换到该页面时自动设置输入法引擎的语言。
如 view namechinese langzh_cn x0 y0 w100% h100% children_layoutdefault(r4,c4,s2,m2)button repeat300 name text/button repeat300 namekey:1 textABC/button repeat300 namekey:2 textDEF/button repeat300 namekey:backspace stylehighlightimage draw_typeicon imagebackspace xcenter ymiddle w100% h100%//buttonbutton repeat300 namekey:3 textGHI/button repeat300 namekey:4 textJKL/button repeat300 namekey:5 textMNO/button namepage:lower stylehighlight textabc/button repeat300 namekey:6 textPQRS/button repeat300 namekey:7 textTUV/button repeat300 namekey:8 textWXYZ/button namepage:symbols stylehighlight text#/button repeat300 nameopt:。 text。/button repeat300 namespace textSpace/button nameaction stylehighlight textReturn/button namepage:number stylehighlight text123//view在切换键盘时如果存在 lang 属性将其设置到输入法。 value_t v;widget_t* active widget_get_child(iter, widget_get_value(iter));if (widget_get_prop(active, WIDGET_PROP_IM_LANG, v) RET_OK) {input_method_set_lang(input_method(), value_str(v));}3.1.2 输入法提供设置语言的函数
/*** method input_method_set_lang* 设置语言。** 有的输入法同时支持输入多种语言。* 比如 T9可以同时支持中文和英文输入配合软键盘随时切换输入的语言。** annotation [scriptable]* param {input_method_t*} im 输入法对象。* param {const char*} lang 语言。** return {ret_t} 返回 RET_OK 表示成功否则表示失败。*/
ret_t input_method_set_lang(input_method_t* im, const char* lang);3.1.3 输入法引擎提供设置语言的函数
/*** engine input_engine_set_lang* 设置语言。* annotation [scriptable]* param {input_engine_t*} engine 输入法引擎对象。* param {const char*} lang 语言。** return {ret_t} 返回 RET_OK 表示成功否则表示失败。*/
ret_t input_engine_set_lang(input_engine_t* engine, const char* lang);
3.2 支持预编辑状态 (preedit)
预编辑状态是在文本真正提交到编辑器之前的状态在预编辑状态下输入的文本可以被后面的输入覆盖。比如软键盘上一个按键有 ABC 三个字符按一下输入 A再按一下输入 B继续按钮输入 C在指定时间内没有按则提交当前的字符到编辑器。 3.2.1 软键盘
键盘的按钮名称以opt:开头的按钮表示这个按钮需要预编辑处理。为了支持预编辑输入软键盘在按钮事件处理函数中要做下列处理 当前不在预编辑状态时则进入预编辑状态并启动定时器把当前字符的序数设置为 0并提交字符到编辑器。 当前在预编辑状态更新定时器把字符的序数设置为下一个并提交字符到编辑器。 定时器超时或点击其它按钮退出预编辑。 详情参考函数keyboard_on_button_click 3.2.2 输入法
输入法需要提供几个函数用于中转消息
/*** method input_method_dispatch_preedit* 分发进入预编辑状态的事件。* annotation [scriptable]* param {input_method_t*} im 输入法对象。** return {ret_t} 返回 RET_OK 表示成功否则表示失败。*/
ret_t input_method_dispatch_preedit(input_method_t* im);/*** method input_method_dispatch_preedit_confirm* 分发确认预编辑状态的事件提交预编辑内容退出预编辑状态。* annotation [scriptable]* param {input_method_t*} im 输入法对象。** return {ret_t} 返回 RET_OK 表示成功否则表示失败。*/
ret_t input_method_dispatch_preedit_confirm(input_method_t* im);/*** method input_method_dispatch_preedit_abort* 分发取消预编辑状态的事件提交预编辑内容退出预编辑状态。* annotation [scriptable]* param {input_method_t*} im 输入法对象。** return {ret_t} 返回 RET_OK 表示成功否则表示失败。*/
ret_t input_method_dispatch_preedit_abort(input_method_t* im);
3.2.3 编辑器
编辑器需要处理相关事件 case EVT_IM_PREEDIT: {text_edit_preedit(edit-model);break;}case EVT_IM_PREEDIT_CONFIRM: {text_edit_preedit_confirm(edit-model);break;}case EVT_IM_PREEDIT_ABORT: {text_edit_preedit_abort(edit-model);break;}具体请参考edit.c/mledit.c 4. T9 输入法引擎的实现
T9 输入法引擎的实现很简单不到 300 行代码。查找算法为先精确查找如果找到将其添加到候选字列表中否则使用前缀查找在满足前缀的候选字中挑选词频最高的放到候选字列表中。 详情参考input_engine_t9.c/t9.c
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82408.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!