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

三国志人名漢字の見直し

フォント以外のダウンロード、のところにスクリプトを置きました。これ使って、あらためて三国志の人名漢字を探し直します。

だいたい抜き出すまで

Category:三国志の登場人物 - Wikipedia
三国志演義の人物の一覧 - Wikipedia


まず、wikipediaの上記のページから、文字を抜き出します。
正確に絞り込む必要は無いわけです。多少、平仮名や英数字が混じっても、あとで消せます。
見出しなども含めて選択し、Ctrl+Cでコピー。テキストファイルに貼り付け。
三国志の登場人物」のほうは、ページの切り替えを忘れないように注意して。

テキストファイルを分割せず、一つのテキストにすべてまとめて貼り付けてしまいます。順番もぐちゃぐちゃで構いません。
UTF8,LF形式でセーブしてから、シェルスクリプトを動かしてる環境に持っていきます。

異体字とかが無いなら、「grep -o . | sort | uniq」でいけそうではありますが、今回は自作のスクリプト使ってやります。
テキストファイルを「Text/」に入れるか、「result.txt」に貼り付けて、スクリプトを起動。

  • 2 w Text/ -> code_
  • 5 w Code/ -> .txt

と実行します。いったん文字コードの一覧リストに変換して、それから文字に戻すと、すべての文字を1文字ずつ抜き出せます。この状態で、

(),01245:Taelmpt、。「」あいうえおかがきくけこさしすせそたちてとなにのはひふへほまめもゆよらりるれろをイウカキクコゴジスチテペホモュヨリワン・ー一丁万三上下不丕世丘丞中丹主乂之乗九乱乾二于交亥亨享京亮人仁仇仙代令以仲任伉伊伍伏休会伝伯伷佐何佗侯俄俊信修俶倅倉倫倹偃偉傅傑傕備僉儀儁儒優儼兀允元充先光児党全兪公典冀内冏冑冷凌処凱出刁列別利到則前剛劉力劭勃勇勗勝勤勲勳化匡区卑卓協南単卜卞即原厥厳去参友双叔叙叡句史司吉同后向君含吾呂呉周呼和咨咸哀員唐商啓喃善喜喬嗣嘉嘏嘿図固国圃土圭均坦垕基堂堅堪場塞壁士声壱壹壽夏夔外大太夫奇奉奎奐奕奚奢奮女妃妹妻妾姓姚姜姫威娘娥婁媯嫂嬰子孔存孚孟孫宇守安宋完宏宓宗官定宜宝宣宮容寄密寓寔寧審寬寵寿封射将尉尋導小少尚就尹居屈屏山岐岑岱峻崇崔嵆嵩嶷川州左巨巴巽巾布帝師帯帰常干平幹広度庶康廉廖廙廚延建弁弋式弘張弼彊当彝彤彦彧彪彬彭彰徇後徐循微徳徴徹徽必志忙応忠思性恂恕恢恩恪恭恵悌悦悼惇惲意愚愷慈慎慕慮慶憲懌懐懿戈戎成戯戴才払扶承抗押招拠拯挙授揚援摩撰操據攀攄攴攸放政敏敞敦敬数整敷文斉斌斐料方於施旋旌族既日旨旻昂昇昌明昏昕星春昭是昱昶昺時晃晊晋晏晙晞普景暁暠暹曁曄曠曹曼曽月服朔朗望朝木末本朱朶李杜来東松林果柏柔柯柳栄根桂桓梁梅棗棘植楊楙楚楨業楷楼楽樊権横橋機檀次欣欽款歆正武歧歩歴段殷毅毌母毒毓比毖毗毛氏民永汜江汪沈沖沙沛沢沮河治泄泉泌法波泥泰洞洪洽浄浩浪浮海涼淑淩淮淯淳淵清済渉渙渠温游渾満準滕演漢潁潘潜濤濬濮炎炳烈烏焉無焦然焼煕煥煨熈熊熙燕燮燿爨爰爽版牙牛牧物特牽狐猛献獄獲玄玉王玠玩玹珝珩珪班球理琦琨琪琬琮琰琳瑁瑋瑒瑛瑜瑞瑤瑩瑾璆璋璜璝璠璣璩環璿瓊瓘瓚甄甘生甫甯田由申甸留畢略畯異當畿疆疇疑登白皇皎皓盛盧目直真眭督睿瞻矩矯石碩碭磐磾示礼祀祕祖祗祚祜祝祥祺禁禄禅禎福禕禧禰禹秀秉秋种秦称程稠穆突竇立章童竦端竺笮策管節範簒簡籍粋粛粲糜紀約紆純紘紞素索紫累紳紹経結統続綜綝維綱綸綽緄緒緝練縉績繆繇繡纂羅羊羌羕羣群羨義羲羽翊習翔翕翟翥翩翻翼耀老考耽耿聘聳聶肇育胡胤能脂脩膺臧臨臻興舉舎舒舞良艶艾芒芝芮花芳苗苞苟英茂范茲荀荊荼莒華萇萊萌著葛董蒙蒯蓋蔡蔣蕃蕤蕭薄薛藐蘇蘭虎虔虚虞蛾蜀蝉融行衍術衛衜衡衢表袁袞袤裔裕裴褒褚襲西覇覈覧覬観角解触訓許評詡詢詩詮詳誕語諒諝諶諷諸謀謐謖謙謝譔譙譚譲讃谷豊象豢豨豫豹貂貞貢貴買費賀賁資賈賛賞賢質赤起超越趙路蹇蹋車軌軫軻軽輅載輔輯輿辛辟辺迷通造逢連進逵遂遇道達遜遠遮遵選遺遼邈邑邕邠邢那邯邴邵郃郗郝郤郭都鄂鄒鄧鄭鄰鄲酈配醜里重金鈞鉄銀銅鋒鍾鑑鑠長閔関閻闓闞闡阜阮阯防阿陟陰陳陵陶陸陽隆階随隗隠雄雅雍雕雝離雲雷震霊霍霖靖静靚靳鞏韋韓韙韜音韶項順頌頎預頓頼顒顔顕顗顧颺飛馗香馥馬馮駱駿騎騫騭騰驤骨高髦鬱魏魚魯魴鮑鮮鳳鴦鵠鵬鹿麴麹黄默黙齢龍龐龔()𩇕


