KANOU Hiroki
kanou****@khdd*****
2005年 1月 23日 (日) 11:50:55 JST
狩野です。 [M+ OUTLINE FONTS 359] にて村岡さん: > KANOU Hiroki wrote: > > --- scripts/EPSCut.pm.orig Sat Jan 22 14:19:51 2005 > > +++ scripts/EPSCut.pm Sat Jan 22 18:58:02 2005 > > @@ -40,6 +40,7 @@ > > if (m/^%%BoundingBox:/) { > > &print_eps("%%BoundingBox: 0 0 $size[0] $size[1]\n"); > > } else { > > + s/setlinewidth/pop/g; > > &print_eps($_); > > } > > last if $_ =~ m/^%%EndSetup/; > その変更だとsetlinewidthの定義と呼出の2箇所置換されてしまうのが、気持ち > 悪いです。だったら呼出である1 setlinewidthだけを0 setlinewidthにして > commitしました。これでも大丈夫でしょうか? ダメです。逆なら大丈夫ですが。 setlinewidth がヘッダに出て来るのは 2 箇所ありまして、 /w { setlinewidth } def と、 /` { (略) 1 setlinewidth 0 setlinejoin 10 setmiterlimit (略) } def の中です。それぞれ、{} の中の (setlinewidth を使った) コマンド列に w および ` という別名を定義しています。 # setlinewidth は PostScript のネイティブコマンド (Postscript Language # Reference Manual 3rd ed. の p.688) なので、定義する必要はありません。 定義された短縮コマンドが実際に使用されているのは、 0 J 0 j 1 w 4 M []0 d という行の中で、エイリアス定義をネイティブコマンドに戻すと、 0 setlinecap 0 setlinejoin 1 setlinewidth 4 setmiterlimit []0 setdash という線種の定義になります。逆に、` は使われていませんので、 1 setlinewidth を置き換えても効果はありません。 2 箇所直すのが気持ち悪いと言うのでしたら、呼び出し側だけを直すことに して、 s/\b(\d+|\d*\.\d+|\d+\.\d*)\s+w\b/0 w/g; としたらどうでしょうか。ただし、w の前に改行が来るケースとか、数値を 指数形式で指定された場合はカバーできませんが…。 個人的には、数値と「w」1 文字のような、他の文字列中に偶然に出現する 可能性のあるパターンよりも、setlinewidth という、単語一つで間違いなく 引っかけられるパターンを置換した方が安心できます。 狩野 宏樹 <kanou****@khdd*****>