Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用 substition 替换? #2

Open
NightFurySL2001 opened this issue Oct 1, 2020 · 2 comments
Open

使用 substition 替换? #2

NightFurySL2001 opened this issue Oct 1, 2020 · 2 comments
Labels
help wanted Extra attention is needed

Comments

@NightFurySL2001
Copy link

(以下为聊天摘录)
不错的字体,很实用。以下为另外一种方式的理论。

在单纯简转繁时,没有必要使用伪字图。两岸翻译差异有必要使用伪字图,但是如果是一个字在不同语境下,使用context可能会比较好点。建立一些Group,通过上下文检测来sub字,能够节省很多字形位置。上下文检测其实很常用,比如谚文拼接跟蒙文都是使用上下文检测替换。

例字:“发”的码位是“發”字,Group 1放[头 白 黑],Group 2是[发],当Group 2 前面是Group 1时,将“發”替换成“髮”。不同context可以在同一个sub table里面,优先级一样,如果不一样就可以拆分优先级。比如遇上“上头发的指令”,可能可以在sub group context前面加上ignore [上][头]之类的跳换。

@ayaka14732
Copy link
Owner

谢谢!我还是不太清楚怎样实现,特别是对应关系比较复杂的情况。另外,这种方法与「正向最长匹配」算法是不是等价的呢?

@NightFurySL2001
Copy link
Author

NightFurySL2001 commented Nov 20, 2020

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层进行,因此可以不用使用这么多伪字图。(当然,中台用词不同的词还是需要伪字图,这个逃不了)

@ayaka14732 ayaka14732 added the help wanted Extra attention is needed label Dec 22, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants