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;