精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

谷歌拼音輸入法擴展API開發指南

開發 前端
為了幫助開發者在谷歌拼音輸入法的基本輸入功能基礎上,開發和定義更豐富的擴展輸入功能,谷歌拼音輸入法提供了以Lua腳本編程語言為基礎的輸入法擴展API。利用輸入法擴展API,開發者可以編寫自定義的輸入功能,并將腳本分享給谷歌拼音輸入法的用戶安裝、使用。

新增功能

輸入法擴展API支持轉換器擴展,在用戶開啟轉換器時,可以對候選項做諸如裝飾、特效、變換等操作。

新增一組用于UNICODE編碼轉換的字符串實用函數。

入門

為了幫助開發者在谷歌拼音輸入法的基本輸入功能基礎上,開發和定義更豐富的擴展輸入功能,谷歌拼音輸入法提供了以Lua腳本編程語言為基礎的輸入法擴展API。利用輸入法擴展API,開發者可以編寫自定義的輸入功能,并將腳本分享給谷歌拼音輸入法的用戶安裝、使用。

一段簡單的Lua腳本程序就可以構成一個最基本的輸入法擴展模塊。下面是“Hello,World!”程序示例:

helloworld.lua

  1. function HelloWorld()  
  2. return "Hello,World!"  
  3. end  
  4. ime.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擴展模式命令列表內的簡短說明文字。

使用任何文本編輯器輸入上述程序后,以helloworld.lua為文件名保存到安裝有谷歌拼音輸入法的計算機中。然后,打開谷歌拼音輸入法選項設置窗口,在"擴展"頁面中,點擊"安裝擴展包"按鈕,選擇保存在計算機內的helloworld.lua(也可以從Windows資源管理器,右鍵單擊helloworld.lua文件,選擇“安裝到谷歌拼音輸入法”)。安裝后,打開記事本程序,切換到谷歌拼音輸入法,鍵入"ihw",谷歌拼音輸入法的候選項窗口中將出現唯一候選項"Hello,World!"。

 

 

除了顯式用"ihw"這樣的命令來激活擴展函數以外,擴展函數還可以由用戶在使用拼音輸入法時輸入的特定內容或特定候選詞激活。例如,在上述helloworld.lua最后添加一行:

  1. ime.register_trigger("HelloWorld", "test", { "hello" }, {}) 

這一行的作用是將函數"HelloWorld"注冊為谷歌拼音輸入法的一個整合擴展。第一個參數是擴展對應的入口函數"HelloWorld",第二個參數是簡短說明文字,第三個參數給出希望將擴展關聯到哪個或哪幾個用戶輸入串(這里是字符串"hello"),第四個參數給出希望將擴展關聯到哪個或哪幾個特定的候選詞(這里是空表,表示不關聯)。

打開谷歌拼音輸入法選項設置窗口,在"擴展"頁面中,使用"移除擴展包"按鈕將剛才安裝的helloworld.lua刪除,然后重新安裝更新后的helloworld.lua。打開記事本程序,切換到谷歌拼音輸入法,鍵入"hello",谷歌拼音輸入法的候選項窗口中,除了出現通常的中文英文候選詞提示外,還將出現由整合擴展函數返回的候選項"Hello,World!"。

 

 

事實上,谷歌拼音輸入法提供的輸入法擴展API可以用來開發各種不同的輸入體驗,例如,根據用戶輸入的參數返回相應的信息內容,查表輸入特定的文字信息,完成自定義的甚至包含隨機變量的計算并以不同形式返回結果,將用戶剛剛輸入的文字內容轉換為另一種表現形式,等等。谷歌拼音輸入法提供的i模式的缺省功能,包括時間和日期格式轉換,查星座,擲骰子,打印字符等,都是一些最簡單的示例。

本指南的后續內容詳細介紹了開發輸入法擴展所需要的各種知識。我們也鼓勵開發者直接參考已有的示例程序。例如,i擴展模式的缺省功能是由安裝在以下位置的Lua腳本程序實現的:

XP: C:\Documents and Settings\All Users\Application Data\Google\Google Pinyin 2\Extensions\base.lua

Vista / Windows 7: C:\ProgramData\Google\Google Pinyin 2\Extensions\base.lua

三種不同的擴展方式

谷歌拼音輸入法擴展API提供了三種擴展拼音輸入法的方式:命令擴展、整合擴展與轉換器擴展。

命令擴展:將腳本程序中的某個入口函數關聯到一個兩字母長的自定義命令。當用戶先鍵入i然后鍵入該命令時,輸入法即激活該擴展函數,然后在候選項列表中顯示擴展函數返回的候選項結果。

命令擴展適用于那些用戶明確希望在特定場景下使用特定輸入功能,且候選項較多,或較復雜的情況。例如,用戶明確希望根據生日查詢并輸入星座信息等。

整合擴展:將腳本程序中的某個入口函數關聯到特定的鍵盤輸入串,或特定的中英文候選項。當用戶使用拼音輸入法時,一旦用戶通過鍵盤輸入的字符串與整合擴展關聯的特定字符串(可包含通配符)匹配,或拼音輸入法解析出的某個候選項與整合擴展關聯的特定字符串(可包含通配符)匹配,輸入法即激活該擴展函數,并將擴展函數返回的候選項結果插入到候選項列表中。

整合擴展適用于那些在不妨礙用戶正常輸入的情況下,根據當前輸入或候選內容,插入少數相關候選項的情況。例如,用戶在輸入中文“時間”的同時,也可能希望直接輸入當前時間,這時,整合擴展直接把擴展函數返回的當前時間整合至候選項列表中,就顯得比較方便了。

轉換器擴展:將腳本程序中的某個入口函數注冊為一個特定的轉換器。當用戶通過輸入法的用戶界面(如功能菜單)開啟該轉換器時,輸入法產生的每個候選項被依次當做參數送入該轉換器函數,進行運算后,函數返回的結果將會替換掉原候選項的內容,被輸入法顯示在相應位置。

