Learn how to create handwritten fonts with contextual alternates using FontCreator's OpenType features. 本教程介绍如何使用 FontCreator 的 OpenType 特性创建带有上下文替代的手写字体。
calt 功能进行这些替换。
为什么上下文替代很重要
文本形状引擎的挑战
a.start、a.between1、a.between2、a.end 分别用于起始、两个中间和结束版本。介绍 calt 功能
calt(上下文替代)功能是实现上下文替换的关键。我们将设置查找表来识别单词边界并替换适当的字形。功能代码分解:
###
# OpenType Layout feature definitions
# Format: OpenType Feature File Specification version 1.25.1
# Generated by: FontCreator
#
languagesystem latn dflt; # Latin default
@letter = [a-z];
@letter.start = [a.start];
@letter.between1 = [a.between1];
@letter.between2 = [a.between2];
@letter.end = [a.end];
lookup SingleSubstitutionEnd { # GSUB lookup type SingleSubstitution
sub @letter by @letter.end;
} SingleSubstitutionEnd;
lookup SingleSubstitutionBetween { # GSUB lookup type SingleSubstitution
sub @letter by @letter.between1;
} SingleSubstitutionBetween;
lookup SingleSubstitutionStart { # GSUB lookup type SingleSubstitution
sub @letter by @letter.start;
} SingleSubstitutionStart;
lookup SingleSubstitution1 { # GSUB lookup type SingleSubstitution
sub @letter.between1 by @letter.between2;
} SingleSubstitution1;
feature calt { # Contextual Alternates
lookup ChainingContextStart { # GSUB lookup type ChainingContext
ignore sub @letter.start @letter';
ignore sub @letter.between1 @letter';
ignore sub @letter @letter';
sub @letter' lookup SingleSubstitutionStart @letter;
} ChainingContextStart;
lookup ChainingContextBetween { # GSUB lookup type ChainingContext
sub @letter.start @letter' lookup SingleSubstitutionBetween @letter;
sub @letter.between1 @letter' lookup SingleSubstitutionBetween @letter;
} ChainingContextBetween;
lookup ChainingContextEnd { # GSUB lookup type ChainingContext
ignore sub @letter' @letter;
sub @letter.start @letter' lookup SingleSubstitutionEnd;
sub @letter.between1 @letter' lookup SingleSubstitutionEnd;
} ChainingContextEnd;
lookup ChainingContextRotate { # GSUB lookup type ChainingContext
sub @letter.between1 @letter.between1' lookup SingleSubstitution1;
} ChainingContextRotate;
} calt;