wikipediaのページを丸ごとコピーしたので、三国志以外の文字も混じってます。ここから、明らかに関係のない文字を削ります。
このままテキストエディタで削っても構いませんが、せっかくなのでコードに変換します。

  • 2 w Text/ -> code_
  • 9 w Code/ -> 拡張Code
----省略----
12517	0	30e5	012520	0	30e8	012522	0	30ea	012527	0	30ef	012531	0	30f3	012539	0	30fb	012540	0	30fc	019968	0	4e00	019969	0	4e01	019975	0	4e07	019977	0	4e09	0	三
----省略----


1文字を1行にして、読める文字を追加しました。漢字とカタカナの境目のあたりを抜粋。

テキストエディタで直接に編集して、明らかに関係ない文字を削除します。行単位削除で。
Unicodeのコード番号を指定して抜き出すスクリプトも書けますが、これは手作業のほうが楽です。
削除すると1078行になりました。
次に、このコードを文字に戻します。直接に「cut -f 5」してもいいですが、

  • 5 w Code/ -> .txt

と実行し、このスクリプトの機能で文字に戻します。これは文字を残してるのではなく、数字から文字を作り直してます。


一丁万三上下不丕世丘丞中丹主乂之乗九乱乾二于交亥亨享京亮人仁仇仙代令以仲任伉伊伍伏休会伝伯伷佐何佗侯俄俊信修俶倅倉倫倹偃偉傅傑傕備僉儀儁儒優儼兀允元充先光児党全兪公典冀内冏冑冷凌処凱出刁列別利到則前剛劉力劭勃勇勗勝勤勲勳化匡区卑卓協南単卜卞即原厥厳去参友双叔叙叡句史司吉同后向君含吾呂呉周呼和咨咸哀員唐商啓喃善喜喬嗣嘉嘏嘿図固国圃土圭均坦垕基堂堅堪場塞壁士声壱壹壽夏夔外大太夫奇奉奎奐奕奚奢奮女妃妹妻妾姓姚姜姫威娘娥婁媯嫂嬰子孔存孚孟孫宇守安宋完宏宓宗官定宜宝宣宮容寄密寓寔寧審寬寵寿封射将尉尋導小少尚就尹居屈屏山岐岑岱峻崇崔嵆嵩嶷川州左巨巴巽巾布帝師帯帰常干平幹広度庶康廉廖廙廚延建弁弋式弘張弼彊当彝彤彦彧彪彬彭彰徇後徐循微徳徴徹徽必志忙応忠思性恂恕恢恩恪恭恵悌悦悼惇惲意愚愷慈慎慕慮慶憲懌懐懿戈戎成戯戴才払扶承抗押招拠拯挙授揚援摩撰操據攀攄攴攸放政敏敞敦敬数整敷文斉斌斐料方於施旋旌族既日旨旻昂昇昌明昏昕星春昭是昱昶昺時晃晊晋晏晙晞普景暁暠暹曁曄曠曹曼曽月服朔朗望朝木末本朱朶李杜来東松林果柏柔柯柳栄根桂桓梁梅棗棘植楊楙楚楨業楷楼楽樊権横橋機檀次欣欽款歆正武歧歩歴段殷毅毌母毒毓比毖毗毛氏民永汜江汪沈沖沙沛沢沮河治泄泉泌法波泥泰洞洪洽浄浩浪浮海涼淑淩淮淯淳淵清済渉渙渠温游渾満準滕演漢潁潘潜濤濬濮炎炳烈烏焉無焦然焼煕煥煨熈熊熙燕燮燿爨爰爽版牙牛牧物特牽狐猛献獄獲玄玉王玠玩玹珝珩珪班球理琦琨琪琬琮琰琳瑁瑋瑒瑛瑜瑞瑤瑩瑾璆璋璜璝璠璣璩環璿瓊瓘瓚甄甘生甫甯田由申甸留畢略畯異當畿疆疇疑登白皇皎皓盛盧目直真眭督睿瞻矩矯石碩碭磐磾示礼祀祕祖祗祚祜祝祥祺禁禄禅禎福禕禧禰禹秀秉秋种秦称程稠穆突竇立章童竦端竺笮策管節範簒簡籍粋粛粲糜紀約紆純紘紞素索紫累紳紹経結統続綜綝維綱綸綽緄緒緝練縉績繆繇繡纂羅羊羌羕羣群羨義羲羽翊習翔翕翟翥翩翻翼耀老考耽耿聘聳聶肇育胡胤能脂脩膺臧臨臻興舉舎舒舞良艶艾芒芝芮花芳苗苞苟英茂范茲荀荊荼莒華萇萊萌著葛董蒙蒯蓋蔡蔣蕃蕤蕭薄薛藐蘇蘭虎虔虚虞蛾蜀蝉融行衍術衛衜衡衢表袁袞袤裔裕裴褒褚襲西覇覈覧覬観角解触訓許評詡詢詩詮詳誕語諒諝諶諷諸謀謐謖謙謝譔譙譚譲讃谷豊象豢豨豫豹貂貞貢貴買費賀賁資賈賛賞賢質赤起超越趙路蹇蹋車軌軫軻軽輅載輔輯輿辛辟辺迷通造逢連進逵遂遇道達遜遠遮遵選遺遼邈邑邕邠邢那邯邴邵郃郗郝郤郭都鄂鄒鄧鄭鄰鄲酈配醜里重金鈞鉄銀銅鋒鍾鑑鑠長閔関閻闓闞闡阜阮阯防阿陟陰陳陵陶陸陽隆階随隗隠雄雅雍雕雝離雲雷震霊霍霖靖静靚靳鞏韋韓韙韜音韶項順頌頎預頓頼顒顔顕顗顧颺飛馗香馥馬馮駱駿騎騫騭騰驤骨高髦鬱魏魚魯魴鮑鮮鳳鴦鵠鵬鹿麴麹黄默黙齢龍龐龔𩇕