轉換器擴展必須由用戶主動開啟。一旦開啟,就會應用于所有候選項。因此,轉換器擴展適用于為所有候選項增加裝飾、特效,或者對所有候選項按規則進行變換的情形。例如,為候選項或候選項的每個字增加星號修飾,直接在候選項的每個字后面輸出該字對應的Unicode編碼,將簡體漢字變為繁體漢字,等等。

下表對不同的擴展方式進行簡單的對比:

擴展方式 命令擴展 整合擴展 轉換器擴展
注冊方式 ime.register_command (...) ime.register_trigger (...) ime.register_converter (...)
適用范圍 用戶明確希望在特定場景下使用特定輸入功能,且候選項較多,或較復雜的情況 在不妨礙用戶正常輸入的情況下,根據當前輸入或候選內容,插入少數相關候選項的情況 為所有候選項增加裝飾、特效,或者對所有候選項按規則進行變換的情形
應用實例 根據輸入的生日查詢星座;列舉并輸入特定的字符畫 用戶輸入中文“時間”時,在候選項列表里插入當前時間;用戶輸入中文“哈哈”時,在候選項列表插入相應的表情符號 為候選項或候選項的每個字增加星號修飾;直接在候選項的每個字后面輸出該字對應的Unicode編碼;將簡體漢字變為繁體漢字
激活方式 用戶輸入i加2字符長的命令,激活相應的命令擴展 用戶輸入的拼音字符串或輸入法產生的某個候選項與整合擴展關聯的特定字符串(可包含通配符)匹配時,激活相應的整合擴展 用戶從輸入法的用戶界面(如功能菜單)開啟特定的轉換器,激活相應的轉換器擴展

#p#

注冊命令擴展

在Lua腳本中,向谷歌拼音輸入法注冊一個命令擴展的基本語法是:

  1. ime.register_command(command_name, lua_function_name, description, leading, help) 

ime是提供給Lua腳本使用的,與輸入法內核交互的專用模塊。register_command是向谷歌拼音輸入法注冊新的i擴展模式命令擴展所使用的函數。函數的各參數含義如下:

◆ command_name

2字符長的字符串,必須由兩個英文字母(a-z)組成。定義了要注冊的命令名字。如果新注冊的命令名稱和此前已經注冊的某個命令重名(判斷重名時不區分大小寫),則register_command函數調用失敗,新命令擴展無法注冊到輸入法中。

◆ lua_function_name

字符串。給出此命令在i擴展模式中運行時對應的Lua入口函數。這必須是一個已經存在的,接收一個或零個參數的Lua函數。

◆ description

字符串。命令的簡短描述。此描述會顯示在i擴展模式的命令選擇界面中,向用戶簡要說明某命令的功能。不要使用太長的簡短描述,一般不要超過10個字符。

◆ leading [可省略]

字符串。用戶選擇此命令的候選項目時,可以使用的快捷鍵,可以是以下三個特定字符串之一:

"digit": 默認值。表示用1, 2, 3, ...這樣的數字作為候選項選擇鍵。

"alpha": 表示用a, b, c, ...這樣的英文字母序列作為候選項選擇鍵。

"none": 表示不使用候選項選擇鍵。

注:默認情況下,輸入法使用1, 2, 3, ...數字鍵作為候選項選擇鍵。但是,當i擴展模式的某個命令希望接收數字1, 2, 3, ...作為自己的參數時,為避免沖突,就不能使用"digit"方式的候選項選擇鍵了。同理,當命令希望接收包含英文字母的參數時,就不能使用"alpha"作為候選項選擇鍵。

◆ help [可省略]

字符串。比description略長的幫助信息,但一般不要超過50個字。當用戶鍵入了"i"以及特定的命令名后,輸入法候選窗口的右上方會顯示此文字信息,用于提示用戶如何輸入后續參數。

lua_function_name給出的命令入口函數可以接收一個或零個參數,例如:

  1. function my_entry_function()  
  2.   -- 做某些處理并返回結果  
  3. end 

當入口函數接收一個參數時,輸入法會把用戶在i擴展模式中i+兩字母命令名輸完后繼續輸入的所有內容作為一個字符串參數,傳給入口函數。例如,用戶先后鍵入“ihw123”,則,用戶激活的命令名是“hw”,輸入法調用該命令對應入口函數時,以字符串方式傳入參數“123”。入口函數可以對參數進行運算處理,并返回對應的結果。例如:

function my_entry_function(argument)

-- 將參數argument轉換為數字,計算并返回其平方根...

end

注冊命令擴展時傳入的提示信息description會在用戶看到i擴展模式的命令列表時顯示,以提示用戶該命令的功能。這個字符串應當盡量簡短(不超過10個字符)。如下圖中的“擲骰子”,“打印字符”等,都是description:

 

 

注冊命令擴展時傳入的提示信息help會在用戶選中了某特定命令后,顯示在輸入法候選窗口的右上角。這個字符串可以比description略長,但一般也不要超過50個字符。例如,下圖中用戶選擇了打印字符命令“zf”后,顯示出來的“請輸入字母或數字序列,例如hello”就是help的內容:

 

 

注冊整合擴展

在Lua腳本中,向谷歌拼音輸入法注冊一個整合擴展的基本語法是:

  1. ime.register_trigger(lua_function_name, description, input_trigger_strings, candidate_trigger_strings) 

ime是提供給Lua腳本使用的,與輸入法內核交互的專用模塊。register_trigger是向谷歌拼音輸入法注冊新的整合擴展所使用的函數。函數的各參數含義如下:

◆ lua_function_name

字符串。給出此擴展運行時對應的Lua入口函數。這必須是一個已經存在的,接收一個參數的Lua函數。

