Skip to content

Tsinswreng/rime-TswG

Repository files navigation

rime-TswG

自用rime-lua腳本及方案分享

本項目使用TypeScriptToLua(tstl)將ts代碼轉譯成lua代碼來執行。 .lua文件產出于lua/TswG目錄下。

文檔可能有過時及不正確之處,請見諒。

模塊及工具總覽

模塊:

ts_cmd

可以通過打字來執行一些操作。如輸入$s切換到簡體、輸入$S切換成繁體等。

默認用$號作爲命令前綴、用,作爲參數分隔符、用空格提交命令。

基本命令:

  • $s: 切換到簡體

  • $S: 切換到繁體

  • $l: 調用lua的load函數來上屏lua表達式的結果。可用作簡易計算。

如執行 $l,2+3 後上屏5; 執行$l,'\t'後上屏製表符; 執行$l,math.log(5) 上屏 1.6094379124341

下圖是動圖

alt text

  • u: 以十六進制上屏unicode字符。

(下圖是gif)

alt text

第一個參數: 16進制unicode字符碼。 如 $u,4e2d -> ;

第二個參數: 可選、表示上屏的字符數、按unicode順序遞增。

$u,4000,10 -> 䀀䀁䀂䀃䀄䀅䀆䀇䀈䀉 (10個漢字、範圍為U+4000U+4009)

說明書詳見ts_cmd.md

ts_predict

聯想詞

支持主動聯想(上屏後主動顯示聯想詞),

被動聯想(輸入旹、候選詞的詞序根據之前的輸入而調整);

支持動態聯想詞庫

alt text

說明書詳見ts_predict.md

coinage

自動造詞

date

日期輸入

項目結構

源碼目錄:

_tsToLua/	# TypeScriptToLua根目錄
	tsconfig.json	# ts編譯器配置文件
	doc/	# 文檔
	src/TswG/	# ts源碼
		mod/	# 各模塊的ts源碼

目標目錄 lua/ :

lualib_bundle.lua	# tstl運行依賴。
TswG/	# 產出的.lua文件。每個.ts對應一個.lua。目錄結構與ts源碼相同。

運行環境需求

librime-lua 版本 >= 200 (小狼毫版本 >= 0.15.0)

安裝

若您不瞭解在輸入方案中部署lua腳本的流程、建議您先閱讀librime-lua文檔前面部分。

警告: 若您不了解lua腳本的部署流程、爲防止與原本用戶文件夾中的內容衝突、建議您另設一個用戶文件夾、測試完畢後再遷移到原本用戶文件夾。按照以下步驟操作:

假設: 您使用小狼毫、您的用戶文件夾爲User_Data

  1. 退出小狼毫算法服務、並將用戶文件夾改名、如改名作_User_Data

  2. 複製本倉庫到本地:

手動下載 或 用git clone

使用命令:

git clone https://github.com/Tsinswreng/rime-TswG.git

或手動下載zip包並解壓縮

alt text

  1. 將獲取到的文件夾改名作User_Data、置於原本的User_Data位置處。

  2. 從源碼構建(或從release下載預先編譯好的lua文件夾壓縮包)。源碼構建方法見後文。構建成功後、/lua目錄下會有產出的lua腳本。

  3. 按需安裝、參考_tsToLua/doc下相應模塊的說明書。

  4. 調試無誤後、恢復至原本的用戶文件夾。

從源碼構建

  1. 確保你已經安裝了node.js

  2. 確保你已經安裝了typescript, typescript-to-lua

如未安裝、可執行以下命令安裝:

npm install -D typescript typescript-to-lua
  1. 進入tstl項目根目錄
cd _tsToLua
  1. 將ts代碼編譯成lua
npx tstl -p .

(這一步報錯是正常的)

執行命令後、會在<項目根目錄>/lua目錄下輸出編譯產物。

有問題發issue。

2024-05-06T21:39:31.266+08:00

該項目曾經由純lua語言編寫、現已改用typescirpt重構。原先的lua文件夾已移至/old目錄下、且不再維護。以下爲舊版的README.md。

調試

實時觀察日誌輸出:

小狼毫:

在powershell中執行以下命令:

$path = "$env:LOCALAPPDATA\Temp\rime*INFO*"
Get-Content -Path $path -Wait | ForEach-Object {
    if ($_ -match '^I') {
        Write-Host $_ -ForegroundColor White
    } elseif ($_ -match '^W') {
        Write-Host $_ -ForegroundColor Yellow
    } elseif ($_ -match '^E') {
        Write-Host $_ -ForegroundColor Red
    } else {
        Write-Host $_
    }
}

或者使用bash終端(如Git bash)

tail -f ~/AppData/Local/Temp/rime*INFO*  | awk  '
BEGIN { e="\033[31;1m" ; w="\033[33;1m" ; r="\033[0m" }
/^I/ { printf r }
/^W/ { printf w }
/^E/ { printf e }
{print $0}
'

舊版README.md:

usage

