初歩のシェルスクリプトで遊ぶ[ぬかみそフォントの制作サポート(4)]

29文字をさらに分類する


JIS2004で字形変更があった168文字に入っている160文字については、まぁ、今まで通り、だろうか。基本的には、経済産業省のPDFを参考にする。
JIS漢字コード表の改正について−報道発表−経済産業省

残りの29文字分、これらをさらに分類します。

8741	2225	15489	66612123	2F5B	7965	138320958	51DE	20300	1435221255	5307	20301	840421857	5561	20308	1439323532	5BEC	20302	843624734	609E	21558	1454125711	646F	20264	502026142	661E	20304	847626231	6677	16889	1460928746	704A	20306	1474429010	7152	21933	1476229794	7462	16977	856131028	7934	17014	1490431328	7A60	20310	1492632092	7D5C	17041	859234819	8803	20312	1510735711	8B7F	21074	8625	譿
36806	8FC6	18759	1518537733	9365	17168	1523838315	95AB	20313	1525838741	9755	20314	869639498	9A4A	22920	1531939725	9B2D	17205	1337263785	F929	20305	848964021	FA15	20307	854264032	FA20	21073	861264036	FA24	18760	863264064	FA40	21072	13369

ぱっと見て、半分くらいは見たことがある漢字なんですが、まずこれらのうち、WindowsシフトJIS、CP932に入るものと入らないものを分けます。

卑怯くさい真似をすると、Windowsの古めのテキストエディタUnicodeに対応していない「ANSI版」とかで開くと、こんな感じにCP932に入ってない漢字が消えちゃうんですが。
ANSIテキストエディタのは参考にするとして、そこそこ信用できそうな方法でやります。

$ cat ./OTEdit12-8_Uni_Pr6N_Pro_Char_diff189_29.csv | iconv -c -t cp932 | iconv -f cp932
8741	2225	15489	66612123	2F5B	7965	1383	
20958	51DE	20300	14352	
21255	5307	20301	840421857	5561	20308	14393	
23532	5BEC	20302	843624734	609E	21558	14541	
25711	646F	20264	502026142	661E	20304	847626231	6677	16889	14609	
28746	704A	20306	14744	
29010	7152	21933	14762	
29794	7462	16977	856131028	7934	17014	14904	
31328	7A60	20310	14926	
32092	7D5C	17041	859234819	8803	20312	15107	
35711	8B7F	21074	8625	譿
36806	8FC6	18759	15185	
37733	9365	17168	15238	
38315	95AB	20313	15258	
38741	9755	20314	869639498	9A4A	22920	15319	
39725	9B2D	17205	13372	
63785	F929	20305	848964021	FA15	20307	854264032	FA20	21073	861264036	FA24	18760	863264064	FA40	21072	13369	

いったんiconvでCP932に変換し、このときエラーが出たとき文字を捨てる「-c」を指定しておきます。さらにパイプでiconvに繋いで、再びutf-8に戻してやる。これでCP932に有る文字だけを残します。
「temp_cp932.csv」で保存。


Unicodeの文字が残っている「〜29.csv」と、Unicodeの文字を削った「temp_cp932.csv」とを、diffで比較して、欲しいところを抜き出します。

$ diff ./OTEdit12-8_Uni_Pr6N_Pro_Char_diff189_29.csv ./temp_cp932.csv | grep -e '^<' | cut -f 2- -d ' ' 
12123	2F5B	7965	138320958	51DE	20300	1435221857	5561	20308	1439324734	609E	21558	1454126231	6677	16889	1460928746	704A	20306	1474429010	7152	21933	1476231028	7934	17014	1490431328	7A60	20310	1492634819	8803	20312	1510736806	8FC6	18759	1518537733	9365	17168	1523838315	95AB	20313	1525839498	9A4A	22920	1531939725	9B2D	17205	1337264064	FA40	21072	13369

OTEdit12-8_Uni_Pr6N_Pro_Char_diff189_29_16.csv
以上16文字が、CP932には無い文字。

$ cat ./temp_cp932.csv | awk '{ if( $5 != "" ){ print $0 } }'
8741	2225	15489	66621255	5307	20301	840423532	5BEC	20302	843625711	646F	20264	502026142	661E	20304	847629794	7462	16977	856132092	7D5C	17041	859235711	8B7F	21074	8625	譿
38741	9755	20314	869663785	F929	20305	848964021	FA15	20307	854264032	FA20	21073	861264036	FA24	18760	8632

OTEdit12-8_Uni_Pr6N_Pro_Char_diff189_29_13.csv
13文字が、CP932に有る文字。

CP932のどこにある?

13文字は、第一水準だろうか。第二水準だろうか。IBM拡張漢字だろうか。
このくらいなら手作業でもよさそうだけど。スクリプトにしておけば使えるかもしれんので。

#!/bin/sh
# ===============================================================================
# ■ CP932の文字コードを追記する_ttedit_20210307_04.sh
# 
# 
# ・input 
# unicode(DEC)	unicode(HEX)	CID2004	CID90	文字
# 
# 
# 
# 8741	2225	15489	666	∥
# 21255	5307	20301	8404	匇
# 23532	5BEC	20302	8436	寬
# 25711	646F	20264	5020	摯
# 26142	661E	20304	8476	昞
# 29794	7462	16977	8561	瑢
# 32092	7D5C	17041	8592	絜
# 35711	8B7F	21074	8625	譿
# 38741	9755	20314	8696	靕
# 63785	F929	20305	8489	朗
# 64021	FA15	20307	8542	凞
# 64032	FA20	21073	8612	蘒
# 64036	FA24	18760	8632	﨤
# 
# 
# ===============================================================================


while read unicodeDec unicodeHex cID2004 cID90 CHAR ; do


cp932Code=`iconv -t cp932 << __STDIN | od -t x1 -A n -v | awk -e '{ print $1 $2 }'
${CHAR}
__STDIN`

printf '%s	%s	%s	%s	%s	%s\n' ${unicodeDec} ${unicodeHex} ${cID2004} ${cID90} ${CHAR} ${cp932Code}


done
$ cat ./OTEdit12-8_Uni_Pr6N_Pro_Char_diff189_29_13.csv | ./ttedit_20210307_04.sh |sort -k 6
8741	2225	15489	6668161
25711	646F	20264	5020	摯	9d95
21255	5307	20301	8404	匇	fa8a
23532	5BEC	20302	8436	寬	faaa
26142	661E	20304	8476	昞	fad3
63785	F929	20305	8489	朗	fae0
64021	FA15	20307	8542	凞	fb58
29794	7462	16977	8561	瑢	fb6b
32092	7D5C	17041	8592	絜	fb8b
64032	FA20	21073	8612	蘒	fb9f
35711	8B7F	21074	8625	譿	fbac
64036	FA24	18760	8632	﨤	fbb3
38741	9755	20314	8696	靕	fbf3


平行線「∥」が序盤の全角記号のところ。
「摯」が第二水準で、他はIBM拡張漢字、っすね。