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

CIDが異なる文字を抜き出したテキストファイルを作る

OpenTypeのProフォントとPr6Nフォントは文字数から違うわけですが、このうち

  • どっちにも入っている文字で
  • ひとつのUnicodeから、それぞれ別のCID番号にコピーされる

こういう文字を、昨日作ったものから抜き出します。

基本資料になるテキストファイルを定める

昨日つくったテキストファイルのうち、最後に作ったファイル、

$ cat ./join1-7_1-4.csv | ./ttedit_20210306.sh
32	0020	1	1	 
33	0021	2	2	!
34	0022	3	3	"
35	0023	4	4	#
36	0024	5	5	$
37	0025	6	6	%
38	0026	7	7	&
39	0027	8	8	'
40	0028	9	9	(
41	0029	10	10	)


サンプル文字を追加して、空のCIDに「0」を埋めたもの。これを基本資料とします。
「OTEdit12-8_Uni_Pr6N_Pro_Char.csv
で保存。

差分抽出と、ついでにミスがないか確認もする

さらに昨日、途中で寄り道して作っておいた、ProとPr6Nでコピーする先のCIDが異なるもののみのリスト。

$ diff  ./join1-7_1-4.csv ./join1-4_1-7.csv | grep -e '^<' | cut -f 2- -d ' '
2225 15489 666
2F5B 7965 1383
5026 7674 1863
50C5 7662 1735
5132 7798 3813
514E 13949 3136
51A4 7817 4228
51DE 20300 14352
5307 20301 8404
537F 7661 1698
53A9 20271 1243
53C9 20281 2085
53DB 7978 3412

この出力も、昨日のスクリプトで、そのまま処理できる出力形式なので、整形します。

$ diff ./join1-7_1-4.csv ./join1-4_1-7.csv | grep -e '^<' | cut -f 2- -d ' ' | ./ttedit_20210306.sh 
8741	2225	15489	66612123	2F5B	7965	138320518	5026	7674	186320677	50C5	7662	173520786	5132	7798	381320814	514E	13949	313620900	51A4	7817	422820958	51DE	20300	1435221255	5307	20301	840421375	537F	7661	1698
$ diff ./join1-7_1-4.csv ./join1-4_1-7.csv | grep -e '^<' | cut -f 2- -d ' ' | ./ttedit_20210306.sh 1>OTEdit12-8_Uni_Pr6N_Pro_Char_fromDiff.csv 

「fromDiff」で保存。

次に、先ほどの基本資料。全文字のサンプル文字つきリスト、「OTEdit12-8_Uni_Pr6N_Pro_Char.csv」。
この基本資料からも、差分を抽出してみる。
Proフォントに含まれない文字、(CID90の列が「0」)であり、なおかつ、ProフォントとPr6Nフォントとで、異なる数字のCIDになっている行、のみを抜き出せばいい。

#!/bin/sh
# ===============================================================================
# ■ CID90とCID2004の差分行を抽出する_ttedit_20210307_01.sh
# 
# あるUnicode_TrueTypeフォントからCID_OpenTypeFontにコピーするとき、
# コピー先がJIS90のPro(1-4)フォントとJIS2004のPr6N(1-7)フォントとで、
# 異なるCIDにコピーする行を抽出する。
# 
# CID1-4に含まれない文字は除外する。(CIDが「0」で埋められている行)
# 
# ・input
# unicode(DEC)	unicode(HEX)	CID2004	CID90	文字
# 
# 
# 空のCID90には、0が入っている必要がある
# 
# ===============================================================================


awk '{

# もしCID90の列が0ではなく、
# さらにCID2004とCID90が違う数字ならば、行を丸ごと出力する

if( $4 != "0" && $3 != $4 ){
print $0
}

}'
cat ./OTEdit12-8_Uni_Pr6N_Pro_Char.csv | ./ttedit_20210307_01.sh
8741	2225	15489	66612123	2F5B	7965	138320518	5026	7674	186320677	50C5	7662	173520786	5132	7798	381320814	514E	13949	313620900	51A4	7817	422820958	51DE	20300	1435221255	5307	20301	840421375	537F	7661	1698

良いようなので、保存。

$ cat ./OTEdit12-8_Uni_Pr6N_Pro_Char.csv | ./ttedit_20210307_01.sh 1>OTEdit12-8_Uni_Pr6N_Pro_Char_fromAwk.csv
  • まとめた資料から抜き出した「OTEdit12-8_Uni_Pr6N_Pro_Char_fromAwk.csv
  • 横道に逸れて作っておいた「OTEdit12-8_Uni_Pr6N_Pro_Char_fromDiff.csv

このふたつのファイルは、バイナリのレベルで同じファイルになるはず。

$ md5sum OTEdit12-8_*
05b49e0afc5afb83ffee397233ed829d  OTEdit12-8_Uni_Pr6N_Pro_Char.csv
ce4ee1eb29a3570c25e7ec6710642888  OTEdit12-8_Uni_Pr6N_Pro_Char_fromAwk.csv
ce4ee1eb29a3570c25e7ec6710642888  OTEdit12-8_Uni_Pr6N_Pro_Char_fromDiff.csv

いけました。

相違文字の表_189文字分

