自定义双拼方案
为了便于直观地认识带条件前置路径的工作方式,本节我将通过复刻自然码双拼方案来演示一下如何使用带条件的前置路径。
自然码方案
这里是自然码的键位表:
有了这个键位表,我们就知道应该如何撰写表达式。
这里我拿一个键位举例,比如键位s:
这个键位涉及两个韵母,一个是iong,一个是ong;
以iong为例,由于能与iong结合的声母只有j/q/x,因此表达式的写法是:j/q/x:s=iong
;
以ong为例,能与ong结合的声母比较多,有ch/zh/c/d/g/h/k/l/n/r/s/t/y/z,因此表达式的写法是:ch/zh/c/d/g/h/k/l/n/r/s/t/y/z:s=ong
,用反选写法则是:~sh/b/f/j/m/p/q/w/x/0:s=ong
;
依次类推,我们便可以将自然码翻译为带条件的前置路径表示。
自然码中的特殊情况
在自然码中zh/ch/sh被分别映射到了v/i/u键上,因此我们需要这样写:
i=ch
u=sh
v=zh
此外,在自然码中,为了维持两键一字的原则,在当一个字没有声母时,用以下几个规则:
- 单字母韵母a,o,e重复按两次。如:a → aa,等。
- 双字母韵母an,en,ou等不变,直接输入。
- 三字母韵母ang,eng,重复第一个字母。如:ang → ah (双拼 h = ang)
我们一条一条来看:
- 单字母韵母a,o,e重复按两次。如:a → aa,等。
对于这种情况,我们可以这么写:
a:a=a o:o=o e:e=e
- 双字母韵母an,en,ou等不变,直接输入。
对于这种情况,我们可以这么写:
a:n=an e:r=er e:n=en o:u=ou a:o=ao a:i=ai e:i=ei
- 三字母韵母ang,eng,重复第一个字母。如:ang → ah (双拼 h = ang)
a:h=ang e:g=eng
以上,就是自然码下带条件的前置路径的所有写法。整理之后,应该是下面这个样子:
~0:u=u
sh/zh/g/h/k:w=ua
~b/f/j/l/n/m/p/q/w/x/y/0:v=ui
j/l/n/q/x/y:t=ue
~b/f/j/m/p/q/w/x/y/0:o=uo
~b/f/n/m/p/w/0:p=un
sh/ch/zh/g/h/k:y=uai
~b/f/m/p/w/0:r=uan
sh/ch/zh/g/h/k:d=uang
l/n:v=v
~f/g/h/k/w/0:i=i
d/j/l/q/x:w=ia
b/d/j/l/n/m/p/q/t/x:x=ie
b/j/l/n/m/p/q/x/y:n=in
d/j/l/n/m/q/x:q=iu
b/d/j/l/n/m/p/q/t/x/y:y=ing
b/d/j/l/n/m/p/q/t/x:m=ian
b/d/j/l/n/m/p/q/t/x:c=iao
j/l/n/q/x:d=iang
j/q/x:s=iong
~j/q/r/x:a=a
~f/j/q/r/x/y:l=ai
~j/q/x:j=an
~f/j/q/w/x:k=ao
~j/q/x:h=ang
~b/f/j/p/q/w/x:e=e
~ch/zh/c/j/q/r/s/t/x/y:z=ei
~d/j/l/q/t/x/y:f=en
~j/q/x/y/0:g=eng
b/f/m/p/w/y/0:o=o
~b/j/q/w/x:b=ou
~sh/b/f/j/m/p/q/w/x/0:s=ong
i=ch
u=sh
v=zh
a:a=a
o:o=o
e:e=e
a:n=an
e:r=er
e:n=en
o:u=ou
a:o=ao
a:i=ai
e:i=ei
a:h=ang
e:g=eng
上述表达式中,为了使表示式不会过于冗长,针对不同的韵母,我取了正向选择写法和反向选择写法中较短的那种。
使用*语法可以有效简化上述表达式:
*u:u=u
*ua:w=ua
*ui:v=ui
*ue:t=ue
*uo:o=uo
*un:p=un
*uai:y=uai
*uan:r=uan
*uang:d=uang
*v:v=v
*i:i=i
*ia:w=ia
*ie:x=ie
*in:n=in
*iu:q=iu
*ing:y=ing
*ian:m=ian
*iao:c=iao
*iang:d=iang
*iong:s=iong
*a:a=a
*ai/0:l=ai
*an/0:j=an
*ao/0:k=ao
*ang/0:h=ang
*e/0:e=e
*ei/0:z=ei
*en/0:f=en
*eng/0:g=eng
*o/0:o=o
*ou/0:b=ou
*ong:s=ong
i=ch
u=sh
v=zh
a:n=an
e:r=er
e:n=en
o:u=ou
a:o=ao
a:i=ai
e:i=ei
a:h=ang
e:g=eng
显然,使用*语法的形式,表达式在整体上可读性更好啦!
针对拼音替入的优化
有了上述的配置,我们就可以在键盘上健步如飞地使用自然码进行输入了。但是如果我们现在想使用拼音替入,会发现由于带条件的前置路径的作用,输入的键位总是会受声母条件的影响被解释成韵母,这导致我们无法对已输入的声母进行替换。
为了岁寒输入法上的拼音替入功能能够更好地工作,还需要添加一些额外的表达式。这里我添加了每个键位的下滑路径为相应声母的无条件前置路径:
b4=b
c4=c
d4=d
f4=f
g4=g
h4=h
j4=j
k4=k
l4=l
n4=n
m4=m
p4=p
q4=q
r4=r
s4=s
t4=t
w4=w
x4=x
y4=y
z4=z
04=0
i4/i44=ch
u4/u44=sh
v4/v44=zh
其中,i44
、u44
和v44
是为了防止用户滑行过头,导致误输入而加入的防御性操作,其他表达式之所以不加,是因为用户就算滑行过头,输入法会使用键位自带的键义作为输入,由此得到结果是一样的。
如此一来,当我们进行替入时,只要从相应的键位上下滑,就可以精准地替换掉想替换的声母。至于为什么要使用下滑而不是其他方向的路径,原因很简单,就是只有下滑这个方向是每个明键位都有的方向:最上面一行键位无法上滑,最左边的一列键位无法左滑,最右边的一列键位无法右滑,而最下面一行的键位由于还垫着一行操作键,有一行暗键位可供触发,下滑对于任何明键位都可以触发。
自此,我们已经能在岁寒拼音键盘上使用任意双拼输入方案了,并且能够愉快地使用既有的拼音替入、笔画筛选、截断优先、历史回溯等岁寒的特色功能。什么?你说岁寒拼音键盘用双拼不香!那用什么香?要用qwerty键盘才香!我告诉你!我,岁寒,就是死,就是从这里跳下去,也不会往岁寒输入法里加入……
给你你想要的真香
既然我们已经走上了复刻双拼方案的这条路,那固执与岁寒拼音的键位布局,让键位布局的因素影响到复刻最后的体验,是没有道理的,因此,我在引入带条件的前置路径的同时,还引入了qwerty布局。
打开方法:前往设置->输入设置,在开关量中找到使用Qwerty键盘,将其勾选即实现开启。
但需要说明的是,在qwerty布局下,岁寒的拼音滑行方案是无法工作的。所以单纯打开qwerty布局并不能正常使用,需要配合具体的前置路径方案。
岁寒对qwerty布局的改进
想要让前置路径功能能够在qwerty布局上良好的工作,完全照搬常规的qwerty布局也不行,一些必要的调整不能少。这里,我将qwerty布局放到了3*10的规整布局中,效果如下:
由于部分双拼方案会使用到分号键,本来我是因为把这个键位也加上的。但我认为在已经有浮出子键盘的前提下,放一个分号键到键盘中几乎没有意义,于是我换了一个键值。眼睛尖的小朋友可能已经发现了,就是在一般放分号键的位置上居然放了一个0
。不错,这里的0
正是数字0
本0
,但这个键位不是用于输入数字0
的,而是作为零声母的输入键。
岁寒输入法的爱好者可能才知道,在岁寒输入法中有一个叫虚声母的概念。这个概念是这样的,岁寒输入法认为所有汉语拼音都有声母,当然,官方制定的汉语拼音方案并非如此,所以小朋友们在考试的时候千万不要把这个观点写到试卷上,否则被老师打板子可别找我,事先声明啊。好,我们继续,既然岁寒输入法认为所有汉语拼音都有声母,原本就有声母的拼音还好说,那些实际上没有声母的拼音怎么办?岁寒输入法假设这些拼音里存在一个起到声母作用,但无法被输入的声母,这个声母我称作虚声母。有了这个假设,岁寒输入法便能做到省略声母。
现在,岁寒输入法干脆就将这个虚声母实例化,用0
来代表这个声母。也就是说,虚声母现在是可以被输入的,为了以示区别,我借用了双拼方案里的说法,将其称为零声母。如果觉得不是很好理解,我举个例子,在岁寒输入法中,an
不是an这个拼音的完整输入,而是被看作一个省略声母的输入,an的完整输入应该是0an
。如今的零声母和此前的虚声母本质上没有区别,只不过以前的虚声母不可以输入,现在的零声母可以。而且在某些双拼方案中,我们确实需要一个能够表示零声母的符号。
助记功能
不少双拼用户在实际使用中少不了助记功能,岁寒输入法对此也提供了支持。比如我就在自然码的方案加入了该方案的相关助记:
助记功能的具体配置方法相对简单,这里就不赘述了,需要的朋友请参考岁寒配置文件的使用方法。
这个双拼自定义方案的配置我也发布到了在线主题上,感兴趣的朋友前去下载。