[M+ OUTLINE FONTS 360] Re: [M+ OUTLINE FONTS 359] Re: fontforgeへの移行

Back to archive index

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*****>



mplus-fonts-dev メーリングリストの案内
Back to archive index