Namazu-devel-ja(旧)


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

Postscript filter



こんにちは、御無沙汰しております。國頭です。

FreeBSD 4.5 で mknmz of Namazu 2.0.10 をportsで入れています。
postscriptのfilterについて気づいた点を報告致します。

○ filter/postscript.plの中で ps2ascii を呼んでいますが、-q optionをと
らないためにきちんと働いてくれないように思われますので、確認頂けません
でしょうか。

○ ghostscript 5.50 付属の ps2ascii 使用しているのですが、一部のファイ
ルの変換中に ps2ascii が固まって、そこで止まってしまうことがあることが
わかりました。どうも止まる時のps fileは dvips で作られたps fileである
場合がほとんどのようでした。そこで調べたところ dvips2ascii というもの
があることがわかりました。

ftp://ftp.FreeBSD.org/pub/FreeBSD/branches/-current/ports/print/dvips2ascii
http://www.FreeBSD.org/cgi/url.cgi?ports/print/dvips2ascii/pkg-descr

によると

This is a PostScript-to-ascii converter which works for PostScript
files created by dvips. Results are usually better than using ps2ascii
which comes with ghostscript.

とのことです。perlなので遅いですが、ps2asciiで固まっていたものも
dvips2ascii だと変換することができました。


現在は以下のようにして、dvips によるものだけを dvips2ascii 他のものは
ps2asciiを使っているのですが、もっときれいな方法はありませんでしょうか。


● dvips2ascii から、 dvips2asciionlyなるものを作った。
変更点は、Creator: dvips でなければエラーで終了させることと、出力ファ
イル名が - なら出力ファイルのチェックをしないこと。

--- /usr/local/bin/dvips2ascii  Thu Feb  7 21:40:21 2002
+++ /usr/local/bin/dvips2asciionly      Thu Feb 14 14:16:46 2002
@@ -37,7 +37,7 @@
        }
     }
 
-    if (-e $out) {
+    if (("$out" ne "-") && (-e $out)) {
        print "<$out> already exists. Should I overwrite this file? (y/N) ";
        $yn = <STDIN>;
        if ($yn !~ /^y/) {
@@ -66,6 +66,7 @@
        if (!/dvips/) {
            print STDERR
              "Warning: This file is not created by dvips. Expect horrible results.\n";
+           exit 1;
        }
     } elsif (/^%%Feature:.*Resolution\s+(\d+)dpi/) {
        $resolution = $1;


● dvips2ascii でエラーが起きれば ps2asciiを起動するwrapper
olive# cat /usr/local/bin/dvips2ascii_ps2ascii.sh
#!/bin/sh

#
# convert postscript to ascii text
#  with dvips2ascii and ps2ascii
#  by G.Kunito  Feb.12,2002
#

dvips2ascii=/usr/local/bin/dvips2asciionly
dvips2asciiopts1=
dvips2asciiopts2='-'
ps2ascii=/usr/local/bin/ps2ascii
ps2asciiopts1=
ps2asciiopts2=

if [ x"$1" = x ]; then
  echo "no postscript file name"
  exit 1
fi

filename=$1
shift;

${dvips2ascii} ${dvips2asciiopts1} ${filename} ${dvips2asciiopts2} || \
${ps2ascii} ${ps2asciiopts1} ${filename} ${ps2asciiopts2}


● filter/postscriptからwrapperを起動するように変更
--- /usr/local/share/namazu/filter/postscript.pl.dist   Fri Feb  8 12:32:30 2002
+++ /usr/local/share/namazu/filter/postscript.pl        Wed Feb 13 22:14:19 2002
@@ -36,7 +36,8 @@
     if (util::islang("ja")) {
        $postscriptpath = util::checkcmd('ps2text');
     } else {
-       $postscriptpath = util::checkcmd('ps2ascii');
+       #$postscriptpath = util::checkcmd('ps2ascii');
+       $postscriptpath = util::checkcmd('dvips2ascii_ps2ascii.sh');
     }
     return 'no' unless (defined $postscriptpath);
     return 'yes';
@@ -86,7 +87,7 @@
            system("$postscriptpath -q $tmpfile > $tmpfile2");
        }
     } else {
-       system("$postscriptpath -q $tmpfile > $tmpfile2");
+       system("$postscriptpath $tmpfile > $tmpfile2");
     }
     unless ($? == 0) {
        unlink($tmpfile);

  ====================================================================
||  國頭 吾郎 (Goro Kunito)  [Research Associate]  Tel 03-5841-6710  ||
||    東京大学 新領域創成科学研究科 基盤情報学専攻 青山・森川研究室  ||
||        E-mail : kunito@xxxxxxxxxxxxxxxxxxxx , goro@xxxxxxxx       ||
  ====================================================================