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