Google拼音输入法API开发指南知识库

一段简单的Lua脚本程序就可以构成一个最基本的输入法扩展模块。下面是Hello,World!程序示例:

functionHelloWorld()return"Hello,World!"endime.register_command("hw","HelloWorld","test")这一段代码由一个自定义的Lua函数和一行ime.register_command函数调用组成。自定义的Lua函数HelloWorld()简单地返回一个Lua字符串"Hello,World!",这表明该输入法扩展函数被调用后,显示给最终用户的候选项为"Hello,World!"。ime.register_command函数调用将自定义函数注册为谷歌拼音输入法的一个命令扩展。其中,第一个参数"hw"表示该命令扩展在i扩展模式中对应的命令是"hw",第二个参数表示该命令扩展对应的入口函数(自定义的Lua函数)是"HelloWorld",第三个参数是显示在i扩展模式命令列表内的简短说明文字。

除了显式用"ihw"这样的命令来激活扩展函数以外,扩展函数还可以由用户在使用拼音输入法时输入的特定内容或特定候选词激活。例如,在上述helloworld.lua最后添加一行:

ime.register_trigger("HelloWorld","test",{"hello"},{})这一行的作用是将函数"HelloWorld"注册为谷歌拼音输入法的一个整合扩展。第一个参数是扩展对应的入口函数"HelloWorld",第二个参数是简短说明文字,第三个参数给出希望将扩展关联到哪个或哪几个用户输入串(这里是字符串"hello"),第四个参数给出希望将扩展关联到哪个或哪几个特定的候选词(这里是空表,表示不关联)。

本指南的后续内容详细介绍了开发输入法扩展所需要的各种知识。我们也鼓励开发者直接参考已有的示例程序。例如,i扩展模式的缺省功能是由安装在以下位置的Lua脚本程序实现的:

XP:C:\DocumentsandSettings\AllUsers\ApplicationData\Google\GooglePinyin2\Extensions\base.luaVista/Windows7:C:\ProgramData\Google\GooglePinyin2\Extensions\base.lua三种不同的扩展方式谷歌拼音输入法扩展API提供了三种扩展拼音输入法的方式:命令扩展、整合扩展与转换器扩展。

下表对不同的扩展方式进行简单的对比:

在Lua脚本中,向谷歌拼音输入法注册一个命令扩展的基本语法是:

ime.register_command(command_name,lua_function_name,description,leading,help)ime是提供给Lua脚本使用的,与输入法内核交互的专用模块。register_command是向谷歌拼音输入法注册新的i扩展模式命令扩展所使用的函数。函数的各参数含义如下:

lua_function_name给出的命令入口函数可以接收一个或零个参数,例如:

functionmy_entry_function()--做某些处理并返回结果end当入口函数接收一个参数时,输入法会把用户在i扩展模式中i+两字母命令名输完后继续输入的所有内容作为一个字符串参数,传给入口函数。例如,用户先后键入ihw123,则,用户激活的命令名是hw,输入法调用该命令对应入口函数时,以字符串方式传入参数123。入口函数可以对参数进行运算处理,并返回对应的结果。例如:

在Lua脚本中,向谷歌拼音输入法注册一个整合扩展的基本语法是:

ime.register_trigger(lua_function_name,description,input_trigger_strings,candidate_trigger_strings)ime是提供给Lua脚本使用的,与输入法内核交互的专用模块。register_trigger是向谷歌拼音输入法注册新的整合扩展所使用的函数。函数的各参数含义如下:

关于通配符匹配:input_trigger_strings和candidate_trigger_strings中的字符串可以在开头或结尾包含通配符*,表示前缀匹配或后缀匹配。例如:

使用ime.register_trigger注册整合扩展时,请注意以下几点:

整合扩展的入口函数一般应接收一个参数。在激活整合扩展函数时,输入法会把激活整合扩展函数的字符串(或者是用户输入的内容,或者是某个特定的候选项)作为唯一的参数传递给入口函数。这样,注册了多个匹配字符串的整合扩展函数就可以在被调用时通过参数知道究竟是哪个字符查激活了自己。当然,在不需要时,入口函数也可以简单地忽略这个参数。

在Lua脚本中,向谷歌拼音输入法注册一个转换器扩展的基本语法是:

ime.register_converter(lua_function_name,description)ime是提供给Lua脚本使用的,与输入法内核交互的专用模块。register_converter是向谷歌拼音输入法注册新的转换器扩展所使用的函数。函数的各参数含义如下:

用户开启转换器时,输入法会依次将每个候选项作为参数调用转换器对应的Lua入口函数。也就是说,对于每个候选项,Lua入口函数都被调用一次。