◆ description

字符串。擴展功能的簡短描述,向用戶簡要說明某擴展的功能。不要使用太長的簡短描述,一般不要超過10個字符。

◆ input_trigger_strings

一個字符串組成的Lua列表,包含零個或多個特定的由英文字母或通配符*組成的字符串。這里給出的所有字符串在輸入法運行時將分別與用戶的輸入內容匹配,一旦用戶的輸入和給出的某個特定字符串相同(或使用通配符匹配成功),注冊的擴展函數就會被調用,擴展函數返回的候選項結果將會被插入到輸入法的候選項列表中。

◆ candidate_trigger_strings

一個字符串組成的Lua列表,包含零個或多個特定的由英文、中文、數字等可顯示字符或通配符*組成的字符串。這里給出的所有字符串在輸入法運行時將分別與輸入法得到的候選項進行匹配,一旦候選項列表第一頁中某個候選項和給出的某個特定字符串相同(或使用通配符匹配成功),注冊的擴展函數就會被調用,擴展函數返回的候選項結果將會被插入到輸入法的候選項列表中。

關于通配符匹配:input_trigger_strings和candidate_trigger_strings中的字符串可以在開頭或結尾包含通配符*,表示前綴匹配或后綴匹配。例如:

◆ abc*

表示匹配前綴為abc的任意字符串。例如,字符串abc,abcd,abcde都可以與之成功匹配。

◆ *abc

表示匹配后綴為abc的任意字符串。例如,字符串abc,dabc,deabc都可以與之成功匹配。

使用ime.register_trigger注冊整合擴展時,請注意以下幾點:

◆ 參數input_trigger_strings和candidate_trigger_strings不能同時為空表。

◆ 輸入法在激活整合擴展函數時,將優先匹配input_trigger_strings,然后再匹配candidate_trigger_strings。匹配candidate_trigger_strings時,會按照輸入法得到的候選項順序依次嘗試。對每一次輸入,一旦找到了匹配,就只插入該匹配對應的擴展函數返回的候選項結果,不再繼續嘗試其他匹配。

◆ 雖然擴展函數可以返回一個或多個結果,但對于整合擴展來說,目前只有第一個候選項結果會被插入到輸入法的候選項列表中。

◆ 目前一個整合擴展可以通過input_trigger_strings和candidate_trigger_strings注冊的字符串數目是有限制的,一般不要超過200個。

◆ 目前整合擴展在匹配candidate_trigger_strings時,只會與候選項列表第一頁中的候選項進行匹配。

整合擴展的入口函數一般應接收一個參數。在激活整合擴展函數時,輸入法會把激活整合擴展函數的字符串(或者是用戶輸入的內容,或者是某個特定的候選項)作為唯一的參數傳遞給入口函數。這樣,注冊了多個匹配字符串的整合擴展函數就可以在被調用時通過參數知道究竟是哪個字符查激活了自己。當然,在不需要時,入口函數也可以簡單地忽略這個參數。

注冊轉換器擴展

在Lua腳本中,向谷歌拼音輸入法注冊一個轉換器擴展的基本語法是:

  1. ime.register_converter(lua_function_name, description) 

ime是提供給Lua腳本使用的,與輸入法內核交互的專用模塊。register_converter是向谷歌拼音輸入法注冊新的轉換器擴展所使用的函數。函數的各參數含義如下:

◆ lua_function_name

字符串。給出此擴展運行時對應的Lua入口函數。這必須是一個已經存在的,接收一個參數的Lua函數。

◆ description

字符串。擴展功能的簡短描述,向用戶簡要說明某擴展的功能。不要使用太長的簡短描述,一般不要超過10個字符。對于轉換器擴展,此描述信息會被輸入法的用戶界面顯示給用戶,以便選擇特定的轉換器擴展。

用戶開啟轉換器時,輸入法會依次將每個候選項作為參數調用轉換器對應的Lua入口函數。也就是說,對于每個候選項,Lua入口函數都被調用一次。

轉換器擴展對應的Lua入口函數應當返回且只返回一個結果,即返回對原候選項進行變換后的新候選項。如果不希望變換某個候選項,可以將輸入參數的值直接返回。如果沒有返回任何結果,或返回的結果數目多于一個,則輸入法認為該擴展函數沒有對候選項做任何變換。

安裝了轉換器擴展后,用戶可以從輸入法的用戶界面啟動或關閉特定的轉換器。如下圖,從功能菜單開啟或關閉特定的轉換器:

 

 

#p#

返回候選項

一般的,擴展對應的入口函數可以返回一個或多個候選字符串。命令擴展會顯示所有返回的候選項,整合擴展目前只會將第一個候選項結果插入到輸入法的候選項列表中,而轉換器擴展則只接受返回一個候選字符串的入口函數。

返回的參數類型可以是Lua字符串類型,也可以是Lua數字類型,還可以是Lua布爾類型。但這些返回值返回輸入法內核后,都會被轉換成字符串顯示給最終用戶,以便用戶選擇輸入。

要返回唯一的候選字符串,只要直接使用return語句返回字符串、數字或布爾值即可,例如:

  1. function TestString(argument)  
  2.   -- 做某些處理  
  3.   return "a string"  
  4. end  
  5.  
  6. function TestNumber(argument)  
  7.   -- 做某些處理  
  8.   return 1234.56789  
  9. end  
  10.  
  11. function TestBoolean(argument)  
  12.   -- 做某些處理  
  13.   return true  
  14. end  
  15.  
  16. function TestAnotherBoolean(argument)  
  17.   -- 做某些處理  
  18.   return 3 > 2  
  19. end 

要返回兩個或更多結果,只要返回一個Lua的列表對象即可,例如:

  1. function TestTable(argument)  
  2.   return {"abc", "def", "ghi", 123, true}  
  3. end 

