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


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

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

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

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