初歩のシェルスクリプトで遊ぶ[ぬかみそフォントの制作サポート(13)]
IPA mj明朝の漢字を書き出す
MJ文字情報一覧 | 一般社団法人 文字情報技術促進協議会
Creative Commons — 表示 - 継承 2.1 日本 — CC BY-SA 2.1 JP
LibreOfficeで開いて、こんな感じで選択、コピーします。テキストファイルに貼り付け。
U+3005 U+3006 U+303B U+3400 U+3401 U+3402 3404_E0101 3404_E0100 U+3405 U+3406 U+340C U+2CF1C U+3416
基本的に1行は1文字として、これを文字に書き換えるスクリプトを、簡単に組んでみます。bashで手抜きして。
#!/bin/bash # ============================================================================= # ■ IPA MJ明朝の文字を出力 # # # 実装したUCS 実装したMoji_JohoコレクションIVS # 535A_E010A;2B9E4_E0100 # 535A_E010B;2B9E4_E0101 # # ============================================================================= while read Code1 Code2 ; do # もし1行に2つコードがあれば、2つ目を出力 if test -n "${Code2}" ; then echo "${Code2}" else echo "${Code1}" fi done | { # セミコロン区切りのコードを分離する IFS_BAK="${IFS}" while read Code ; do IFS=';' set -- ${Code} IFS="${IFS_BAK}" for Hex in "${@}" do echo "${Hex}" done done } | while read Code ; do case "${Code}" in # ------------------------------------------- ( 'U+'* ) # 基底文字を出力 # ------------------------------------------- # 「U+」を削除 Code="${Code#'U+'}" # 文字バイナリに変換出力 printf '\U'${Code}'\n' ;; # ------------------------------------------- ( * ) # 異体字セレクタつき文字を出力 # ------------------------------------------- # 「_」を区切りにして前後をそれぞれ削る baseCode="${Code%_*}" vsCode="${Code#*_}" printf '\U'"${baseCode}"'\U'"${vsCode}"'\n' ;; esac done
頭に「U+」がついてるものは、基底文字のみで出力。IVS付き文字は、IVSを付けて出力。
一行に両方書いてあるものは、IVSつき文字を優先しました。
2カ所だったか、セミコロンで区切って複数書かれてるIVSがありまして、そこは両方とも出力してます。
このbashスクリプトを通すと文字が出るんですが、上記のスクリプトとは別のスクリプトで、さらに書き換えたものを貼り付け……ようとしたら、途中でブチ切られました。ブログの制限に引っかかったみたい。