Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 18.117.91.170
#! /usr/bin/perl -w
# MikTeX users can set environment variable TEXSYSTEM to "miktex".
#D \module
#D [ file=mptopdf.pl,
#D version=2010.05.28, % 2000.05.29
#D title=converting MP to PDF,
#D subtitle=\MPTOPDF,
#D author=Hans Hagen,
#D date=\currentdate,
#D url=www.pragma-ade.nl,
#D copyright={PRAGMA ADE / Hans Hagen \& Ton Otten}]
#C
#C This module is part of the \CONTEXT\ macro||package and is
#C therefore copyrighted by \PRAGMA. See licen-en.pdf for
#C details.
# use File::Copy ; # not in every perl
use Config ;
use Getopt::Long ;
use strict ;
use File::Basename ;
$Getopt::Long::passthrough = 1 ; # no error message
$Getopt::Long::autoabbrev = 1 ; # partial switch accepted
my $Help = 0 ;
my $Latex = 0 ;
my $TeXexec = 0 ;
my $RawMP = 1 ;
my $MetaFun = 0 ;
my $PassOn = '' ;
&GetOptions
( "help" => \$Help ,
"rawmp" => \$RawMP, # option is now default, but keep for compat
"metafun" => \$MetaFun,
"passon" => \$PassOn, # option is ignored, but keep for compat
"latex" => \$Latex,
"texexec" => \$TeXexec) ;
my $program = "MPtoPDF 1.4.1" ;
my $pattern = "@ARGV" ; # was $ARGV[0]
my $miktex = 0 ;
my $done = 0 ;
my $report = '' ;
my $mplatexswitch = " --tex=latex " ;
my $texexecswitch = " --tex=\"texexec --batch --once --nomp --mptex\" " ; # untested
my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^mswin/i) ;
my $escapeshell = (($ENV{'SHELL'}) && ($ENV{'SHELL'} =~ m/sh/i ));
if ($ENV{"TEXSYSTEM"}) {
$miktex = ($ENV{"TEXSYSTEM"} =~ /miktex/io) ;
}
my @files ;
my $command = my $mpbin = '' ;
# agressive copy, works for open files like in gs
sub CopyFile {
my ($From,$To) = @_ ;
return unless open(INP,"<$From") ;
return unless open(OUT,">$To") ;
binmode INP ;
binmode OUT ;
while (<INP>) {
print OUT $_ ;
}
close (INP) ;
close (OUT) ;
}
if (($pattern eq '')||($Help)) {
print "\n$program : provide MP output file (or pattern)\n" ;
exit ;
} elsif ($pattern =~ /\.mp$/io) {
shift @ARGV ; my $rest = join(" ", @ARGV) ;
if (open(INP,$pattern)) {
while (<INP>) {
if (/(documentstyle|documentclass|begin\{document\})/io) {
$Latex = 1 ; last ;
}
}
close (INP) ;
}
if ($Latex) {
$rest .= " $mplatexswitch" ;
}
if ($TeXexec) {
$rest .= " $texexecswitch" ;
}
if ($MetaFun) {
$mpbin = "mpost --progname=mpost --mem=metafun" ;
} else {
$mpbin = "mpost --mem=mpost" ;
}
my $runner = "$mpbin $rest $pattern" ;
print "\n$program : running '$runner'\n" ;
my $error = system ($runner) ;
if ($error) {
print "\n$program : error while processing mp file\n" ;
exit 1 ;
} else {
$pattern =~ s/\.mp$//io ;
@files = glob "$pattern.*" ;
}
} elsif (-e $pattern) {
@files = ($pattern) ;
} elsif ($pattern =~ /.\../o) {
@files = glob "$pattern" ;
} else {
$pattern .= '.*' ;
@files = glob "$pattern" ;
}
foreach my $file (@files) {
$_ = $file ;
if (s/\.(\d+|mps)$// && -e $file) {
if ($miktex) {
$command = "pdftex -undump=mptopdf" ;
} else {
$command = "pdftex -fmt=mptopdf -progname=context" ;
}
if ($dosish) {
$command = "$command \\relax $file" ;
} else {
$command = "$command \\\\relax $file" ;
}
my $error = system($command) ;
if ($error) {
print "\n$program : error while processing tex file\n" ;
exit 1 ;
}
my $pdfsrc = basename($_).".pdf";
rename ($pdfsrc, "$_-$1.pdf") ;
if (-e $pdfsrc) {
CopyFile ($pdfsrc, "$_-$1.pdf") ;
}
if ($done) {
$report .= " +" ;
}
$report .= " $_-$1.pdf" ;
++$done ;
}
}
if ($report eq '') {
$report = '*' ;
}
if ($done) {
print "\n$program : $pattern is converted to$report\n" ;
} else {
print "\n$program : no filename matches $pattern\n" ;
}
|