ここまでで、1078文字、IVSの異体字は無し。
上記には当然、三国志の人名漢字だけでなく、wikipediaの諸々が残ってます。
フォント作りのための文字リスト、という視点では、意味があるのは、たとえば「常用漢字以外の漢字はどれか?」とか、「シフトJISに無い漢字はどれか?」、などです。
1078文字はいったん保存して、この段階で「Text/」に置きます。その後にセットアップ。

  • 16 Text/ -> setup -> Code/
  • 17 Text/ -> setup -> Bit/

セットアップを再実行して、ファイルを再作成します。

難しい漢字を抜き出してみる

たとえば、1078文字と、「cp932すべての文字」とを比較すると、JISの第一水準と第二水準に入らない、Unicodeの漢字が抜き出せます。こうすることで、三国志と関係のない漢字も、ほぼ除外できるはず。

20279	0	4f37	020629	0	5095	020993	0	5201	022031	0	560f	022079	0	563f	022421	0	5795	022804	0	5914	023215	0	5aaf	023443	0	5b93	023878	0	5d46	024281	0	5ed9	024420	0	5f64	025860	0	6504	026170	0	663a	026186	0	664a	027462	0	6b46	027495	0	6b67	027596	0	6bcc	027607	0	6bd7	028137	0	6de9	028143	0	6def	029032	0	7168	029600	0	73a0	029625	0	73b9	029661	0	73dd	029673	0	73e9	029736	0	7428	029740	0	742c	029744	0	7430	029771	0	744b	029778	0	7452	029830	0	7486	029852	0	749c	029853	0	749d	029856	0	74a0	029859	0	74a3	029865	0	74a9	029887	0	74bf	029912	0	74d8	029914	0	74da	030509	0	772d	030893	0	78ad	030974	0	78fe	031068	0	795c	031125	0	7995	031181	0	79cd	031534	0	7b2e	032030	0	7d1e	032157	0	7d9d	032196	0	7dc4	032327	0	7e47	032353	0	7e61	032661	0	7f95	032735	0	7fdf	032741	0	7fe5	033454	0	82ae	033682	0	8392	033802	0	840a	033967	0	84af	034083	0	8523	034148	0	8564	034908	0	885c	035098	0	891a	035425	0	8a61	035549	0	8add	035668	0	8b54	035673	0	8b59	035944	0	8c68	036427	0	8e4b	037000	0	9088	037013	0	9095	037024	0	90a0	037026	0	90a2	037044	0	90b4	037059	0	90c3	037079	0	90d7	037085	0	90dd	037192	0	9148	038355	0	95d3	038366	0	95de	038621	0	96dd	038746	0	975a	038771	0	9773	038873	0	97d9	038926	0	980e	038994	0	9852	039098	0	98ba	039469	0	9a2d	040628	0	9eb4	040848	0	9f90	040852	0	9f94	0168405	0	291d5	0	𩇕

