圏点指定《《……》》を、ルビ指定|字《・》の連続に変換するシェルスクリプト。
※プロデル版もおまけでおいてあります。
- 対象のファイル1つを引数に取る(変換対象ファイル)
- 任意の1文字を引数に取る(傍点文字)
- 一般的な傍点(圏点)指定マークアップである
《《親文字》》
を変換対象部分とする。 - 一般的なルビ指定マークアップである
|親文字《傍点文字》
の連続を変換先とする 《《親文字》》
→|親文字《点》
×親文字すべてが指定されるまで反復、に置換する(モノルビにする)
ための置換スクリプトです。
Pixiv小説などのいくつかの文章掲載サイトでは、
|《》
をルビ表示に変換する機能はあっても、
《《》》
を圏点(傍点)として変換する機能がない。
圏点指定をルビ指定に変換することで、そうしたサイトに圏点(傍点)を表示できるようにする。
ルビ化することで、傍点に使用する文字をある程度自由に設定できる。
- 例えば文字の上に🔥がついた強調とか
MeteorOnEarth.sh
をダウンロードして、任意のディレクトリに置く。- DebianかなにかのLinuxで以下を指定して
MeteorOnEarth.sh
を起動する- 第1引数に変換対象のテキストファイル
- 第2引数に傍点として使用する文字
対象のテキストファイル名_moe.txt
が出力されている(はず)
例:
cat ozyousama.txt
《《日本語》》でございましてよ
bash MeteorOnEarth.sh ozyousama.txt ﹅
✨ ozyousama_moe.txtを出力しました[傍点をルビに]
cat ozyousama_moe.txt
|日《﹅》|本《﹅》|語《﹅》でございましてよ
bash版と同じくコマンドプロンプトなどのコンソールから起動してください。
引数の指定方法もbash版と同じです。
おまけなので詳しい使い方は割愛します。
《《親文字》》
を、グループルビである
|親文字《・・・》
に変換することは正規表現で容易に達成できるが、
これをモノルビ指定つまり
|親《・》|文《・》|字《・》
へ変換することは難しい(どんな文字数にも対応するにはロジックに頼る必要がある)。
これに対応するためのもの。
サイトで適用されているスタイルによっては、親文字に対する傍点文字(・
とか)の連続によるルビ文字指定は、親文字1文字に正しい位置に付かないことがある。
特に、全角半角混じりの場合。
モノルビ指定にすると、それをほぼ回避できる。
文書の変換は時代によって変化するものではないので、枯れた技術で長く動く方が良いと考えたため。
プロデル版はおまけ。
ぼくはリグルくんが好きです。
- 傍点(圏点)の指定は、入れ子指定されない前提
- 傍点指定の中にある文字は全て親文字とみなす
《《文字《《文字》》文字》》
とかなっててもエラー化しません
- Debian:11
- ChromeOS:103.0.5060のCrostini
- GunBash:5.1.4
- 長く使いたい、と言ってもPOSIX中心までは考えてない
- 関数宣言
置換元文字列群作成
関数- 引数:標準入力
- 出力:標準出力
- 処理:
- grep検索
- 検索文字列:
《《[^《》]+》》
- オプション:
- -E:拡張正規表現
- -o:行単位に出力
- 検索文字列:
- 重複削除uniq
- 出来上がった文字列を標準出力へ
- grep検索
置換先文字列群作成
関数- 引数:標準入力
- 出力:標準出力
- 処理:
- 引数文字列を1行毎に処理
《《
と》》
を除去- 出来上がった文字全体を1文字ごとに処理
字
を|字《傍点文字》
に置換
- 出来上がった文字列全体を標準出力へ
- 引数文字列を1行毎に処理
中間シェル前半作成
関数- 引数:標準入力
- 出力:標準出力
- 処理:
- 引数文字列を1行毎に処理
- 先頭に
| sed -e s/
を付与
- 先頭に
- 出来上がった文字列全体を標準出力へ
- 引数文字列を1行毎に処理
中間シェル後半作成
関数- 引数:標準入力_文字列
- 出力:標準出力
- 処理:
- 引数文字列を1行毎に処理
- 末尾に
/g' \
を付与
- 末尾に
- 出来上がった文字列全体を標準出力へ
- 引数文字列を1行毎に処理
- 主処理
- チェック
- 引数1:入力ファイル
- 入力ファイルが存在しない場合エラー
- 引数2:傍点文字
- 傍点文字の長さが2以上の場合、エラー
- 指定がない場合、傍点文字は「・」にする
- 引数1:入力ファイル
- 事前処理
- 引数1:入力ファイルの文字コードを判定
- SJISの場合、UTF8に変換して作業ファイルへ出力
- UTF8の場合、そのまま作業ファイルへ出力
- 出力先ファイルを作成する
入力ファイル名の拡張子の手前
+ '_moe.txt'
- 引数1:入力ファイルの文字コードを判定
- 変換処理
- 作業ファイルを入力する
- └パイプライン:
置換元文字列群作成
関数 置換元文字列群
が空(対象がなかった)の場合、当スクリプトを終了する置換元文字列群
を入力する- └パイプライン:
置換先文字列群作成
関数 中間シェル.sh
作成- 置換基文字列と置換先文字列を横方向へ結合する
- └パイプライン:行の先頭に
| sed -e 's/
を付与 - └パイプライン:行の末尾に
/g' \¥n
を付与 - └パイプライン:ファイル先頭に、
cat 作業ファイル \
を付与 - └パイプライン:ファイル末尾に、
> 中間シェル.sh
- 以下のようになる
cat 作業ファイル \ | sed -e 's/《《親文字》》/|字《点》|字《点》|字《点》/g' \ | sed -e 's/《《親文字》》/|字《点》|字《点》/g' \ … > 中間シェル.sh
中間シェル
を実行 >標準出力出力ファイル
- 終了処理
- 中間ファイルを削除する
- 中間シェルを全て削除する
- チェック