minigui输入法汉字的获取
minigui的中文输入法是内嵌在mgi库中的,现在把它剥离出来,从而实现自定义的定制。
1. 前言
经过各种调试,现在能实现的功能:输入拼音字母,返回中文候选字/候选词,而点击候选字显示联想字应该也是一样道理,尚未调试。
这里共用到了3个文件:ime_pinyin.c, ime_pinyin.h, ime_tab_pinyin.h
其中ime_tab_pinyin.h是词库,即你输入拼音,然后返回对应的汉字/词,举例:输入ni, 会出现 你 尼 拟 妮 泥 倪 …
词库文件的制作可以参看大神的文章:minigui词库更新
2. 下面说一下主要函数:
下面说一下主要函数:
说明:
所有的函数中使用的字符串长度最大值是32
#define SW_STR_LEN 32
A. 拼音转汉字函数
int pinyin_translate_word(void *method, const char *strokes, char *buffer, int buffer_len, int index)
函数说明:该函数输入一个字符串,会返回候选汉字。
参数说明:
method: 这里没有用,传NULL就行;
strokes: 输入的字符串,比如ni
buffer: 返回的字/ 词语(注意:这里返回的汉字是gb2312格式)
buffer_len: 这里不太明白具体含义,不过一般传入32,传入32时返回的汉字个数是10,如果改大了,那么就会返回大于10个汉字。
index: 从词库匹配的第几个汉字开始返回,举例输入ni,那么词库中ni的前20个汉字是:你 泥 尼 呢 逆 拟 尿 妮 霓 倪 匿 腻 溺 伲 坭 猊 怩 昵 旎 祢,此时index传入0的话,会返回前10个汉字,传入2的话,会返回第2-12个汉字。
返回值:本次返回汉字中最后一个汉字在整个匹配汉字中的索引。举例:buffer_len 输入32,index输入0的时候,返回值是10,index是5的时候,返回值是15.
备注:返回的汉字有时候有不对的情况,比如上面输入ni 结果返回的汉字中有个"尿"字…,这是因为词库不准确导致的。另外输入nihao,不会返回你好,是因为词库中没有nihao这个字符串, 所以维护词库也是个重要的事情。
B. 汉字联想函数
int pinyin_predict_pord(void *method, const char *lookfor, char * buffer, int buffer_len, int index);
函数说明:该函数输入一个汉字,会返回该汉字的联想汉字。比如输入你,会返回:“好”,“的”,“们”,“在”,“是” 等可以和"你"组词的汉字
参数说明:和上面函数类似(目前尚未测试该函数)
返回值:未测试
备注: 未测试
C. 字符串拼接函数
void append(char* str, char c, int len, int flag)
函数说明:该函数将输入的单个字符拼接成字符串。
备注:len一般传入 SW_STR_LEN - 2, flag 这里用不到
D. 字符串转小写函数
void strcpylower(char* buf, const char* str)
函数说明:函数A拼音转汉字函数要求输入的字符串是小写,因此需要先用该函数转一下,再调用函数A
3. 调用流程
1) 定义字符串
定义一个输入字符串:
char in_str[SW_STR_LEN],
一个输入转换字符串:
char in_str_tmp[SW_STR_LEN]
和一个输出字符串:
char out_str[SW_STR_LEN].
2) 将输入的单个英语字符全部大写:
char ch = toupper('n');
char ch1 = toupper('i');
3) 使用append函数将步骤2中的字符拼接到字符串中:
append(in_str_tmp, ch, SW_STR_LEN - 2, 2);
append(in_str_tmp, ch1, SW_STR_LEN - 2, 2);
4) 使用strcpylower将步骤3中的字符串全部转化为小写:
strcpylower(in_str, in_str_tmp);
5) 调用 pinyin_translate_word函数得到候选字:
pinyin_translate_word(NULL, in_str, out_str, SW_STR_LEN, 0);
说明:
- 由上面步骤可以看出其实如果能保证输入的都是小写的话,只用步骤3即可。
- 上面得到的out_str是候选汉字的字符串数组,是gb2312格式的,有的情况下可能需要转成utf8格式才能正常显示,转换函数如下,其中buffer是转换之后的字符串,characters是步骤5中的out_str,length是out_str的长度,encode是编码方式,这里是”gb2312“
int convert2utf8(unsigned char *buffer, const unsigned char* characters, size_t mbs_length, char* encode)
{int conved_mbs_len, ucs_len;char buffer2[1024];PLOGFONT logfont = CreateLogFont (NULL, "arial", encode,FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,12, 0); assert(logfont);const unsigned char* source = characters;ucs_len = MBS2WCSEx (logfont, (void *)buffer2, FALSE, source, mbs_length, sizeof(buffer2), &conved_mbs_len); DestroyLogFont(logfont);logfont = CreateLogFont (NULL, "arial", "utf8",FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,12, 0); assert(logfont);ucs_len = WCS2MBSEx (logfont, (unsigned char *)buffer, (unsigned char *)buffer2, ucs_len, FALSE, sizeof(buffer2), &conved_mbs_len); DestroyLogFont(logfont); return ucs_len;
}
minigui输入法汉字的获取相关推荐
- MiniGUI输入法词库更新
前言 MiniGUI中的输入法libmgi支持拼音输入,但是怎么进行个性化定制呢,比如想更换键盘皮肤,往词库里添加一些新的词组,下面这篇文章详细描述怎么添加新词 1. 词库文件构成 在libmgi中, ...
- RIME中州韵输入法lua配置获取当前时间(一)
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能. 1.TIME Rime是一款可以高度自定义的输入法,相关教程可以查看往期文章,关于时间获取是指输入一个指定关键字,输出当前时间,效果 ...
- iOS--获取输入字符的第一个字母(汉字则获取拼音的第一个字母)
- (NSString *)firstCharactor:(NSString *)aString { //转成了可变字符串 NSMutableString *str = [NSMutableStrin ...
- php 获取汉字,php 获取汉字长度
也许很多phper不知道,PHP内置的字符串长度函数strlen()无法正确处理中文字符串,它得到的只是字符串所占的字节数.对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UT ...
- php获取汉字个数,获取文件中汉字个数
MINGW + notepad++ strlen遇到汉字的问题: #include #include using namespace std; int main() { cout << s ...
- 根据汉字,获取拼音首字母(转)
借鉴一:https://zhidao.baidu.com/question/1638183070742906620.html //返回值:拼音首字母串数组 function makePy(str) ...
- 自己动手画CPU《计算机组织与结构实验》之计算机数据表示 第2关:汉字机内码获取实验 超详细教学
首先复制需要转为机内码的文字 12345ABCDEFGabcdefg轻轻的我走了,正如我轻轻的来:我轻轻的招手,作别西天的云彩.那河畔的金柳,是夕阳中的新娘:波光里的艳影,在我的心头荡漾. 打开 文字 ...
- JS获取字符串的第一个汉字,获取字符串的第一个英文字母,JS 获取第一个字符
JS部分代码 //第一种方法 var str = "哈哈,我是一个字符串"; var index = escape(str).indexOf( "%u" ); ...
- 如何获取汉字的首笔画编码
前阵子做一个项目的电话簿按照首笔画快速查询,先咨询了输入法的兄弟,说没有这样的接口(输入一个汉字,获取首笔画的编码.后来又说有这个接口,只是一直没有遇到这样的需求).反正不管了,我就自己在网上找了一个 ...
- 根据输入汉字获取其全拼及简拼
在日常的程序设计中,我们可能会根据输入的拼音或者汉字来获取其对应包含该字符的的有效信息,这时我们就会用到其对应的全拼或者简拼.在数据量不是特别大时,还可以手动输入,但是这样会给用户带来不良的体验,造成 ...
最新文章
- 川大网络教育2013秋《计算机应用基础》第二次作业,2013秋川大网教《计算机应用基础》第一、二次作业及答案解析.doc...
- php程序员进阶篇 [十问PHP程序员]
- mysql创建表格1warning_MySQLMySQL创建表及相关约束
- 如何在数据管理DMS上使用phpMyAdmin数据库(wdcp/wordpress/discuz篇)
- 中台不是万能药,关于中台的思考和尝试
- jQuery 表格响应式插件 FooTable
- c语言 tcl.exe 自动登录,Tcl命令操作实验-----(3)---字符串
- web前端新人第一课:html基础知识,你能学会吗?
- java ajax返回数组_js对ajax返回数组的处理介绍
- 济源一中2021高考成绩查询,济源一中2019高考成绩喜报、一本二本上线人数情况...
- 阿里云服务器安装docker开发环境
- python lambda菜鸟教程_Python - lambda函数
- 两台win7电脑,双网卡主机共享网络(局域网和Internet)给从机
- 数据分析常见的几种方法
- Rstudio中修改工作路径的三种方法
- java计算机毕业设计心灵治愈服务平台源码+mysql数据库+lw文档+系统+调试部署
- 按键精灵-UI配置丢失问题解决办法
- 使用python完成简单的批量信息发送
- MSSQL中的数据库字段类型
- 深入浅出,详解深度优先搜索(DFS)