列表中的每個元素可以是Lua字符串,數字或布爾值,但不能嵌套列表。列表中的每個元素將對應于輸入法顯示給用戶的候選項列表中的一個候選項。上面這個函數返回的列表在輸入法中的顯示如下圖所示:

 

 

除了單行字符串結果外,命令擴展的入口函數還可以返回一個或多個包含換行符的多行結果(其他擴展方式,如整合擴展和轉換器擴展,目前不建議返回多行的結果)。換行符在Lua程序的字符串常量中用"\n"表示。例如下面的函數:

  1. function TestMultilines(argument)  
  2.   return "line 1" .. "\n" .. "line 2" .. "\n" .. "line 3"  
  3. end 

多行結果在輸入法的候選窗口中被顯示為“<字符畫>”,當用戶選擇輸入該候選項后,多行文本被插入到用戶當前文檔中,如下圖:

 

 

返回提示信息

對于命令擴展,當用戶剛輸入完i擴展模式的命令名稱,尚未輸入命令參數時,入口函數將被調用,此時傳給入口函數的參數為空字符串。這時,入口函數可以通過返回一個提示信息表,來提示用戶有幾種預定義的候選參數,并在輸入法的候選窗口中,允許用戶直接選擇某個預定義參數。例如:

  1. function TestMetatables(argument)  
  2.   if #argument == 0 then  
  3.     -- 如果沒有參數,則返回提示信息表,以便用戶直接選擇預定義的參數"num"或"chs"  
  4.     return { { suggest = "num"help = "數字123" },  
  5.              { suggest = "chs"help = "中文一二三" },  
  6.            }  
  7.   elseif argument == "num" then  
  8.     -- 如果參數是"num"(可能是用戶鍵入的,也可能是用戶根據提示信息表直接選擇的),則返回數字結果  
  9.     return 123  
  10.   elseif argument == "chs" then  
  11.     -- 如果參數是"chs"(可能是用戶鍵入的,也可能是用戶根據提示信息表直接選擇的),則返回中文結果  
  12.     return "一二三"  
  13.   end  
  14. end 

返回的提示信息表必須符合上述格式,即,表中的每個元素都是一個子表,每個子表內有兩個元素:鍵名suggset的元素表示要提示用戶輸入的一個候選參數,鍵名help的元素表示對該參數的簡短說明文字(不要超過10個字符)。上述入口函數在用戶沒有輸入參數時,輸入法顯示的提示窗口如下圖:

 

 

這時,用戶可以試用上下鍵,翻頁鍵和鼠標選擇自己要輸入的參數,也可以直接用鍵盤輸入。

其他擴展方式,如整合擴展和轉換器擴展,不支持提示選擇參數功能,它們將忽略入口函數返回的此類提示信息。

使用ime模塊

在開發者編寫的Lua腳本中,代碼除了可以調用Lua本身提供的各模塊功能(是標準Lua運行環境所提供功能的一個子集),還可以使用ime模塊訪問輸入法的相關信息,以實現與輸入法有關的特定功能。

例如,可以使用ime模塊的get_last_commit()函數獲得用戶上一次鍵入的字符串,并根據字符串的內容進行相應的計算,返回特定結果。比如,用戶鍵入了“你好”,然后使用i擴展模式中的某個功能,該功能看到“你好”后,自動返回“hello”。實現這一簡單邏輯的代碼如下:

  1. function TestConvertHello()  
  2.   if ime.get_last_commit() == "你好" then  
  3.     return "hello"  
  4.   else  
  5.     return "not found"  
  6.   end  
  7. end 

更詳細的信息請參見API參考一節中有關ime模塊的部分。

錯誤處理

Lua入口函數接收無法處理的參數,或者發生其他內部錯誤時,可以簡單地不返回任何參數,或者使用Lua語言內置的error()函數向輸入法報告錯誤信息,例如:

  1. function TestIgnoreError(argument)  
  2.   if #argument > 5 then  
  3.     return  
  4.   end  
  5.   return 123  
  6. end  
  7.  
  8. function TestReportError(argument)  
  9.   if #argument > 5 then  
  10.     error("argument length > 5")  
  11.   end  
  12.   return 123  
  13. end 

使用error()函數報告的錯誤信息不會在輸入法用戶界面中顯示,但可以使用控制臺工具測試腳本程序并查看錯誤信息。參見下面的開發與調試一節。

開發和調試

輸入法擴展腳本程序可以使用任何源代碼/文本編輯器創建。在將輸入法擴展包安裝到谷歌拼音輸入法之前,可以使用控制臺工具測試擴展程序,以確保程序功能正確。請從以下鏈接下載用于開發調試谷歌拼音輸入法擴展腳本的控制臺工具:

下載控制臺工具 (GooglePinyinApiConsole.exe) http://dl.google.com/pinyin/v2/GooglePinyinApiConsole.exe

在命令行運行控制臺工具GooglePinyinApiConsole.exe時,需要給出的命令行參數是一個或多個待測試的腳本文件路徑,控制臺工具會加載所有指定的輸入法擴展腳本,并啟動一個交互式界面,供開發者測試執行擴展模式。例如:

  1. GooglePinyinApiConsole.exe ext1.lua ext2.lua ext3.lua 

在控制臺工具的交互式界面中,鍵入"help",可以查看幫助信息:

i - 列出所有已注冊的命令擴展

i [COMMAND] - 無參數執行某命令擴展

i [COMMAND] [ARGUMENT] - 有參數執行某命令擴展

g [TRIGGER_STRING] - 嘗試利用某字符串參數激活整合擴展

c - 列出所有已注冊的轉換器擴展

c [FUNCTION] [STRING] - 測試轉換器函數

quit - 退出控制臺工具

help - 顯示幫助信息

當腳本加載或執行過程中發生錯誤時,控制臺工具會打印顯示錯誤信息。錯誤信息包括發生錯誤的腳本文件名,錯誤行號,錯誤內容等。

