iT邦幫忙

2023 iThome 鐵人賽

DAY 15
1

昨天我們提到了 AFKDO 語言裡定義的八大種類 Lookup,不過,實務上並不一定會用到這些規則,主要還是第 1、4、6 類規則。在接下來的幾天,我們會透過一些例子來解釋如何使用它們。

LookupType 1: Single substitution

白話來說就是一換一,把一個字符換成另一個字符是 OpenType 裡面最常見的替換方式。在 AFKDO 裡,主要有三種寫法:

substitute <glyph> by <glyph>;            # format A
substitute <glyphclass> by <glyphclass>;  # format B

其中,substitute 標記可以簡寫為 sub,也請不要忘記在最後面加上分號。

舉例來說,我們想設計一套可以使用 smcp 特性的字型,所以在基本型之外,我們還額外設計了 A.sc - Z.sc 的小寫轉小型大寫字母,這裡的 sc 指的是 small caps,透過 . 串接,可以讓我們更清楚知道 A.scA 的子集。

我們可以使用 format A 的格式來窮舉一組 smcp 特性:

feature smcp {
    substitute a by A.sc;
    substitute b by B.sc;
    substitute c by C.sc;
    ... 中略 D ~ Y
    substitute z by Z.sc;
} smcp;   

直譯而言,就是在啟用 smcp 特性時,將小寫的 az 轉成 A.scZ.sc

或是透過昨天介紹的範圍列舉 [ <start> - <end> ] 的 format B,簡單的寫成:

feature smcp {
    substitute [a - z] by [A.sc - Z.sc];
} smcp;

或是額外設定兩組 class,這樣的好處是在其他地方可以重複調用 @Lowers@SmallCaps

@Lowers = [a - z];
@SmallCaps = [A.sc - Z.sc];

feature smcp {
    substitute @Lowers by @SmallCaps;
} smcp;

三者的表達方式都是等價的。

有興趣的可以類推前幾天提到的 smcp, c2cp, swsh, salt, ss##,其實都是額外設計一格字符,再把原本的轉成我們指定要的。

LookupType 2: Multiple substitution

白話來說就是一換多,不過對我們熟悉的文字來說都蠻少會用的,基礎語法為:

substitute <glyph> by <glyph sequence>;

liga 來說,假設我們想讓使用者反向解開設定好的連字,便可以使用:

substitute f_f_i by f f i;

或是把 & 這個符號,還原成原本的 Et

substitute ampersand to E t;

LookupType 3: Alternate substitution

其實也是...蠻少用的,通常用於 trad feature 這種,可以讓使用者在輸入簡體字或日文新字型後,從多個字符裡面手動選擇繁體字或是舊字型。

基礎語法為:

substitute <glyph> from <glyphclass>;

上一篇
DAY 14|OpenType 標記語言:AFDKO
下一篇
DAY 16|AFKDO (2):LookupType 4
系列文
一起成為新世紀文字藝術師:深入玩轉 Unicode 和 OpenType30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言