#!/usr/bin/perl # -*- perl -*- my $version_banner = < \$merge, "help" => \$help_flag, "version" => \$version_flag, ) or usage(1); if ($version_flag) { print STDERR $version_banner; exit 0; } usage(0) if $help_flag; usage(1) if $#ARGV > 1; my ($infile, $outfile) = setup_input_and_output(); usage(1) if $#ARGV != -1; # Check no more arguments were given # Resource types sub type { my %types = ("%%BeginFile:" => "file", "%%BeginProcSet:" => "procset", "%%BeginFont:" => "font"); return $types{$_[0]}; } # Extract resources my %resources = (); # list of resources included my %merge = (); # list of resources extracted this time my $prolog = ""; my $body = ""; my $resource = ""; my $output = \$prolog; my $saveout; while (<$infile>) { if (/^%%Begin(Resource|Font|ProcSet):/) { my ($comment, @res) = split(/\s+/); # look at resource type my $type = defined(type($comment)) ? type($comment) : shift(@res); my $name = filename(@res, extn($type)); # make file name $saveout = $output; if (!defined($resources{$name})) { $prolog .= "%%IncludeResource: $type " . join(" ", @res) . "\n"; if (!-e $name) { open RES, ">$name" or Die("can't write file `$name'", 2); $resources{$name} = ""; $merge{$name} = $merge; $output = \$resources{$name}; } else { # resource already exists close(RES); undef $output; } } elsif ($merge{$name}) { open RES, ">>$name" or Die("can't append to file `$name'", 2); $resources{$name} = ""; $output = \$resources{$name}; } else { # resource already included undef $output; } } elsif (/^%%End(Resource|Font|ProcSet)/) { if (defined $output) { $$output .= $_; print RES $$output; } $output = $saveout; next; } elsif (/^%%End(Prolog|Setup)/ || /^%%Page:/) { $output = \$body; } $$output .= $_ if defined $output; } print $outfile $prolog . $body;