明けましておめでとうございます。
子曰、甚矣、吾衰也、久矣、吾不復夢見周公也、
〔『論語』述而五〕
昨年は、胆嚢を取ってやれやれと思ったら、左脚の神経痛が起こったり、加齢の順調さに苦笑いする一年でしたが、夢をどこかに置き忘れたかもしれません。孔子に倣い、理想を追いかけ続けようと思います。定年まであと十年、頑張らねば。
子曰、甚矣、吾衰也、久矣、吾不復夢見周公也、
〔『論語』述而五〕
ゴール:次のようなInDesignの「タグ付き」テキストを作る。小塚明朝 Pr6N R 游ゴシック体 ミディアム …… ……
<UNICODE-MAC> <vsn:9.3><fset:InDesign-Japanese> <pstyle:><cf:小塚明朝 Pr6N><ct:R>小塚明朝 Pr6N R Lorem ipsum dolor sit amet, consectetur adipisicing elit, あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎらひかる草の波。 祇辻飴葛蛸鯖鰯噌庖箸 Lorem ipsum dolor sit amet, 1234567890 12234567890 <ct:><cf:> <pstyle:><cf:游ゴシック体><ct:ミディアム>游ゴシック体 ミディアム Lorem ipsum dolor sit amet, consectetur adipisicing elit, あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎらひかる草の波。 祇辻飴葛蛸鯖鰯噌庖箸 Lorem ipsum dolor sit amet, 1234567890 12234567890 <ct:><cf:> …… ……
2)フォントリストの1行ずつについて次の操作を繰り返す。<UNICODE-MAC> <vsn:9.3><fset:InDesign-Japanese>
<pstyle:><cf:$1><ct:$2>$1 $2 Lorem ipsum dolor sit amet, consectetur adipisicing elit, あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎらひかる草の波。 祇辻飴葛蛸鯖鰯噌庖箸 Lorem ipsum dolor sit amet, 1234567890 12234567890 <ct:><cf:>
use utf8;
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
binmode STDIN, ':utf8';
print "<UNICODE-MAC>\n<vsn:9.3><fset:InDesign-Japanese>\n";
#print "<UNICODE-WIN>\n<vsn:9.3><fset:InDesign-Japanese>\n";
while (<>) {
/([^\t]+)\t(.+)/;
print "<pstyle:><cf:$1><ct:$2>$1 $2\
Lorem ipsum dolor sit amet, consectetur adipisicing elit, \
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎらひかる草の波。\
祇辻飴葛蛸鯖鰯噌庖箸とか\
Lorem ipsum dolor sit amet,\
1234567890とか\
12234567890\
<ct:><cf:>";
}
BEGIN { FS = "\t" print "<UNICODE-MAC>\n<vsn:9.3><fset:InDesign-Japanese>" } { print \ "<pstyle:><cf:" $1 "><ct:" $2 ">" $1 " " $2 "\n\ Lorem ipsum dolor sit amet, consectetur adipisicing elit, \n\ あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎらひかる草の波。\n\ 祇辻飴葛蛸鯖鰯噌庖箸\n\ Lorem ipsum dolor sit amet,\n\ 1234567890\n\ 12234567890\ <ct:><cf:>" }
実行例:$ awk -f addtag.pl < fontlist.txt | iconv -t utf-16le > fontsample.txt<UNICODE-MAC>とした場合は改行コードをLFに、(イ)途中の処理はUTF-8で行っているので、配置する前にUTF-16 (LE BOM付) に変換しておく。
<UNICODE-WIN>とした場合は改行コードをCRLFに。
上の実行例ではiconvコマンドを使って変換した。(ウ)配置する際、「グリッドフォーマットの適用」のチェックを外しておく。
use utf8;
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
binmode STDIN, ':utf8';
print "<UNICODE-MAC>\n<vsn:9.3><fset:InDesign-Japanese>\n";
while (<>) {
chop;
($family, $style) = split(/\t/, $_);
print "<pstyle:><cf:$family><ct:$style>$family $style\
Lorem ipsum dolor sit amet, consectetur adipisicing elit, \
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎらひかる草の波。\
祇辻飴葛蛸鯖鰯噌庖箸\
Lorem ipsum dolor sit amet,\
1234567890\
12234567890\
<ct:><cf:>";
}
これを条件付き書式で「数式を使用して、書式設定をするセルを指定」の欄に書けばいい。けっこう面倒だな。(しかもこの欄では、入力補完も関数のヘルプ参照もない。カーソルキーを叩こうものなら……)=indirect(address(row(), column()-1))+1=indirect(address(row(), column()))
#!/usr/bin/perl
use utf8;
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
binmode STDIN, ':utf8';
while(<>) {
# 単位語の前に数字がない場合「一」を補う
s/(?<![一二三四五六七八九千百十])(?=[兆億万])/一/g;
s/(?<![一二三四五六七八九])(?=[千百十])/一/g;
# 欠けている桁をゼロとして復活させる
s/(?<=兆)(?![一二三四五六七八九][十百千万]?億)/〇億/g;
s/(?<=億)(?![一二三四五六七八九][十百千]?万)/〇万/g;
s/(?<=[兆億万])(?![一二三四五六七八九]千)/〇千/g;
s/(?<=千)(?![一二三四五六七八九]百)/〇百/g;
s/(?<=百)(?![一二三四五六七八九]十)/〇十/g;
s/(?<=十)(?![〇一二三四五六七八九])/〇/g;
# 単位語のうち千百十を消す
s/[千百十]//g;
# 億万でゼロを整理
s/〇〇〇〇[億万]//g;
s/(?<=[兆億万])〇+//g;
# 洋数字に変換
y/〇一二三四五六七八九/0123456789/;
# 3桁毎にコンマを挿入
s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g;
print $_;
}
# 欠けている桁をゼロとして復活させる
s/(?<=兆)(?![一二三四五六七八九][十百千万]?億)/〇億/g;
s/(?<=億)(?![一二三四五六七八九][十百千]?万)/〇万/g;
# 億万でゼロを整理
s/〇〇〇〇[億万]//g;
# s/(?<=[兆億万])0+//g; #誤
s/(?<=[兆億万])〇+//g; #正
#!/usr/bin/perl
# utf-8テキストを扱うまじない
use utf8;
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
binmode STDIN, ':utf8';
while (<>) {
# 数字は半角にそろえておく
y/1234567890/1234567890/;
# 単独の0は「ゼロ」に書き換える
s/(?<!\d)0(?!\d)/ゼロ/g;
# 桁区切りのコンマを取っておく
s/(?<=\d),(?=(\d\d\d)+(?!\d))//g;
# 4桁ごとに区切って万億兆を挿入
s/(?<=\d)(?=\d\d\d\d(?!\d))/万/g;
s/(?<=\d)(?=\d\d\d\d(?=万))/億/g;
s/(?<=\d)(?=\d\d\d\d(?=億))/兆/g;
# 下から1桁ずつ十百千を挿入
s/(?<=\d)(?=\d(?!\d))/十/g;
s/(?<=\d)(?=\d(?!\d))/百/g;
s/(?<=\d)(?=\d(?!\d))/千/g;
# 0になってる桁を削除
s/0[十百千]//g;
s/億0万/億/g;
s/兆0億/兆/g;
s/0//g;
# 十百には1をつけない
s/1([十百])/\1/g;
# 各桁を漢数字に書き換え
y/123456789/一二三四五六七八九/;
print $_;
}
(?<=\d)(?=\d\d\d\d(?!\d))は、(?<= )\dがひとつは見えて (?<=\d)(?= )\d\d\d\d(?!\d) (←もちろん、文字がなくてもかまわない)(?=\d\d\d\d(?!\d))