转换器扩展对应的Lua入口函数应当返回且只返回一个结果,即返回对原候选项进行变换后的新候选项。如果不希望变换某个候选项,可以将输入参数的值直接返回。如果没有返回任何结果,或返回的结果数目多于一个,则输入法认为该扩展函数没有对候选项做任何变换。

一般的,扩展对应的入口函数可以返回一个或多个候选字符串。命令扩展会显示所有返回的候选项,整合扩展目前只会将第一个候选项结果插入到输入法的候选项列表中,而转换器扩展则只接受返回一个候选字符串的入口函数。

返回的参数类型可以是Lua字符串类型,也可以是Lua数字类型,还可以是Lua布尔类型。但这些返回值返回输入法内核后,都会被转换成字符串显示给最终用户,以便用户选择输入。

要返回唯一的候选字符串,只要直接使用return语句返回字符串、数字或布尔值即可,例如:

functionTestString(argument)--做某些处理return"astring"endfunctionTestNumber(argument)--做某些处理return1234.56789endfunctionTestBoolean(argument)--做某些处理returntrueendfunctionTestAnotherBoolean(argument)--做某些处理return3>2end要返回两个或更多结果,只要返回一个Lua的列表对象即可,例如:

除了单行字符串结果外,命令扩展的入口函数还可以返回一个或多个包含换行符的多行结果(其他扩展方式,如整合扩展和转换器扩展,目前不建议返回多行的结果)。换行符在Lua程序的字符串常量中用"\n"表示。例如下面的函数:

对于命令扩展,当用户刚输入完i扩展模式的命令名称,尚未输入命令参数时,入口函数将被调用,此时传给入口函数的参数为空字符串。这时,入口函数可以通过返回一个提示信息表,来提示用户有几种预定义的候选参数,并在输入法的候选窗口中,允许用户直接选择某个预定义参数。例如:

这时,用户可以试用上下键,翻页键和鼠标选择自己要输入的参数,也可以直接用键盘输入。

其他扩展方式,如整合扩展和转换器扩展,不支持提示选择参数功能,它们将忽略入口函数返回的此类提示信息。

例如,可以使用ime模块的get_last_commit()函数获得用户上一次键入的字符串,并根据字符串的内容进行相应的计算,返回特定结果。比如,用户键入了你好,然后使用i扩展模式中的某个功能,该功能看到你好后,自动返回hello。实现这一简单逻辑的代码如下:

Lua入口函数接收无法处理的参数,或者发生其他内部错误时,可以简单地不返回任何参数,或者使用Lua语言内置的error()函数向输入法报告错误信息,例如:

输入法扩展脚本程序可以使用任何源代码/文本编辑器创建。在将输入法扩展包安装到谷歌拼音输入法之前,可以使用控制台工具测试扩展程序,以确保程序功能正确。请从以下链接下载用于开发调试谷歌拼音输入法扩展脚本的控制台工具:

在命令行运行控制台工具GooglePinyinApiConsole.exe时,需要给出的命令行参数是一个或多个待测试的脚本文件路径,控制台工具会加载所有指定的输入法扩展脚本,并启动一个交互式界面,供开发者测试执行扩展模式。例如:

GooglePinyinApiConsole.exeext1.luaext2.luaext3.lua在控制台工具的交互式界面中,键入"help",可以查看帮助信息:

i-列出所有已注册的命令扩展i[COMMAND]-无参数执行某命令扩展i[COMMAND][ARGUMENT]-有参数执行某命令扩展g[TRIGGER_STRING]-尝试利用某字符串参数激活整合扩展c-列出所有已注册的转换器扩展c[FUNCTION][STRING]-测试转换器函数quit-退出控制台工具help-显示帮助信息当脚本加载或执行过程中发生错误时,控制台工具会打印显示错误信息。错误信息包括发生错误的脚本文件名,错误行号,错误内容等。

目前,谷歌拼音输入法扩展API只提供了Lua一种开发语言。Lua是一种体积小巧却功能强大的动态脚本编程语言,广泛用于网络游戏等应用的插件或扩展功能的开发。对于一个有JavaScript语言、VBScript语言或者Python语言开发经验的开发者来说,学习Lua语言并不困难。请参考以下网址获得关于Lua语言的各种信息:

Lua程序设计语言

使用Lua语言编写的输入法扩展程序保存在磁盘上时,推荐使用UTF-8编码的文本文件。文本文件可以包含也可以不包含BOM文件头。没有BOM文件头时,IME缺省认为按UTF-8编码加载。

以下凡属于Lua标准运行环境的函数,均只给出简要的功能说明。详细用法请参见Lua语言标准函数库的说明。

