prn2eps.pl
changeset 0 2bb9df67c0fe
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/prn2eps.pl	Sun Sep 19 13:16:17 2010 +0900
     1.3 @@ -0,0 +1,76 @@
     1.4 +#!/usr/bin/env perl
     1.5 +
     1.6 +use strict;
     1.7 +use Digest::MD5 qw(md5_hex);
     1.8 +my $f_remove_unused_eps = 0;
     1.9 +
    1.10 +if (@ARGV != 1) {
    1.11 +    die 'wrong number of argument';
    1.12 +}
    1.13 +my $prnfile = $ARGV[0];    
    1.14 +
    1.15 +my $basename = $prnfile; $basename =~ s/\.prn$//;
    1.16 +my $dirname = $prnfile; $dirname =~ s![^/]*$!!;
    1.17 +my $notedumpfile  = $basename . '.note.txt';
    1.18 +my $md5file  = $basename . '.md5';
    1.19 +
    1.20 +my %prev_md5 = ();
    1.21 +my %curr_md5 = ();
    1.22 +
    1.23 +if (-e $md5file) {
    1.24 +    open(MD5, $md5file) or die;
    1.25 +    while (<MD5>) {
    1.26 +        if (/^([01-9a-f]+)\s+([-_01-9a-zA-Z]+)/) {
    1.27 +            $prev_md5{$1} = $2;
    1.28 +        }
    1.29 +    }
    1.30 +    close(MD5);
    1.31 +}
    1.32 +
    1.33 +my $counter = 1;
    1.34 +open(NOTES, $notedumpfile) or die;
    1.35 +while (<NOTES>) {
    1.36 +    if (/\014/) {
    1.37 +        $counter++;
    1.38 +    }
    1.39 +    if (/\@file=([-_01-9a-zA-Z]+)/) {
    1.40 +        my $epsbase = $1;
    1.41 +        my $page = $counter;
    1.42 +        my $pngfile = $basename . '.ppt.tmp_slide' . $page . '.png';
    1.43 +        my $md5;
    1.44 +        if (-e $pngfile) {
    1.45 +            $md5 = md5_hex(`cat $pngfile`);
    1.46 +            $curr_md5{$md5} = $epsbase;
    1.47 +        } else { # can't happen
    1.48 +            die "no png file: $pngfile";
    1.49 +        }
    1.50 +
    1.51 +        if (exists $prev_md5{$md5}) {
    1.52 +            if ($prev_md5{$md5} eq $epsbase) {
    1.53 +                # not changed
    1.54 +                delete $prev_md5{$md5};
    1.55 +            } else {
    1.56 +                system("mv $dirname$prev_md5{$md5}.eps $dirname$epsbase.eps");
    1.57 +                delete $prev_md5{$md5};                
    1.58 +            }
    1.59 +        } else {
    1.60 +            system("psselect $page $prnfile > $dirname$epsbase.ps");
    1.61 +            system("ps2eps -R + -B -f $dirname$epsbase.ps");
    1.62 +            system("ps2eps -C $dirname$epsbase.eps");
    1.63 +            system("mv $dirname$epsbase.eps.eps $dirname$epsbase.eps");
    1.64 +            system("rm $dirname$epsbase.ps");
    1.65 +        }
    1.66 +    }
    1.67 +}
    1.68 +close(NOTES);
    1.69 +
    1.70 +if ($f_remove_unused_eps) {
    1.71 +    # to be implemented
    1.72 +}
    1.73 +
    1.74 +open(MD5, '>', $md5file) or die;
    1.75 +foreach my $m (keys %curr_md5) {
    1.76 +    print MD5 $m . "\t" . $curr_md5{$m} . "\r\n";
    1.77 +}
    1.78 +close(MD5);
    1.79 +system("rm " . $basename . '.ppt.tmp_slide*.png');