rime-TswG-example.schema.yaml是帶有腳本的樣例方案。使用明月拼音的碼表

建議另外用一個文件夾並設作用戶文件夾㕥測試(即按下文的步驟)、無問題後再參照樣例方案按需引入你自己的方案裏。否則可能容易踩坑

體驗rime-TswG-example:

要求: librime-lua 版本 >= 200

windows 小狼毫:

版本 >= 0.15.0

  1. 執行以下命令
git clone https://github.com/Tsinswreng/rime-TswG.git #或者手動下載
cd rime-TswG
npm i clipboardy #可選
  1. 退出算法服務

  2. 把當前的用戶文件夾改名、假設你的用戶文件夾爲User_Data 則可改名作_User_Data

  3. 用 從此倉庫下載下來的代碼文件夾 代替 原本的用戶文件夾 (名稱, 路徑要一致)

  4. 重新開啓算法服務、並在輸入法設定選中rime-TswG-example

  5. 重新部署

  6. F4或ctrl+` 打開輸入法選單、選中rime-TswG-example

  7. 完成。

測試無問題後再參照樣例方案按需引入你自己的方案裏。參照每個lua模塊的開頭的說明。注意require的文件必須要存在于lua/目錄下。否則腳本不能正常運行。

  • Android 同文:

仿照windows 小狼毫的安裝流程、或先在電腦上跑通後再遷移到同文上

  • 其他平臺:

沒試過 自己摸索罷()

歡迎提出問題或想法

內容

lua腳本模塊:

  • init.lua 用于初始化配置
  • predict.lua 動態聯想詞
  • userWordCombiner.lua 輸入歷史組詞記入詞庫
  • cmd.lua 命令、當前支持開關轉換, 輸出unicode字符, 輸出lua表達式(可當計算器用), 讀取剪貼板處理內容後輸出(簡繁轉換,字串反轉,豎排等)
  • jp.lua 繁轉日
  • getSingleCharFromPhrase.lua 以詞定字
  • hintTrad.lua 簡體模式下提示傳統漢字
  • fillMenu.lua 單字組詞出候選
  • deleteSelectionOn0.lua 0鍵刪詞
  • filterOnAddtionalCode.lua 針對使用輔助碼旹的filter(僅用于dks方案)
  • limitFilter.lua 置于filters最前面㕥限制filter中候選詞的數量、㕥防後續filter處理過多不需要的候選
  • time_translator.lua 輸出當前時間
  • clearOnKey.lua 按下shift又直接松開旹 清空菜單

工具等:

  • config.lua 用戶配置
  • shared.lua 跨模塊共享變量/函數
  • type.lua librime-lua類型聲明
  • ArrayDeque.lua 循環數組雙端隊列
  • HistoryDeque.lua 繼承ArrayDeque用于錄限定個數的輸入歷史
  • ut.lua 工具
  • algo.lua 算法工具
  • rimeUtil.lua 輸入法工具

方案:

  • prd 僅用于部署後生成靜態聯想詞詞庫給lua腳本調用
  • dks 魔改上古音三拼 (待分享)
  • cangjie7-1 魔改三碼倉頡 (待分享)

lua 模塊

predict.lua

聯想詞。支持動態聯想

開啓後、每次上屏後自動在菜單中顯示聯想候選詞。

當已經顯示聯想詞旹:

  • 使用空格或數字鍵(1-9)可以直接使聯想詞上屏。
  • 按0鍵刪除當前高亮候選。
  • 按上下箭頭可使其他候選項變高亮 (即默認行爲)

除此之外、所有的按鍵事件都會使聯想詞菜單消失。

聯想詞菜單不會干擾後續正常打字。

使用HistoryDeque.lua、默認容量爲4

靜態聯想詞庫來自處理後的essay.txt

用戶動態聯想詞詞庫名稱默認爲prd

大致算法:

來自動態聯想詞庫候選詞權重更大;

若用戶輸入了春眠不覺四個字(無論是一次性上屏輸入還是逐字分四次上屏輸入)則程序用以下字串去查字典:

春眠不覺 眠不覺 不覺

越靠前的字串、若有查找結果則所得候選詞權重越高

(下圖是gif)

alt text

註釋可關

(下圖是gif)

alt text

同文

(gif)

alt text

已知bug:

  • 小狼毫0.15.0 按數字鍵2欲擇第二個聯想候選項旹 菜單直接消失 (同文運行相同腳本無此bug)

userWordCombiner.lua

使用HistoryDeque.lua。默認容量爲4。

根據用戶輸入歷史組詞並寫入動態用戶詞庫

如 依次上屏["輸","入","歷","史"]四個字則會將

["輸入歷史", "入歷史", "歷史"]

記入當前方案所使用的userdb。下次可只需按srls(假設用的方案是拼音)即可使輸入歷史顯于候選

示例:

按照rime默認行爲、須一次性上屏氓之蚩蚩四個字旹 輸入法纔會將氓之蚩蚩錄入用戶詞典。若分開逐字上屏則不會把氓之蚩蚩一詞錄入用戶詞典。

(gif)

alt text

使用此插件後

第一次輸入mtee旹 候選項中無氓之蚩蚩

逐字上屏,,,後再輸入mtee旹可見氓之蚩蚩已現于候選首位、即氓之蚩蚩已被錄入用戶詞典。

但是、在此過程中並非只有氓之蚩蚩一詞被錄入了用戶詞典。以下標黃的字串也會被錄入用戶詞典

alt text

有些詞並不是我們想要的。因此 此插件可能污染用戶詞庫。請慎用

默認配置:

  • 不錄單字
  • 上屏歷史雙端隊列容量爲4。

jp.lua

繁轉日

開啓後:

alt text

->

->

cmd.lua

命令

默認配置:引導符$、參數分隔符,、空格提交命令

快捷開關:

  • 簡體模式:

開: $s

關: $S

(下圖是gif)

alt text

全角:

開: $fu

關: $Fu

日語新字體(需要部署jp.lua):

開: $jp

關: $Jp

聯想詞(需要部署predict.lua):

開: $p

關: $P

輸出表達式等

  • 以十六進制上屏unicode字符

$u,4e2d ->

(下圖是gif)

alt text

  • 上屏lua表達式(可當簡易計算器用)

$l,2-3 -> -1

$l,math.log(5) -> 1.6094379124341

(下圖是gif)

alt text

處理剪貼板後上屏

依賴clipboard.lua

需要node.js

在用戶文件夾根目錄運行

npm i clipboardy

(只在windows10上測試過、直接用powershell.exe -command "Get-Clipboard"總是卡死、所以改用npm的clipboardy庫)

獲取剪貼板的原理: lua通過os.execute使操作系統將剪貼板內容寫入預定的文件、然後lua讀取該文件

使用旹 閃過cmd是正常現象

警告:字符過多旹輸入法和當前聚焦的窗口會卡死、需要退出算法服務

  • 字體轉換並粘貼

$v, 後接opencc目錄中的json文件名

t:繁體; s: 簡體; jp: 日語新字體; 2: to

$v,t2s 對剪貼板內容繁轉簡後上屏

(下圖是gif)

alt text

  • 剪貼板字串逆序上屏

$r

(下圖是gif)

alt text

  • 豎排右換行分段輸出

$f,vr,4,8 每列最多4個字符、每段最多8列(若不指定則無限制)

$f,vrf,4,8 若第二個參數用vrf而非vr則會將其中含有的ascii字符轉全角

$fv,4,8 等同於 $f,vrf,4,8

不分段示例:

$fv,7:

alt text

分段示例:

原文:

天生萬物以養民,民無一善可報天。不知蝗蠹遍天下,苦盡蒼生盡王臣。人之生矣有貴賤,貴人長為天恩眷。人生富貴總由天,草民之窮由天譴。忽有狂徒夜磨刀,帝星飄搖熒惑高。翻天覆地從今始,殺人何須惜手勞。不忠之人曰可殺!不孝之人曰可殺!不仁之人曰可殺!不義之人曰可殺!不禮不智不信人,大西王曰殺殺殺!我生不為逐鹿來,都門懶築黃金台,狀元百官都如狗,總是刀下觳觫材。傳令麾下四王子,破城不須封刀匕。山頭代天樹此碑,逆天之人立死跪亦死!ab12!@

$fv,8,9

alt text

lua工具

type.lua

針對librime-lua提供的接口的類型聲明。在編輯器中開啓相關插件(如vscode的lua插件)後可獲得更好的代碼提示和類型檢查。

ArrayDeque.lua

基于循環數組實現的雙端隊列

HistoryDeque.lua

繼承ArrayDeque.lua、用于記錄有限個上屏記錄。隊列滿旹 再在隊尾添加元素 則會先使隊頭出隊。

方案

cangjie7-1

魔改三碼倉頡、今僅用于與主方案混輸及作輔助碼

首碼更改:

z: 辶
x: 訁
,: 彳
.: 絲

非首碼之構件

,:也
.:非

不足三碼者用;

hiragana katakana

日語假名。 拼音方案非全同羅馬音、而似IPA音位記音

j : /j/
q : っ
l : ー
x : 小寫假名

わたしはにんけんじゃない wa ta si va ni nn ke nn zja na i

dks

魔改上古音三拼

鍵位圖:

alt text

支持cangjie7-1混輸、可選;作後綴

支持cangjie7-1作輔助碼

輔助碼用例:

kya: /*krˁa/ 候選: 家傢鎵...

若此時欲、則添Co、即kyaCo、緣之倉頡碼首碼爲c、末碼爲o

首碼須大寫(即按住shift後對應的字符)、倉頡末碼可省

:: 地球拼音反查 陰平不標、;.,分別對應陽平、上聲、去聲。 ;;: 倉頡反查 ': 輸入平假名 ": 輸入片假名