[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:54) Re: QXP4.1のTag



QXP3.3でも使えるんだけど、
「tag書き出し」したテキスト(tag)をPerlなどに利用する際にコピー&ペーストできるようにメタキャラクタを整形するスクリプトです。
昔から使っているんで、書き方が幼稚なのは勘弁して(^^;;;;; 
とりあえず4.1用にも使えたので、ご報告。

#!/usr/local/bin/perl
foreach $ARGV (@ARGV){
open(IN, "$ARGV") || die "can't open $1 \n";
open(OUT, ">$ARGV.new") || die "can't open $ARGV.new \n";
&MacPerl'SetFileInfo("YoED", "TEXT", "$ARGV.new");
while($_ = <IN>){ 

#perlscriptメタ文字をcharacterとして認識させる
s/([^\\])([\\\/\[\]\(\)\{\}\$\?\!\+\*\.\#\&\@\"\%\^])/$1\\$2/g;
s/^([\/\[\]\(\)\{\}\$\?\!\+\*\.\#\&\@\"\%])/\\$1/;
s/\\\\/¥¥¥¥¥¥¥¥/g;
s/([^\\])([\/\[\]\(\)\{\}\$\?\!\+\*\.\#\&\@\"\%\^])/$1\\$2/g;
s/¥¥¥¥¥¥¥¥/\\\\/g;
s/\t/\\t/g;
s/(<[^>]+>)/&base($1)/eg;

print OUT;
 }
close(IN);
close(OUT);
}

#-----------------------------↓ベースラインシフトのバグを修正するサブルーチン
sub base {
local($_) = @_;#引数の配列(@_)をローカルの参照行にする
s/b([1-9])/b【-】$1/;
s/b(0\\\.\d+)/b【-】$1/;
s/b-([1-9])/b$1/;
s/b-(0\.\d+)/b$1/;
s/【-】/-/;
$_;#処理結果を戻すreturnでもよい
}