forked from functoreality/rime-flypy-zrmfast
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrime.lua
170 lines (164 loc) · 4.66 KB
/
rime.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
snip_map={['`']=' ',
['6']='\\partial ',
['8']='\\infty ',
['=']='\\equiv ',
['\\']='\\setminus ',
['.']='\\cdot ',
--['_']='\\cdot ', --- for special char remap
['*']='\\times ',
['<']='\\langle ',
['>']='\\rangle ',
['H']='\\hbar ',
['A']='\\forall ',
['E']='\\exists ',
['a']='\\alpha ',
['b']='\\beta ',
['c']='\\chi ',
['d']='\\delta ',
['e']='\\epsilon ',
['f']='\\phi ',
['g']='\\gamma ',
['h']='\\eta ',
['i']='\\iota ',
['k']='\\kappa ',
['l']='\\lambda ',
['m']='\\mu ',
['n']='\\nu ',
['p']='\\pi ',
['q']='\\theta ',
['r']='\\rho ',
['s']='\\sigma ',
['t']='\\tau ',
['y']='\\psi ',
['u']='\\upsilon ',
['w']='\\omega ',
['z']='\\zeta ',
['x']='\\xi ',
['D']='\\Delta ',
['F']='\\Phi ',
['G']='\\Gamma ',
['L']='\\Lambda ',
['P']='\\Pi ',
['Q']='\\Theta ',
['S']='\\Sigma ',
['U']='\\Upsilon ',
['W']='\\Omega ',
['X']='\\Xi ',
['Y']='\\Psi ',
['0']='\\varnothing ',
['1']='^{-1}',
['2']='\\sqrt ',
['3']='\\sum ',
['4']='\\prod ',
['7']='\\nabla ',
['~']='\\tilde ',
['-']='\\bar ',
['N']='\\ne ',
['V']='^\\vee ',
['T']='^\\mathrm{T}',
['C']='\\mathbb{C}',
['B']='\\mathbb{',
[',']='\\math',
['"']='\\operatorname{',
["'"]='\\text{',
--["^"]='\\text{', --- for special char remap
['/']='\\frac '}
--- consider "ar`row" to avoid "rr", or check no pattern '=.*[ovj]{2}'
snip_map2 = {['jjj']='\\downarrow ',
['jjJ']='\\Downarrow ',
['jjk']='\\uparrow ',
['jjK']='\\Uparrow ',
['jjh']='\\leftarrow ',
['jjH']='\\Leftarrow ',
['jjl']='\\rightarrow ',
['jjL']='\\Rightarrow ',
['jj;']='\\mapsto ',
['jjw']='\\leadsto ',
['jj-']='\\leftrightarrow ',
['jj=']='\\Leftrightarrow ',
['oo+']='\\oplus ',
['vv+']='\\bigoplus ',
['oox']='\\otimes ',
['vvx']='\\bigotimes ',
['oo.']='\\odot ',
--['oo_']='\\odot ', --- for special char remap
-- ['vv.']='\\bigodot ',
['ooc']='\\propto ',
['ooo']='\\circ ',
['vvo']='\\bigcirc ',
['vv~']='\\widetilde{',
['vv-']='\\widebar{',
-- ['oo{']='\\preceq ',
-- ['oo}']='\\succeq ',
['oo[']='\\subseteq ',
['oo]']='\\supseteq ',
['oo(']='\\subset ',
['oo)']='\\supset ',
['vve']='\\varepsilon ',
['vvf']='\\varphi ',
['vvk']='\\varkappa ',
['vvq']='\\vartheta ',
['vvr']='\\varrho ',
['vvp']='\\varpi ',
['vvl']='\\ell ',
['vv=']='\\approx ',
['vv:']='\\coloneqq ',
['vv,']=',\\dots,',
['vv.']='\\ddot ',
--['vv_']='\\ddot ', --- for special char remap
['vvE']='\\mathbb{E}'}
--- 特殊符号替换规则
snip_charmap = {['[']='{',
['{']='[',
[']']='}',
['}']=']',
[';']='(',
['(']=';',
["'"]=')',
[')']="'",
['/']='^',
['^']='/',
['_']='.',
['.']='_'}
function tex_translator(input, seg, env)
local trigger = env.engine.schema.config:get_string('recognizer/patterns/tex_translator') or '^al(.*)$'
local expr, n = env.engine.context.input:gsub(trigger, '%1')
if (n ~= 0) then
--expr = expr:gsub('%W', snip_charmap) --- 启用特殊符号替换
expr = expr:gsub('ooa(.)', '^{%1+1}')
expr = expr:gsub('oos(.)', '^{%1-1}')
expr = expr:gsub('ood(.)', '_{%1+1}')
expr = expr:gsub('oof(.)', '_{%1-1}')
expr = expr:gsub('([^jvo])%1', snip_map)
expr = expr:gsub('(([jvo])%2.)', snip_map2)
expr = expr:gsub('(.)`%1', '%1%1')
expr = expr:gsub('`', ' ')
expr = '$'..expr..'$'
expr = string.gsub(expr, ' (%W)', '%1')
--- Candidate(type, start, end, text, comment)
yield(Candidate("math", seg.start, seg._end, expr, " "))
end
end
function func_translator(input, seg, env)
local trigger = env.engine.schema.config:get_string('recognizer/patterns/func_translator') or '^af(.*)$'
local expr, n = env.engine.context.input:gsub(trigger, '%1')
if (n == 0) then
return
end
-- 如果输入串为 `afd` 则翻译
if (expr == "d") then
--[[ 用 `yield` 产生一个候选项
候选项的构造函数是 `Candidate`,它有五个参数:
- type: 字符串,表示候选项的类型
- start: 候选项对应的输入串的起始位置
- _end: 候选项对应的输入串的结束位置
- text: 候选项的文本
- comment: 候选项的注释
--]]
yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), "日期"))
yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), "日期"))
--[[ 用 `yield` 再产生一个候选项
最终的效果是输入法候选框中出现两个格式不同的当前日期的候选项。
--]]
end
end