《 台語羅馬字 字骨客製化試驗,免家己畫字型 》
想空想縫欲來共線頂濟甲踢倒街 ê 羅馬字提來予台語用。現此時揣著ê 步數,看--起來是有法度攏總免閣畫圖,choa̋n(就按呢) 提原底有調號 ê 字骨,共調號抽--出來,kap(合)--入去欲加強 ê 字骨,閣用 .ttf/.otf 字骨標準內底 ê GSUB (字型替換/Glyph Substitution)內底 ê 規則來 ka 組合。
用上少時間、氣力、成本,就會使做到會用--得 ê 程度。當然若欲閣較媠,閣用軟體去調整遐个調號 ê 型,嘛加足簡單--矣。
下跤倒手圖是用 LessonOne-Bold.ttf ê 調號,鬥去另外一組
fontspace.com táng-ló͘ ê CloisterBlackLight-axjg.ttf ê 試驗結果。調號 ê 大細、位置攏會使閣 chhiâu,今仔日是先報告講,大方向按呢做是會通。
正手圖是整容進前。
幾工前阮嘛完全毋捌字骨按怎舞,毋過 AI 時代,有影有一寡進前家己無可能做,抑是愛開足濟性命才有法--得 ê 工課,煞有機會做。這改 Python khó͘(code) 參 改 字型替換 規則 ê feature file,攏是揣 Claude-3.5-Sonnet (
claude.ai/) 討--ê,伊嘛定定毋著,毋過共 khó͘ 走了 ê 錯誤貼予伊去改,幾擺仔來回,大部分攏會有一逝路通行。
現此時狀況,罔參考。閣紲咧研究。
字型替換 規則 ê feature file 大概生做按呢:
—-
# Language systems
languagesystem DFLT dflt;
languagesystem latn dflt;
# with GlphyrStudio glyph name alignment
# if i followed by combining vertical line above(COMBININGVERTICALLIN), replaced with dotlessi followed by combining vertical line above
# if imacron (precomposed, U 012B) is encountered, replace with dotlessi followed by combining macron (COMBININGMACRON)
# if ibreve (precomposed, U 012D) is encountered, replace with dotlessi followed by combining breve (COMBININGMACRON)
# if i followed by combining double acute (COMBININGDOUBLEACUTE), replaced with dotlessi followed by combining breve (COMBININGMACRON)
# Lookup 0: Single substitution for i to dotlessi
lookup SINGLE_SUB {
sub i by dotlessi;
} SINGLE_SUB;
# Lookup 1: Contextual substitution for i combining vertical line above
lookup CONTEXT_SUB_VERTICAL {
sub i' lookup SINGLE_SUB COMBININGVERTICALLIN;
} CONTEXT_SUB_VERTICAL;
# Lookup 2: Decomposition for precomposed imacron (ī)
lookup DECOMP_IMACRON {
sub imacron by dotlessi COMBININGMACRON;
} DECOMP_IMACRON;
# Lookup 3: Decomposition for precomposed ibreve (ĭ)
lookup DECOMP_IBREVE {
sub ibreve by dotlessi COMBININGMACRON;
} DECOMP_IBREVE;
# Lookup 4: Substitution for i combining double acute to dotlessi combining breve
# Lookup 4: Substitution for a sequence of i combining double acute to a sequence of dotlessi combining breve, not two single substitutions.
lookup DOUBLEACUTE_TO_BREVE_SUB {
sub COMBININGDOUBLEACUTE by COMBININGMACRON;
} DOUBLEACUTE_TO_BREVE_SUB;
lookup DOUBLEACUTE_TO_BREVE {
sub i' lookup SINGLE_SUB COMBININGDOUBLEACUTE' lookup DOUBLEACUTE_TO_BREVE_SUB;
} DOUBLEACUTE_TO_BREVE;
#lookups for A, a, U, u, E, e, O, o decompositions
lookup DECOMP_ACUTE {
# Acute combinations
sub Aacute by A acutecomb;
sub aacute by a acutecomb;
sub Uacute by U acutecomb;
sub uacute by u acutecomb;
sub Eacute by E acutecomb;
sub eacute by e acutecomb;
sub Oacute by O acutecomb;
sub oacute by o acutecomb;
} DECOMP_ACUTE;
lookup DECOMP_GRAVE {
# Grave combinations
sub Agrave by A gravecomb;
sub agrave by a gravecomb;
sub Ugrave by U gravecomb;
sub ugrave by u gravecomb;
sub Egrave by E gravecomb;
sub egrave by e gravecomb;
sub Ograve by O gravecomb;
sub ograve by o gravecomb;
} DECOMP_GRAVE;
傷長,làng(閬) 三 koe̍h(橛)……
# Feature definition for all substitutions
feature ccmp {
lookup CONTEXT_SUB_VERTICAL;
lookup DECOMP_IMACRON;
lookup DECOMP_IBREVE;
lookup DOUBLEACUTE_TO_BREVE;
lookup DECOMP_ACUTE;
lookup DECOMP_GRAVE;
lookup DECOMP_CIRCUMFLEX;
lookup DECOMP_MACRON;
lookup DECOMP_BREVE;
} ccmp;
—-