Wikipedia以外の資料も

JIS第3・第4水準漢字を用いる三国志人名リスト - yanok.net

テキストファイルを配布してくださってるんで、ありがたく使わせていただきます。
カンマ区切りでcutして、無関係な文字を削ってから「Text/」に置きます。
Wikipediaのと比較して、Wikipediaに無い漢字が以下7文字。

勖勛瑀翦艴蒋郄

Wikipediaだと、難しい漢字がカタカナで代用されてるものがあって、ページはあるのに三国志人名漢字は拾えない、ものもあるみたいです。
ひとつ気付いたのは「鮑勛(ほうくん)」。


三国志の人名漢字は、簡単に調べて分かる範囲では、あわせて1085文字、ということにしておきます。

cp932で分類してみる

『暖簾』に組み込んだ機能で、さらに細かく分けたのが以下です。文字を1文字ずつシフトJISに変換して、odコマンドで数字に変換。数字の範囲で分類し、定義リストを出力します。
フォント作りの視点からだと、「CP932に存在しない」の96文字と、あとは第二水準ですか。このあたりっすかね。大事なのは。

(注)下の定義リストは1085文字から作ってます。上の文字つきコードリストは1078文字からです。「CP932に存在しない」が4文字ズレてるのは、それが原因。

CP932に存在しない
(96,0)
伷傕刁勖嘏嘿垕夔媯宓嵆廙彤攄昺晊歆歧毌毗淩淯煨玠玹珝珩琨琬琰瑀瑋瑒璆璜璝璠璣璩璿瓘瓚眭碭磾祜禕种笮紞綝緄繇繡羕翟翥艴芮莒萊蒯蔣蕤衜褚詡諝譔譙豨蹋邈邕邠邢邴郃郄郗郝酈闓闞雝靚靳韙頎顒颺騭麴龐龔𩇕
第一水準漢字(889f-88fc)
(20,0)
阿哀逢安以伊偉威尉意異維遺亥育一壱允員胤
第一水準漢字(8940-89fc)
(50,0)
陰隠宇烏羽雲叡嬰栄永瑛英衛悦越延援演炎燕艶遠於応押横王黄沖恩温音下化何嘉夏果河花華俄牙蛾賀雅会解恢懐
第一水準漢字(8a40-8afc)
(36,0)
海階凱外蓋獲角郭楽葛乾堪完官干幹桓款漢環甘管簡観鑑関韓含玩顔喜基奇寄岐既
第一水準漢字(8b40-8bfc)
(62,0)
機帰毅畿紀徽貴起軌騎儀宜戯疑義吉丘仇休宮球牛去居巨拠挙渠虚許魚亨享京協匡喬彊恭橋矯興暁業玉勤均巾欣欽禁金銀九句区矩愚虞寓遇屈
第一水準漢字(8c40-8cfc)
(49,0)
熊勲君訓群啓圭珪恵慶敬景桂経荊軽傑結月倹堅建憲権牽献謙賢顕元原厳玄呼固狐胡虎顧伍呉吾後語交侯光公向
第一水準漢字(8d40-8dfc)
(41,0)
后孔宏広康弘抗昂晃江洪浩皇紘綱考行衡貢項香高剛麹国鵠獄骨昏根佐左沙塞妻才済載朔策索
第一水準漢字(8e40-8efc)
(44,0)
三参山纂讃賛司史嗣士子師志思施旨氏紫脂詩資児慈時次治示鹿式竺質芝舎射謝車遮主守朱儒寿授周
第一水準漢字(8f40-8ffc)
(71,0)
宗就州修秀秋習襲輯醜充戎柔重叔淑祝粛出術俊峻春駿循淳準純遵順処庶緒諸叙女徐恕勝商妾将小少尚彰承招昇昌昭松渉焼焦祥称章紹蒋詳象賞鍾上丞乗場常浄譲
第一水準漢字(9040-90fc)
(55,0)
植触信審慎晋申真秦紳辛進震人仁尋図粋遂随瑞崇嵩数世是姓性成政整星正清生盛声西静斉石籍績赤碩節蝉仙先宣川撰泉潜旋
第一水準漢字(9140-91fc)
(38,0)
羨詮選鮮前善然全禅曽楚祖素蘇双倉爽宋操曹綜造則即族続存孫遜太岱帯戴泰代大卓沢
第一水準漢字(9240-92fc)
(32,0)
達巽谷丹単坦端耽誕檀段中仲忠著丁寵張徴朝超長直沈陳通貞定帝悌禎程
第一水準漢字(9340-93fc)
(42,0)
鄭泥徹鉄典伝田杜登都度土党唐悼東当統到董陶騰同堂導洞童道銅徳特督毒突惇敦頓那内南二日
第一水準漢字(9440-94fc)
(31,0)
任禰寧之能巴覇波馬配梅買伯柏白薄肇版班範磐蕃卑妃斐比泌費飛備微
第一水準漢字(9540-95fc)
(47,0)
彦弼必畢姫彪表評豹苗彬斌敏不夫布扶敷普浮阜武舞封伏服福淵払物奮文平壁別辺弁圃歩甫輔慕母奉宝放方
第一水準漢字(9640-96fc)
(40,0)
法芳萌褒豊鋒鳳鵬忙望謀防卜牧穆勃本翻摩妹末万満密民無娘明迷茂孟毛猛蒙木黙目約靖柳
第一水準漢字(9740-97fc)
(62,0)
優勇友由裕邑雄融輿預容揚楊羊耀陽翼羅来頼雷乱蘭覧利李理里離陸立略劉留隆龍慮亮凌料梁涼良諒遼陵力倫林琳臨累令冷礼霊齢歴列烈廉練
第一水準漢字(9840-9872)
(11,0)
連呂魯路婁朗楼浪老禄和
第二水準漢字(989f-98fc)
(11,0)
丕乂豫舒于伉佗倅俶偃傅
第二水準漢字(9940-99fc)
(19,0)
僉儁儼兀兪冀冏冑劭勗勳甸卞厥簒曼燮咸咨
第二水準漢字(9a40-9afc)
(8,0)
喃壹壽奕奐奎奚奢
第二水準漢字(9b40-9bfc)
(11,0)
姜姚娥嫂孚寔尹屏岑崔嶷
第二水準漢字(9c40-9cfc)
(11,0)
廖廚彝弋彭徇恪恂懌懿戈
第二水準漢字(9d40-9dfc)
(14,0)
拯據舉攀攴攸敞旌旻昶晏晞曁暹
第二水準漢字(9e40-9efc)
(9,0)
曄曠朶柯棘棗楷楙樊
第二水準漢字(9f40-9ffc)
(16,0)
鬱殷毓汪沛泄沮衍洽濤淮渙渾游滕潁
第二水準漢字(e040-e0fc)
(18,0)
潘濬濮炳焉煥煕熈燿爨爰默瑁瑜瑩瑾璋瓊
第二水準漢字(e140-e1fc)
(9,0)
甄當疆疇皎皓盧睿瞻
第二水準漢字(e240-e2fc)
(14,0)
祀祗祚祕祺禧禹秉稠竇竦粲糜紆
第二水準漢字(e340-e3fc)
(18,0)
綽綸緝縉繆羌羣羲翊翕翔翦翩耿聘聳聶脩
第二水準漢字(e440-e4fc)
(13,0)
膺臧臻艾芒苟范苞茲荀荼萇蔡
第二水準漢字(e540-e5fc)
(11,0)
蕭薛藐虔蜀衢袁袞袤裔裴
第二水準漢字(e640-e6fc)
(12,0)
覈覬詢諷謖謐譚豢貂賈賁趙
第二水準漢字(e740-e7fc)
(14,0)
蹇軻軫輅辟逵邯邵郤鄂鄒鄲鄰鈞
第二水準漢字(e840-e8fc)
(17,0)
鑠閔閻闡阮阯陟隗雍霍雕霖鞏韋韜韶頌
第二水準漢字(e940-e9fc)
(11,0)
馗馥馮駱騫驤髦魏魴鮑鴦
第二水準漢字(ea40-eaa4)
(2,0)
瑤熙
IBM拡張漢字
(20,0)
昱勛甯寬彧惲愷昕晙暠楨毖汜琦琪琮畯諶鄧顗

TTEditで作れる漢字と作れない漢字

1085文字のすべてがTTEditで問題なく作れるわけではなくて、デフォルトで作成するフォントファイルでは作れない文字が、けっこうあります。
TTEditで「文字一覧テキストファイルを出力」機能を使ってテキストファイルを出力し、これと比較することで分かります。

傕媯廙昺毗璝磾种羕𩇕

TTEditだと、以上の10文字が、作れない文字、ってことになってます。デフォルトでは。