21.33. 如何造字?

造字的問題,目前筆者會的只有造點陣字而已。

首先,找到您要改的字型檔,在這邊假設是 kc15f.bdf,我只會改 BDF 格式的, 然後把點陣的格式嵌入該字型檔內。

以 '文' 為例,先得到他的 ENCODING:

# echo "文" | hexdump
0000000 e5a4 000a
0000003
# printf %d 0xa4e5
42213

以及他的 ucs-2:

# echo "文" | iconv -f big5 -t ucs-2 | hexdump
0000000 8765 0a00
0000004

在這邊以 (方方土) 為例,他的 big5 code 是 0x964f(38479),ucs-2 code 是 0x5803。

先找到 CHARS 13867,因為要加新字, 所以改成 CHARS 13868

然後到這個檔的最後,找最後一個 STARTCHAR 加一,在這邊是 STARTCHAR 13868 為最後一個,所以也加一, 然後將字塞最後,並在 ENDFONT 之前。

STARTCHAR 13869
ENCODING 38479
SWIDTH 31 0   
DWIDTH 16 0   
BBX 15 15 1 -3
BITMAP
1830  
1424  
FEFE  
2040   
3C78
2488
4488
5528
8A10
0180   
0110   
3FF8
0100
0104   
FFFE   
ENDCHAR

然後跟著以下的方式作來讓 X 認識您所造的字:

# cd /usr/X11R6/lib/X11/fonts/encodings/large/
# cp big5.eten-0.enc.gz big5.eten-0.enc.gz.bak
# gunzip big5.eten-0.enc.gz
# chmod 644 big5.eten-0.enc
# vim big5.eten-0.enc
0x964F  0x5803
# chmod 444 big5.eten-0.enc
# gzip big5.eten-0.enc
# cd /usr/X11R6/lib/X11/fonts/local
# fetch kc15f.bdf
# mkfontdir
# crxvt -fm -kc-fixed-medium-r-normal--16-160-72-72-c-160-big5-0
# perl -e 'print pack("CC", 0x96, 0x4F);'