在Fontlab 8中实现ZWJ和NZWJ的方法及测试技术求助
在Fontlab 8中实现印度语Unicode字体的ZWJ与NZWJ
一、ZWJ(零宽度连接符)的特征代码实现
ZWJ(U+200D)用于强制触发原本不会自动生效的连字,适合手动指定连字的场景。你可以在字体的GSUB特征文件中,通过rlig(必需连字)或calt(上下文替代)特征编写规则:
feature rlig { lookup ZWJ_Forced_Ligatures { # 示例:印地语字符क/ख/ग后接ZWJ再跟त/थ/द时,替换为对应连字 substitute [क ख ग] <U+200D> [त थ द] -> [क्त ख्त ग्त]; # 根据字体支持的连字组合,扩展更多字符对即可 } ZWJ_Forced_Ligatures; } rlig;
如果需要处理带元音符号的复杂上下文,可改用calt特征搭配更具体的上下文规则。
二、NZWJ(非零宽度连接符)的特征代码实现
NZWJ(U+200C)用于打断自动连字,确保字符独立显示。最简洁的实现方式是在liga(标准连字)特征中添加ignore规则,跳过包含NZWJ的上下文:
feature liga { # 先定义默认自动连字规则 substitute k t -> kt_liga; substitute kh th -> khth_liga; # 添加ignore规则,忽略中间有NZWJ的字符对,不触发连字 ignore sub k <U+200C> t; ignore sub kh <U+200C> th; } liga;
若连字规则放在calt特征中,同样可以用ignore规则实现NZWJ的阻止逻辑。
三、测试方法
- Fontlab内置预览测试:打开Fontlab的「文本测试」面板,直接输入带ZWJ/NZWJ的字符串:
- ZWJ测试:输入
कत(即क + U+200D + त),检查是否显示为连字क्त - NZWJ测试:输入
कत(即क + U+200C + त),确认两个字符保持独立,未触发自动连字
- ZWJ测试:输入
- 系统字体验证:导出字体并安装到系统,用Word、LibreOffice Writer等软件输入测试文本,查看实际排版效果
- 特征调试器排查:使用Fontlab的「特征调试器」工具,加载测试文本后逐步执行特征规则,确认ZWJ/NZWJ的规则是否正确匹配执行
内容的提问来源于stack exchange,提问作者Rajbhai Sadhak
相关产品推荐
相关产品推荐