控制臺工具并不是真實的輸入法運行環境,因此,一些和輸入法特定功能相關的接口,例如,ime.get_last_commit(),在控制臺運行的腳本中無法得到實時的輸入法相關信息,這時,此類函數的返回值是簡單的固定字符串,如“測試”。整合擴展也無法像在輸入法中那樣,將結果插入在輸入法的候選項列表中。

下圖顯示了使用控制臺工具測試缺省輸入法擴展包中各擴展功能的情形:

 

 

#p#

關于Lua語言

目前,谷歌拼音輸入法擴展API只提供了Lua一種開發語言。Lua是一種體積小巧卻功能強大的動態腳本編程語言,廣泛用于網絡游戲等應用的插件或擴展功能的開發。對于一個有JavaScript語言、VBScript語言或者Python語言開發經驗的開發者來說,學習Lua語言并不困難。請參考以下網址獲得關于Lua語言的各種信息:

Lua編程語言

Lua程序設計語言

在輸入法環境中,每個用戶安裝的輸入法擴展都是一個獨立的Lua語言模塊,每個模塊在自己的名字空間中運行。也就是說,不同模塊間的同名符號不會沖突,但不同模塊間也無法相互進行功能調用。用戶安裝的輸入法擴展只能調用API參考一節描述的Lua內置功能函數和ime模塊提供的輸入法相關函數。

API參考

使用Lua語言編寫的輸入法擴展程序保存在磁盤上時,推薦使用UTF-8編碼的文本文件。文本文件可以包含也可以不包含BOM文件頭。沒有BOM文件頭時,IME缺省認為按UTF-8編碼加載。

使用Lua語言編寫的輸入法擴展程序可以使用以下內置函數。除了ime模塊提供的輸入法相關函數外,這些函數是標準Lua運行環境的一個子集。因此,在將已有的Lua程序移植到輸入法擴展程序之前,請確認程序使用的函數在下表所涵蓋的范圍內。

以下凡屬于Lua標準運行環境的函數,均只給出簡要的功能說明。詳細用法請參見Lua語言標準函數庫的說明。

基本功能函數

◆ assert (v [, message])

斷言。如果v的值是非(nil或false),就報告錯誤。

◆ error (message [, level])

報告錯誤。

◆ ipairs (t)

迭代器函數。用于對列表中元素的(序號,值)進行迭代。

◆ loadstring (string [, chunkname])

加載并執行字符串。

◆ next (table [, index])

用于遍歷列表的每個元素。

◆ pairs (t)

迭代器函數。用于對列表中元素的(鍵,值)進行迭代。

◆ select (index, ...)

返回變長參數列表中從index之后開始的所有參數。

◆ tonumber (e [, base])

轉換為數字。

◆ tostring (e)

轉換為字符串。

◆ type (v)

返回參數的類型名。

◆ unpack (list [, i [, j]])

返回列表中的各個元素。

字符串處理函數

◆ string.byte (s [, i [, j]])

返回字符內部編碼。

◆ string.char (···)

返回內部編碼對應的字符串。

◆ string.find (s, pattern [, init [, plain]])

字符串查找。

◆ string.format (formatstring, ···)

字符串格式化。

◆ string.gmatch (s, pattern)

迭代器函數。用于在字符串中對所有匹配項進行迭代。

◆ string.gsub (s, pattern, repl [, n])

字符串全局替換。

◆ string.len (s)

返回字符串長度。

◆ string.lower (s)

轉換為小寫。

◆ string.match (s, pattern [, init])

字符串匹配。

◆ string.rep (s, n)

重復字符串n次。

◆ string.reverse (s)

字符串反轉。

◆ string.sub (s, i [, j])

字符串替換。

◆ string.upper (s)

轉換為大寫。

日期和時間函數

◆ os.date ([format [, time]])

返回格式化的日期時間字符串。

◆ os.difftime (t2, t1)

返回兩個時間相差的秒數。

◆ os.time ([table])

返回當前日期,或指定的日期。

數學函數

◆ math.abs (x)

絕對值。

◆ math.acos (x)

反余弦。

◆ math.asin (x)

反正弦。

◆ math.atan (x)

反正切。

◆ math.ceil (x)

向上取整。

◆ math.cos (x)

余弦。

◆ math.cosh (x)

雙曲余弦。

◆ math.deg (x)

弧度轉角度。

◆ math.exp (x)

計算ex

◆ math.floor (x)

向下取整。

◆ math.fmod (x, y)

浮點數取模。

◆ math.frexp (x)

返回使x = m2e成立的m和e

◆ math.ldexp (m, e)

計算m2e

◆ math.log (x)

計算自然對數。

◆ math.log10 (x)

計算常用對數。

◆ math.max (x, ···)

求最大值。

◆ math.min (x, ···)

求最小值。

◆ math.modf (x)

返回浮點數的整數和小數部分。

◆ math.pi

返回π值。

◆ math.pow (x, y)

計算xy

◆ math.rad (x)

角度轉弧度。

◆ math.random ([m [, n]])

生成偽隨機數。

◆ math.randomseed (x)

設置隨機數種子。

◆ math.sin (x)

正弦。

◆ math.sinh (x)

雙曲正弦。

◆ math.sqrt (x)

平方根。

◆ math.tan (x)

正切。

◆ math.tanh (x)

雙曲正切。

表處理函數

◆ table.concat (table [, sep [, i [, j]]])

連接列表元素。

◆ table.insert (table, [pos,] value)

插入元素。

◆ table.maxn (table)

返回最大整數索引號。

◆ table.remove (table [, pos])

刪除元素。

◆ table.sort (table [, comp])

排序。

ime模塊提供的輸入法相關函數

注冊輸入法模塊相關函數

◆ ime.register_command (command_name, lua_function_name, description [, leading [, help]])

