初歩のシェルスクリプトで遊ぶ[ぬかみそフォントの制作サポート(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スクリプトを通すと文字が出るんですが、上記のスクリプトとは別のスクリプトで、さらに書き換えたものを貼り付け……ようとしたら、途中でブチ切られました。ブログの制限に引っかかったみたい。