8741	2225	15489	66612123	2F5B	7965	138320518	5026	7674	186320677	50C5	7662	173520786	5132	7798	381320814	514E	13949	313620900	51A4	7817	422820958	51DE	20300	1435221255	5307	20301	840421375	537F	7661	169821417	53A9	20271	124321449	53C9	20281	208521467	53DB	7978	341221471	53DF	14111	433221676	54AC	20277	436821736	54E8	7703	244521857	5561	20308	1439321936	55B0	7664	177222066	5632	7821	443322082	5642	7642	124722092	564C	7721	274722208	56C0	14116	445422581	5835	7753	313823081	5A29	7791	362623532	5BEC	20302	843623633	5C51	7666	178123648	5C60	7754	314124055	5DF7	7679	198124214	5E96	7792	365724287	5EDF	7786	350624315	5EFB	13673	139824472	5F98	13538	479624509	5FBD	7658	160524674	6062	20269	140224734	609E	21558	1454124840	6108	7802	384825153	6241	7991	494325402	633A	20286	308625405	633D	7778	343225431	6357	7743	303325458	6372	7676	187625539	63C3	7975	283925711	646F	20264	502025722	647A	7713	263025776	64B0	7716	270925826	64E2	7749	310526023	65A7	20289	353826142	661E	20304	847626214	6666	7650	140826231	6677	16889	1460926451	6753	7695	231326454	6756	20282	252326775	6897	20279	199826978	6962	7768	326626991	696F	13460	240727018	698A	7686	213527028	6994	7812	405527084	69CC	7744	304427147	6A0B	7780	346527197	6A3D	7738	292427355	6ADB	7665	177927470	6B4E	13915	293327762	6C72	7966	166028139	6DEB	7637	121628322	6EA2	7635	120228346	6EBA	7750	311228451	6F23	7809	403428693	7015	7787	352028702	701E	7761	324428710	7026	7741	299528746	704A	20306	1474428760	7058	7767	326328792	7078	20270	166228796	707C	7696	231429001	7149	7810	403529006	714E	7718	271729010	7152	21933	1476229053	717D	7972	271829242	723A	20294	383229260	724C	7771	334129273	7259	7965	138329409	72E1	20278	562929495	7337	14074	386829794	7462	16977	856129969	7511	20284	205929973	7515	20267	570429990	7526	20283	570730140	75BC	20175	574130629	77A5	7790	361331028	7934	17014	1490431041	7941	7668	180531047	7947	7659	162631152	79B0	7769	329531204	79E4	7773	335931255	7A17	7782	347731328	7A60	20310	1492631359	7A7F	7973	2720	穿
31432	7AC8	20285	593731496	7B08	20263	166631605	7B75	20266	597631661	7BAD	7974	272131672	7BB8	7775	338431687	7BC7	7979	361931709	7BDD	7997	600131806	7C3E	20265	403631870	7C7E	20293	382231874	7C82	20272	179132092	7D5C	17041	859232747	7FEB	7657	156932752	7FF0	7656	154533137	8171	20275	625833151	817F	7728	287633368	8258	14196	631033426	8292	20292	632533446	82A6	7961	114233576	8328	7962	120533883	845B	7652	148134028	84EC	7794	367134065	8511	14013	361434109	853D	7789	360334217	85A9	7688	216534223	85AF	7701	242834295	85F7	7702	242934388	8654	20274	648134552	86F8	7733	290934563	8703	20296	651034645	8755	7709	254434819	8803	20312	1510734821	8805	20295	653735158	8956	7645	132035338	8A0A	13860	258835357	8A1D	20268	666235387	8A3B	7740	299035438	8A6E	7720	272935513	8AB9	13495	346035578	8AFA	7678	190935598	8B0E	7766	326235628	8B2C	7785	349535711	8B7F	21074	8625	譿
35961	8C79	20222	350536077	8CED	7756	314836795	8FBB	8267	305636799	8FBF	7735	2919	辿
36802	8FC2	7638	122836804	8FC4	7980	375036806	8FC6	18759	1518536838	8FE6	7647	137636887	9017	7711	259836889	9019	7772	335736898	9022	8266	113336924	903C	7783	348936929	9041	20287	325136956	905C	7726	284536961	9061	7722	276637165	912D	7748	310037195	914B	7698	236837340	91DC	20290	149437638	9306	7690	217037733	9365	17168	1523837749	9375	20276	189237786	939A	7745	304637971	9453	7801	384638315	95AB	20313	1525838553	9699	20273	185038741	9755	20314	869638769	9771	13624	715238788	9784	7653	148938808	9798	7708	250838829	97AD	20291	362839156	98F4	7634	115139173	9905	7799	381939180	990C	13650	125239184	9910	7970	219139255	9957	7968	172239361	99C1	20288	337939449	9A19	8003	724839498	9A4A	22920	1531939725	9B2D	17205	1337239851	9BAB	20280	217139894	9BD6	7689	216839983	9C2F	7636	120740018	9C52	7796	374240201	9D09	14272	736240288	9D60	7683	205463785	F929	20305	848964021	FA15	20307	854264032	FA20	21073	861264036	FA24	18760	863264064	FA40	21072	13369


「36795 8FBB 8267 3056 辻」と、なってますね。
行数、つまり相違文字数は、189文字でした。
もう一段階、絞り込んだほうがいいかな。


上に表示されてるcsvの表を、ブラウザ上から選択、コピーして、テキストファイルを作っても、バイナリレベルで同じファイルを作れることも確認しました。
Unicode文字の使えるテキストエディタで、改行コードをLFで保存する必要がありますが。