Open NightFurySL2001 opened 3 years ago
谢谢!我还是不太清楚怎样实现,特别是对应关系比较复杂的情况。另外,这种方法与「正向最长匹配」算法是不是等价的呢?
OpenType 替换功能可参考 http://opentypecookbook.com/;本计划可用请见:http://opentypecookbook.com/rules/#substitutions-and-positioning-based-on-context。
OpenType 替换功能的做法为从头开始往下进行,遇到可替换字后自动替换跳出循环。理论上只要你根据长度排序即可与正向最长匹配等价。 如:
feature ccmp{ //全替换
sub f f i by f_f_i
sub f i by f_i
} ccmp;
输入 office
会替换成 o(f_f_i)ce
而非 of(f_i)ce
同理,
feature ccmp{
sub [头 白 黑] 发' by 髮 //[头 白 黑]指任意一个字,仅替换带 ' 的字母
sub 发 by 發
} ccmp;
遇上 头发
会替换成 头髮
,发财
则变成 發财
。
以上功能英文查询为 contextual substitution。
当然,这样的简繁替换还是会有一定难度,但是因为仅仅是在glyph层进行,因此可以不用使用这么多伪字图。(当然,中台用词不同的词还是需要伪字图,这个逃不了)
(以下为聊天摘录) 不错的字体,很实用。以下为另外一种方式的理论。
在单纯简转繁时,没有必要使用伪字图。两岸翻译差异有必要使用伪字图,但是如果是一个字在不同语境下,使用context可能会比较好点。建立一些Group,通过上下文检测来sub字,能够节省很多字形位置。上下文检测其实很常用,比如谚文拼接跟蒙文都是使用上下文检测替换。
例字:“发”的码位是“發”字,Group 1放
[头 白 黑]
,Group 2是[发]
,当Group 2 前面是Group 1时,将“發”替换成“髮”。不同context可以在同一个sub table里面,优先级一样,如果不一样就可以拆分优先级。比如遇上“上头发的指令”,可能可以在sub group context前面加上ignore [上][头]
之类的跳换。