prn2eps.pl
author Shingo W. Kagami
Sun, 19 Sep 2010 13:35:50 +0900
changeset 1 abe870050749
permissions -rw-r--r--
Change the default path names of prn2eps and ppt_printout_ps.
Shingo@0
     1
#!/usr/bin/env perl
Shingo@0
     2
Shingo@0
     3
use strict;
Shingo@0
     4
use Digest::MD5 qw(md5_hex);
Shingo@0
     5
my $f_remove_unused_eps = 0;
Shingo@0
     6
Shingo@0
     7
if (@ARGV != 1) {
Shingo@0
     8
    die 'wrong number of argument';
Shingo@0
     9
}
Shingo@0
    10
my $prnfile = $ARGV[0];    
Shingo@0
    11
Shingo@0
    12
my $basename = $prnfile; $basename =~ s/\.prn$//;
Shingo@0
    13
my $dirname = $prnfile; $dirname =~ s![^/]*$!!;
Shingo@0
    14
my $notedumpfile  = $basename . '.note.txt';
Shingo@0
    15
my $md5file  = $basename . '.md5';
Shingo@0
    16
Shingo@0
    17
my %prev_md5 = ();
Shingo@0
    18
my %curr_md5 = ();
Shingo@0
    19
Shingo@0
    20
if (-e $md5file) {
Shingo@0
    21
    open(MD5, $md5file) or die;
Shingo@0
    22
    while (<MD5>) {
Shingo@0
    23
        if (/^([01-9a-f]+)\s+([-_01-9a-zA-Z]+)/) {
Shingo@0
    24
            $prev_md5{$1} = $2;
Shingo@0
    25
        }
Shingo@0
    26
    }
Shingo@0
    27
    close(MD5);
Shingo@0
    28
}
Shingo@0
    29
Shingo@0
    30
my $counter = 1;
Shingo@0
    31
open(NOTES, $notedumpfile) or die;
Shingo@0
    32
while (<NOTES>) {
Shingo@0
    33
    if (/\014/) {
Shingo@0
    34
        $counter++;
Shingo@0
    35
    }
Shingo@0
    36
    if (/\@file=([-_01-9a-zA-Z]+)/) {
Shingo@0
    37
        my $epsbase = $1;
Shingo@0
    38
        my $page = $counter;
Shingo@0
    39
        my $pngfile = $basename . '.ppt.tmp_slide' . $page . '.png';
Shingo@0
    40
        my $md5;
Shingo@0
    41
        if (-e $pngfile) {
Shingo@0
    42
            $md5 = md5_hex(`cat $pngfile`);
Shingo@0
    43
            $curr_md5{$md5} = $epsbase;
Shingo@0
    44
        } else { # can't happen
Shingo@0
    45
            die "no png file: $pngfile";
Shingo@0
    46
        }
Shingo@0
    47
Shingo@0
    48
        if (exists $prev_md5{$md5}) {
Shingo@0
    49
            if ($prev_md5{$md5} eq $epsbase) {
Shingo@0
    50
                # not changed
Shingo@0
    51
                delete $prev_md5{$md5};
Shingo@0
    52
            } else {
Shingo@0
    53
                system("mv $dirname$prev_md5{$md5}.eps $dirname$epsbase.eps");
Shingo@0
    54
                delete $prev_md5{$md5};                
Shingo@0
    55
            }
Shingo@0
    56
        } else {
Shingo@0
    57
            system("psselect $page $prnfile > $dirname$epsbase.ps");
Shingo@0
    58
            system("ps2eps -R + -B -f $dirname$epsbase.ps");
Shingo@0
    59
            system("ps2eps -C $dirname$epsbase.eps");
Shingo@0
    60
            system("mv $dirname$epsbase.eps.eps $dirname$epsbase.eps");
Shingo@0
    61
            system("rm $dirname$epsbase.ps");
Shingo@0
    62
        }
Shingo@0
    63
    }
Shingo@0
    64
}
Shingo@0
    65
close(NOTES);
Shingo@0
    66
Shingo@0
    67
if ($f_remove_unused_eps) {
Shingo@0
    68
    # to be implemented
Shingo@0
    69
}
Shingo@0
    70
Shingo@0
    71
open(MD5, '>', $md5file) or die;
Shingo@0
    72
foreach my $m (keys %curr_md5) {
Shingo@0
    73
    print MD5 $m . "\t" . $curr_md5{$m} . "\r\n";
Shingo@0
    74
}
Shingo@0
    75
close(MD5);
Shingo@0
    76
system("rm " . $basename . '.ppt.tmp_slide*.png');