注冊命令擴展。詳細說明參見注冊命令擴展。

◆ ime.register_trigger (lua_function_name, description, input_trigger_strings, candidate_trigger_strings)

注冊整合擴展。詳細說明參見注冊整合擴展。

◆ ime.register_converter (lua_function_name, description)

注冊轉換器擴展。詳細說明參見注冊轉換器擴展。

輸入法信息相關函數

◆ ime.get_version ()

以字符串方式返回當前輸入法的版本號。

◆ ime.get_last_commit ()

返回用戶通過谷歌拼音輸入法輸入的上一個字符串。

實用工具函數

◆ ime.int_to_hex_string(value [, width])

將整數值value轉換成16進制表示的字符串。可選參數width指定了結果字符串的最小長度,不足最小長度時,高位用"0"補齊。

◆ ime.join_string (str_list, sep)

將str_list列表中的所有字符串連接成一個大字符串,并使用sep作為連接字符,返回結果字符串。

◆ ime.parse_mapping (src_string, line_sep, key_value_sep, values_sep)

字符串src_string是一個用字符串方式表示的<鍵, 一個或多個值>的映射表,每一行表示一個鍵與其值的映射,行與行之間的分隔字符是line_sep,每行內鍵與后續的一個或多個值之間的分隔字符是key_value_sep,多個值之間的分隔字符是values_sep。ime.parse_mapping解析此格式的字符串,將其轉換為Lua語言可直接使用的列表。結果列表的格式為{key1={value1, value2, ...}, key2={value1, value2, ...}, ...}。此工具函數的典型應用實例是:在輸入法擴展模塊中預置一個字符串形式、易于閱讀和編輯的映射表(比如一種漢字編碼到對應的一個或多個漢字的映射),然后在擴展模塊中用此函數解析該映射表,以便Lua代碼快速查詢。

示例代碼:

  1. _MAPPING_TABLE = [[  
  2. a 啊  
  3. b 不,吧  
  4. c 從,穿,出  
  5. ]]  
  6.  
  7. _MAPPING = ime.parse_mapping(_MAPPING_TABLE, "\n", " ", ",")  
  8.  
  9. function Lookup(input)  
  10.   if _MAPPING[input] then  
  11.     return _MAPPING[input]  
  12.   else  
  13.     error("Invalid argument")  
  14.   end  
  15. end  
  16.  
  17. ime.register_command("lp", "Lookup", "mapping lookup") 

◆ ime.split_string (str, sep)

根據分隔字符sep,將字符串str拆分為一組字符串,返回這一組字符串組成的列表。

◆ ime.trim_string (str)

去除字符串str左右兩邊的空白字符,返回結果字符串。

◆ ime.trim_string_left (str)

去除字符串str左邊的空白字符,返回結果字符串。

◆ ime.trim_string_right (str)

去除字符串str右邊的空白字符,返回結果字符串。

◆ ime.utf8_to_utf16 (str)

將UTF-8編碼的字符串轉換為UTF-16編碼的字符串,返回的結果字符串以"\0\0"結尾。

◆ ime.utf16_to_utf8 (str)

將UTF-16編碼的字符串轉換為UTF-8編碼的字符串。

原文:http://www.google.com/intl/zh-CN/ime/pinyin/api.html

【編輯推薦】

  1. 百度地圖API之如何制作駕車導航
  2. 詳解百度地圖API之地圖標注
  3. 教你如何構建簡單Web API
  4. Google+開放Hangouts API接口
  5. C++中通過LUA API訪問LUA腳本變量學習教程
責任編輯:陳貽新 來源: 谷歌
相關推薦

2009-09-01 08:57:21

SCIM谷歌拼音輸入法

2009-08-13 10:42:15

基于Android平臺

2023-08-14 07:36:58

搜狗拼音加密

2009-03-09 19:48:17

LinuxSunPinyin拼音輸入法

2011-08-30 11:21:59

UbuntuGoogle

2009-11-17 09:26:39

騰訊搜狗輸入法

2017-01-12 09:25:05

Windows 10新拼音輸入法

2022-05-11 14:54:02

輸入法框架鴻蒙

2020-10-29 11:10:10

華宇拼音輸入法

2010-12-22 15:32:24

360軟件管家搜狗拼音輸入法

2017-10-16 13:30:28

windows 10技巧輸入法

2009-07-06 09:18:31

搜狗騰訊輸入法

2023-04-08 11:03:28

Windows 11微軟

2023-05-10 07:32:18

2023-07-12 07:04:07

Windows 10微軟

2023-06-16 09:24:56

Windows微軟

2012-03-26 09:27:40

谷歌安卓開發谷歌安卓

2013-08-29 11:04:27

2024-07-11 08:16:59

Windows 11微軟預覽版更新

2010-02-07 14:25:47

Ubuntu SCIM
點贊
收藏

51CTO技術棧公眾號

