横書き縦書き変換
- awk で縦書き! -を見て、少し簡単ではありますが、同じような縦書きの骨子だけ作ってみます。
プログラムとしては AWK Users JP :: 転置行列を作るで行った操作と同じです。 文字列に分解し、配列に格納し、それを転置行列のように回転させています。
#! /usr/local/bin/gawk -f
# tategaki.awk
# 縦書きをします
# usage: gawk -f tategaki.awk file[s]
{
num_str = split($0, arr_str, "");
for (i = 1; i <= num_str; i++) {
val[i, NR] = arr_str[i];
}
if (max_str < num_str) {
max_str = num_str;
}
}
END {
for (i = 1; i <= max_str; i++) {
for (j = NR; j >= 1; j--) {
if (val[i, j] == "") {
val[i, j] = " ";
}
printf("%s ", val[i, j]);
}
print "";
}
}
あくまで骨子ということなので、非常に簡単に作ってみました。 また、実行するにあたり、「羅生門」の冒頭を使ってみます。
$ cat sample.txt 或日の暮方の事である。一人の下人が、羅生門の下で雨やみを待つてゐた。 廣い門の下には、この男の外に誰もゐない。唯、所々丹塗の剥げた、大きな圓 柱に、蟋蟀が一匹とまつてゐる。羅生門が、朱雀大路にある以上は、この男の外 にも、雨やみをする市女笠や揉烏帽子が、もう二三人はありさうなものである。 それが、この男の外には誰もゐない。 $ gawk -f tategaki.awk sample.txt そ に 柱 或 れ も に 廣 日 が 、 、 い の 、 雨 蟋 門 暮 こ や 蟀 の 方 の み が 下 の 男 を 一 に 事 の す 匹 は で 外 る と 、 あ に 市 ま こ る は 女 つ の 。 誰 笠 て 男 一 も や ゐ の 人 ゐ 揉 る 外 の な 烏 。 に 下 い 帽 羅 誰 人 。 子 生 も が が 門 ゐ 、 、 が な 羅 も 、 い 生 う 朱 。 門 二 雀 唯 の 三 大 、 下 人 路 所 で は に 々 雨 あ あ 丹 や り る 塗 み さ 以 の を う 上 剥 待 な は げ つ も 、 た て の こ 、 ゐ で の 大 た あ 男 き 。 る の な 。 外 圓
実際には半角文字をどうするとか、フォントをどうするといった問題があると思いますが、簡単な操作で縦書きに変換することができました。
なお、日本語を文字単位で扱う関係上、gawk のみの対応です。