THE END
1.mysql基础50题力扣197select*, adddate("2015-01-04",INTERVAL1day) |id|recordDate|temperature|adddate("2015-01-04",INTERVAL1day)| |-- | --- | --- | --- | |1|2015-01-01|10|2015-01-05| 题目最快解法如下: SELECTidASIdFROM( SELECTb.id, b.temperature-a.temperaturehttps://blog.csdn.net/caijidecuntian/article/details/144316845
2.mysql设置答题有选择题判断题连线题SELECT course.cname, teacher.tname FROM course INNER JOIN teacher ON course.teacher_id = teacher.tid; 1. 2. 3. 4. 5. 6. <!--2、查询学生表中男女生各有多少人--> 1. SELECT gender count(1) FROM student GROUP BY gender; 1. https://blog.51cto.com/u_16213635/12816438
3.IN(TransactSQL)但是,也可以使用 IN 检索相同的结果: SQL -- Uses AdventureWorksSELECTp.FirstName, p.LastName, e.JobTitleFROMPerson.PersonASpJOINHumanResources.EmployeeASeONp.BusinessEntityID = e.BusinessEntityIDWHEREe.JobTitleIN('Design Engineer','Tool Designer','Marketing Assistant'); GO https://learn.microsoft.com/sql/t-sql/language-elements/in-transact-sql
4.深入理解SQL原理:一条SQL查询语句是如何执行的?select * from user_info where id = 1;返回结果为:+---+---+---+---+---+---+---+| id | username | password | openid | role | create_time | update_time |+---+---+---+---+---+---+---+| 1 | 武培轩 | 123 | 1 | 1 | 2019-08https://baijiahao.baidu.com/s?id=1818045229603267145&wfr=spider&for=pc
5.SELECTAbc=abc的结果是1。SELECT Abc=abc的结果是1。A.正确B.错误的答案是什么.用刷刷题APP,拍照搜索答疑.刷刷题(shuashuati.com)是专业的大学职业搜题找答案,刷题练习的工具.一键将文档转化为在线题库手机刷题,以提高学习效率,是学习的生产力工具https://www.shuashuati.com/ti/2edc75ff1f204b17a7bfe8aa9164e845.html?fm=bdbds441130097861b3f8a8b74f9a6f4e381d
6.SQLServer存储过程基本语法每天进步一点点!--Select INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的Select 不同。 新表的字段具有和 Select 的输出字段相关联(相同)的名字和数据类型。 select * into NewTable from Uname -- Insert INTO ABC Select --表ABC必须存在 https://www.iteye.com/blog/uule-1988137
7.[转贴]VBA自学收集资料(三)tbl.Columns.Count).Select 应用于 TickLabels 对象。 如果偏移量小于 500,则本示例将 Chart1 中数值轴上标签之间的距离设置为当前距离的两倍。 With Charts("Chart1").Axes(xlValue).TickLabels If .Offset < 500 then .Offset = .Offset * 2 https://www.360doc.cn/article/5210278_115697093.html
8.MySQL常用命令–乘风破浪该方法默认使用root用户, 可使用select user();查看当前用户,默认为root@localhost mysql -S /tmp/mysql.sock -u root -p密码#该方法适用于在安装MySQL主机上进行本地登录 mysql -h 127.0.0.1 -u root -p密码#标准的dba命令行登录方式,使用’root’@’127.0.0.1’这个用户登录,非脚本中一般不用这样登录https://www.yj-example.cn/?p=583
9.在PostgreSQL中选择字符串是否包含子串匹配select*fromstringswherestr~~substring(strsimilar'%abc%'escape'#') substring()在我们的例子中返回类似于abc或包含abc的字符串。然后,我们使用~~运算符(like的缩写)将返回的结果与str匹配,如果匹配,我们从表中选择结果。 这个简单的函数甚至有助于将字符串分成单独的部分,可以在提供的语法中看到: https://www.jiyik.com/tm/xwzj/sjk_4067.html
10.字符串函数concat,concatws,groupselect concat('11',' ','12'); image.png -- 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL select concat('ad',' ',null,'00');其中有任何一个为NULL返回值为null image.png -- 给 abc中间字符串间隔逗号 https://www.jianshu.com/p/0c82ec1fb77f
11.阿里面试官惊叹:这种简历不用面了,直接来上班!6.联合索引 abc where a = 3 and b > 3 and c= 3 怎么走索引? 7.如果MySQL 表中有一个字段很大有几K会有什么问题? 8.索引下推了解吗? 场景设计:如何设计一个会议室预定系统? 算法: 给数组arry 和值 x 计算 数组 array 中差值绝对值为X的数对; https://maimai.cn/article/detail?fid=1724482192&efid=gDtXEDVbtMnEeClsOjitVw
12.2015腾讯校园招聘笔试题目(2)如果A投的是反面,就再投,为正面,B给A 2美金 (3)如果还是反面,就再投,为为正面,B给A4 美金 (4)假设A投的是反面,就投到正面为止,B就给A 的2的(n-1)次方 如果A、B玩这样的硬币游戏,A至少要给B多少钱B才不会亏钱() 2. 输入序列ABCABC经过栈操作变成ABCCBA,下面哪些是可能的栈操作( ) https://www.yjbys.com/qiuzhizhinan/show-466638.html
13.超详细!mysql的常用函数~点击上方蓝字关注我们LENGTH(str):获取长度select LENGTH(\x26#39;abc123\x26#39;);查询结果https://mp.weixin.qq.com/s?__biz=MzI0MjA0ODA2Mw==&mid=2651147451&idx=1&sn=b8745196c0aefb18355857f25f263ad9&chksm=f2f3a1ebc58428fd3532046af987bd81a63d73b9dc2a5e99285a5170aed963f4a6c7e0dc24da&scene=27
14.pgsql字符串比较大小的方法是什么SELECTabc>abd;-- 返回false,因为abc小于abdSELECTabc<abd;-- 返回true,因为abc大于abdSELECTabc=abd;-- 返回false,因为abc不等于abdSELECTabc<>abd;-- 返回true,因为abc不等于abd 请注意,PostgreSQL 中的字符串比较是基于字符编码的。因此,如果使用的是不同的字符编码,可能会导致比较结果不符合预期。 https://www.apispace.com/news/post/69820.html
15.JPA使用@Where注解实现全局过滤@Query("select a from ABC a where a.name=?1") ABC findByName1(String name); 结果 select abc0_.id as id1_0_, abc0_.del_flag as del_flag2_0_, abc0_.name as name3_0_ from tb_abc abc0_ where ( abc0_.del_flag=0) and abc0_.name=?null https://www.imooc.com/article/274009
16.MySQL数据库选择题小结面试技巧IT职场规划IT专业知识C、select D、grant 2.SQL语句中REVOKE all on auth.* from ‘zhangsan’@‘localhost’;表述正确的是(B) A、zhangsan账户可以在localhost登陆 B、撤销zhangsan用户的auth库权限 C、Zhangsan对ON库没有权限 D、撤销全部命令 3.备份所有数据库(C) A、mysqldump -u root -p mysql user > msyql-user.sql https://www.jb51.net/it/763878.html
17.数栈技术分享:详解FlinkX中的断点续传和实时采集c、更新文件名称模板更新为:channelIndex.abc123.1; 快照生成后任务继续读写数据,如果生成快照的过程中有任何异常,任务会直接失败,这样这次快照就不会生成,任务恢复时会从上一个成功的快照恢复。 4)任务正常结束 任务正常结束时也会做和生成快照时同样的操作,close文件流,移动临时数据文件等。 https://cloud.tencent.com/developer/article/1824085
18.华为高斯认证(opengauss)HCIASELECT name, age, score FROM student order by 2 desc , 3 asc; SELECT name, age, score FROM student order by 1 desc , 2 ; 5.(多选题)以下哪些是逻辑操作符? ABC and or not not or 解析:文章标签: 云解析DNS 人工智能 SQL OLTP NoSQL 数据库管理 Windows 固态存储 数据库 存储 数据管理 Cohttps://developer.aliyun.com/article/1105829
19.oracledataguardbroker配置SQL> insert into abc values (1 , 'bbb'); 已创建 1 行。 SQL> commit; 提交完成。 SQL> select * from abc; ID NAME --- --- 0 aaa 1 bbb SQL> 3. 备库上验证操作 SQL> select name from v$tablespace; NAME --- SYSTEM SYSAUX UNDOhttps://blog.itpub.net/30393770/viewspace-2779105/
20.ABC酒店(ABCHotel)预订ABC酒店 (ABC Hotel) 5等级(最高为5等级) Don Juico Avenue, Malabanias Angeles City, Pampanga, 玛拉巴纳斯, 安吉利斯/克拉克, 菲律宾, 2009 - 查看地图 在马拉巴纳斯的ABC酒店体验奢华。享受健身中心、健康设施、现场表演、私人酒吧、舞台、KTV房间、按摩水疗和游泳池。来ABC酒店创造难忘的回忆吧!位于马拉巴纳斯、https://www.agoda.com/zh-cn/abc-hotel/hotel/angeles-clark-ph.html