国产精品视频麻豆| 亚洲欧美日韩一区在线观看| 精品美女在线播放| 中文字幕无码精品亚洲35| 男女视频在线观看免费| 日本视频免费一区| 久久99视频精品| 强迫凌虐淫辱の牝奴在线观看| 欧美性理论片在线观看片免费| 国产精品国产三级国产| 国产精品久久亚洲7777| 国产精品51麻豆cm传媒| 国产精品xvideos88| 亚洲人成在线观| 美女日批在线观看| 精品欧美日韩精品| 亚洲成av人在线观看| 色姑娘综合av| 免费观看的毛片| 久久se这里有精品| 欧美在线性爱视频 | 亚洲人体在线| 一本色道亚洲精品aⅴ| 熟女视频一区二区三区| 欧美扣逼视频| 成人v精品蜜桃久久一区| 成人乱人伦精品视频在线观看| 日产精品久久久| 欧美日韩国产探花| 视频一区视频二区国产精品| 亚洲最大的黄色网| 7777精品| 91精品国产综合久久久久 | 极品美女销魂一区二区三区免费| 人九九综合九九宗合| 麻豆亚洲av熟女国产一区二| 国产精品7m凸凹视频分类| 亚洲片在线资源| 亚洲欧美日本一区| 国产一区二区三区亚洲| 日韩精品一区二区三区中文精品 | 国产成人综合视频| 91精品国产综合久久久久久蜜臀| 国产污视频网站| 亚洲永久网站| 97超级碰碰碰久久久| 久久久久亚洲AV| 欧美 亚欧 日韩视频在线 | 国产日韩一区欧美| 亚洲成人777777| 粉嫩久久99精品久久久久久夜| 成人在线视频网| 91片黄在线观看喷潮| 三级一区在线视频先锋| 日韩免费观看网站| 四虎成人在线观看| 日韩高清欧美激情| 国产精品美女午夜av| 亚洲大尺度在线观看| 久久久久久自在自线| 日本精品视频在线| 男操女视频网站| 麻豆精品国产传媒mv男同| 国产精品久久久久久中文字| 久草热在线观看| 麻豆精品一区二区综合av| 国产欧美最新羞羞视频在线观看| 97人妻人人澡人人爽人人精品| 经典一区二区三区| 91精品国产高清久久久久久91裸体| 国产强伦人妻毛片| 成人美女视频在线观看18| 久久99精品久久久久久久青青日本| 五月婷婷开心中文字幕| 久久精品视频一区| 亚洲美女网站18| 午夜成年人在线免费视频| 亚洲成a人v欧美综合天堂下载| 国产精品无码av在线播放| 午夜日韩成人影院| 欧美精品aⅴ在线视频| 麻豆tv在线观看| 日韩丝袜视频| 一区二区av在线| 很污很黄的网站| 激情成人综合| 国产精品jvid在线观看蜜臀| 国产男女无套免费网站| 成人av免费网站| 日本视频精品一区| www国产在线观看| 婷婷激情综合网| 中文字幕 91| 国产精品对白久久久久粗| 亚洲欧美另类中文字幕| 成人免费毛片xxx| 国产亚洲在线| 国产中文字幕91| 天堂在线免费av| 中文字幕一区在线观看视频| 五十路熟女丰满大屁股| 欧美日韩国产网站| 亚洲精品一区在线观看| 黄色一级片一级片| 亚洲美女色禁图| 国产精品最新在线观看| 香蕉视频成人在线| 日韩一区日韩二区| 欧美牲交a欧美牲交aⅴ免费真 | 亚洲欧美不卡| 亚洲最大福利视频| 黄色av免费在线观看| 亚洲综合男人的天堂| 黄色免费网址大全| 开心激情综合| 欧美乱妇40p| 中文字幕欧美在线观看| 99精品1区2区| 超碰人人爱人人| 在线人成日本视频| 精品蜜桃在线看| 日韩在线观看视频一区二区| 老司机午夜免费精品视频 | 精品久久久久久中文字幕2017| 999久久久精品一区二区| 主播福利视频一区| 日韩国产成人在线| 久久久99精品免费观看| 黄色免费福利视频| 亚洲第一二区| 久久综合88中文色鬼| 91麻豆精品在线| 黄色一级片免费播放| 久久影视一区| 国产精品久久久av| 国产视频网站在线| 欧美性猛xxx| 182在线视频| 亚洲黄网站黄| 国产欧美丝袜| 成年人视频免费在线播放| 欧美一区二区三区人| 黑人操日本美女| 久久成人免费日本黄色| 日日夜夜精品网站| 精品无人乱码一区二区三区| 亚洲人成绝费网站色www| 天天干天天干天天干天天| 91日韩精品一区| 欧美日本视频在线观看| 久久免费视频66| 欧美日本中文字幕| 亚洲精品国产精品国| 一区二区三区四区在线免费观看 | 国产精品视频一区二区三区综合| 中文字幕久久亚洲| 伊人成人在线观看| 国产精品不卡一区二区三区| 天天看片天天操| 91成人超碰| 99re在线| 九色porny丨入口在线| 日韩精品极品视频| 日本精品入口免费视频| 国产精品国产自产拍高清av王其| 九九热在线免费| 天天做综合网| 成人精品水蜜桃| 国产第一页在线| 日韩福利在线播放| 特级西西444www大胆免费看| 中文字幕制服丝袜成人av | 精品国模一区二区三区欧美 | 国产传媒免费在线观看| 国产精品中文欧美| 日本欧美黄色片| 国内精品久久久久久久久电影网| 国产精品偷伦免费视频观看的| 亚洲精品承认| 亚洲成人免费在线视频| 亚洲欧美偷拍一区| 国产精品乱子久久久久| 国产亚洲精品成人a| 午夜在线视频观看日韩17c| 一级特黄录像免费播放全99| 亚洲高清在线一区| 欧洲亚洲免费在线| 日本美女在线中文版| 欧美精品一区二区三区在线 | 91精品国产91综合久久蜜臀| 精品无码人妻一区二区三区品| 久久伊人中文字幕| 五月六月丁香婷婷| 亚洲欧美日韩专区| 400部精品国偷自产在线观看 | 免费成人美女女| 久久久精品一区二区| 日批视频在线播放| 欧美日韩国产高清一区二区三区| 国产一级做a爰片在线看免费| 久久看人人爽人人| 国产又黄又嫩又滑又白| 美女久久一区| 2019日韩中文字幕mv| 日韩aaaa| 国产中文一区二区| 伊人久久大香| 国产成人精品视频在线| 毛片在线网址| 精品国产一区二区在线| 三级毛片在线免费看| 日韩一区二区在线看| 中文在线字幕免费观| 精品免费在线视频| 欧美激情图片小说| 亚洲国产精品成人久久综合一区 | 亚洲自拍偷拍另类| 午夜不卡在线视频| 欧美被狂躁喷白浆精品| 日本一区二区三区久久久久久久久不 | 日韩美女一区二区三区| 日韩xxx视频| 欧美日韩在线看| 日本午夜精品理论片a级app发布| 亚洲欧洲精品一区二区三区| 中文字幕成人动漫| 91在线一区二区三区| 无码人妻一区二区三区一| 激情五月激情综合网| 91人人澡人人爽人人精品| 性欧美暴力猛交另类hd| 久久综合久久网| 欧美三级网页| 91精品一区二区三区四区| 久久资源中文字幕| 国产精品夫妻自拍| 国产精品无码自拍| 国产老肥熟一区二区三区| 国产精品一区二区小说| 日韩主播视频在线| 18岁视频在线观看| 久久国产精品久久久久久电车| 蜜桃传媒一区二区三区| 今天的高清视频免费播放成人| 国产制服91一区二区三区制服| 婷婷亚洲图片| 亚洲综合激情五月| 亚洲中无吗在线| 美国av在线播放| 国产精品久久久久久麻豆一区软件| 日韩视频在线播放| 不卡日本视频| 一区二区在线观看网站| 婷婷久久综合| 欧美中文字幕在线观看视频| 国内一区二区三区| 男女私大尺度视频| av成人天堂| 国产淫片av片久久久久久| 天堂久久久久va久久久久| 天天操天天摸天天爽| 日本大胆欧美人术艺术动态| 国产一伦一伦一伦| 国产又黄又大久久| 亚洲av无码成人精品区| 99视频热这里只有精品免费| 黄色性生活一级片| 国产亚洲综合在线| 日本美女黄色一级片| 一区二区三区免费看视频| 久久中文字幕无码| 狠狠躁夜夜躁久久躁别揉| 波多野结衣mp4| 欧美精品在线观看一区二区| 亚洲成人精品女人久久久| 亚洲激情自拍图| 波多野结衣在线网站| 日韩资源在线观看| 国产丝袜在线观看视频| 人人做人人澡人人爽欧美| 91精品麻豆| 国产伦视频一区二区三区| 九九亚洲精品| 久久99国产精品一区| 在线视频免费在线观看一区二区| 日韩在线第三页| 国产一区二区三区免费观看| 久久福利小视频| 亚洲国产精品成人综合| 国产污视频在线观看| 色偷偷久久一区二区三区| 国产欧美一级片| 亚洲精品国产欧美| 成人黄视频在线观看| 91超碰中文字幕久久精品| 亚洲精品aa| 久久日韩精品| 91成人观看| 国产熟人av一二三区| 国产成人精品www牛牛影视| 国产又粗又猛又爽视频| 一区二区三区美女视频| 最近国语视频在线观看免费播放| 日韩美女天天操| 日本在线免费| 国产精品96久久久久久| 激情小说一区| 日韩视频在线免费播放| 丝瓜av网站精品一区二区| 午夜免费视频网站| 欧美国产综合色视频| 国产无遮挡又黄又爽又色| 欧美精品在线一区二区三区| 免费人成在线观看网站| 欧美激情中文字幕在线| 91丨精品丨国产| 色综合电影网| 久久国产精品99国产| 午夜不卡久久精品无码免费| 亚洲欧美欧美一区二区三区| 亚洲免费视频二区| 亚洲乱码国产乱码精品精| √8天堂资源地址中文在线| 91在线免费视频| 日韩欧美自拍| www.日本xxxx| 久久久久久免费网| 国产精品一区二区6| 日韩欧美的一区| 亚洲色图美国十次| 91亚洲人电影| 忘忧草精品久久久久久久高清| 激情视频综合网| 国产香蕉久久精品综合网| 九九热在线免费观看| 亚洲第一区在线观看| 日本高清在线观看视频| 亚洲自拍欧美色图| 香蕉综合视频| 亚洲国产日韩在线一区| 亚洲人一二三区| 99久久国产热无码精品免费| 日韩中文字幕在线看| 色成人综合网| 国产成人精品免费看在线播放| 蜜臂av日日欢夜夜爽一区| 香蕉久久久久久久| 欧美日韩精品一区二区三区| 永久免费av片在线观看全网站| 国产精品美乳在线观看| 日韩精品二区| 污视频网址在线观看| 亚洲视频免费观看| 国产视频第一页| 欧美人交a欧美精品| 成人台湾亚洲精品一区二区| 国产手机免费视频| 91视频精品在这里| 不卡av电影在线| 中文字幕亚洲综合| 亚洲伊人精品酒店| www.av91| 91亚洲精品一区二区乱码| 秋霞精品一区二区三区| 中文国产亚洲喷潮| aa亚洲一区一区三区| 欧美亚洲色图视频| 99久久综合99久久综合网站| 午夜精品久久久久久久蜜桃| 尤物yw午夜国产精品视频明星| 欧美激情不卡| www.成年人视频| 久久精品在线观看| 国产一区二区三区在线观看| 欧美成人在线免费视频| 极品尤物一区| 91蝌蚪视频在线观看| 中文字幕一区二区三区四区| 亚洲AV无码国产精品午夜字幕| 97超碰国产精品女人人人爽| 国精一区二区| 中文字幕avav| 色噜噜狠狠成人网p站| 黄色网址在线免费播放| 国产精品theporn88| 久久一区二区三区超碰国产精品| 神马久久精品综合| 亚洲国产成人在线视频| 欧洲成人一区| 国产a级片网站| 国产精品伦理一区二区| 少妇精品高潮欲妇又嫩中文字幕| 国产成人综合av| 国内视频精品| 你懂得在线观看| 国产丝袜视频一区| 午夜视频一区二区在线观看| 蜜臀久久99精品久久久酒店新书| 亚洲人成在线播放网站岛国| 青青久在线视频|