#! /usr/local/bin/perl5 # # # 「\TeX で原稿用紙しよう!」プロジェクト用文書整形プリプロセッサ:-) # # \item 行頭に % がある行はカット # \item 1 バイト文字にもいちおう対応してる(^_^; # # 一行の長さを指定する $linelength = 40; $linelength_max = 52; # # 禁則文字の指定 # %nohead = ( '、', '1', '。', '1', '」', '1', ); %notail = ( '「', '1', ); # # # while(<>) { next if($_ =~ /^[\%]/); chop; $_ =~ s/ *$//; &fold($_); } &fold("\n"); exit; sub fold { local($buf) = @_; if($buf eq '') { if($line ne ' ') { $obuf .= $line; &out("\n"); $line = ' '; } } elsif($buf eq "\n") { $obuf .= $line; &out(''); } else { $buf =~ s/[ \t]//g; $buf =~ s/([!-~])/\1 /g; $buf =~ s/([\{\}\\\$\%\&_\#]) /\\\1/g; $line .= $buf; while($linelength <= length($line)) { $obuf .= substr($line, 0, $linelength - 2); $line = substr($line, $linelength - 2); $chr = substr($line, 0, 2); if(!defined($notail{$chr})) { $obuf .= $chr; $line =~ s/^..//; $chr = substr($line, 0, 2); } while(defined($nohead{$chr})) { $obuf .= $chr; $line =~ s/^..//; $chr = substr($line, 0, 2); } &out(''); } } } sub out { local($flag) = @_; while(length($obuf) < $linelength_max) { $obuf .= ' '; } print $obuf . "\n"; undef $obuf; if($flag eq "\n") { print "\n"; } }