「同字異位體」的漢字顯示方法


作者:Владимир Лесной

Lastest update : 2014/11/07


漢字構字式五十型當中,一共有80個可能的位置,一共需要80個位置編碼,也就是每個字基本上可以有80種變化,同一個字可以採用80種顯示方式,如果需要的話,還可以增加。

全部的可能位置如下列表:

位置編號
字素序列
構形編號
位置
P00 clf-01 C01 A
P01 clf-03 C03 A
P02 clf-03 C03 B
P03 clf-05 C05 A
P04 clf-05 C05 B
P05 clf-06 C06 A
P06 clf-06 C06 B
P07 clf-07 C07 A
P08 clf-07 C07 B
P09 clf-07 C07 C
P10 clf-09 C09 2
P11 clf-11 C11 A
P12 clf-11 C11 B
P13 clf-12 C12 A
P14 clf-12 C12 B
P15 clf-13 C13 A
P16 clf-13 C13 B
P17 clf-13 C13 C
P18 clf-15 C15 A
P19 clf-15 C15 B
P20 clf-16 C16 A
P21 clf-16 C16 B
P22 clf-17 C17 A
P23 clf-17 C17 B
P24 clf-17 C17 C
P25 clf-19 C19 A
P26 clf-19 C19 B
P27 clf-19 C19 C
P28 clf-19 C19 D
P29 clf-21 C21 A
P30 clf-21 C21 B
P31 clf-21 C21 C
P32 clf-21 C21 D
P33 clf-21 C21 E
P34 clf-23 C23 A
P35 clf-23 C23 B
P36 clf-24 C24 A
P37 clf-24 C24 B
P38 clf-25 C25 A
P39 clf-25 C25 A
P40 clf-26 C26 A
P41 clf-26 C26 B
P42 clf-27 C27 A
P43 clf-27 C27 B
P44 clf-28 C28 A
P45 clf-28 C28 B
P46 clf-29 C29 2
P47 clf-29 C29 B
P48 clf-30 C30 A
P49 clf-30 C30 B
P50 clf-31 C31 A
P51 clf-31 C31 B
P52 clf-31 C31 C
P53 clf-33 C33 A
P54 clf-33 C33 B
P55 clf-33 C33 C
P56 clf-35 C35 A
P57 clf-35 C35 B
P58 clf-35 C35 C
P59 clf-37 C37 A
P60 clf-37 C37 B
P61 clf-37 C37 A
P62 clf-39 C39 A
P63 clf-39 C39 B
P64 clf-39 C39 C
P65 clf-41 C41 A
P66 clf-41 C41 B
P67 clf-41 C41 C
P68 clf-43 C43 A
P69 clf-43 C43 B
P70 clf-43 C43 C
P71 clf-45 C45 A
P72 clf-45 C45 2
P73 clf-45 C45 C
P74 clf-47 C47 A
P75 clf-47 C47 B
P76 clf-47 C47 C
P77 clf-49 C49 A
P78 clf-49 C49 B
P79 clf-49 C49 C


一個「部件字體」可以擺在哪些位置,可以採用一組10位元組,共計80位元的資料封裝來記錄。 在變化最大的狀況下,12萬漢字每個字體都不同的極端條件下,需要1200000個位元組,大約1.15MB。 實際上,12萬漢字一般都只有幾百個位置組合狀態,在1000個組合狀態下,事實上也僅需要10000位元組, 大約是10KB的資料來記錄字體位置資訊。 而每個字的編碼都必須為4個位元組,12萬漢字共計約468KB,排序後使用RLE壓縮法,用以取得連續編號序列。

那麼使用這種方法的真實含意為何呢?

例如:「山」形,假設「山」可以擺在P00、P01、P02、P03、P10、P11、P13, 這幾個位置,而不會導致外形需要做重大改變,那麼「山」形的位置資訊即為P(0,1,2,3,10,11,13)。
同一個字,可以指定多個「部件字體」來處理不同位置下的字體顯示,這樣就可以完美解決異位字體的顯示問題。

位置序列
位置位元
所屬FID(Font ID)或CID(Character ID)
0,1,2,3,10,11,13 ... 0000 0000 0000 0001 0110 0000 1111 山
林
木
水
…
21 ... 0000 0010 0000 0000 0000 0000 0000 口
人
大
王
…
22,23,24 ... 0001 1100 0000 0000 0000 0000 0000 貝
日
火
生
…


「竝」兩邊字體不一樣,怎麼辦?

舉例而言,「竝」是由「左立」及「右立」所組成的,但是左「立」的位置資訊為P01,而右「立」的位置資訊為P02。 此時我們指定「立」字位於P01時使用「左立」部件字體,「立」字位於P02時使用「右立」部件字體, 這樣就完美輕鬆,使用極度簡單,完全直覺的辦法,解決掉困擾眾生的「同字異位體」的漢字顯示問題。

+ →
P01位置的「立」字體 + P02位置的「立」字體 → 竝
使用最直覺的辦法解決掉異位顯示問題。


實際技術上,怎樣達成呢?

同樣也是使用直覺的方法。

文字
漢字碼
位置編號
字型碼
顯示字型
立 1234 P01 3456
立 1234 P02 3457

「部件」的「位置資訊」,還有第二個重要性,便是某個「部件」或「字」,可以在哪些構形的哪個位置出現, 這在部件拆分編輯器進行編輯的時候,就可以自動產生某個字的「位置資訊」,並不需要額外增加特別設定。

使用這個技術,含意即為每個「漢字」都可以指定超過一種以上的顯示模式,這個技術基本上就是「自動的細節層次技術」。