#!/usr/bin/perl ## This file is part of the Petri-nets packages. See file README for ## copyright notice. use strict; use Digest::MD5 qw(md5_hex); my $keep = 0; foreach my $job (@ARGV) { ## ## check argument ## if ($job =~ /^(-k|--keep)$/) { $keep = 1; next; } elsif ($job =~ /^(-c|--clean)$/) { $keep = 0; next; } elsif ($job =~ /^(-f|--force)$/) { unlink "$job.sum" if -f "$job.sum"; next; } elsif ($job =~ /^(-h|--help)$/) { print "Usage: pn2pdf [OPTION]... DOC...\n"; print "Create Petri net figures from DOC.\n\n"; print " -k, --keep keep temporary files\n"; print " -c, --clean delete temporary files\n"; print " -f, --force force the rendering of all pictures\n"; print " -h, --help display this help and exit\n\n"; print "Report bugs to \n"; exit 0; } ## ## load MD5 sums if available ## my %sum = (); if (-f "$job.sum") { open SUM, "$job.sum" or die "pn2pdf: unable to open $job.sum -- $!\n"; while () { if (/(\d+)\s+(.*)/) { $sum{$1} = $2; } else { warn "pn2pdf: invalid checksum in $job.sum\n"; } } close SUM; } ## ## process file ## my $preamble = ""; open TEX, "$job.tex" or die "pn2pdf: unable to open $job.tex -- $!\n"; open SUM, ">$job.sum" or die "pn2pdf: unable to open $job.sum -- $!\n"; while () { $preamble .= $_; last if /\\begin\{document\}/; $preamble =~ s/(\\begin\{document\}).*$/$1/; } $preamble .= "\\thispagestyle\{empty\}\n"; my $count = 0; my $petrinet; while () { last if /^\\end\{document\}$/; if (/(\\begin\{petrinet\}.*)/) { $count++; $petrinet = "$1\n"; while () { $petrinet .= $_; last if /\\end\{petrinet\}/; } $petrinet =~ s/(\\end\{petrinet\}).*$/$1\n/; ## ## create fig-file ## my $md5 = md5_hex ("$preamble$petrinet"); print SUM "$count $md5\n"; next if ($md5 eq $sum{$count}) && (-f "$job-fig$count.pdf"); open FIG, ">$job-fig$count.tex" or die "pn2pdf: unable to open $job-fig$count.tex -- $!\n"; print FIG "$preamble$petrinet\\end\{document\}\n"; close FIG; ## ## process fig-file ## system "latex", "$job-fig$count"; system "dvips", ("-E", "-Pcmz", "-Pamz", "-o", "$job-fig$count.eps", "$job-fig$count"); system "epstopdf", "$job-fig$count.eps"; unlink ("$job-fig$count.tex", "$job-fig$count.log", "$job-fig$count.aux", "$job-fig$count.dvi", "$job-fig$count.eps") unless $keep; } } close TEX; close SUM; }