ルビ(読み仮名)や傍点の記述フォーマットを青空文庫形式に変換するsedルール
■ 変換対象の記述フォーマット
変換前
ルビの記述 → 我輩{わがはい}は猫である
傍点の記述 → 我輩は<傍点>猫</傍点>である
変換後 (青空文庫形式)
ルビの記述 → 我輩《わがはい》は猫である
傍点の記述 → 我輩は猫[#「猫」に傍点]である
■ 変換のコツ
{ ○○○○○ }
のように、一組の開始タグと終了タグの間に、同種類のタグが入ることは無い。 たとえば、{ ○○{○○○ }
というようなことは起こらないとする。
sedの文字列置換ルール
s/{\(.*\)}/《\1》/g
というルールを適用すると、例えば { ○○○ } △△△ { □□□ }
というような入力文字列を処理すると、《 ○○○ } △△△ { □□□ 》
のような予想外の結果となる。 (ルールは入力文字列の外側より適用されていくため)
ということで、次のようなルールを定義するとうまくいく。(このルールでは、”{ ○○○ }” に囲まれた領域は ” { ” を除く1文字以上20文字以下の文字列にマッチする)
s/{\([^{]\{1,20\}\)}/《\1》/g
■ sed変換ルール
replace.sed
# 傍点の置換
s/<傍点>\([^<]*\)<\/傍点>/\1[#「\1」に傍点]/g
# ルビの置換
s/{\([^{]\{1,20\}\)}/《\1》/g
# 半角の & を全角に変換 (pLatexでの処理を正しく行うため)
s/\&/&/g
# 半角の ? を全角に変換 (縦書フォントで正しく表示させるため)
s/?/?/g
このルールファイルを作成した後
$ sed -f replace.sed test.txt
■ 参考資料
・正規表現メモ(sed, perlなど、それぞれの環境での正規表現のサポート状況