Rime 输入方案设计书Rime with SchemataRime 输入方案创作者的第一本参考书 ※ 佛振 chen.sst@gmail.com 修订于 2013年5月4日 Rime 输入方案作者的一点主张:选用适合自己的输入法。 来折腾 Rime 的同学,我只能说,您对输入法的追求比较与衆不同啦! 当然,因爲您理想中的输入方式千奇百怪、也许从没有人那样玩过,所以不可能在那种勾勾选选的介面上做得出来;需要亲手来创作—— Rime 输入方案! Rime 是啥Rime 不是一种输入法。是从各种常见键盘输入法中提炼出来的抽象的输入算法框架。因爲 Rime 涵盖了大多数输入法的「共性」,所以在不同的设定下,Rime 可化身爲不同的输入法用来打字。 Rime 输入方案又是啥要让 Rime 实现某种具体输入法的功能,就需要一些数据来描述这种输入法以何种形式工作。即,定义该输入法的「个性」。 如「汉语拼音」、「注音」、「仓颉码」、「五笔字型」,这些方法可凭藉 Rime 提供的通用设施、给定不同的工作参数来实作。以本文介绍的规格写成一套套的配方,就是 Rime 输入方案。 爲啥这麽繁?一键就搞掂,必然选项少,功能单一。不好玩。 输入法程序一写两三年,也许还不够火候;花两三个小时来读入门书,已是输入法专业速成班。 准备开工Rime 是跨平臺的输入法软件,Rime 输入方案可通用于以下发行版:
取得适合你系统的最新版 Rime 输入法,印一份《指南书》,准备开工了! Rime with Text Files文本爲王。 Rime 中所有文本文档,均要求以 UTF-8 编码,并建议使用 UNIX 换行符(LF)。 鑑于一些文本编辑器会爲 UTF-8 编码的文件添加 BOM 标记,爲防止误将该字符溷入文中, # Rime default settings
# Rime schema: My First Cool Schema
# Rime dictionary: Lingua Latina
也可继续以注释行写下方案简介、码表来源、製作者、修订记录等信息,再切入正文。 必知必会Rime 输入法中,多用扩展名爲「 请访问 http:/// 瞭解 YAML 文档格式。 Rime 输入方案亦会用到「正则表达式」实现一些高级功能。 输入方案设计者需要掌握这份文档所描述的 Perl 正则表达式语法: http://www./doc/libs/1_49_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html Rime 中的数据文件分佈及作用除程序文件以外,Rime 还包括多种数据文件。 共享资料夹
用户资料夹
共享资料夹包含预设输入方案的源文件。 在「部署 Rime」操作时,将用到这里的输入方案源文件、并结合用户定製的内容来编译预设输入方案。 用户资料夹则包含爲用户准备的内容,如:
编译输入方案所产出的二进制文件:
记录用户写作习惯的文件:
以及用户自己设定的:
注:以上标有 ※ 号的文件,包含用户资料,您在清理文件时要注意备份! 详解输入方案方案定义一套输入方案,通常包含「方案定义」和「词典」文件。 方案定义,命名爲 文档中需要有这样一组方案描述:
首先来爲方案命名。 然后——重点是——要定一个在整个 Rime 输入法中唯一的「方案标识」,即 方案如做升级,通过版本号( 版本号——以「.」分隔的整数(或文字)构成的字符串。 如下都是版本号常见的形式: '1' # 最好加引号表明是字符串!
'1.0' # 最好加引号表明是字符串!
'0.9.8'
'0.9.8.custom.86427531' # 这种形式是经过用户自定义的版本;自动生成
然而,若对方案的升级会导致原有的用户输入习惯无法在新的方案中继续使用,则需要换个新的方案标识。 比如【仓颉五代】之于【仓颉三代】、【五笔98】之于【五笔86】,其实已是互不兼容的输入法。
以上 除方案描述外,方案定义文件中还包含各种功能设定,控制着输入法引擎的工作方式。 输入法引擎与功能组件论 Rime 输入法的工作流程:
这里要点是,有会话的概念:多窗口、多线操作嘛,你懂得的,同时与好几位 MM 聊天时,有无有好几组会话。 Rime 可以在不同会话里使用不同输入方案。因爲有「方案选单」。 再论输入引擎的工作流程:
响应各种按键、产生各类结果的工作,由不同的功能组件分担。 好,看代码: # luna_pinyin.schema.yaml
# ...
engine: # 输入引擎设定,即挂接组件的「处方」
processors: # 一、这批组件处理各类按键消息
- ascii_composer # ※ 处理西文模式及中西文切换
- recognizer # ※ 与 matcher 搭配,处理符合特定规则的输入码,如网址、反查等
- key_binder # ※ 在特定条件下将按键绑定到其他按键,如重定义逗号、句号爲候选翻页键
- speller # ※ 拼写处理器,接受字符按键,编辑输入码
- punctuator # ※ 句读处理器,将单个字符按键直接映射爲文字符号
- selector # ※ 选字处理器,处理数字选字键、上、下候选定位、换页键
- navigator # ※ 处理输入栏内的光标移动键
- express_editor # ※ 编辑器,处理空格、回车上屏、回退键等
segmentors: # 二、这批组件识别不同内容类型,将输入码分段
- ascii_segmentor # ※ 标识西文段落
- matcher # ※ 标识符合特定规则的段落,如网址、反查等
- abc_segmentor # ※ 标识常规的文字段落
- punct_segmentor # ※ 标识句读段落
- fallback_segmentor # ※ 标识其他未标识段落
translators: # 三、这批组件翻译特定类型的编码段爲一组候选文字
- echo_translator # ※ 没有其他候选字时,回显输入码
- punct_translator # ※ 转换标点符号
- script_translator # ※ 脚本翻译器,用于拼音等基于音节表的输入方案
- reverse_lookup_translator # ※ 反查翻译器,用另一种编码方案查码
filters: # 四、这批组件过滤翻译的结果
- simplifier # ※ 繁简转换
- uniquifier # ※ 过滤重複的候选字,有可能来自繁简转换
注:除示例代码中引用的组件外,尚有
输入引擎把完成具体功能的逻辑拆分爲可装卸、组合的部件。 理解 Processors输入引擎,作爲整体来看,以按键消息爲输入,输出包括三部分:
那麽第一类功能组件 按键消息依次送往列表中的
优先级依照 虽然看起来
理解 SegmentorsRime 可将文字、数字、符号等不同内容连续输入,此时需要识别不同格式的输入码、将输入码分成若干段分而治之。 举例来说,【朙月拼音】中,输入码 那些标籤是初步划分后判定的类型,也可能有一个编码段贴多个标籤的情况。下一个阶段中, 理解 Translators顾名思义,
双目如探针般进入内存查看,发现翻译的结果呈现这种形式: input | tag | translations
------+--------+-------------------------------------
2012 | number | [ '2012' ], [ '二〇一二' ]
nian | abc | [ '年', '念', '唸',... ], [ 'nian' ]
\ | punct | [ '、', '\' ]
输入串划分爲多个代码段、每段代码又可具有多组翻译结果;取各代码段的首选结果连接起来,就是预备上屏的文字「 且将以上所示的数据称爲「作文」。这是一篇未定稿(未搞定)的作文,输入法介面此时显示预备上屏的文字「 有两款主力
拼音、注音、方言拼音,皆是以固定音节表上的拼写排列组合的方式产生编码,故适用罗马字分析法。 如果以码表方式来写拼音输入方案,是怎样的效果呢?虽然仍可完成输入,但无法完全实现支持简拼、模煳拼音、使用隔音符号的动态调频、智能语句等有用的特性。 反之,以罗马字方式使用码表输入法,则无法实现定长编码顶字上屏、按编码规则构词等功能。在 Rime 各发行版预设输入方案中,有一款「速成」输入方案,即是以 概括起来,这是两种构造新编码的方式:罗马字式输入方案以一组固定的基本音节码创造新的组合而构词,而码表式输入方案则以一定码长爲限创造新的编码映射而构词。 理解 Filters上一步已经收集到各个代码段的翻译结果,当输入法需要在介面呈现一页候选项时,就从最末一个代码段的结果集中挑选、直至取够方案中设定的页最大候选数。 每从结果集选出一条字词、会经过一组
码表与词典词典是 他往往与同名输入方案配套使用,如拼音的词典以拼音码查字,仓颉的词典以仓颉码查字。但也可以由若干编码属于同一系统的输入方案共用,如各种双拼方案,都使用和拼音同样的词典,于是不仅復用了码表数据,也可共享用户以任一款此系列方案录入的自造词(仍以码表中的形式即全拼编码记录)。 Rime 的词典文件,命名爲
解释:
码表,定义了输入法中编码与文字的对应关係。 码表位于词典文件中 YAML 结束标记之后的部份。 # 单字
你 ni
我 wo
的 de 99%
的 di 1%
地 de 10%
地 di 90%
目 mu
好 hao
# 词组
你我
你的
我的
我的天
天地 tian di
好天
好好地
目的 mu di
目的地 mu di di
※注意: 不要 从网页複製以上代码到实作的词典文件!因爲网页里製表符被转换成空格从而不符合 Rime 词典要求的格式。 码表部份,除了以上格式的编码行,还可以包含空行(不含任何字符)及注释行(行首爲 # 符号)。 以製表符(Tab)分隔的第一个字段是所定义的文字,可以是单字或词组; 第二个字段是与文字对应的编码;若该编码由多个「音节」组成,音节之间以空格分开; 可选地、第三个字段是设定该字词权重的频度值(非负整数),或相对于预设权值的百分比(浮点数%)。 词组如果满足以下条件,则可以省去编码字段:
这种条件下,词组的编码可由单字编码的组合推导出来。 反之,则有必要给出词组的编码以消除自动注音的不确定性(例:天地)。 当含有多音字的词组缺少编码字段时,自动注音程序会利用权重百分比高于5%的读音进行组合、生成全部可能的注音,如: 「好好地」在编译时自动注音爲「 设定项速查手册雪斋的文档 全面而详细解释了输入方案及词典中各设定项的含义及用法。 八股文Rime 有一份名爲【八股文】的预设词彙表。 多数输入方案需要用到一些标准白话文中的通用词彙。爲免重複在每份码表中包含这些词彙,减少输入方案维护成本,Rime 提供了一份预设词彙表及自动编码(注音)的设施。 创作输入方案时,如果希望完全控制词彙表的内容而不採用【八股文】中的词组,只须直接将词彙编入码表即可。 否则,在词典文件中设定 Rime预设输入方案正是利用这份词彙表及自动注音工具,在不牺牲效果及可维护性的前提下、使词典文件压缩到最小的行数。 【八股文】包含从 CC-CEDICT、新酷音等开源项目中整理出来的约二十三万条词彙,其用字及词频数据针对传统汉字做过调整。因此基于这份词彙表产生的输入结果,比较接近以传统汉字行文的实际用法。 爲了充分利用【八股文】提供的词彙,自定义的词典应保证单字码表收录了符合 opencc 字形标准的常用字。特别注意,该标准对以下几组异体字的取捨,【八股文】将这些字(包括词组及字频)统一到左边一列的字形。
请务必在码表中收录左列的单字;并建议收全右列的单字。 输入法词典往往对下列几组字不做严格区分,opencc 则倾向于细分异体字的不同用法。 喫 吃
霉 霉
攷 考
覈 核
请儘量在码表中收全以上单字。 部署过程中,未能完成自动注音的字、词会以警告形式出现在日誌文件里。如果所报告的字爲生僻字、您可以忽略他;如果警告中大量出现某个常用字,那麽应该注意到码表里缺失了该字的注音。 编译输入方案将写好的输入方案佈署到 Rime 输入法的过程,称爲「编译」: 爲查询效率故,输入法工作时不直接加载文本格式的词典源文件,而要在编译过程中,爲输入方案生成专爲高速查询设计的「.bin」文件。 编译时程序做以下几件事:
佈署 Rime初次安装 Rime 输入法,无有任何输入方案和用户设定。因此安装的最后一个步骤即是把发行版预设的输入方案和设定文件佈署到 Rime 爲该用户创建的工作目录,至此 Rime 纔成爲一部可以发动的输入引擎。 此后无论是修改已有方案的设定,或是添加了新的输入方案,都需要「重新佈署」成功后方可使用户的新设定作用于 Rime 输入法。 〔★〕重新佈署的方法是:
定製指南Rime 输入方案,将 Rime 输入法的设定整理成完善的、可分发的形式。 当用户需要对 Rime 中的各种设定做小幅的调节,最直接、但不完全正确的做法是:编辑用户资料夹中那些 .yaml 文档。 这一方法有弊端:
因此,对于随 Rime 发行的设定档及预设输入方案,推荐的定製方法是: 创建一个文件名的主体部份(「.」之前)与要定製的文件相同、次级扩展名(位于「.yaml」之前)写作
以下这些例子,另载于一篇[[《定製指南》|CustomizationGuide]],其中所介绍的知识和技巧,复盖了不少本文未讨论的细节,想必对于创作新的输入方案会有啓发。
重要!创作了新的输入方案,最后一步就是在「方案选单」里啓用他。 拼写运算应该算是 Rime 输入法最主要的独创技术。 概括来说就是将方案中的编码通过规则映射到一组全新的拼写形式! 拼写运算能用来:
给力吗? [[★这里|SpellingAlgebra]] 有介绍拼写运算的专题文章。 综合演练如果你安装好了Rime却不会玩,就一步一步跟我学吧。 本系列课程每个步骤的完整代码可由此查阅: https://github.com/lotem/rimeime/tree/master/doc/tutorial 【一】破空中出鞘Hello, Rime!第一个例子,总是最简单的(也是最傻的)。 # Rime schema
# encoding: utf-8
#
# 最简单的 Rime 输入方案
#
schema:
schema_id: hello # 注意此ID与文件名里 .schema.yaml 之前的部分相同
name: 大家好 # 将在〔方案选单〕中显示
version: '1' # 这是文字类型而非整数或小数,如 '1.2.3'
起首几行是注释。而后只有一组必要的方案描述信息。 这一课主要练习建立格式正确的YAML文档。
缩进表示设定项所属的层次。在他处引用到此文档中的设定项,可分别以 我现在把写好的方案文档命名爲 然后,啓用他。有些版本会有「方案选单设定」这个介面,在那里勾选【大家好】这个方案即可。若无有设定介面,则按照上文《定製方案选单》一节来做。 好运!我已建立了一款名爲【大家好】的新方案!虽然他没有实现任何效果、按键仍会像无有输入法一样直接输出西文。 开始改装爲了处理字符按键、生成输入码,本例向输入引擎添加两个功能组件。 以下代码仍是ID爲
你会发现,该输入法只是收集了键盘上的可打印字符,并于按下空格、回车键时令输入码上屏。 现在就好似写输入法程序的过程中,将将取得一小点成果,还有很多逻辑未实现。不同的是,在Rime输入方案里写一行代码,顶 Rime 开发者所写的上百上千行。因此我可以很快地组合各种逻辑组件、搭建出心里想的输入法。 创建候选项第二版的【大家好】将键盘上所有字符都记入输入码,这对整句输入有用,但是时下流行输入法只处理编码字符、其他字符直接上屏的形式。爲了对编码字符做出区分,以下改用 # ...
schema:
# ...
version: '3'
engine:
processors:
- speller # 把字母追加到编码串
- express_editor # 空格确认当前输入、其他字符直接上屏
segmentors:
- fallback_segmentor
再接着,创建一个最简单的候选项——把编码串本身作爲一个选项。故而会提供这个选项的新组件名叫
至此,【大家好】看上去与一个真正的输入法形似啦。只是还不会打出「大家好」哇? 编写词典那就写一部词典,码表中设定以 # Rime dictionary
# encoding: utf-8
---
name: hello
version: '1'
sort: original
...
大家好 hello
再见 bye
再会 bye
※注意: 不要 从网页複製以上代码到实作的词典文件!因爲网页里製表符被转换成空格从而不符合 Rime 词典要求的格式。 同时修改方案定义:
工作流程是这样的:
现在可以敲 实现选字及换页等一下。 记得 这时敲空格键,就会打出「再见」;那麽怎样打出「再会」呢? 大家首先想到的方法,是:打完编码 增加一部 schema:
# ...
version: '5'
engine:
processors:
- speller
- selector # 选字、换页
- navigator # 移动插入点
- express_editor
# ...
接下来向词典添加一组重码,以检验换页的效果:
默认每页候选数爲5,输入 输出中文标点schema:
# ...
version: '6'
engine:
processors:
- speller
- punctuator # 处理符号按键
- selector
- navigator
- express_editor
segmentors:
- abc_segmentor
- punct_segmentor # 划界,与前后方的其他编码区分开
- fallback_segmentor
translators:
- echo_translator
- punct_translator # 转换
- table_translator
# ...
punctuator: # 设定符号表,这里直接导入预设的
import_preset: default
这次的修改,要注意
如今再敲 用符号键换页早先流行用 Rime 提供了
逗号键向前换页的条件之所以比句号键严格,是爲了「,」仍可在未进行换页的情况下顶字上屏。 经过 最终的代码如下:
【二】修炼之道与【大家好】这个方案不同。以下一组示例,主要演示如何活用符号键盘,以及罗马字转写式输入。 改造键盘莫以爲【大家好】是最最简单的输入方案。码表式输入法,不如「键盘式」输入法来得简单明快! 用 # Rime schema
# encoding: utf-8
schema:
schema_id: numbers
name: 数字之道
version: '1'
engine:
processors:
- punctuator
- express_editor
segmentors:
- punct_segmentor
translators:
- punct_translator
punctuator:
half_shape: &symtable
'1' : 一
'2' : 二
'3' : 三
'4' : 四
'5' : 五
'6' : 六
'7' : 七
'8' : 八
'9' : 九
'0' : 〇
's' : 十
'b' : 百
'q' : 千
'w' : 万
'n' : 年
'y' : [ 月, 元, 亿 ]
'r' : 日
'x' : 星期
'j' : 角
'f' : 分
'z' : [ 之, 整 ]
'd' : 第
'h' : 号
'.' : 点
full_shape: *symtable
对,所谓「键盘输入法」,就是按键和字直接对应的输入方式。 这次,不再写 鸹!原来 在符号表代码里,用对应的ASCII字符表示按键。记得这些按键字符要放在引号里面,YAML 纔能够正确解析喔。 示例代码表演了两种符号的映射方式:一对一及一对多。一对多者,按键后符号不会立即上屏,而是……嘿嘿,自己体验吧 关于代码里 这是YAML的一种语法, Rime 里的符号有「全角」、「半角」两种状态。本方案里暂不作区分,教 大写数字键盘灵机一动,不如利用「全、半角」模式来区分「大、小写」中文数字!
先来定义状态开关: 这样一改,再打开「方案选单」,方案「数字之道」底下就会多出个「小写→大写」的选项,每选定一次、状态随之反转一次。 接着给 punctuator:
half_shape:
'1' : 一
'2' : 二
'3' : 三
'4' : 四
'5' : 五
'6' : 六
'7' : 七
'8' : 八
'9' : 九
'0' : 〇
's' : 十
'b' : 百
'q' : 千
'w' : 万
'n' : 年
'y' : [ 月, 元, 亿 ]
'r' : 日
'x' : 星期
'j' : 角
'f' : 分
'z' : [ 之, 整 ]
'd' : 第
'h' : 号
'.' : 点
full_shape:
'1' : 壹
'2' : 贰
'3' : 参
'4' : 肆
'5' : 伍
'6' : 陆
'7' : 柒
'8' : 捌
'9' : 玖
'0' : 零
's' : 拾
'b' : 佰
'q' : 仟
'w' : 万
'n' : 年
'y' : [ 月, 圆, 亿 ]
'r' : 日
'x' : 星期
'j' : 角
'f' : 分
'z' : [ 之, 整 ]
'd' : 第
'h' : 号
'.' : 点
哈,调出选单切换一下大小写,输出的字全变样!酷。 但是要去选单切换,总不如按下
于是在「小写」态,只要按 用了几下,发现一处小小的不满意:敲 这反映出两个问题。一是 # ...
engine:
processors:
- punctuator
- selector # 加在这里
- express_editor
# ...
因爲要让 好。二一个问题还在:无法用数字序号选字。爲解决这个冲突,改用閒置的字母键来选字:
完工。 罗马字之道毕竟,键盘上只有47个字符按键、94个编码字符,对付百十个字还管使。可要输入上千个常用汉字,嫌键盘式输入的编码空间太小,必得採用多字符编码。 罗马字,以拉丁字母的特定排列作爲汉语音节的转写形式。一个音节代表一组同音字,再由音节拼写组合成词、句。 凡此单字(音节)编码自然连用而生词、句的输入法,皆可用 现在来把【数字之道】改成拼音→中文数字的变换。 schema:
schema_id: numbers
name: 数字之道
version: '3'
engine:
processors:
- speller
- punctuator
- selector
- express_editor
segmentors:
- abc_segmentor
- punct_segmentor
translators:
- punct_translator
- script_translator
translator:
dictionary: numbers
punctuator:
half_shape: &symtable
'!' : 壹
'@' : 贰
'#' : 参
'$' : [ 肆, ¥, '$', '€', '£' ]
'%' : [ 伍, 百分之 ]
'^' : 陆
'&' : 柒
'*' : 捌
'(' : 玖
')' : 零
'S' : 拾
'B' : 佰
'Q' : 仟
'W' : 万
'N' : 年
'Y' : [ 月, 圆, 亿 ]
'R' : 日
'X' : 星期
'J' : 角
'F' : 分
'Z' : [ 之, 整 ]
'D' : 第
'H' : 号
'.' : 点
full_shape: *symtable
符号表里,把小写字母、数字键都空出来了。小写字母用来拼音,数字键用来选重。重点是本次用了 编製词典:
※注意: 不要 从网页複製以上代码到实作的词典文件!因爲网页里製表符被转换成空格从而不符合 Rime 词典要求的格式。 ※注意: 常用编辑器如VS editor以及Notepad++等软体遇见*.yaml档案时会预设禁止tab(ascii hex code 09)的使用,而将使用者键入的tab按键转换成两个空白(ascii hex code 20 20)。请一定要使用製表符来进行词典文件的编辑。 码表里给出了一个「示例」规格的小字集。其中包含几组重码字。 要诀 要诀 使用【八股文】,要注意码表所用的字形是否与该词彙表一致。八股文的词彙及词频统计都遵照 opencc 繁体字形标准。 如果缺少单字的编码定义,自然也无法导入某些词彙。所以本方案只会导入这个数字「小字集」上的词彙。 用拼写运算定义简码如今有了一款专门输入数字的拼音输入法。比一比昇阳拼音、朙月拼音和地球拼音,还有哪里不一样? 很快我发现敲 原来 现在我要用 Rime 独门绝活「拼写运算」来定义一种「音序查字法」。令 「汉语拼音」里还有三个双字母的声符, 添加拼写运算规则: schema:
# ...
version: '4'
#...
speller:
algebra:
- 'abbrev/^([a-z]).+$/$1/'
- 'abbrev/^([zcs]h).+$/$1/'
如此 Rime 便知,除了码表里那些拼音,还有若干简码也是行得通的拼写形式。再输入 现在有无有悟到,罗马字转写式输入法与码表式输入法理念上的不同? 哈,做中了。试试看 却好像不是我要的「四是四,十是十,十四是十四,四十是四十」…… 好办。如果某些词彙在方案里很重要,【八股文】又未收录,那麽,请添加至码表:
善哉。演示完毕。当然休想就此把 Rime 全盘掌握了。一本《指南书》,若能让读者入门,我止说「善哉〜」 再往后,就只有多读代码,纔能见识到各种新颖、有趣的玩法。 【三】最高武艺〔警告〕最后这部戏,对智力、技术功底的要求不一般。如果读不下去,不要怪我、不要怀疑自己的智商! 即使跳过本节书也无妨,只是不可忽略了下文《关于调试》这一节!(重要哇……) 请检查是否:
设计一款【智能ABC双拼】输入方案做练习! # Rime schema
# encoding: utf-8
schema:
schema_id: double_pinyin_abc # 专有的方案标识
name: 智能ABC双拼
version: '0.9'
author:
- 佛振 <chen.sst@gmail.com>
description: |
朙月拼音,兼容智能ABC双拼方案。
switches:
- name: ascii_mode
reset: 0
states: [ 中文, 西文 ]
- name: full_shape
states: [ 半角, 全角 ]
- name: simplification
states: [ 汉字, 汉字 ]
engine:
processors:
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
segmentors:
- ascii_segmentor
- matcher
- abc_segmentor
- punct_segmentor
- fallback_segmentor
translators:
- echo_translator
- punct_translator
- script_translator
- reverse_lookup_translator
filters:
- simplifier
- uniquifier
speller:
alphabet: zyxwvutsrqponmlkjihgfedcba # 呃,倒背字母表完全是个人喜好
delimiter: ' '' # 隔音符号用「'」;第一位的空白用来自动插入到音节边界处
algebra: # 拼写运算规则,这个纔是实现双拼方案的重点。写法有很多种,当然也可以把四百多个音节码一条一条地列举
- erase/^xx$/ # 码表中有几个拼音不明的字,编码成xx了,消灭他
- derive/^([jqxy])u$/$1v/
- xform/^zh/A/ # 替换声母键,用大写以防与原有的字母溷淆
- xform/^ch/E/
- xform/^sh/V/
- xform/^([aoe].*)$/O$1/ # 添上固定的零声母o,先标记爲大写O
- xform/ei$/Q/ # 替换韵母键
- xform/ian$/W/ # ※2
- xform/er$|iu$/R/ # 对应两种韵母的;音节er现在变爲OR了
- xform/[iu]ang$/T/ # ※1
- xform/ing$/Y/
- xform/uo$/O/
- xform/uan$/P/ # ※3
- xform/i?ong$/S/
- xform/[iu]a$/D/
- xform/en$/F/
- xform/eng$/G/
- xform/ang$/H/ # 检查一下在此之前是否已转换过了带介音的ang;好,※1处有了
- xform/an$/J/ # 如果※2、※3还无有出现在上文中,应该把他们提到本行之前
- xform/iao$/Z/ # 对——像这样让iao提前出场
- xform/ao$/K/
- xform/in$|uai$/C/ # 让uai提前出场
- xform/ai$/L/
- xform/ie$/X/
- xform/ou$/B/
- xform/un$/N/
- xform/[uv]e$|ui$/M/
- xlit/QWERTYOPASDFGHJKLZXCVBNM/qwertyopasdfghjklzxcvbnm/ # 最后把双拼码全部变小写
translator:
dictionary: luna_pinyin # 与【朙月拼音】共用词典
prism: double_pinyin_abc # prism 要以本输入方案的名称来命名,以免把朙月拼音的拼写映射表复盖掉
preedit_format: # 这段代码用来将输入的双拼码反转爲全拼显示;待见双拼码的可以把这段拿掉
- xform/o(\w)/0$1/ # 零声母先改爲0,以方便后面的转换
- xform/(\w)q/$1ei/ # 双拼第二码转换爲韵母
- xform/(\w)n/$1un/ # 提前转换双拼码 n 和 g,因爲转换后的拼音里就快要出现这两个字母了,那时将难以分辨出双拼码
- xform/(\w)g/$1eng/ # 当然也可以採取事先将双拼码变爲大写的办法来与转换过的拼音做区分,可谁让我是高手呢
- xform/(\w)w/$1ian/
- xform/([dtnljqx])r/$1iu/ # 对应多种韵母的双拼码,按搭配的声母做区分(最好别用排除式如 [^o]r 容易出状况)
- xform/0r/0er/ # 另一种情况,注意先不消除0,以防后面把e当作声母转换爲ch
- xform/([nljqx])t/$1iang/
- xform/(\w)t/$1uang/ # 上一行已经把对应到 iang 的双拼码 t 消灭,于是这里不用再列举相配的声母
- xform/(\w)y/$1ing/
- xform/([dtnlgkhaevrzcs])o/$1uo/
- xform/(\w)p/$1uan/
- xform/([jqx])s/$1iong/
- xform/(\w)s/$1ong/
- xform/([gkhaevrzcs])d/$1ua/
- xform/(\w)d/$1ia/
- xform/(\w)f/$1en/
- xform/(\w)h/$1ang/
- xform/(\w)j/$1an/
- xform/(\w)k/$1ao/ # 默默检查:双拼码 o 已经转换过了
- xform/(\w)l/$1ai/
- xform/(\w)z/$1iao/
- xform/(\w)x/$1ie/
- xform/(\w)b/$1ou/
- xform/([nl])m/$1ve/
- xform/([jqxy])m/$1ue/
- xform/(\w)m/$1ui/
- 'xform/(^|[ '])a/$1zh/' # 復原声母,音节开始处的双拼字母a改写爲zh;其他位置的才真正是a
- 'xform/(^|[ '])e/$1ch/'
- 'xform/(^|[ '])v/$1sh/'
- xform/0(\w)/$1/ # 好了,现在可以把零声母拿掉啦
- xform/([nljqxy])v/$1ü/ # 这样纔是汉语拼音 :-)
reverse_lookup:
dictionary: cangjie5
prefix: '`'
tips: 〔仓颉〕
preedit_format:
- 'xlit|abcdefghijklmnopqrstuvwxyz|日月金木水火土竹戈十大中一弓人心手口尸廿山女田难卜符|'
comment_format:
- xform/([nl])v/$1ü/
punctuator:
import_preset: default
key_binder:
import_preset: default
recognizer:
import_preset: default
patterns:
reverse_lookup: '`[a-z]*$'
完毕。 这是一道大题。通过改造拼写法而创作出新的输入方案。 【四】标准库如果需要製作完全属于自己的输入方案,少不了要瞭解 Rime 的标准库。此时,请客倌品读《Rime方案製作详解》。更多新意,就在你的笔下! 关于调试如此複杂的输入方案,很可能需要反复调试方可达到想要的结果。 请于试验时及时查看日誌中是否包含错误信息。日誌文件位于:
按照日誌的级别分爲 INFO / 信息、WARNING / 警告、ERROR / 错误。 没有任何错误信息,就是不好使,有可能是码表本身的问题,比如把码表中文字和编码两列弄颠倒了——Rime 等你输入由汉字组成的编码,然而键盘没有可能做到这一点(否则也不再需要输入法了)。 后续有计划爲输入方案创作者开发名爲「拼写运算调试器」的工具,能够较直观地看到每一步拼写运算的结果。有助于定义双拼这样大量使用拼写运算的方案。 东风破「东风破早梅,向暖一枝开。」 构想在 Rime 输入软件完善后,能够连结汉字字形、音韵、输入法爱好者的共同兴趣,形成稳定的使用者社羣,搭建一个分享知识的平臺。 【东风破】,定义爲配置管理器及 Rime 输入方案仓库,是广大 Rime 用家分享配置和输入方案的平臺。 Rime 是一款强调个性的输入法。 Rime 不要定义输入法应当是哪个样、而要定义输入法可以玩出哪些花样。 Rime 不可能通过预设更多的输入方案来满足玩家的需求;真正的玩家一定有一般人想不到的高招。 未来一定会有,【东风破】(注:现已投入运行),让用家轻鬆地找到最新、最酷、最适合自己的 Rime 输入方案。 |
|