diff options
author | Hans Hagen <pragma@wxs.nl> | 2003-09-25 00:00:00 +0200 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 2003-09-25 00:00:00 +0200 |
commit | 006ade39648b1d3cdc89a4bdc16cbe29882d70d3 (patch) | |
tree | 53aba5fd547553e9702ab1a81721a929e57bed50 /context/perltk/texexec.pl | |
parent | 309b7e1b8d2422eb36e584f3c57591d960bcc402 (diff) | |
download | context-006ade39648b1d3cdc89a4bdc16cbe29882d70d3.tar.gz |
stable 2003.09.25
Diffstat (limited to 'context/perltk/texexec.pl')
-rw-r--r-- | context/perltk/texexec.pl | 4402 |
1 files changed, 2199 insertions, 2203 deletions
diff --git a/context/perltk/texexec.pl b/context/perltk/texexec.pl index cc63f0926..7e5320039 100644 --- a/context/perltk/texexec.pl +++ b/context/perltk/texexec.pl @@ -1,14 +1,9 @@ -eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' - if 0; - -# todo: second run of checksum of mp file with --nomprun changes -# todo: warning if no args -# todo: <<<< in messages -# todo: cleanup +eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' && eval 'exec perl -w -S $0 $argv:q' + if 0 ; #D \module #D [ file=texexec.pl, -#D version=2002.05.04, +#D version=2003.09.16, #D title=running \ConTeXt, #D subtitle=\TEXEXEC, #D author=Hans Hagen, @@ -19,11 +14,11 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $ #C therefore copyrighted by \PRAGMA. See licen-en.pdf for #C details. -# Thanks to Tobias Burnus for the german translations. -# Thanks to Thomas Esser for hooking it into web2c -# Thanks to Taco Hoekwater for suggesting improvements -# Thanks to Wybo Dekker for the advanced help interface -# Thanks to Fabrice Popineau for windows path trickery +# Thanks to Tobias Burnus for the german translations. +# Thanks to Thomas Esser for hooking it into web2c +# Thanks to Taco Hoekwater for suggesting improvements +# Thanks to Wybo Dekker for the advanced help interface and making it strict +# Thanks to Fabrice Popineau for windows path trickery and fixes # (I still have to completely understand the help code -) @@ -31,20 +26,25 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $ #D expression replaces the unix specific line \type #D {#!/usr/bin/perl}. -use Cwd ; -use Time::Local ; -use Config ; -use Getopt::Long ; -use Class::Struct ; # needed for help subsystem -#se Data::Dumper ; # needed for help subsystem -use FindBin ; +use strict ; -my %ConTeXtInterfaces ; # otherwise problems with strict -my %ResponceInterface ; # since i dunno how to allocate else +# todo: second run of checksum of mp file with --nomprun changes +# todo: warning if no args +# todo: <<<< in messages +# todo: cleanup + +use Cwd; +use Time::Local; +use Config; +use Getopt::Long; +use Class::Struct; # needed for help subsystem +use FindBin; +use File::Compare; -# my %Help ; +my %ConTeXtInterfaces; # otherwise problems with strict +my %ResponseInterface; # since i dunno how to allocate else -# use strict ; +my %Help; #D In this script we will launch some programs and other #D scripts. \TEXEXEC\ uses an ini||file to sort out where @@ -54,9 +54,9 @@ my %ResponceInterface ; # since i dunno how to allocate else #D It will be no surprise that Thomas Esser provided me #D the neccessary code to accomplish this. -$ENV{"MPXCOMMAND"} = "0" ; # otherwise loop +$ENV{"MPXCOMMAND"} = "0"; # otherwise loop -my $TotalTime = time ; +my $TotalTime = time; # start random seed hack # @@ -64,345 +64,365 @@ my $TotalTime = time ; # we need to be smaller about 1440 (== 24*60 == tex's max time) # in which case (david a's) random calculator will overflow. -my ($sec,$min,$rest) = gmtime ; -my $RandomSeed = $min*60+$sec ; -# i have to look up the mod function -) -if ($RandomSeed>2880) { $RandomSeed -= 2880 } -if ($RandomSeed>1440) { $RandomSeed -= 1440 } +# my ( $sec, $min, $rest ) = gmtime; +# my $RandomSeed = $min * 60 + $sec; +# +# # i have to look up the mod function -) +# +# if ( $RandomSeed > 2880 ) { $RandomSeed -= 2880 } +# if ( $RandomSeed > 1440 ) { $RandomSeed -= 1440 } + +my ($sec, $min) = gmtime; +my $RandomSeed = ($min * 60 + $sec) % 1440; # See usage of $Random and $RandomSeed later on. # # end random seed hack -## $dosish = ($Config{'osname'} =~ /dos|mswin/i) ; -## $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i) ; -my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^mswin/i) ; -my $escapeshell = ($ENV{'SHELL'} =~ m/sh/i); - -my $TeXUtil = 'texutil' ; -my $TeXExec = 'texexec' ; -my $DVIspec = 'dvispec' ; -my $SGMLtoTeX = 'sgml2tex' ; -my $FDFtoTeX = 'fdf2tex' ; - -my $MetaFun = 'metafun' ; -my $MpToPdf = 'mptopdf' ; - -$Getopt::Long::passthrough = 1 ; # no error message -$Getopt::Long::autoabbrev = 1 ; # partial switch accepted - -my $AddEmpty = '' ; -my $Alone = 0 ; -my $Optimize = 0 ; -my $ForceTeXutil = 0 ; -my $Arrange = 0 ; -my $BackSpace = '0pt' ; -my $Background = '' ; -my $CenterPage = 0 ; -my $ConTeXtInterface = 'unknown' ; -my $Convert = '' ; -my $DoMPTeX = 0 ; -my $DoMPXTeX = 0 ; -my $EnterBatchMode = 0 ; -my $EnterNonStopMode = 0 ; -my $Environments = '' ; -my $Modules = '' ; -my $FastMode = 0 ; -my $FinalMode = 0 ; -my $Format = '' ; -my $MpDoFormat = '' ; -my $HelpAsked = 0 ; -my $MainBodyFont = 'standard' ; -my $MainLanguage = 'standard' ; -my $MainResponse = 'standard' ; -my $MakeFormats = 0 ; -my $Markings = 0 ; -my $Mode = '' ; -my $NoArrange = 0 ; -my $NoDuplex = 0 ; -my $NOfRuns = 7 ; -my $NoMPMode = 0 ; -my $NoMPRun = 0 ; -my $NoBanner = 0 ; -my $AutoMPRun = 0 ; -my $OutputFormat = 'standard' ; -my $Pages = '' ; -my $PageScale = '1000' ; # == 1.0 -my $PaperFormat = 'standard' ; -my $PaperOffset = '0pt' ; -my $PassOn = '' ; -my $PdfArrange = 0 ; -my $PdfSelect = 0 ; -my $PdfCombine = 0 ; -my $PrintFormat = 'standard' ; -my $ProducePdfT = 0 ; -my $ProducePdfM = 0 ; -my $ProducePdfX = 0 ; -my $Input = "" ; -my $Result = '' ; -my $Suffix = '' ; -my $RunOnce = 0 ; -my $Selection = '' ; -my $Combination = '2*4' ; -my $SilentMode = 0 ; -my $TeXProgram = '' ; -my $TeXTranslation = '' ; -my $TextWidth = '0pt' ; -my $TopSpace = '0pt' ; -my $TypesetFigures = 0 ; -my $ForceFullScreen = 0 ; -my $ScreenSaver = 0 ; -my $TypesetListing = 0 ; -my $TypesetModule = 0 ; -my $UseColor = 0 ; -my $Verbose = 0 ; -my $PdfCopy = 0 ; -my $LogFile = "" ; -my $MpyForce = 0 ; -my $RunPath = "" ; -my $Arguments = "" ; -my $Pretty = 0 ; -my $SetFile = "" ; -my $TeXTree = "" ; -my $TeXRoot = "" ; -my $Purge = 0 ; -my $Separation = "" ; -my $ModeFile = "" ; -my $GlobalFile = 0 ; -my $AllPatterns = 0 ; -my $ForceXML = 0 ; -my $Random = 0 ; -my $Filters = '' ; +my $dosish = ( $Config{'osname'} =~ /^(ms)?dos|^os\/2|^mswin/i ); +my $escapeshell = ( ($ENV{'SHELL'}) && ($ENV{'SHELL'} =~ m/sh/i )); + +my $TeXUtil = 'texutil'; +my $TeXExec = 'texexec'; +my $DVIspec = 'dvispec'; +my $SGMLtoTeX = 'sgml2tex'; +my $FDFtoTeX = 'fdf2tex'; + +my $MetaFun = 'metafun'; +my $MpToPdf = 'mptopdf'; + +$Getopt::Long::passthrough = 1; # no error message +$Getopt::Long::autoabbrev = 1; # partial switch accepted + +my $AddEmpty = ''; +my $Alone = 0; +my $Optimize = 0; +my $ForceTeXutil = 0; +my $Arrange = 0; +my $BackSpace = '0pt'; +my $Background = ''; +my $CenterPage = 0; +my $ConTeXtInterface = 'unknown'; +my $Convert = ''; +my $DoMPTeX = 0; +my $DoMPXTeX = 0; +my $EnterBatchMode = 0; +my $EnterNonStopMode = 0; +my $Environments = ''; +my $Modules = ''; +my $FastMode = 0; +my $FinalMode = 0; +my $Format = ''; +my $MpDoFormat = ''; +my $HelpAsked = 0; +my $MainBodyFont = 'standard'; +my $MainLanguage = 'standard'; +my $MainResponse = 'standard'; +my $MakeFormats = 0; +my $Markings = 0; +my $Mode = ''; +my $NoArrange = 0; +my $NoDuplex = 0; +my $NOfRuns = 7; +my $NoMPMode = 0; +my $NoMPRun = 0; +my $NoBanner = 0; +my $AutoMPRun = 0; +my $OutputFormat = 'standard'; +my $Pages = ''; +my $PageScale = '1000'; # == 1.0 +my $PaperFormat = 'standard'; +my $PaperOffset = '0pt'; +my $PassOn = ''; +my $PdfArrange = 0; +my $PdfSelect = 0; +my $PdfCombine = 0; +my $PdfOpen = 0; +my $PdfClose = 0; +my $PrintFormat = 'standard'; +my $ProducePdfT = 0; +my $ProducePdfM = 0; +my $ProducePdfX = 0; +my $Input = ""; +my $Result = ''; +my $Suffix = ''; +my $RunOnce = 0; +my $Selection = ''; +my $Combination = '2*4'; +my $SilentMode = 0; +my $TeXProgram = ''; +my $TeXTranslation = ''; +my $TextWidth = '0pt'; +my $TopSpace = '0pt'; +my $TypesetFigures = 0; +my $ForceFullScreen = 0; +my $ScreenSaver = 0; +my $TypesetListing = 0; +my $TypesetModule = 0; +my $UseColor = 0; +my $Verbose = 0; +my $PdfCopy = 0; +my $LogFile = ""; +my $MpyForce = 0; +my $RunPath = ""; +my $Arguments = ""; +my $Pretty = 0; +my $SetFile = ""; +my $TeXTree = ""; +my $TeXRoot = ""; +my $Purge = 0; +my $Separation = ""; +my $ModeFile = ""; +my $GlobalFile = 0; +my $AllPatterns = 0; +my $ForceXML = 0; +my $Random = 0; +my $Filters = ''; # makempy : -my $MakeMpy = '' ; - -&GetOptions - ( "arrange" => \$Arrange , - "batch" => \$EnterBatchMode , - "nonstop" => \$EnterNonStopMode , - "color" => \$UseColor , - "centerpage" => \$CenterPage , - "convert=s" => \$Convert , - "environments=s"=> \$Environments , - "usemodules=s" => \$Modules , - "xml" => \$ForceXML , - "xmlfilters=s" => \$Filters , - "fast" => \$FastMode , - "final" => \$FinalMode , - "format=s" => \$Format , - "mpformat=s" => \$MpDoFormat , - "help" => \$HelpAsked , - "interface=s" => \$ConTeXtInterface , - "language=s" => \$MainLanguage , - "bodyfont=s" => \$MainBodyFont , - "results=s" => \$Result , - "response=s" => \$MainResponse , - "make" => \$MakeFormats , - "mode=s" => \$Mode , - "module" => \$TypesetModule , - "figures=s" => \$TypesetFigures , - "fullscreen" => \$ForceFullScreen , - "screensaver" => \$ScreenSaver , - "listing" => \$TypesetListing , - "mptex" => \$DoMPTeX , - "mpxtex" => \$DoMPXTeX , - "noarrange" => \$NoArrange , - "nomp" => \$NoMPMode , - "nomprun" => \$NoMPRun , - "nobanner" => \$NoBanner , - "automprun" => \$AutoMPRun , - "once" => \$RunOnce , - "output=s" => \$OutputFormat , - "pages=s" => \$Pages , - "paper=s" => \$PaperFormat , - "passon=s" => \$PassOn , - "path=s" => \$RunPath , - "pdf" => \$ProducePdfT , - "pdm" => \$ProducePdfM , - "pdx" => \$ProducePdfX , - "pdfarrange" => \$PdfArrange , - "pdfselect" => \$PdfSelect , - "pdfcombine" => \$PdfCombine , - "pdfcopy" => \$PdfCopy , - "scale=s" => \$PageScale , - "selection=s" => \$Selection , - "combination=s" => \$Combination , - "noduplex" => \$NoDuplex , - "paperoffset=s" => \$PaperOffset , - "backspace=s" => \$BackSpace , - "topspace=s" => \$TopSpace , - "markings" => \$Markings , - "textwidth=s" => \$TextWidth , - "addempty=s" => \$AddEmpty , - "background=s" => \$Background , - "logfile=s" => \$LogFile , - "print=s" => \$PrintFormat , - "suffix=s" => \$Suffix , - "runs=s" => \$NOfRuns , - "silent" => \$SilentMode , - "tex=s" => \$TeXProgram , - "verbose" => \$Verbose , - "alone" => \$Alone , - "optimize" => \$Optimize , - "texutil" => \$ForceTeXutil , - "mpyforce" => \$MpyForce , - "input=s" => \$Input , - "arguments=s" => \$Arguments , - "pretty" => \$Pretty , - "setfile=s" => \$SetFile , - "purge" => \$Purge , +my $MakeMpy = ''; + +&GetOptions( + "arrange" => \$Arrange, + "batch" => \$EnterBatchMode, + "nonstop" => \$EnterNonStopMode, + "color" => \$UseColor, + "centerpage" => \$CenterPage, + "convert=s" => \$Convert, + "environments=s" => \$Environments, + "usemodules=s" => \$Modules, + "xml" => \$ForceXML, + "xmlfilters=s" => \$Filters, + "fast" => \$FastMode, + "final" => \$FinalMode, + "format=s" => \$Format, + "mpformat=s" => \$MpDoFormat, + "help" => \$HelpAsked, + "interface=s" => \$ConTeXtInterface, + "language=s" => \$MainLanguage, + "bodyfont=s" => \$MainBodyFont, + "results=s" => \$Result, + "response=s" => \$MainResponse, + "make" => \$MakeFormats, + "mode=s" => \$Mode, + "module" => \$TypesetModule, + "figures=s" => \$TypesetFigures, + "fullscreen" => \$ForceFullScreen, + "screensaver" => \$ScreenSaver, + "listing" => \$TypesetListing, + "mptex" => \$DoMPTeX, + "mpxtex" => \$DoMPXTeX, + "noarrange" => \$NoArrange, + "nomp" => \$NoMPMode, + "nomprun" => \$NoMPRun, + "nobanner" => \$NoBanner, + "automprun" => \$AutoMPRun, + "once" => \$RunOnce, + "output=s" => \$OutputFormat, + "pages=s" => \$Pages, + "paper=s" => \$PaperFormat, + "passon=s" => \$PassOn, + "path=s" => \$RunPath, + "pdf" => \$ProducePdfT, + "pdm" => \$ProducePdfM, + "pdx" => \$ProducePdfX, + "pdfarrange" => \$PdfArrange, + "pdfselect" => \$PdfSelect, + "pdfcombine" => \$PdfCombine, + "pdfcopy" => \$PdfCopy, + "scale=s" => \$PageScale, + "selection=s" => \$Selection, + "combination=s" => \$Combination, + "noduplex" => \$NoDuplex, + "paperoffset=s" => \$PaperOffset, + "backspace=s" => \$BackSpace, + "topspace=s" => \$TopSpace, + "markings" => \$Markings, + "textwidth=s" => \$TextWidth, + "addempty=s" => \$AddEmpty, + "background=s" => \$Background, + "logfile=s" => \$LogFile, + "print=s" => \$PrintFormat, + "suffix=s" => \$Suffix, + "runs=s" => \$NOfRuns, + "silent" => \$SilentMode, + "tex=s" => \$TeXProgram, + "verbose" => \$Verbose, + "alone" => \$Alone, + "optimize" => \$Optimize, + "texutil" => \$ForceTeXutil, + "mpyforce" => \$MpyForce, + "input=s" => \$Input, + "arguments=s" => \$Arguments, + "pretty" => \$Pretty, + "setfile=s" => \$SetFile, + "purge" => \$Purge, #### yet undocumented ################# - "random" => \$Random , - "makempy=s" => \$MakeMpy , - "allpatterns" => \$AllPatterns , - "separation=s" => \$Separation , - "textree=s" => \$TeXTree , - "texroot=s" => \$TeXRoot , - "translate=s" => \$TeXTranslation , - "modefile=s" => \$ModeFile , # additional modes file - "globalfile" => \$GlobalFile ) ; # don't check name + "random" => \$Random, + "makempy=s" => \$MakeMpy, + "allpatterns" => \$AllPatterns, + "separation=s" => \$Separation, + "textree=s" => \$TeXTree, + "texroot=s" => \$TeXRoot, + "translate=s" => \$TeXTranslation, + "pdfclose" => \$PdfClose, + "pdfopen" => \$PdfOpen, + "modefile=s" => \$ModeFile, # additional modes file + "globalfile" => \$GlobalFile +); # don't check name # a set file (like blabla.bat) can set paths now -if ($SetFile ne "") - { load_set_file ($SetFile,$Verbose) ; $SetFile = "" } +if ( $SetFile ne "" ) { load_set_file( $SetFile, $Verbose ); $SetFile = "" } # later we will do a second attempt. -$SIG{INT} = "IGNORE" ; - -if ($ARGV[0] =~ /\.mpx$/io) # catch -tex=.... bug in mpost - { $TeXProgram = '' ; $DoMPXTeX = 1 ; $NoMPMode = 1 } - -if ($ScreenSaver) - { $ForceFullScreen = 1 ; - $TypesetFigures = 'c' ; - $ProducePdfT = 1 ; - $Purge = 1 } - -if ($DoMPTeX||$DoMPXTeX) - { $RunOnce = 1 ; - $ProducePdfT = 0 ; - $ProducePdfX = 0 ; - $ProducePdfM = 0 } - -if ($PdfArrange||$PdfSelect||$PdfCopy||$PdfCombine) - { $ProducePdfT = 1 ; - $RunOnce = 1 } +$SIG{INT} = "IGNORE"; + +if ( $ARGV[0] && $ARGV[0] =~ /\.mpx$/io ) { # catch -tex=.... bug in mpost + $TeXProgram = ''; + $DoMPXTeX = 1; + $NoMPMode = 1; +} + +if ($ScreenSaver) { + $ForceFullScreen = 1; + $TypesetFigures = 'c'; + $ProducePdfT = 1; + $Purge = 1; +} + +if ( $DoMPTeX || $DoMPXTeX ) { + $RunOnce = 1; + $ProducePdfT = 0; + $ProducePdfX = 0; + $ProducePdfM = 0; +} + +if ( $PdfArrange || $PdfSelect || $PdfCopy || $PdfCombine ) { + $ProducePdfT = 1; + $RunOnce = 1; +} if ($ProducePdfT) { $OutputFormat = "pdftex" } elsif ($ProducePdfM) { $OutputFormat = "dvipdfm" } elsif ($ProducePdfX) { $OutputFormat = "dvipdfmx" } -if ($RunOnce||$Pages||$TypesetFigures||$TypesetListing) - { $NOfRuns = 1 } +if ( $RunOnce || $Pages || $TypesetFigures || $TypesetListing ) { $NOfRuns = 1 } -if (($LogFile ne '')&&($LogFile =~ /\w+\.log$/io)) - { open (LOGFILE,">$LogFile") ; - *STDOUT = *LOGFILE ; - *STDERR = *LOGFILE } +if ( ( $LogFile ne '' ) && ( $LogFile =~ /\w+\.log$/io ) ) { + open( LOGFILE, ">$LogFile" ); + *STDOUT = *LOGFILE; + *STDERR = *LOGFILE; +} -my $Program = " TeXExec 3.3 - ConTeXt / PRAGMA ADE 1997-2003" ; +my $Program = " TeXExec 4.0 - ConTeXt / PRAGMA ADE 1997-2003"; -print "\n$Program\n\n" ; +print "\n$Program\n\n"; -if ($Verbose) - { print " current path : " . cwd . "\n" } +if ($Verbose) { print " current path : " . cwd . "\n" } -## $pathslash = '/' ; if ($0 =~ /\\/) { $pathslash = "\\" } -my $pathslash = '/' ; if ($FindBin::Bin =~ /\\/) { $pathslash = "\\" } -my $cur_path = ".$pathslash" ; - -# $own_path = $0 ; $own_path =~ s/texexec(\.pl|\.bat|)//io ; -# $own_type = $1 ; -# $own_stub = "" ; +my $pathslash = '/'; +if ( $FindBin::Bin =~ /\\/ ) { $pathslash = "\\" } +my $cur_path = ".$pathslash"; # we need to handle window's "Program Files" path (patch by Fabrice P) -my $own_path = "$FindBin::Bin/" ; -my $own_type = $0 ; -my $own_type = $FindBin::Script ; -my $own_quote = ($own_path =~ m/^[^\"].* / ? "\"" : "") ; -my $own_stub = "" ; - -if ($own_type =~ /(\.pl|perl)/oi) - { $own_stub = "perl " } - -if ($own_type =~ /(\.(pl|bin|exe))$/io) - { $own_type = $1 } -else - { $own_type = '' } - -sub checked_path - { my $path = shift ; - if ((defined($path))&&($path ne '')) - { $path =~ s/[\/\\]/$pathslash/go ; - $path =~ s/[\/\\]*$//go ; - $path .= $pathslash } - else - { $path = '' } - return $path } - -sub checked_file - { my $path = shift ; - if ((defined($path))&&($path ne '')) - { $path =~ s/[\/\\]/$pathslash/go } - else - { $path = '' } - return $path } - -sub CheckPath - { my ($Key, $Value) = @_ ; - if (($Value =~ /\//)&&($Value !~ /\;/)) # no multipath test yet - { $Value = checked_path($Value) ; - unless (-d $Value) - { print " error : $Key set to unknown path $Value\n" } } } +my $own_path = "$FindBin::Bin/"; +my $own_type = $FindBin::Script; +my $own_quote = ( $own_path =~ m/^[^\"].* / ? "\"" : "" ); +my $own_stub = ""; + +if ( $own_type =~ /(\.pl|perl)/oi ) { $own_stub = "perl " } + +if ( $own_type =~ /(\.(pl|bin|exe))$/io ) { $own_type = $1 } +else { $own_type = '' } + +sub checked_path { + my $path = shift; + if ( ( defined($path) ) && ( $path ne '' ) ) { + $path =~ s/[\/\\]/$pathslash/go; + $path =~ s/[\/\\]*$//go; + $path .= $pathslash; + } else { + $path = ''; + } + return $path; +} + +sub checked_file { + my $path = shift; + if ( ( defined($path) ) && ( $path ne '' ) ) { + $path =~ s/[\/\\]/$pathslash/go; + } else { + $path = ''; + } + return $path; +} + +sub CheckPath { + my ( $Key, $Value ) = @_; + if ( ( $Value =~ /\// ) && ( $Value !~ /\;/ ) ) # no multipath test yet + { + $Value = checked_path($Value); + unless ( -d $Value ) { + print " error : $Key set to unknown path $Value\n"; + } + } +} # set <variable> to <value> # for <script> set <variable> to <value> # except for <script> set <variable> to <value> -my $IniPath = '' ; +my $IniPath = ''; #D The kpsewhich program is not available in all tex distributions, so #D we have to locate it before running it (as suggested by Thomas). -my @paths ; - -if ($ENV{PATH} =~ /\;/) - { @paths = split(/\;/,$ENV{PATH}) } -else - { @paths = split(/\:/,$ENV{PATH}) } - -my $kpsewhich = '' ; - -sub found_ini_file - { my $suffix = shift ; - # my $IniPath = `$kpsewhich --format="other text files" -progname=context texexec.$suffix` ; - my $IniPath = `$own_quote$kpsewhich$own_quote --format="other text files" -progname=context texexec.$suffix` ; - chomp($IniPath) ; - return $IniPath } - -if ($IniPath eq '') - { foreach (@paths) - { my $p = checked_path($_) . 'kpsewhich' ; - if ((-e $p)||(-e $p . '.exe')) - { $kpsewhich = $p ; - $IniPath = found_ini_file("ini") ; - unless (-e $IniPath) { $IniPath = found_ini_file("rme") } - last } } - if ($Verbose) - { if ($kpsewhich eq '') - { print " locating ini file : kpsewhich not found in path\n" } - elsif ($IniPath eq '') - { print " locating ini file : not found by kpsewhich\n" } - else - { if ($IniPath =~ /rme/oi) - { print " locating ini file : not found by kpsewhich, using '.rme' file\n" } - else - { print " locating ini file : found by kpsewhich\n" } } } } +my @paths; + +if ( $ENV{PATH} =~ /\;/ ) { @paths = split( /\;/, $ENV{PATH} ) } +else { @paths = split( /\:/, $ENV{PATH} ) } + +my $kpsewhich = ''; + +sub found_ini_file { + my $suffix = shift; + my $IniPath = `$kpsewhich --format="other text files" -progname=context texexec.$suffix`; + chomp($IniPath); + return $IniPath; +} + +if ( $IniPath eq '' ) { + foreach (@paths) { + my $p = checked_path($_) . 'kpsewhich'; + if ( ( -e $p ) || ( -e $p . '.exe' ) ) { + $kpsewhich = $p; + # FP: catch spurious error messages here if there $p has + # spaces and $own_quote is not set + $kpsewhich = ($kpsewhich =~ m/^[^\"].* / ? "\"$kpsewhich\"" : "$kpsewhich") ; + $IniPath = found_ini_file("ini"); + unless ( -e $IniPath ) { $IniPath = found_ini_file("rme") } + last; + } + } + if ($Verbose) { + if ( $kpsewhich eq '' ) { + print " locating ini file : kpsewhich not found in path\n"; + } elsif ( $IniPath eq '' ) { + print " locating ini file : not found by kpsewhich\n"; + } else { + if ( $IniPath =~ /rme/oi ) { + print +" locating ini file : not found by kpsewhich, using '.rme' file\n"; + } else { + print " locating ini file : found by kpsewhich\n"; + } + } + } +} #D Now, when we didn't find the \type {kpsewhich}, we have #D to revert to some other method. We could have said: @@ -416,491 +436,380 @@ if ($IniPath eq '') #D providing a module, which can introduce problems with loading, I #D decided to copy the code of \type {texpath} into this file. -use File::Find ; +use File::Find; # use File::Copy ; no standard in perl -my ($ReportPath, $ReportName, $ReportFile) = (0,0,1) ; -my ($FileToLocate, $PathToStartOn) = ('','') ; -my ($LocatedPath, $LocatedName, $LocatedFile) = ('','','') ; - -sub DoLocateFile # we have to keep on pruning - { if (lc $_ eq $FileToLocate) - { $LocatedPath = $File::Find::dir ; - $LocatedName = $_ ; - $LocatedFile = $File::Find::name } - if ($LocatedName) { $File::Find::prune = 1 } } - -sub LocatedFile - { $PathToStartOn = shift ; - $FileToLocate = lc shift ; - if ($FileToLocate eq '') - { $FileToLocate = $PathToStartOn ; - $PathToStartOn = $own_path } - ($LocatedPath, $LocatedName, $LocatedFile) = ('','','') ; - if ($FileToLocate ne '') - { if (-e $cur_path . $FileToLocate) - { $LocatedPath = $cur_path ; - $LocatedName = $FileToLocate ; - $LocatedFile = $cur_path . $FileToLocate } - else - { $_ = checked_path($PathToStartOn) ; - if (-e $_ . $FileToLocate) - { $LocatedPath = $_ ; - $LocatedName = $FileToLocate ; - $LocatedFile = $_ . $FileToLocate } - else - { $_ = checked_path($PathToStartOn) ; - if (/(.*?[\/\\]texmf[\/\\]).*/i) - { my $SavedRoot = $1 ; - File::Find::find(\&DoLocateFile, checked_path($1 . 'context/')) ; - unless ($LocatedFile) - { File::Find::find(\&DoLocateFile, $SavedRoot) } } - else - { $_ = checked_path($_) ; - File::Find::find(\&DoLocateFile, $_) } } } } - return ($LocatedPath, $LocatedName, $LocatedFile) } +my ( $ReportPath, $ReportName, $ReportFile ) = ( 0, 0, 1 ); +my ( $FileToLocate, $PathToStartOn ) = ( '', '' ); +my ( $LocatedPath, $LocatedName, $LocatedFile ) = ( '', '', '' ); + +sub DoLocateFile { # we have to keep on pruning + if ( lc $_ eq $FileToLocate ) { + $LocatedPath = $File::Find::dir; + $LocatedName = $_; + $LocatedFile = $File::Find::name; + } + if ($LocatedName) { $File::Find::prune = 1 } +} + +sub LocatedFile { + $PathToStartOn = shift; + $FileToLocate = lc shift; + if ( $FileToLocate eq '' ) { + $FileToLocate = $PathToStartOn; + $PathToStartOn = $own_path; + } + ( $LocatedPath, $LocatedName, $LocatedFile ) = ( '', '', '' ); + if ( $FileToLocate ne '' ) { + if ( -e $cur_path . $FileToLocate ) { + $LocatedPath = $cur_path; + $LocatedName = $FileToLocate; + $LocatedFile = $cur_path . $FileToLocate; + } else { + $_ = checked_path($PathToStartOn); + if ( -e $_ . $FileToLocate ) { + $LocatedPath = $_; + $LocatedName = $FileToLocate; + $LocatedFile = $_ . $FileToLocate; + } else { + $_ = checked_path($PathToStartOn); + if (/(.*?[\/\\]texmf[\/\\]).*/i) { + my $SavedRoot = $1; + File::Find::find( \&DoLocateFile, + checked_path( $1 . 'context/' ) ); + unless ($LocatedFile) { + File::Find::find( \&DoLocateFile, $SavedRoot ); + } + } else { + $_ = checked_path($_); + File::Find::find( \&DoLocateFile, $_ ); + } + } + } + } + return ( $LocatedPath, $LocatedName, $LocatedFile ); +} #D So now we can say: -unless ($IniPath) - { ($LocatedPath, $LocatedName, $IniPath) = LocatedFile($own_path,'texexec.ini') ; - if ($Verbose) - { if ($IniPath eq '') - { print " locating ini file : not found by searching\n" } - else - { print " locating ini file : found by searching\n" } } } +unless ($IniPath) { + ( $LocatedPath, $LocatedName, $IniPath ) = + LocatedFile( $own_path, 'texexec.ini' ); + if ($Verbose) { + if ( $IniPath eq '' ) { + print " locating ini file : not found by searching\n"; + } else { + print " locating ini file : found by searching\n"; + } + } +} #D The last resorts: -unless ($IniPath) - { if ($ENV{TEXEXEC_INI_FILE}) - { $IniPath = checked_path($ENV{TEXEXEC_INI_FILE}) . 'texexec.ini' ; - unless (-e $IniPath) { $IniPath = '' } } - if ($Verbose) - { if ($IniPath eq '') - { print " locating ini file : no environment variable set\n" } - else - { print " locating ini file : found by environment variable\n" } } } - -unless ($IniPath) - { $IniPath = $own_path . 'texexec.ini' ; - unless (-e $IniPath) { $IniPath = '' } - if ($Verbose) - { if ($IniPath eq '') - { print " locating ini file : not found in own path\n" } - else - { print " locating ini file : found in own path\n" } } } +unless ($IniPath) { + if ( $ENV{TEXEXEC_INI_FILE} ) { + $IniPath = checked_path( $ENV{TEXEXEC_INI_FILE} ) . 'texexec.ini'; + unless ( -e $IniPath ) { $IniPath = '' } + } + if ($Verbose) { + if ( $IniPath eq '' ) { + print " locating ini file : no environment variable set\n"; + } else { + print " locating ini file : found by environment variable\n"; + } + } +} + +unless ($IniPath) { + $IniPath = $own_path . 'texexec.ini'; + unless ( -e $IniPath ) { $IniPath = '' } + if ($Verbose) { + if ( $IniPath eq '' ) { + print " locating ini file : not found in own path\n"; + } else { + print " locating ini file : found in own path\n"; + } + } +} #D Now we're ready for loading the initialization file! We #D also define some non strict variables. Using \type {$Done} #D permits assignments. -my %Done ; - -unless ($IniPath) - { $IniPath = 'texexec.ini' } - -if (open(INI, $IniPath)) - { if ($Verbose) - { print " reading : $IniPath\n" } - while (<INI>) - { if (!/^[a-zA-Z\s]/oi) - { } - elsif (/except for\s+(\S+)\s+set\s+(\S+)\s*to\s*(.*)\s*/goi) - { my $one = $1 ; my $two= $2 ; my $three = $3 ; - if ($one ne $Done{"TeXShell"}) - { $three =~ s/^[\'\"]// ; $three =~ s/[\'\"]$// ; $three =~ s/\s*$// ; - if ($Verbose) - { print " setting : '$two' to '$three' except for '$one'\n" } - $Done{"$two"} = $three ; - CheckPath ($two, $three) } } - elsif (/for\s+(\S+)\s+set\s+(\S+)\s*to\s*(.*)\s*/goi) - { my $one = $1 ; my $two= $2 ; my $three = $3 ; $three =~ s/\s*$// ; - if ($one eq $Done{"TeXShell"}) - { $three =~ s/^[\'\"]// ; $three =~ s/[\'\"]$// ; - if ($Verbose) - { print " setting : '$two' to '$three' for '$one'\n" } - $Done{"$two"} = $three ; - CheckPath ($two, $three) } } - elsif (/set\s+(\S+)\s*to\s*(.*)\s*/goi) - { my $one = $1 ; my $two= $2 ; - unless (defined($Done{"$one"})) - { $two =~ s/^[\'\"]// ; $two =~ s/[\'\"]$// ; $two =~ s/\s*$// ; - if ($Verbose) - { print " setting : '$one' to '$two' for 'all'\n" } - $Done{"$one"} = $two ; - CheckPath ($one, $two) } } } - close (INI) ; - if ($Verbose) - { print "\n" } } -elsif ($Verbose) - { print " warning : $IniPath not found, did you read 'texexec.rme'?\n" ; - exit 1 } -else - { print " warning : $IniPath not found, try 'texexec --verbose'\n" ; - exit 1 } - -sub IniValue - { my ($Key,$Default) = @_ ; - if (defined($Done{$Key})) { $Default = $Done{$Key} } - if ($Verbose) - { print " used setting : $Key = $Default\n" } - return $Default } - -my $TeXShell = IniValue('TeXShell' , '' ) ; -my $SetupPath = IniValue('SetupPath' , '' ) ; -my $UserInterface = IniValue('UserInterface' , 'en' ) ; -my $UsedInterfaces = IniValue('UsedInterfaces' , 'en' ) ; -my $TeXFontsPath = IniValue('TeXFontsPath' , '.' ) ; -my $MpExecutable = IniValue('MpExecutable' , 'mpost' ) ; -my $MpToTeXExecutable = IniValue('MpToTeXExecutable' , 'mpto' ) ; -my $DviToMpExecutable = IniValue('DviToMpExecutable' , 'dvitomp' ) ; -my $TeXProgramPath = IniValue('TeXProgramPath' , '' ) ; -my $TeXFormatPath = IniValue('TeXFormatPath' , '' ) ; -my $ConTeXtPath = IniValue('ConTeXtPath' , '' ) ; -my $TeXScriptsPath = IniValue('TeXScriptsPath' , '' ) ; -my $TeXHashExecutable = IniValue('TeXHashExecutable' , '' ) ; -my $TeXExecutable = IniValue('TeXExecutable' , 'tex' ) ; -my $TeXVirginFlag = IniValue('TeXVirginFlag' , '-ini' ) ; -my $TeXBatchFlag = IniValue('TeXBatchFlag' , '-int=batchmode' ) ; -my $TeXNonStopFlag = IniValue('TeXNonStopFlag' , '-int=nonstopmode' ) ; -my $MpBatchFlag = IniValue('MpBatchFlag' , '-int=batchmode' ) ; -my $MpNonStopFlag = IniValue('MpNonStopFlag' , '-int=nonstopmode' ) ; -my $TeXPassString = IniValue('TeXPassString' , '' ) ; -my $TeXFormatFlag = IniValue('TeXFormatFlag' , '' ) ; -my $MpFormatFlag = IniValue('MpFormatFlag' , '' ) ; -my $MpVirginFlag = IniValue('MpVirginFlag' , '-ini' ) ; -my $MpPassString = IniValue('MpPassString' , '' ) ; -my $MpFormat = IniValue('MpFormat' , $MetaFun ) ; -my $MpFormatPath = IniValue('MpFormatPath' , $TeXFormatPath ) ; - -my $FmtLanguage = IniValue('FmtLanguage' , '' ) ; -my $FmtBodyFont = IniValue('FmtBodyFont' , '' ) ; -my $FmtResponse = IniValue('FmtResponse' , '' ) ; -my $TcXPath = IniValue('TcXPath' , '' ) ; - - $SetFile = IniValue('SetFile' , $SetFile ) ; - -if (($Verbose)&&($kpsewhich ne '')) - { print "\n" ; - my $CnfFile = `$own_quote$kpsewhich$own_quote -progname=context texmf.cnf` ; - chomp $CnfFile ; - print " applications will use : $CnfFile\n" } - -if (($FmtLanguage)&&($MainLanguage eq 'standard')) - { $MainLanguage = $FmtLanguage } -if (($FmtBodyFont)&&($MainBodyFont eq 'standard')) - { $MainBodyFont = $FmtBodyFont } -if (($FmtResponse)&&($MainResponse eq 'standard')) - { $MainResponse = $FmtResponse } - -if ($TeXFormatFlag eq "" ) - { $TeXFormatFlag = "&" } - -if ($MpFormatFlag eq "") - { $MpFormatFlag = "&" } - -unless ($dosish && !$escapeshell) - { if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" } - if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } } - -if ($TeXProgram) - { $TeXExecutable = $TeXProgram } - -my $fmtutil = '' ; - -if ($MakeFormats||$Verbose) - { if ($Alone) - { if ($Verbose) - { print " generating format : not using fmtutil\n" } } - elsif ($TeXShell =~ /tetex|fptex/i) - { foreach (@paths) - { my $p = checked_path($_) . 'fmtutil' ; - if (-e $p) - { $fmtutil = $p ; last } - elsif (-e $p . '.exe') - { $fmtutil = $p . '.exe' ; last } } - if ($Verbose) - { if ($fmtutil eq '') - { print " locating fmtutil : not found in path\n" } - else - { print " locating fmtutil : $fmtutil\n" } } } } +my %Done; + +unless ($IniPath) { $IniPath = 'texexec.ini' } + +if ( open( INI, $IniPath ) ) { + if ($Verbose) { print " reading : $IniPath\n" } + while (<INI>) { + if ( !/^[a-zA-Z\s]/oi ) { } + elsif (/except for\s+(\S+)\s+set\s+(\S+)\s*to\s*(.*)\s*/goi) { + my $one = $1; + my $two = $2; + my $three = $3; + if ( $one ne $Done{"TeXShell"} ) { + $three =~ s/^[\'\"]//; + $three =~ s/[\'\"]$//; + $three =~ s/\s*$//; + if ($Verbose) { + print +" setting : '$two' to '$three' except for '$one'\n"; + } + $Done{"$two"} = $three; + CheckPath( $two, $three ); + } + } elsif (/for\s+(\S+)\s+set\s+(\S+)\s*to\s*(.*)\s*/goi) { + my $one = $1; + my $two = $2; + my $three = $3; + $three =~ s/\s*$//; + if ( $one eq $Done{"TeXShell"} ) { + $three =~ s/^[\'\"]//; + $three =~ s/[\'\"]$//; + if ($Verbose) { + print +" setting : '$two' to '$three' for '$one'\n"; + } + $Done{"$two"} = $three; + CheckPath( $two, $three ); + } + } elsif (/set\s+(\S+)\s*to\s*(.*)\s*/goi) { + my $one = $1; + my $two = $2; + unless ( defined( $Done{"$one"} ) ) { + $two =~ s/^[\'\"]//; + $two =~ s/[\'\"]$//; + $two =~ s/\s*$//; + if ($Verbose) { + print + " setting : '$one' to '$two' for 'all'\n"; + } + $Done{"$one"} = $two; + CheckPath( $one, $two ); + } + } + } + close(INI); + if ($Verbose) { print "\n" } +} elsif ($Verbose) { + print +" warning : $IniPath not found, did you read 'texexec.rme'?\n"; + exit 1; +} else { + print + " warning : $IniPath not found, try 'texexec --verbose'\n"; + exit 1; +} + +sub IniValue { + my ( $Key, $Default ) = @_; + if ( defined( $Done{$Key} ) ) { $Default = $Done{$Key} } + if ($Verbose) { print " used setting : $Key = $Default\n" } + return $Default; +} + +my $TeXShell = IniValue( 'TeXShell', '' ); +my $SetupPath = IniValue( 'SetupPath', '' ); +my $UserInterface = IniValue( 'UserInterface', 'en' ); +my $UsedInterfaces = IniValue( 'UsedInterfaces', 'en' ); +my $TeXFontsPath = IniValue( 'TeXFontsPath', '.' ); +my $MpExecutable = IniValue( 'MpExecutable', 'mpost' ); +my $MpToTeXExecutable = IniValue( 'MpToTeXExecutable', 'mpto' ); +my $DviToMpExecutable = IniValue( 'DviToMpExecutable', 'dvitomp' ); +my $TeXProgramPath = IniValue( 'TeXProgramPath', '' ); +my $TeXFormatPath = IniValue( 'TeXFormatPath', '' ); +my $ConTeXtPath = IniValue( 'ConTeXtPath', '' ); +my $TeXScriptsPath = IniValue( 'TeXScriptsPath', '' ); +my $TeXHashExecutable = IniValue( 'TeXHashExecutable', '' ); +my $TeXExecutable = IniValue( 'TeXExecutable', 'tex' ); +my $TeXVirginFlag = IniValue( 'TeXVirginFlag', '-ini' ); +my $TeXBatchFlag = IniValue( 'TeXBatchFlag', '-int=batchmode' ); +my $TeXNonStopFlag = IniValue( 'TeXNonStopFlag', '-int=nonstopmode' ); +my $MpBatchFlag = IniValue( 'MpBatchFlag', '-int=batchmode' ); +my $MpNonStopFlag = IniValue( 'MpNonStopFlag', '-int=nonstopmode' ); +my $TeXPassString = IniValue( 'TeXPassString', '' ); +my $TeXFormatFlag = IniValue( 'TeXFormatFlag', '' ); +my $MpFormatFlag = IniValue( 'MpFormatFlag', '' ); +my $MpVirginFlag = IniValue( 'MpVirginFlag', '-ini' ); +my $MpPassString = IniValue( 'MpPassString', '' ); +my $MpFormat = IniValue( 'MpFormat', $MetaFun ); +my $MpFormatPath = IniValue( 'MpFormatPath', $TeXFormatPath ); + +my $FmtLanguage = IniValue( 'FmtLanguage', '' ); +my $FmtBodyFont = IniValue( 'FmtBodyFont', '' ); +my $FmtResponse = IniValue( 'FmtResponse', '' ); +my $TcXPath = IniValue( 'TcXPath', '' ); + +$SetFile = IniValue( 'SetFile', $SetFile ); + +if ( ($Verbose) && ( $kpsewhich ne '' ) ) { + print "\n"; + my $CnfFile = `$kpsewhich -progname=context texmf.cnf`; + chomp $CnfFile; + print " applications will use : $CnfFile\n"; +} + +if ( ($FmtLanguage) && ( $MainLanguage eq 'standard' ) ) { + $MainLanguage = $FmtLanguage; +} +if ( ($FmtBodyFont) && ( $MainBodyFont eq 'standard' ) ) { + $MainBodyFont = $FmtBodyFont; +} +if ( ($FmtResponse) && ( $MainResponse eq 'standard' ) ) { + $MainResponse = $FmtResponse; +} + +if ( $TeXFormatFlag eq "" ) { $TeXFormatFlag = "&" } + +if ( $MpFormatFlag eq "" ) { $MpFormatFlag = "&" } + +unless ( $dosish && !$escapeshell ) { + if ( $TeXFormatFlag eq "&" ) { $TeXFormatFlag = "\\&" } + if ( $MpFormatFlag eq "&" ) { $MpFormatFlag = "\\&" } +} + +if ($TeXProgram) { $TeXExecutable = $TeXProgram } + +my $fmtutil = ''; + +if ( $MakeFormats || $Verbose ) { + if ($Alone) { + if ($Verbose) { print " generating format : not using fmtutil\n" } + } elsif ( $TeXShell =~ /tetex|fptex/i ) { + foreach (@paths) { + my $p = checked_path($_) . 'fmtutil'; + if ( -e $p ) { $fmtutil = $p; last } + elsif ( -e $p . '.exe' ) { $fmtutil = $p . '.exe'; last } + } + $fmtutil = ($fmtutil =~ m/^[^\"].* / ? "\"$fmtutil\"" : "$fmtutil") ; + if ($Verbose) { + if ( $fmtutil eq '' ) { + print " locating fmtutil : not found in path\n"; + } else { + print " locating fmtutil : $fmtutil\n"; + } + } + } +} if ($Verbose) { print "\n" } -unless ($TeXScriptsPath) - { $TeXScriptsPath = $own_path } - -unless ($ConTeXtPath) - { $ConTeXtPath = $TeXScriptsPath } - -if ($ENV{"HOME"}) - { if ($SetupPath) { $SetupPath .= "," } - $SetupPath .= $ENV{"HOME"} } - -if ($TeXFormatPath) { $TeXFormatPath =~ s/[\/\\]$// ; $TeXFormatPath .= '/' } -if ($MpFormatPath) { $MpFormatPath =~ s/[\/\\]$// ; $MpFormatPath .= '/' } -if ($ConTeXtPath) { $ConTeXtPath =~ s/[\/\\]$// ; $ConTeXtPath .= '/' } -if ($SetupPath) { $SetupPath =~ s/[\/\\]$// ; $SetupPath .= '/' } -if ($TeXScriptsPath) { $TeXScriptsPath =~ s/[\/\\]$// ; $TeXScriptsPath .= '/' } - -$SetupPath =~ s/\\/\//go ; - -my %OutputFormats ; - -$OutputFormats{pdf} = "pdftex" ; -$OutputFormats{pdftex} = "pdftex" ; -$OutputFormats{dvips} = "dvips" ; -$OutputFormats{dvipsone} = "dvipsone" ; -$OutputFormats{acrobat} = "acrobat" ; -$OutputFormats{dviwindo} = "dviwindo" ; -$OutputFormats{dviview} = "dviview" ; -$OutputFormats{dvipdfm} = "dvipdfm" ; -$OutputFormats{dvipdfmx} = "dvipdfmx" ; - -my @ConTeXtFormats = ("nl", "en", "de", "cz", "uk", "it", "ro", "xx") ; - -sub SetInterfaces - { my ($short,$long,$full) = @_ ; - $ConTeXtInterfaces{$short} = $short ; - $ConTeXtInterfaces{$long} = $short ; - $ResponseInterface{$short} = $full ; - $ResponseInterface{$long} = $full } +unless ($TeXScriptsPath) { $TeXScriptsPath = $own_path } + +unless ($ConTeXtPath) { $ConTeXtPath = $TeXScriptsPath } + +if ( $ENV{"HOME"} ) { + if ($SetupPath) { $SetupPath .= "," } +# my $home = $ENV{"HOME"}; +# $home = ($home =~ m/^[^\"].* / ? "\"$home\"" : "$home") ; +# $SetupPath .= $home; + $SetupPath .= $ENV{"HOME"}; +} + +if ($TeXFormatPath) { $TeXFormatPath =~ s/[\/\\]$//; $TeXFormatPath .= '/' } +if ($MpFormatPath) { $MpFormatPath =~ s/[\/\\]$//; $MpFormatPath .= '/' } +if ($ConTeXtPath) { $ConTeXtPath =~ s/[\/\\]$//; $ConTeXtPath .= '/' } +if ($SetupPath) { $SetupPath =~ s/[\/\\]$//; $SetupPath .= '/' } +if ($TeXScriptsPath) { $TeXScriptsPath =~ s/[\/\\]$//; $TeXScriptsPath .= '/' } + +sub QuotePath { + my ($path) = @_; + my @l = split(",", $path); + map { my $e = $_; $e = ($e =~ m/^[^\"].* / ? "\"$e\"" : "$e"); $_ = $e ;} @l; + return join(",", @l); +} + +$SetupPath = &QuotePath($SetupPath); + +$SetupPath =~ s/\\/\//go; + +my %OutputFormats; + +$OutputFormats{pdf} = "pdftex"; +$OutputFormats{pdftex} = "pdftex"; +$OutputFormats{dvips} = "dvips"; +$OutputFormats{dvipsone} = "dvipsone"; +$OutputFormats{acrobat} = "acrobat"; +$OutputFormats{dviwindo} = "dviwindo"; +$OutputFormats{dviview} = "dviview"; +$OutputFormats{dvipdfm} = "dvipdfm"; +$OutputFormats{dvipdfmx} = "dvipdfmx"; + +my @ConTeXtFormats = ( "nl", "en", "de", "cz", "uk", "it", "ro", "xx" ); + +sub SetInterfaces { + my ( $short, $long, $full ) = @_; + $ConTeXtInterfaces{$short} = $short; + $ConTeXtInterfaces{$long} = $short; + $ResponseInterface{$short} = $full; + $ResponseInterface{$long} = $full; +} #SetInterfaces ( "en" , "unknown" , "english" ) ; -SetInterfaces ( "nl" , "dutch" , "dutch" ) ; -SetInterfaces ( "en" , "english" , "english" ) ; -SetInterfaces ( "de" , "german" , "german" ) ; -SetInterfaces ( "cz" , "czech" , "czech" ) ; -SetInterfaces ( "uk" , "brittish" , "english" ) ; -SetInterfaces ( "it" , "italian" , "italian" ) ; -SetInterfaces ( "no" , "norwegian" , "norwegian" ) ; -SetInterfaces ( "ro" , "romanian" , "romanian" ) ; -SetInterfaces ( "xx" , "experimental" , "english" ) ; - -#### old help system - -# $Help{ARRANGE} = " --arrange process and arrange\n" ; -# $Help{BATCH} = " --batch run in batch mode (don't pause)\n" ; -# $Help{NONSTOP} = " --nonstop run in non stop mode (don't pause)\n" ; -# $Help{CENTERPAGE} = " --centerpage center the page on the paper\n" ; -# $Help{COLOR} = " --color enable color (when not yet enabled)\n" ; -# $Help{USEMODULE} = " --usemodule load some modules first\n" ; -# $Help{usemodule} = -# $Help{USEMODULE} . " =name : list of modules\n" ; -# $Help{XMLFILTER} = " --xmlfilter apply XML filter\n" ; -# $Help{xmlfilter} = -# $Help{XMLFILTER} . " =name : list of filters\n" ; -# $Help{ENVIRONMENT} = " --environment load some environments first\n" ; -# $Help{environment} = -# $Help{ENVIRONMENT} . " =name : list of environments\n" ; -# $Help{FAST} = " --fast skip as much as possible\n" ; -# $Help{FIGURES} = " --figures typeset figure directory\n" ; -# $Help{figures} = -# $Help{FIGURES} . " =a : room for corrections\n" -# . " =b : just graphics\n" -# . " =c : one (cropped) per page\n" -# . " --paperoffset room left at paper border\n" ; -# $Help{FINAL} = " --final add a final run without skipping\n" ; -# $Help{FORMAT} = " --format fmt file\n" ; -# $Help{format} = -# $Help{FORMAT} . " =name : format file (memory dump) \n" ; -# $Help{MPFORMAT} = " --mpformat mem file\n" ; -# $Help{mpformat} = -# $Help{MPFORMAT} . " =name : format file (memory dump) \n" ; -# $Help{INTERFACE} = " --interface user interface\n" ; -# $Help{interface} = -# $Help{INTERFACE} . " =en : English\n" -# . " =nl : Dutch\n" -# . " =de : German\n" -# . " =cz : Czech\n" -# . " =uk : Brittish\n" -# . " =it : Italian\n" ; -# $Help{LANGUAGE} = " --language main hyphenation language \n" ; -# $Help{language} = -# $Help{LANGUAGE} . " =xx : standard abbreviation \n" ; -# $Help{LISTING} = " --listing produce a verbatim listing\n" ; -# $Help{listing} = -# $Help{LISTING} . " --backspace inner margin of the page\n" . -# " --topspace top/bottom margin of the page\n" . -# " --pretty enable pretty printing\n" . -# " --color use color for pretty printing\n" ; -# $Help{MAKE} = " --make build format files \n" ; -# $Help{make} = -# $Help{MAKE} . " --language patterns to include\n" . -# " --bodyfont bodyfont to preload\n" . -# " --response response interface language\n" . -# " --format TeX format\n" . -# " --mpformat MetaPost format\n" . -# " --program TeX program\n" ; -# $Help{MODE} = " --mode running mode \n" ; -# $Help{mode} = -# $Help{MODE} . " =list : modes to set\n" ; -# $Help{MODULE} = " --module typeset tex/pl/mp module\n" ; -# $Help{MPTEX} = " --mptex run an MetaPost plus btex-etex cycle\n" ; -# $Help{MPXTEX} = " --mpxtex generatet an MetaPostmpx file\n" ; -# $Help{NOARRANGE} = " --noarrange process but ignore arrange\n" ; -# $Help{NOMP} = " --nomp don't run MetaPost at all\n" ; -# $Help{NOMPRUN} = " --nomprun don't run MetaPost at runtime\n" ; -# $Help{AUTOMPRUN} = " --automprun MetaPost at runtime when needed\n" ; -# $Help{ONCE} = " --once run TeX only once (no TeXUtil either)\n" ; -# $Help{OUTPUT} = " --output specials to use\n" ; -# $Help{output} = -# $Help{OUTPUT} . " =pdftex\n" -# . " =dvips\n" -# . " =dvipsone\n" -# . " =dviwindo\n" -# . " =dviview\n" -# . " =dvipdfm\n" ; -# . " =dvipdfmx\n" ; -# $Help{PASSON} = ' --passon switches to pass to TeX ("--src" for MikTeX)' . "\n" ; -# $Help{PAGES} = " --pages pages to output\n" ; -# $Help{pages} = -# $Help{PAGES} . " =odd : odd pages\n" . -# " =even : even pages\n" . -# " =x,y:z : pages x and y to z\n" ; -# $Help{PAPER} = " --paper paper input and output format\n" ; -# $Help{paper} = -# $Help{PAPER} . " =a4a3 : A4 printed on A3\n" . -# " =a5a4 : A5 printed on A4\n" ; -# $Help{PATH} = " --path document source path\n" ; -# $Help{path} = -# $Help{PATH} . " =string : path\n" ; -# $Help{PDF} = " --pdf produce PDF directly using pdf(e)tex\n" ; -# $Help{PDFARRANGE} = " --pdfarrange arrange pdf pages\n" ; -# $Help{pdfarrange} = -# $Help{PDFARRANGE} . " --paperoffset room left at paper border\n" . -# " --paper paper format\n" . -# " --noduplex single sided\n" . -# " --backspace inner margin of the page\n" . -# " --topspace top/bottom margin of the page\n" . -# " --markings add cutmarks\n" . -# " --background =background graphic\n" . -# " --addempty add empty page after\n" . -# " --textwidth width of the original (one sided) text\n" ; -# $Help{PDFCOMBINE} = " --pdfcombine combine pages to one page\n" ; -# $Help{pdfcombine} = -# $Help{PDFCOMBINE} . " --paperformat paper format\n" . -# " --combination n*m pages per page\n" . -# " --paperoffset room left at paper border\n" ; -# $Help{PDFCOPY} = " --pdfcopy scale pages down/up\n" ; -# $Help{pdfcopy} = -# $Help{PDFCOPY} . " --scale new page scale\n" . -# " --paperoffset room left at paper border\n" . -# " --markings add cutmarks\n" . -# " --background =background graphic\n" ; -# $Help{PDFSELECT} = " --pdfselect select pdf pages\n" ; -# $Help{pdfselect} = -# $Help{PDFSELECT} . " --selection pages to select\n" . -# " =odd : odd pages\n" . -# " =even : even pages\n" . -# " =x,y:z : pages x and y to z\n" . -# " --paperoffset room left at paper border\n" . -# " --paperformat paper format\n" . -# " --backspace inner margin of the page\n" . -# " --topspace top/bottom margin of the page\n" . -# " --markings add cutmarks\n" . -# " --background =background graphic\n" . -# " --addempty add empty page after\n" . -# " --textwidth width of the original (one sided) text\n" ; -# $Help{PRINT} = " --print page imposition scheme\n" ; -# $Help{print} = -# $Help{PRINT} . " =up : 2 pages per sheet doublesided \n" . -# " =down : 2 rotated pages per sheet doublesided \n" ; -# $Help{RESULT} = " --result resulting file \n" ; -# $Help{result} = -# $Help{RESULT} . " =name : filename \n" ; -# $Help{INPUT} = " --input input file (if used)\n" ; -# $Help{input} = -# $Help{INPUT} . " =name : filename \n" ; -# $Help{SUFFIX} = " --suffix resulting file suffix\n" ; -# $Help{suffix} = -# $Help{SUFFIX} . " =string : suffix \n" ; -# $Help{RUNS} = " --runs maximum number of TeX runs \n" ; -# $Help{runs} = -# $Help{RUNS} . " =n : number of runs\n" ; -# $Help{SILENT} = " --silent minimize (status) messages\n" ; -# $Help{TEX} = " --tex TeX binary \n" ; -# $Help{tex} = -# $Help{TEX} . " =name : binary of executable \n" ; -# $Help{VERBOSE} = " --verbose shows some additional info \n" ; -# $Help{HELP} = " --help show this or more, e.g. '--help interface'\n" ; -# -# $Help{ALONE} = " --alone bypass utilities (e.g. fmtutil for non-standard fmt's)\n" ; -# $Help{TEXUTIL} = " --texutil force TeXUtil run\n" ; -# $Help{SETFILE} = " --setfile load environment (batch) file\n" ; -# -# if ($HelpAsked) -# { if (@ARGV) -# { foreach (@ARGV) { s/\-//go ; print "$Help{$_}\n" } } -# else -# { print $Help{ARRANGE} ; -# print $Help{BATCH} ; -# print $Help{NONSTOP} ; -# print $Help{CENTERPAGE} ; -# print $Help{COLOR} ; -# # print $Help{CONVERT} ; -# print $Help{INPUT} ; -# print $Help{USEMODULE} ; -# print $Help{XMLFILTER} ; -# print $Help{ENVIRONMENT} ; -# print $Help{FAST} ; -# print $Help{FIGURES} ; -# print $Help{FINAL} ; -# print $Help{FORMAT} ; -# print $Help{INTERFACE} ; -# print $Help{LISTING} ; -# print $Help{LANGUAGE} ; -# print $Help{MAKE} ; -# print $Help{MODE} ; -# print $Help{MODULE} ; -# print $Help{MPTEX} ; -# print $Help{MPXTEX} ; -# print $Help{NOARRANGE} ; -# print $Help{NOMP} ; -# print $Help{NOMPRUN} ; -# print $Help{AUTOMPRUN} ; -# print $Help{ONCE} ; -# print $Help{OUTPUT} ; -# print $Help{PAGES} ; -# print $Help{PAPER} ; -# print $Help{PASSON} ; -# print $Help{PATH} ; -# print $Help{PDFARRANGE} ; -# print $Help{PDFCOMBINE} ; -# print $Help{PDFCOPY} ; -# print $Help{PDFSELECT} ; -# print $Help{PDF} ; -# print $Help{PRINT} ; -# print $Help{RESULT} ; -# print $Help{SUFFIX} ; -# print $Help{RUNS} ; -# print $Help{SILENT} ; -# print $Help{TEX} ; -# print $Help{VERBOSE} ; -# print $Help{ALONE} ; -# print $Help{TEXUTIL} ; -# print $Help{SETFILE} ; -# print "\n" ; -# print $Help{HELP} ; -# print "\n" } -# exit 0 } - -#### new help system, written by Wybo Dekker +SetInterfaces( "nl", "dutch", "dutch" ); +SetInterfaces( "en", "english", "english" ); +SetInterfaces( "de", "german", "german" ); +SetInterfaces( "cz", "czech", "czech" ); +SetInterfaces( "uk", "brittish", "english" ); +SetInterfaces( "it", "italian", "italian" ); +SetInterfaces( "no", "norwegian", "norwegian" ); +SetInterfaces( "ro", "romanian", "romanian" ); +SetInterfaces( "xx", "experimental", "english" ); # Sub-option -struct Subopt => - { desc => '$' , # description - vals => '%' } ; # assignable values +struct Subopt => { + desc => '$', # description + vals => '%' # assignable values +}; # Main option -struct Opt => - { desc => '$' , # desciption - vals => '%' , # assignable values - subs => '%' } ; # suboptions +struct Opt => { + desc => '$', # desciption + vals => '%', # assignable values + subs => '%' # suboptions +}; + +my $helpdone = 0; + +sub print_subopt { + my ( $k, $opt ) = @_; + $~ = 'H3'; + write; + for $k ( sort keys %{ $opt->vals } ) { + print_val( $k, ${ $opt->vals }{$k} ); + } + format H3 = +@>>>>>>>>>>>>>>>>>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +"--$k",$opt->desc +. +} + +sub print_val { + my ( $k, $opt ) = @_; + $~ = 'H2'; + write; + format H2 = + @<<<<<<<< : @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +$k,$opt +. +} + +# read all options + +my $recurse = -1 ; +my $shorthelp; +my @help; +my @opts = <DATA>; +while (@opts) { + $_ = shift @opts; + last if /^--+/; + my ( $k, $v ) = split( /\s+/, $_, 2 ); # was \t + $Help{$k} = read_options($v); +} # read a main option plus its # description, @@ -909,696 +818,734 @@ struct Opt => # description and # assignable values -sub read_options - { $recurse++ ; +sub read_options { + $recurse++; my $v = shift; - chomp ; - my $opt = $recurse ? Subopt->new() : Opt->new() ; - $opt->desc($v) ; - - while(@opts) - { $_ = shift @opts ; - if (/^--+/) - { unshift @opts, $_ if $recurse ; last } - if ($recurse && !/^=/) - { unshift @opts, $_ ; last } - chomp ; - my ($kk,$vv) = split(/\s+/,$_,2); # was \t - $vv||='' ; - if (/^=/) - { $opt->vals($kk,$vv) } - elsif (!$recurse) - { $opt->subs($kk,read_options($vv)) } } - $recurse-- ; - $opt } - -my $helpdone = 0 ; - -sub print_opt - { my ($k,$opt)=@_ ; - if ($helpdone) { $shorthelp or print "\n" } $helpdone = 1 ; # hh - $~ = 'H1' ; - write ; - return if $shorthelp<0 ; - for $k (sort keys %{$opt->vals}) {print_val($k,${$opt->vals}{$k}) } - return if $shorthelp>0 ; - for $k (sort keys %{$opt->subs}) {print_subopt($k,${$opt->subs}{$k}) } -format H1 = -@>>>>>>>>>>>>>>>>>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -"--$k",$opt->desc -. - } - -sub print_subopt - { my ($k,$opt) = @_ ; - $~ = 'H3' ; - write ; - for $k (sort keys %{$opt->vals}) - {print_val($k,${$opt->vals}{$k}) } -format H3 = + chomp; + my $opt = $recurse ? Subopt->new() : Opt->new(); + $opt->desc($v); + + while (@opts) { + $_ = shift @opts; + if (/^--+/) { unshift @opts, $_ if $recurse; last } + if ( $recurse && !/^=/ ) { unshift @opts, $_; last } + chomp; + my ( $kk, $vv ) = split( /\s+/, $_, 2 ); # was \t + $vv ||= ''; + if (/^=/) { $opt->vals( $kk, $vv ) } + elsif ( !$recurse ) { $opt->subs( $kk, read_options($vv) ) } + } + $recurse--; + $opt; +} + +sub print_opt { + my ( $k, $opt ) = @_; + if ($helpdone) { $shorthelp or print "\n" } + $helpdone = 1; # hh + $~ = 'H1'; + write; + return if $shorthelp < 0; + for $k ( sort keys %{ $opt->vals } ) { + print_val( $k, ${ $opt->vals }{$k} ); + } + return if $shorthelp > 0; + + for $k ( sort keys %{ $opt->subs } ) { + print_subopt( $k, ${ $opt->subs }{$k} ); + } + format H1 = @>>>>>>>>>>>>>>>>>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< "--$k",$opt->desc . - } - -sub print_val - { my ($k,$opt) = @_ ; - $~ = 'H2' ; write ; -format H2 = - @<<<<<<<< : @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -$k,$opt -. - } - -# read all options - -$recurse-- ; -@opts = <DATA> ; -while(@opts) - { $_ = shift @opts ; - last if /^--+/ ; - my ($k,$v) = split(/\s+/,$_,2); # was \t - $Help{$k} = read_options($v) } +} # help to help -sub show_help_options - { print # "\n" . - " --help overview of all options and their values\n" . - " --help all all about all options\n" . - " --help short just the main options\n" . - " --help mode ... pdf all about a few options\n" . - " --help '*.pdf' all about options containing 'pdf'\n" } ; +sub show_help_options { + print # "\n" . + " --help overview of all options and their values\n" + . " --help all all about all options\n" + . " --help short just the main options\n" + . " --help mode ... pdf all about a few options\n" + . " --help '*.pdf' all about options containing 'pdf'\n"; +} # determine what user wants to see -if ($HelpAsked) - { $shorthelp = 0 ; - @help = (sort keys %Help) ; - if ("@ARGV" eq "all") - { # everything - } - elsif ("@ARGV" eq "short") - { # nearly everything - $shorthelp-- } - elsif ("@ARGV" eq "help") - { # help on help - show_help_options ; - exit } - elsif (@ARGV) - { # one or a few options, completely - my @h=@ARGV ; - @help = () ; - for (@h) - { # print "testing $_\n"; - # next if (/^[\*\?]/) ; # HH, else error - if (/^[\*\?]/) { $_ = ".$_" } # HH, else error - $Help{$_} and push(@help,$_) or do - { my $unknown = $_ ; - for (keys %Help) - { /$unknown/ and push(@help,$_) } } } } - else - { # all main option and their assignable values - $shorthelp++ } } - -sub show_help_info - { map { print_opt($_,$Help{$_}) } @help } +if ($HelpAsked) { + $shorthelp = 0; + @help = ( sort keys %Help ); + if ( "@ARGV" eq "all" ) { # everything + } elsif ( "@ARGV" eq "short" ) { # nearly everything + $shorthelp--; + } elsif ( "@ARGV" eq "help" ) { # help on help + show_help_options; + exit; + } elsif (@ARGV) { # one or a few options, completely + my @h = @ARGV; + @help = (); + for (@h) { # print "testing $_\n"; + # next if (/^[\*\?]/) ; # HH, else error + if (/^[\*\?]/) { $_ = ".$_" } # HH, else error + $Help{$_} and push( @help, $_ ) or do { + my $unknown = $_; + for ( keys %Help ) { /$unknown/ and push( @help, $_ ) } + } + } + } else { # all main option and their assignable values + $shorthelp++; + } +} + +sub show_help_info { + map { print_opt( $_, $Help{$_} ) } @help; +} # uncomment this to see the structure of a Help element: # print Dumper($Help{pdfselect}); #### end of help system -my $FinalRunNeeded = 0 ; - -sub MPJobName - { my $JobName = shift ; - my $MPfile = shift ; - my $MPJobName = '' ; - if (-s "$JobName-$MPfile.mp">100) - { $MPJobName = "$JobName-$MPfile.mp" } - elsif (-s "$MPfile.mp">100) - { $MPJobName = "$MPfile.mp" } - else - { $MPJobName = "" } - return $MPJobName } - -sub RunPerlScript - { my ($ScriptName, $Options) = @_ ; - my $cmd = '' ; - if ($dosish) - { if (-e "own_path$ScriptName$own_type") - { $cmd = "$own_stub$own_quote$own_path$ScriptName$own_type$own_quote $Options" } - elsif (-e "$TeXScriptsPath$ScriptName$own_type") - { $cmd = "$own_stub$own_quote$TeXScriptsPath$ScriptName$own_type$own_quote $Options" } - else - { $cmd = "" } } - else - { $cmd = "$ScriptName $Options" } - unless ($cmd eq "") { system($cmd) } } - -sub ConvertXMLFile - { my $FileName = shift ; RunPerlScript($SGMLtoTeX, "$FileName.xml") } - -sub ConvertSGMLFile - { my $FileName = shift ; RunPerlScript($SGMLtoTeX, "$FileName.sgm") } - -my $FullFormat = '' ; - -sub CheckOutputFormat - { my $Ok = 1 ; - if ($OutputFormat ne 'standard') - { my @OutputFormat = split(/,/,$OutputFormat) ; - foreach my $F (@OutputFormat) - { if (defined($OutputFormats{lc $F})) - { my $OF = $OutputFormats{lc $F} ; - next if (",$FullFormat," =~ /\,$OF\,/) ; +my $FinalRunNeeded = 0; + +sub MPJobName { + my $JobName = shift; + my $MPfile = shift; + my $MPJobName = ''; + if ( -e "$JobName-$MPfile.mp" && -s "$JobName-$MPfile.mp" > 100 ) { + $MPJobName = "$JobName-$MPfile.mp" + } elsif ( -e "$MPfile.mp" && -s "$MPfile.mp" > 100 ) { + $MPJobName = "$MPfile.mp" + } else { $MPJobName = "" } + return $MPJobName; +} + +sub RunPerlScript { + my ( $ScriptName, $Options ) = @_; + my $cmd = ''; + $own_quote = ($own_path =~ m/^[^\"].* / ? "\"" : "") ; + if ($dosish) { + if ( -e "own_path$ScriptName$own_type" ) { + $cmd = +"$own_stub$own_quote$own_path$ScriptName$own_type$own_quote $Options"; + } elsif ( -e "$TeXScriptsPath$ScriptName$own_type" ) { + $cmd = +"$own_stub$own_quote$TeXScriptsPath$ScriptName$own_type$own_quote $Options"; + } else { + $cmd = ""; + } + } else { + $cmd = "$ScriptName $Options"; + } + unless ( $cmd eq "" ) { system($cmd) } +} + +sub ConvertXMLFile { + my $FileName = shift; + RunPerlScript( $SGMLtoTeX, "$FileName.xml" ); +} + +sub ConvertSGMLFile { + my $FileName = shift; + RunPerlScript( $SGMLtoTeX, "$FileName.sgm" ); +} + +my $FullFormat = ''; + +sub CheckOutputFormat { + my $Ok = 1; + if ( $OutputFormat ne 'standard' ) { + my @OutputFormat = split( /,/, $OutputFormat ); + foreach my $F (@OutputFormat) { + if ( defined( $OutputFormats{ lc $F } ) ) { + my $OF = $OutputFormats{ lc $F }; + next if ( ",$FullFormat," =~ /\,$OF\,/ ); if ($FullFormat) { $FullFormat .= "," } - $FullFormat .= "$OutputFormats{lc $F}" } - else - { $Ok = 0 } } - if (!$Ok) - { print $Help{output} } - elsif ($FullFormat) - { print OPT "\\setupoutput[$FullFormat]\n" } } - unless ($FullFormat) - { $FullFormat = $OutputFormat } } # 'standard' to terminal - -sub MakeOptionFile - { my ($FinalRun, $FastDisabled, $JobName, $JobSuffix, $KindOfRun) = @_ ; - open (OPT, ">$JobName.top") ; - print OPT "\% $JobName.top\n" ; - print OPT "\\unprotect\n" ; - if ($ModeFile ne '') - { print OPT "\\readlocfile{$ModeFile}{}{}" } - if ($Result ne '') - { print OPT "\\setupsystem[file=$Result]\n" } - elsif ($Suffix) - { print OPT "\\setupsystem[file=$JobName$Suffix]\n" } - if ($RunPath ne "") - { $RunPath =~ s/\\/\//go ; - $RunPath =~ s/\/$//go ; - print OPT "\\usepath[$RunPath]\n" } - $MainLanguage = lc $MainLanguage ; - unless ($MainLanguage eq "standard") - { print OPT "\\setuplanguage[$MainLanguage]\n" } + $FullFormat .= "$OutputFormats{lc $F}"; + } else { + $Ok = 0; + } + } + if ( !$Ok ) { + print $Help{'output'}; + } elsif ($FullFormat) { + print OPT "\\setupoutput[$FullFormat]\n"; + } + } + unless ($FullFormat) { $FullFormat = $OutputFormat } +} # 'standard' to terminal + +sub MakeOptionFile { + my ( $FinalRun, $FastDisabled, $JobName, $JobSuffix, $KindOfRun ) = @_; + open( OPT, ">$JobName.top" ); + print OPT "\% $JobName.top\n"; + print OPT "\\unprotect\n"; + if ( $ModeFile ne '' ) { print OPT "\\readlocfile{$ModeFile}{}{}" } + if ( $Result ne '' ) { print OPT "\\setupsystem[file=$Result]\n" } + elsif ($Suffix) { print OPT "\\setupsystem[file=$JobName$Suffix]\n" } + if ( $RunPath ne "" ) { + $RunPath =~ s/\\/\//go; + $RunPath =~ s/\/$//go; + print OPT "\\usepath[$RunPath]\n"; + } + $MainLanguage = lc $MainLanguage; + unless ( $MainLanguage eq "standard" ) { + print OPT "\\setuplanguage[$MainLanguage]\n"; + } # can best become : \use...[mik] / [web] - if ($TeXShell =~ /MikTeX/io) - { print OPT "\\def\\MPOSTbatchswitch \{$MpBatchFlag\}" ; - print OPT "\\def\\MPOSTnonstopswitch \{$MpNonStopFlag\}" ; - print OPT "\\def\\MPOSTformatswitch \{$MpPassString $MpFormatFlag\}" } + if ( $TeXShell =~ /MikTeX/io ) { + print OPT "\\def\\MPOSTbatchswitch \{$MpBatchFlag\}"; + print OPT "\\def\\MPOSTnonstopswitch \{$MpNonStopFlag\}"; + print OPT "\\def\\MPOSTformatswitch \{$MpPassString $MpFormatFlag\}"; + } # - if ($FullFormat ne 'standard') - { print OPT "\\setupoutput[$FullFormat]\n" } - if ($EnterBatchMode) - { print OPT "\\batchmode\n" } - if ($EnterNonStopMode) - { print OPT "\\nonstopmode\n" } - if ($UseColor) - { print OPT "\\setupcolors[\\c!status=\\v!start]\n" } - if ($NoMPMode||$NoMPRun||$AutoMPRun) - { print OPT "\\runMPgraphicsfalse\n" } - if (($FastMode)&&(!$FastDisabled)) - { print OPT "\\fastmode\n" } - if ($SilentMode) - { print OPT "\\silentmode\n" } - if ($Separation ne "") - { print OPT "\\setupcolors[\\c!splitsen=$Separation]\n" } - if ($SetupPath) - { print OPT "\\setupsystem[\\c!gebied=\{$SetupPath\}]\n" } - print OPT "\\setupsystem[\\c!n=$KindOfRun]\n" ; - $_ = $PaperFormat ; - #unless (($PdfArrange)||($PdfSelect)||($PdfCombine)||($PdfCopy)) - unless (($PdfSelect)||($PdfCombine)||($PdfCopy)) - { if (/.4.3/goi) - { print OPT "\\setuppapersize[A4][A3]\n" } - elsif (/.5.4/goi) - { print OPT "\\setuppapersize[A5][A4]\n" } - elsif (!/standard/) - { s/x/\*/io ; + if ( $FullFormat ne 'standard' ) { + print OPT "\\setupoutput[$FullFormat]\n"; + } + if ($EnterBatchMode) { print OPT "\\batchmode\n" } + if ($EnterNonStopMode) { print OPT "\\nonstopmode\n" } + if ($UseColor) { print OPT "\\setupcolors[\\c!status=\\v!start]\n" } + if ( $NoMPMode || $NoMPRun || $AutoMPRun ) { + print OPT "\\runMPgraphicsfalse\n"; + } + if ( ($FastMode) && ( !$FastDisabled ) ) { print OPT "\\fastmode\n" } + if ($SilentMode) { print OPT "\\silentmode\n" } + if ( $Separation ne "" ) { + print OPT "\\setupcolors[\\c!splitsen=$Separation]\n"; + } + if ($SetupPath) { print OPT "\\setupsystem[\\c!gebied=\{$SetupPath\}]\n" } + print OPT "\\setupsystem[\\c!n=$KindOfRun]\n"; + $_ = $PaperFormat; + #unless (($PdfArrange)||($PdfSelect)||($PdfCombine)||($PdfCopy)) + unless ( ($PdfSelect) || ($PdfCombine) || ($PdfCopy) ) { + if (/.4.3/goi) { print OPT "\\setuppapersize[A4][A3]\n" } + elsif (/.5.4/goi) { print OPT "\\setuppapersize[A5][A4]\n" } + elsif ( !/standard/ ) { + s/x/\*/io; if (/\w+\d+/) { $_ = uc $_ } - my ($from,$to) = split (/\*/) ; - if ($to eq "") { $to = $from } - print OPT "\\setuppapersize[$from][$to]\n" } } - if (($PdfSelect||$PdfCombine||$PdfCopy||$PdfArrange)&&($Background ne '')) - { print " background graphic : $Background\n" ; - print OPT "\\defineoverlay[whatever][{\\externalfigure[$Background][\\c!factor=\\v!max]}]\n" ; - print OPT "\\setupbackgrounds[\\v!pagina][\\c!achtergrond=whatever]\n" } - if ($CenterPage) - { print OPT "\\setuplayout[\\c!plaats=\\v!midden,\\c!markering=\\v!aan]\n" } - if ($NoArrange) - { print OPT "\\setuparranging[\\v!blokkeer]\n" } - elsif ($Arrange||$PdfArrange) - { $FinalRunNeeded = 1 ; - if ($FinalRun) - { if ($NoDuplex) - {$DupStr = "" } - else - {$DupStr = ",\\v!dubbelzijdig" } - if ($PrintFormat == '') - { print OPT "\\setuparranging[\\v!normaal]\n" } - elsif ($PrintFormat =~ /.*up/goi) - { print OPT "\\setuparranging[2UP,\\v!geroteerd$DupStr]\n" } - elsif ($PrintFormat =~ /.*down/goi) - { print OPT "\\setuparranging[2DOWN,\\v!geroteerd$DupStr]\n" } - elsif ($PrintFormat =~ /.*side/goi) - { print OPT "\\setuparranging[2SIDE,\\v!geroteerd$DupStr]\n" } - else - { print OPT "\\setuparranging[$PrintFormat]\n" } } - else - { print OPT "\\setuparranging[\\v!blokkeer]\n" } } - if ($Arguments) - { print OPT "\\setupenv[$Arguments]\n" } - if ($Input) - { print OPT "\\setupsystem[inputfile=$Input]\n" } - else - { print OPT "\\setupsystem[inputfile=$JobName.$JobSuffix]\n" } - if ($Random) - { print OPT "\\setupsystem[\\c!willekeur=$RandomSeed]\n" } - if ($Mode) - { print OPT "\\enablemode[$Mode]\n" } - if ($Pages) - { if (lc $Pages eq "odd") - { print OPT "\\chardef\\whichpagetoshipout=1\n" } - elsif (lc $Pages eq "even") - { print OPT "\\chardef\\whichpagetoshipout=2\n" } - else - { my @Pages = split (/\,/,$Pages) ; - $Pages = '' ; - foreach my $page (@Pages) - { if ($page =~ /\:/) - { my ($from,$to) = split (/\:/,$page) ; - foreach (my $i=$from;$i<=$to;$i++) - { $Pages .= $i . ',' } } - else - { $Pages .= $page . ',' } } - chop $Pages ; - print OPT "\\def\\pagestoshipout\{$Pages\}\n" } } - print OPT "\\protect\n" ; - if ($Filters ne "") - { foreach my $F (split(/,/,$Filters)) { print OPT "\\useXMLfilter[$F]\n" } } - if ($Modules ne "") - { foreach my $M (split(/,/,$Modules)) { print OPT "\\usemodule[$M]\n" } } - if ($Environments ne "") - { foreach my $E (split(/,/,$Environments)) { print OPT "\\environment $E\n" } } - close (OPT) } - -my $UserFileOk = 0 ; -my @MainLanguages ; -my $AllLanguages = '' ; - -sub MakeUserFile - { $UserFileOk = 0 ; - if ($AllPatterns) - { open (USR, ">cont-fmt.tex") ; - print USR "\\preloadallpatterns\n" } - else - { return if (($MainLanguage eq 'standard')&& - ($MainBodyFont eq 'standard')) ; - print " preparing user file : cont-fmt.tex\n" ; - open (USR, ">cont-fmt.tex") ; - print USR "\\unprotect\n" ; - $AllLanguages = $MainLanguage ; - if ($MainLanguage ne 'standard') - { @MainLanguages = split (/\,/,$MainLanguage) ; - foreach (@MainLanguages) - { print USR "\\installlanguage[\\s!$_][\\c!status=\\v!start]\n" } - $MainLanguage = $MainLanguages[0] ; - print USR "\\setupcurrentlanguage[\\s!$MainLanguage]\n" } - if ($MainBodyFont ne 'standard') - { print USR "\\definetypescriptsynonym[cmr][$MainBodyFont]" ; - print USR "\\definefilesynonym[font-cmr][font-$MainBodyFont]\n" } - print USR "\\protect\n" } - print USR "\\endinput\n" ; - close (USR) ; - ReportUserFile () ; - print "\n" ; - $UserFileOk = 1 } - -sub RemoveResponseFile - { unlink "mult-def.tex" } - -sub MakeResponseFile - { if ($MainResponse eq 'standard') - { RemoveResponseFile() } - elsif (! defined ($ResponseInterface{$MainResponse})) - { RemoveResponseFile() } - else - { my $MR = $ResponseInterface{$MainResponse} ; - print " preparing interface file : mult-def.tex\n" ; - print " response language : $MR\n" ; - open (DEF, ">mult-def.tex") ; - print DEF "\\def\\currentresponses\{$MR\}\n\\endinput\n" ; - close (DEF) } } - -sub RestoreUserFile - { unlink "cont-fmt.log" ; - rename "cont-fmt.tex", "cont-fmt.log" ; - ReportUserFile () } - -sub ReportUserFile - { return unless ($UserFileOk) ; - print "\n" ; - if ($MainLanguage ne 'standard') - { print " additional patterns : $AllLanguages\n" ; - print " default language : $MainLanguage\n" } - if ($MainBodyFont ne 'standard') - { print " default bodyfont : $MainBodyFont\n" } } - -sub CompareFiles # 2 = tuo - { my ($File1, $File2) = @_ ; - my $Str1 = my $Str2 = '' ; - if ( ((-s $File1) eq (-s $File2))&& - (open(TUO1,$File1)) && - (open(TUO2,$File2)) ) - { while (1) - { $Str1 = <TUO1> ; chomp $Str1 ; - $Str2 = <TUO2> ; chomp $Str2 ; - if ($Str1 eq $Str2) - { unless ($Str1) { close(TUO1) ; close(TUO2) ; return 1 } } - else - { close(TUO1) ; close(TUO2) ; return 0 } } } - else - { return 0 } } - -#sub CheckPositions -# { return if ($DVIspec eq '') || ($OutputFormat eq 'pdftex') ; -# my $JobName = shift ; my $TuoName = "$JobName.tuo" ; -# if (open(POS,"$TuoName")) -# { seek POS, (-s $TuoName) - 5000, 0 ; -# while (<POS>) -# { if (/\% *position commands *\: *(\d*) *\(unresolved\)/io) -# { if ($1) -# { print " dvi positions : $1 ($DVIspec ." ; -# close (POS) ; -# open(POS,">>$TuoName") ; -# $ENV{uc "$DVIspec.TEXFONTSDIR"} = $TeXFontsPath ; -# print POS "\%\n\% extracted from dvi file by $DVIspec:\n\%\n" ; -# close(POS) ; -# print "." ; -# RunPerlScript ($DVIspec, "$JobName >> $TuoName") ; -# print ".)\n" } -# last } } -# close (POS) } } - -sub CheckPositions - { } - -# my @ExtraPrograms = () ; -# -# sub CheckExtraPrograms -# { my $JobName = shift ; my $TuoName = "$JobName.tuo" ; -# if (open(PRO,"$TuoName")) -# { seek PRO, (-s $TuoName) - 5000, 0 ; -# while (<PRO>) -# { if (/\%\s*extra\s*program\s*\:\s*(.*)\s*$/io) -# { push @ExtraPrograms, $1 } } -# close (PRO) } -# foreach my $EP (@ExtraPrograms) -# { if ($EP =~ /(.+)\s*(.*)/o) -# { print "\n extra program : $1\n" ; -# system($EP) ; -# print "\n" } } } - -my $ConTeXtVersion = "unknown" ; -my $ConTeXtModes = '' ; - -sub ScanPreamble - { my ($FileName) = @_ ; - open (TEX, $FileName) ; - while (<TEX>) - { chomp ; - if (/^\%.*/) - { if (/tex=([a-z]*)/goi) { $TeXExecutable = $1 } - if (/translat.*?=([\:\/0-9\-a-z]*)/goi) { $TeXTranslation = $1 } - if (/program=([a-z]*)/goi) { $TeXExecutable = $1 } - if (/output=([a-z\,\-]*)/goi) { $OutputFormat = $1 } - if (/modes=([a-z\,\-]*)/goi) { $ConTeXtModes = $1 } - if (/textree=([a-z\-]*)/goi) { $TeXTree = $1 } - if (/texroot=([a-z\-]*)/goi) { $TeXRoot = $1 } - if ($ConTeXtInterface eq "unknown") - { if (/format=([a-z]*)/goi) { $ConTeXtInterface = $ConTeXtInterfaces{$1} } - if (/interface=([a-z]*)/goi) { $ConTeXtInterface = $ConTeXtInterfaces{"$1"} } } - if (/version=([a-z]*)/goi) { $ConTeXtVersion = $1 } } - else - { last } } - close(TEX) } - -sub ScanContent - { my ($ConTeXtInput) = @_ ; - open (TEX, $ConTeXtInput) ; - while (<TEX>) - { if (/\\(starttekst|stoptekst|startonderdeel|startdocument|startoverzicht)/o) - { $ConTeXtInterface = "nl" ; last } - elsif (/\\(stelle|verwende|umgebung|benutze)/o) - { $ConTeXtInterface = "de" ; last } - elsif (/\\(stel|gebruik|omgeving)/o) - { $ConTeXtInterface = "nl" ; last } - elsif (/\\(use|setup|environment)/o) - { $ConTeXtInterface = "en" ; last } - elsif (/\\(usa|imposta|ambiente)/o) - { $ConTeXtInterface = "it" ; last } - elsif (/(height|width|style)=/o) - { $ConTeXtInterface = "en" ; last } - elsif (/(hoehe|breite|schrift)=/o) - { $ConTeXtInterface = "de" ; last } + my ( $from, $to ) = split(/\*/); + if ( $to eq "" ) { $to = $from } + print OPT "\\setuppapersize[$from][$to]\n"; + } + } + if ( ( $PdfSelect || $PdfCombine || $PdfCopy || $PdfArrange ) + && ( $Background ne '' ) ) + { + print " background graphic : $Background\n"; + print OPT +"\\defineoverlay[whatever][{\\externalfigure[$Background][\\c!factor=\\v!max]}]\n"; + print OPT "\\setupbackgrounds[\\v!pagina][\\c!achtergrond=whatever]\n"; + } + if ($CenterPage) { + print OPT + "\\setuplayout[\\c!plaats=\\v!midden,\\c!markering=\\v!aan]\n"; + } + if ($NoArrange) { print OPT "\\setuparranging[\\v!blokkeer]\n" } + elsif ( $Arrange || $PdfArrange ) { + $FinalRunNeeded = 1; + if ($FinalRun) { + my $DupStr; + if ($NoDuplex) { $DupStr = "" } + else { $DupStr = ",\\v!dubbelzijdig" } + if ( $PrintFormat == '' ) { + print OPT "\\setuparranging[\\v!normaal]\n"; + } elsif ( $PrintFormat =~ /.*up/goi ) { + print OPT "\\setuparranging[2UP,\\v!geroteerd$DupStr]\n"; + } elsif ( $PrintFormat =~ /.*down/goi ) { + print OPT "\\setuparranging[2DOWN,\\v!geroteerd$DupStr]\n"; + } elsif ( $PrintFormat =~ /.*side/goi ) { + print OPT "\\setuparranging[2SIDE,\\v!geroteerd$DupStr]\n"; + } else { + print OPT "\\setuparranging[$PrintFormat]\n"; + } + } else { + print OPT "\\setuparranging[\\v!blokkeer]\n"; + } + } + if ($Arguments) { print OPT "\\setupenv[$Arguments]\n" } + if ($Input) { print OPT "\\setupsystem[inputfile=$Input]\n" } + else { print OPT "\\setupsystem[inputfile=$JobName.$JobSuffix]\n" } + if ($Random) { print OPT "\\setupsystem[\\c!willekeur=$RandomSeed]\n" } + if ($Mode) { print OPT "\\enablemode[$Mode]\n" } + if ($Pages) { + if ( lc $Pages eq "odd" ) { + print OPT "\\chardef\\whichpagetoshipout=1\n"; + } elsif ( lc $Pages eq "even" ) { + print OPT "\\chardef\\whichpagetoshipout=2\n"; + } else { + my @Pages = split( /\,/, $Pages ); + $Pages = ''; + foreach my $page (@Pages) { + if ( $page =~ /\:/ ) { + my ( $from, $to ) = split( /\:/, $page ); + foreach ( my $i = $from ; $i <= $to ; $i++ ) { + $Pages .= $i . ','; + } + } else { + $Pages .= $page . ','; + } + } + chop $Pages; + print OPT "\\def\\pagestoshipout\{$Pages\}\n"; + } + } + print OPT "\\protect\n"; + if ( $Filters ne "" ) { + foreach my $F ( split( /,/, $Filters ) ) { + print OPT "\\useXMLfilter[$F]\n"; + } + } + if ( $Modules ne "" ) { + foreach my $M ( split( /,/, $Modules ) ) { + print OPT "\\usemodule[$M]\n"; + } + } + if ( $Environments ne "" ) { + foreach my $E ( split( /,/, $Environments ) ) { + print OPT "\\environment $E\n"; + } + } + close(OPT); +} + +my $UserFileOk = 0; +my @MainLanguages; +my $AllLanguages = ''; + +sub MakeUserFile { + $UserFileOk = 0; + if ($AllPatterns) { + open( USR, ">cont-fmt.tex" ); + print USR "\\preloadallpatterns\n"; + } else { + return + if ( ( $MainLanguage eq 'standard' ) + && ( $MainBodyFont eq 'standard' ) ); + print " preparing user file : cont-fmt.tex\n"; + open( USR, ">cont-fmt.tex" ); + print USR "\\unprotect\n"; + $AllLanguages = $MainLanguage; + if ( $MainLanguage ne 'standard' ) { + @MainLanguages = split( /\,/, $MainLanguage ); + foreach (@MainLanguages) { + print USR "\\installlanguage[\\s!$_][\\c!status=\\v!start]\n"; + } + $MainLanguage = $MainLanguages[0]; + print USR "\\setupcurrentlanguage[\\s!$MainLanguage]\n"; + } + if ( $MainBodyFont ne 'standard' ) { + print USR "\\definetypescriptsynonym[cmr][$MainBodyFont]"; + print USR "\\definefilesynonym[font-cmr][font-$MainBodyFont]\n"; + } + print USR "\\protect\n"; + } + print USR "\\endinput\n"; + close(USR); + ReportUserFile(); + print "\n"; + $UserFileOk = 1; +} + +sub RemoveResponseFile { unlink "mult-def.tex" } + +sub MakeResponseFile { + if ( $MainResponse eq 'standard' ) { RemoveResponseFile() } + elsif ( !defined( $ResponseInterface{$MainResponse} ) ) { + RemoveResponseFile(); + } else { + my $MR = $ResponseInterface{$MainResponse}; + print " preparing interface file : mult-def.tex\n"; + print " response language : $MR\n"; + open( DEF, ">mult-def.tex" ); + print DEF "\\def\\currentresponses\{$MR\}\n\\endinput\n"; + close(DEF); + } +} + +sub RestoreUserFile { + unlink "cont-fmt.log"; + rename "cont-fmt.tex", "cont-fmt.log"; + ReportUserFile(); +} + +sub ReportUserFile { + return unless ($UserFileOk); + print "\n"; + if ( $MainLanguage ne 'standard' ) { + print " additional patterns : $AllLanguages\n"; + print " default language : $MainLanguage\n"; + } + if ( $MainBodyFont ne 'standard' ) { + print " default bodyfont : $MainBodyFont\n"; + } +} + +sub CheckPositions { } + +my $ConTeXtVersion = "unknown"; +my $ConTeXtModes = ''; + +sub ScanPreamble { + my ($FileName) = @_; + open( TEX, $FileName ); + while (<TEX>) { + chomp; + if (/^\%.*/) { + if (/tex=([a-z]*)/goi) { $TeXExecutable = $1 } + if (/translat.*?=([\:\/0-9\-a-z]*)/goi) { $TeXTranslation = $1 } + if (/program=([a-z]*)/goi) { $TeXExecutable = $1 } + if (/output=([a-z\,\-]*)/goi) { $OutputFormat = $1 } + if (/modes=([a-z\,\-]*)/goi) { $ConTeXtModes = $1 } + if (/textree=([a-z\-]*)/goi) { $TeXTree = $1 } + if (/texroot=([a-z\-]*)/goi) { $TeXRoot = $1 } + if ( $ConTeXtInterface eq "unknown" ) { + + if (/format=([a-z]*)/goi) { + $ConTeXtInterface = $ConTeXtInterfaces{$1}; + } + if (/interface=([a-z]*)/goi) { + $ConTeXtInterface = $ConTeXtInterfaces{"$1"}; + } + } + if (/version=([a-z]*)/goi) { $ConTeXtVersion = $1 } + } else { + last; + } + } + close(TEX); +} + +sub ScanContent { + my ($ConTeXtInput) = @_; + open( TEX, $ConTeXtInput ); + while (<TEX>) { + if ( +/\\(starttekst|stoptekst|startonderdeel|startdocument|startoverzicht)/ + ) + { + $ConTeXtInterface = "nl"; + last; + } elsif (/\\(stelle|verwende|umgebung|benutze)/) { + $ConTeXtInterface = "de"; + last; + } elsif (/\\(stel|gebruik|omgeving)/) { + $ConTeXtInterface = "nl"; + last; + } elsif (/\\(use|setup|environment)/) { + $ConTeXtInterface = "en"; + last; + } elsif (/\\(usa|imposta|ambiente)/) { + $ConTeXtInterface = "it"; + last; + } elsif (/(height|width|style)=/) { + $ConTeXtInterface = "en"; + last; + } elsif (/(hoehe|breite|schrift)=/) { + $ConTeXtInterface = "de"; + last; + } # brr, can be \c! - elsif (/(hoogte|breedte|letter)=/o) - { $ConTeXtInterface = "nl" ; last } - elsif (/(altezza|ampiezza|stile)=/o) - { $ConTeXtInterface = "it" ; last } - elsif (/externfiguur/o) - { $ConTeXtInterface = "nl" ; last } - elsif (/externalfigure/o) - { $ConTeXtInterface = "en" ; last } - elsif (/externeabbildung/o) - { $ConTeXtInterface = "de" ; last } - elsif (/figuraesterna/o) - { $ConTeXtInterface = "it" ; last } } - close (TEX) } - -if ($ConTeXtInterfaces{$ConTeXtInterface}) - { $ConTeXtInterface = $ConTeXtInterfaces{$ConTeXtInterface} } - -my $Problems = my $Ok = 0 ; - -sub RunTeX - { my ($JobName,$JobSuffix) = @_ ; - my $StartTime = time ; - my $cmd ; - my $TeXProgNameFlag ; - if (!$dosish) # we assume tetex on linux - { $TeXProgramPath = '' ; - $TeXFormatPath = '' ; - if (!$TeXProgNameFlag && - ($Format =~ /^cont/) && - ($TeXPassString !~ /progname/io)) - { $TeXProgNameFlag = "-progname=context" } } - $cmd = "$own_quote$TeXProgramPath$TeXExecutable$own_quote $TeXProgNameFlag " . - "$TeXPassString $PassOn " ; - #$cmd .= " -kpathsea-debug=62536 " ; - if ($EnterBatchMode) - { $cmd .= "$TeXBatchFlag " } - if ($EnterNonStopMode) - { $cmd .= "$TeXNonStopFlag " } - if ($TeXTranslation ne '') - { $cmd .= "-translate-file=$TeXTranslation " } - $cmd .= "$TeXFormatFlag$TeXFormatPath$Format $JobName.$JobSuffix" ; - if ($Verbose) { print "\n$cmd\n\n" } - if ($EnterBatchMode) -# { $Problems = system("$cmd 1>batch.log 2>batch.err") ; -# unlink "texexec.nul" } - { $Problems = system("$cmd") } - else - { $Problems = system ("$cmd") } - my $StopTime = time - $StartTime ; - print "\n return code : $Problems" ; - print "\n run time : $StopTime seconds\n" ; - return $Problems } - -sub PushResult - { my $File = shift ; $File =~ s/\..*$//o ; $Result =~ s/\..*$//o ; - if (($Result ne '') && ($Result ne $File)) - { print " outputfile : $Result\n" ; - unlink "texexec.tuo" ; rename "$File.tuo", "texexec.tuo" ; - unlink "texexec.log" ; rename "$File.log", "texexec.log" ; - unlink "texexec.dvi" ; rename "$File.dvi", "texexec.dvi" ; - unlink "texexec.pdf" ; rename "$File.pdf", "texexec.pdf" ; - if (-e "$Result.tuo") - { unlink "$File.tuo" ; - rename "$Result.tuo", "$File.tuo" } } - if ($Optimize) - { unlink "$File.tuo" } } - -sub PopResult - { my $File = shift ; $File =~ s/\..*$//o ; $Result =~ s/\..*$//o ; - if (($Result ne '') && ($Result ne $File)) - { print " renaming : $File to $Result\n" ; - unlink "$Result.tuo" ; rename "$File.tuo", "$Result.tuo" ; - unlink "$Result.log" ; rename "$File.log", "$Result.log" ; - unlink "$Result.dvi" ; rename "$File.dvi", "$Result.dvi" ; - if (-e "$File.dvi") { CopyFile("$File.dvi", "$Result.dvi") } - unlink "$Result.pdf" ; rename "$File.pdf", "$Result.pdf" ; - if (-e "$File.pdf") { CopyFile("$File.pdf", "$Result.pdf") } - return if ($File ne "texexec") ; - rename "texexec.tuo", "$File.tuo" ; - rename "texexec.log", "$File.log" ; - rename "texexec.dvi", "$File.dvi" ; - rename "texexec.pdf", "$File.pdf" } } - -sub RunTeXutil - { my $StopRunning ; - my $JobName = shift ; - unlink "$JobName.tup" ; - rename "$JobName.tuo", "$JobName.tup" ; - print " sorting and checking : running texutil\n" ; - my $TcXSwitch = '' ; - if ($TcXPath ne '') { $TcXSwitch = "--tcxpath=$TcXPath" } - RunPerlScript - ($TeXUtil, "--ref --ij --high $TcXPath $JobName" ); - if (-e "$JobName.tuo") - { CheckPositions ($JobName) ; - # CheckExtraPrograms($JobName) ; - $StopRunning = CompareFiles("$JobName.tup", "$JobName.tuo") } - else - { $StopRunning = 1 } # otherwise potential loop - if (!$StopRunning) - { print "\n utility file analysis : another run needed\n" } - return $StopRunning } - -sub PurgeFiles - { my $JobName = shift ; - print "\n purging files : $JobName\n" ; - RunPerlScript($TeXUtil, "--purge $JobName" ) ; - unlink($Result . '.log') if (-f $Result . '.log') } - -sub RunTeXMP - { my $JobName = shift ; - my $MPfile = shift ; - my $MPrundone = 0 ; - my $MPJobName = MPJobName($JobName,$MPfile) ; - my $MPFoundJobName = "" ; - if ($MPJobName ne "") - { if (open(MP, "$MPJobName")) - { $_ = <MP> ; chomp ; # we should handle the prefix as well - if (/^\%\s+translate.*?\=([\w\d\-]+)/io) - { $TeXTranslation = $1 } - if (/collected graphics of job \"(.+)\"/i) - { $MPFoundJobName = $1 } - close(MP) ; - if ($MPFoundJobName ne "") - { if ($JobName =~ /$MPFoundJobName$/i) - { if ($MpExecutable ne '') - { print " generating graphics : metaposting $MPJobName\n" ; - my $ForceMpy = "" ; + elsif (/(hoogte|breedte|letter)=/) { $ConTeXtInterface = "nl"; last } + elsif (/(altezza|ampiezza|stile)=/) { $ConTeXtInterface = "it"; last } + elsif (/externfiguur/) { $ConTeXtInterface = "nl"; last } + elsif (/externalfigure/) { $ConTeXtInterface = "en"; last } + elsif (/externeabbildung/) { $ConTeXtInterface = "de"; last } + elsif (/figuraesterna/) { $ConTeXtInterface = "it"; last } + } + close(TEX); +} + +if ( $ConTeXtInterfaces{$ConTeXtInterface} ) { + $ConTeXtInterface = $ConTeXtInterfaces{$ConTeXtInterface}; +} + +my $Problems = my $Ok = 0; + +sub RunTeX { + my ( $JobName, $JobSuffix ) = @_; + my $StartTime = time; + my $cmd; + my $TeXProgNameFlag = ''; + if ( !$dosish ) # we assume tetex on linux + { + $TeXProgramPath = ''; + $TeXFormatPath = ''; + if ( !$TeXProgNameFlag + && ( $Format =~ /^cont/ ) + && ( $TeXPassString !~ /progname/io ) ) + { + $TeXProgNameFlag = "-progname=context"; + } + } + $own_quote = ($TeXProgramPath =~ m/^[^\"].* / ? "\"" : "") ; + $cmd = join( ' ', + "$own_quote$TeXProgramPath$TeXExecutable$own_quote", + $TeXProgNameFlag, $TeXPassString, $PassOn, "" ); + if ($EnterBatchMode) { $cmd .= "$TeXBatchFlag " } + if ($EnterNonStopMode) { $cmd .= "$TeXNonStopFlag " } + if ( $TeXTranslation ne '' ) { $cmd .= "-translate-file=$TeXTranslation " } + $cmd .= "$TeXFormatFlag$TeXFormatPath$Format $JobName.$JobSuffix"; + if ($Verbose) { print "\n$cmd\n\n" } + if ($EnterBatchMode) { + $Problems = system("$cmd"); + } else { + $Problems = system("$cmd"); + } + my $StopTime = time - $StartTime; + print "\n return code : $Problems"; + print "\n run time : $StopTime seconds\n"; + return $Problems; +} + +sub PushResult { + my $File = shift; + $File =~ s/\..*$//o; + $Result =~ s/\..*$//o; + if ( ( $Result ne '' ) && ( $Result ne $File ) ) { + print " outputfile : $Result\n"; + unlink "texexec.tuo"; + rename "$File.tuo", "texexec.tuo"; + unlink "texexec.log"; + rename "$File.log", "texexec.log"; + unlink "texexec.dvi"; + rename "$File.dvi", "texexec.dvi"; + unlink "texexec.pdf"; + rename "$File.pdf", "texexec.pdf"; + + if ( -e "$Result.tuo" ) { + unlink "$File.tuo"; + rename "$Result.tuo", "$File.tuo"; + } + } + if ($Optimize) { unlink "$File.tuo" } +} + +sub PopResult { + my $File = shift; + $File =~ s/\..*$//o; + $Result =~ s/\..*$//o; + if ( ( $Result ne '' ) && ( $Result ne $File ) ) { + print " renaming : $File to $Result\n"; + unlink "$Result.tuo"; + rename "$File.tuo", "$Result.tuo"; + unlink "$Result.log"; + rename "$File.log", "$Result.log"; + unlink "$Result.dvi"; + rename "$File.dvi", "$Result.dvi"; + if ( -e "$File.dvi" ) { CopyFile( "$File.dvi", "$Result.dvi" ) } + unlink "$Result.pdf"; + rename "$File.pdf", "$Result.pdf"; + if ( -e "$File.pdf" ) { CopyFile( "$File.pdf", "$Result.pdf" ) } + return if ( $File ne "texexec" ); + rename "texexec.tuo", "$File.tuo"; + rename "texexec.log", "$File.log"; + rename "texexec.dvi", "$File.dvi"; + rename "texexec.pdf", "$File.pdf"; + } +} + +sub RunTeXutil { + my $StopRunning; + my $JobName = shift; + unlink "$JobName.tup"; + rename "$JobName.tuo", "$JobName.tup"; + print " sorting and checking : running texutil\n"; + my $TcXSwitch = ''; + if ( $TcXPath ne '' ) { $TcXSwitch = "--tcxpath=$TcXPath" } + RunPerlScript( $TeXUtil, "--ref --ij --high $TcXPath $JobName" ); + + if ( -e "$JobName.tuo" ) { + CheckPositions($JobName); + $StopRunning = !compare( "$JobName.tup", "$JobName.tuo" ); + } else { + $StopRunning = 1; + } # otherwise potential loop + if ( !$StopRunning ) { + print "\n utility file analysis : another run needed\n"; + } + return $StopRunning; +} + +sub PurgeFiles { + my $JobName = shift; + print "\n purging files : $JobName\n"; + RunPerlScript( $TeXUtil, "--purge $JobName" ); + unlink( $Result . '.log' ) if ( -f $Result . '.log' ); +} + +sub RunTeXMP { + my $JobName = shift; + my $MPfile = shift; + my $MPrundone = 0; + my $MPJobName = MPJobName( $JobName, $MPfile ); + my $MPFoundJobName = ""; + if ( $MPJobName ne "" ) { + if ( open( MP, "$MPJobName" ) ) { + $_ = <MP>; + chomp; # we should handle the prefix as well + if (/^\%\s+translate.*?\=([\w\d\-]+)/io) { $TeXTranslation = $1 } + if (/collected graphics of job \"(.+)\"/i) { $MPFoundJobName = $1 } + close(MP); + if ( $MPFoundJobName ne "" ) { + if ( $JobName =~ /$MPFoundJobName$/i ) { + if ( $MpExecutable ne '' ) { + print + " generating graphics : metaposting $MPJobName\n"; + my $ForceMpy = ""; if ($MpyForce) { $ForceMpy = "--mpyforce" } - my $ForceTCX = '' ; - if ($TeXTranslation ne '') - { $ForceTCX = "--translate=$TeXTranslation " } - if ($EnterBatchMode) - { RunPerlScript ($TeXExec,"$ForceTCX $ForceMpy --mptex --nomp --batch $MPJobName") } - elsif ($EnterNonStopMode) - { RunPerlScript ($TeXExec,"$ForceTCX $ForceMpy --mptex --nomp --nonstop $MPJobName") } - else - { RunPerlScript ($TeXExec,"$ForceTCX $ForceMpy --mptex --nomp $MPJobName") } } - else - { print " generating graphics : metapost cannot be run\n" } - $MPrundone = 1 } } } } - return $MPrundone } - -sub CopyFile # agressive copy, works for open files like in gs - { my ($From,$To) = @_ ; - return unless open(INP,"<$From") ; binmode INP ; - return unless open(OUT,">$To") ; binmode OUT ; + my $ForceTCX = ''; + if ( $TeXTranslation ne '' ) { + $ForceTCX = "--translate=$TeXTranslation "; + } + if ($EnterBatchMode) { + RunPerlScript( $TeXExec, +"$ForceTCX $ForceMpy --mptex --nomp --batch $MPJobName" + ); + } elsif ($EnterNonStopMode) { + RunPerlScript( $TeXExec, +"$ForceTCX $ForceMpy --mptex --nomp --nonstop $MPJobName" + ); + } else { + RunPerlScript( $TeXExec, + "$ForceTCX $ForceMpy --mptex --nomp $MPJobName" + ); + } + } else { + print + " generating graphics : metapost cannot be run\n"; + } + $MPrundone = 1; + } + } + } + } + return $MPrundone; +} + +sub CopyFile { # agressive copy, works for open files like in gs + my ( $From, $To ) = @_; + return unless open( INP, "<$From" ); + binmode INP; + return unless open( OUT, ">$To" ); + binmode OUT; while (<INP>) { print OUT $_ } - close (INP) ; - close (OUT) } - -sub CheckChanges # also tub - { my $JobName = shift ; - my $checksum = 0 ; - my $MPJobName = MPJobName($JobName,"mpgraph") ; - if (open(MP, $MPJobName)) - { while (<MP>) - { unless (/random/oi) - { $checksum += do { unpack("%32C*",<MP>) % 65535 } } } - close (MP) } - $MPJobName = MPJobName($JobName,"mprun") ; - if (open(MP, $MPJobName)) - { while (<MP>) - { unless (/random/oi) - { $checksum += do { unpack("%32C*",<MP>) % 65535 } } } - close(MP) } - return $checksum } - -my $DummyFile = 0 ; - -sub isXMLfile - { my $Name = shift ; - if (($ForceXML)||($name =~ /\.xml$/io)) - { return 1 } - else - { open(XML,$Name) ; - my $str = <XML> ; - close(XML) ; - return ($str =~ /\<\?xml /io) } } - -sub RunConTeXtFile - { my ($JobName, $JobSuffix) = @_ ; - $JobName =~ s/\\/\//goi ; - $RunPath =~ s/\\/\//goi ; - my $OriSuffix = $JobSuffix ; - if (-e "$JobName.$JobSuffix") - { $DummyFile = (($ForceXML)||($JobSuffix =~ /xml/io)) } + close(INP); + close(OUT); +} + +sub CheckChanges { # also tub + my $JobName = shift; + my $checksum = 0; + my $MPJobName = MPJobName( $JobName, "mpgraph" ); + if ( open( MP, $MPJobName ) ) { + while (<MP>) { + unless (/random/oi) { + $checksum += do { unpack( "%32C*", <MP> ) % 65535 } + } + } + close(MP); + } + $MPJobName = MPJobName( $JobName, "mprun" ); + if ( open( MP, $MPJobName ) ) { + while (<MP>) { + unless (/random/oi) { + $checksum += do { unpack( "%32C*", <MP> ) % 65535 } + } + } + close(MP); + } + return $checksum; +} + +my $DummyFile = 0; + +sub isXMLfile { + my $Name = shift; + if ( ($ForceXML) || ( $Name =~ /\.xml$/io ) ) { return 1 } + else { + open( XML, $Name ); + my $str = <XML>; + close(XML); + return ( $str =~ /\<\?xml /io ); + } +} + +sub RunConTeXtFile { + my ( $JobName, $JobSuffix ) = @_; + $JobName =~ s/\\/\//goi; + $RunPath =~ s/\\/\//goi; + my $OriSuffix = $JobSuffix; + if (($dosish) && ($PdfClose)) { + my $ok = 0 ; + if ($Result ne '') { + $ok = system("pdfclose --file $Result.pdf") + } else { + $ok = system("pdfclose --file $JobName.pdf") + } + unless ($ok) { + system("pdfclose --all") + } + } + if ( -e "$JobName.$JobSuffix" ) { + $DummyFile = ( ($ForceXML) || ( $JobSuffix =~ /xml/io ) ); + } # to be considered : # { $DummyFile = isXMLfile("$JobName.$JobSuffix") } - elsif ($RunPath ne "") - { my @RunPaths = split(/,/,$RunPath) ; - foreach my $rp (@RunPaths) - { if (-e "$rp/$JobName.$JobSuffix") - { $DummyFile = 1 ; last } } } - if ($DummyFile) - { open (TMP,">$JobName.run") ; - if (($JobSuffix =~ /xml/io)||$ForceXML) - { if ($Filters ne "") - { print " using xml filters : $Filters\n" } - print TMP "\\starttext\n" ; - print TMP "\\processXMLfilegrouped{$JobName.$JobSuffix}\n" ; - print TMP "\\stoptext\n" } - else - { print TMP "\\starttext\n" ; - print TMP "\\processfile{$JobName.$JobSuffix}\n" ; - print TMP "\\stoptext\n" } - close (TMP) ; - $JobSuffix = "run" } - if ((-e "$JobName.$JobSuffix")||($GlobalFile)) - { unless ($Dummy) # we don't need this for xml - { ScanPreamble ("$JobName.$JobSuffix") ; - if ($ConTeXtInterface eq "unknown") - { ScanContent ("$JobName.$JobSuffix") } } - if ($ConTeXtInterface eq "unknown") - { $ConTeXtInterface = $UserInterface } - if ($ConTeXtInterface eq "unknown") - { $ConTeXtInterface = "en" } - if ($ConTeXtInterface eq "") - { $ConTeXtInterface = "en" } - CheckOutputFormat ; - my $StopRunning = 0 ; - my $MPrundone = 0 ; - if ($Format eq '') - { $Format = "cont-$ConTeXtInterface" } - print " executable : $TeXProgramPath$TeXExecutable\n" ; - print " format : $TeXFormatPath$Format\n" ; - if ($RunPath) - { print " source path : $RunPath\n" } - if ($DummyFile) - { print " dummy file : $JobName.$JobSuffix\n" } - print " inputfile : $JobName\n" ; - print " output : $FullFormat\n" ; - print " interface : $ConTeXtInterface\n" ; - if ($TeXTranslation ne '') - { print " translation : $TeXTranslation\n" } - my $Options = '' ; + elsif ( $RunPath ne "" ) { + my @RunPaths = split( /,/, $RunPath ); + foreach my $rp (@RunPaths) { + if ( -e "$rp/$JobName.$JobSuffix" ) { $DummyFile = 1; last } + } + } + if ($DummyFile) { + open( TMP, ">$JobName.run" ); + if ( ( $JobSuffix =~ /xml/io ) || $ForceXML ) { + if ( $Filters ne "" ) { + print " using xml filters : $Filters\n"; + } + print TMP "\\starttext\n"; + print TMP "\\processXMLfilegrouped{$JobName.$JobSuffix}\n"; + print TMP "\\stoptext\n"; + } else { + print TMP "\\starttext\n"; + print TMP "\\processfile{$JobName.$JobSuffix}\n"; + print TMP "\\stoptext\n"; + } + close(TMP); + $JobSuffix = "run"; + } + if ( ( -e "$JobName.$JobSuffix" ) || ($GlobalFile) ) { + unless ($DummyFile) # we don't need this for xml + { + ScanPreamble("$JobName.$JobSuffix"); + if ( $ConTeXtInterface eq "unknown" ) { + ScanContent("$JobName.$JobSuffix"); + } + } + if ( $ConTeXtInterface eq "unknown" ) { + $ConTeXtInterface = $UserInterface; + } + if ( $ConTeXtInterface eq "unknown" ) { $ConTeXtInterface = "en" } + if ( $ConTeXtInterface eq "" ) { $ConTeXtInterface = "en" } + CheckOutputFormat; + my $StopRunning = 0; + my $MPrundone = 0; + if ( $Format eq '' ) { $Format = "cont-$ConTeXtInterface" } + print " executable : $TeXProgramPath$TeXExecutable\n"; + print " format : $TeXFormatPath$Format\n"; + if ($RunPath) { print " source path : $RunPath\n" } + + if ($DummyFile) { + print " dummy file : $JobName.$JobSuffix\n"; + } + print " inputfile : $JobName\n"; + print " output : $FullFormat\n"; + print " interface : $ConTeXtInterface\n"; + if ( $TeXTranslation ne '' ) { + print " translation : $TeXTranslation\n"; + } + my $Options = ''; if ($Random) { $Options .= " random" } if ($FastMode) { $Options .= " fast" } if ($FinalMode) { $Options .= " final" } @@ -1615,734 +1562,790 @@ sub RunConTeXtFile if ($CenterPage) { $Options .= " center" } if ($Arrange) { $Options .= " arrange" } if ($NoArrange) { $Options .= " no-arrange" } - if ($Options) - { print " options :$Options\n" } - if ($ConTeXtModes) - { print " possible modes : $ConTeXtModes\n" } - if ($Mode) - { print " current mode : $Mode\n" } - else - { print " current mode : none\n" } - if ($Arguments) - { print " arguments : $Arguments\n" } - if ($Modules) - { print " modules : $Modules\n" } - if ($Environments) - { print " environments : $Environments\n" } - if ($Suffix) - { $Result = "$JobName$Suffix" } - PushResult($JobName) ; - $Problems = 0 ; - my $TeXRuns = 0 ; - if (($PdfArrange)||($PdfSelect)||($RunOnce)) - { MakeOptionFile (1, 1, $JobName, $OriSuffix, 3) ; - print "\n" ; - $Problems = RunTeX($JobName, $JobSuffix) ; - if ($ForceTeXutil) - { $Ok = RunTeXutil ($JobName) } - CopyFile("$JobName.top","$JobName.tmp") ; - unlink "$JobName.top" ; # runtime option file - PopResult($JobName) } - else - { while (!$StopRunning&&($TeXRuns<$NOfRuns)&&(!$Problems)) - { ++$TeXRuns ; - if ($TeXRuns==1) - { MakeOptionFile (0, 0, $JobName, $OriSuffix, 1) } - else - { MakeOptionFile (0, 0, $JobName, $OriSuffix, 2) } - print " TeX run : $TeXRuns\n\n" ; - my $mpchecksumbefore = $mpchecksumafter = 0 ; - if ($AutoMPRun) { $mpchecksumbefore = CheckChanges($JobName) } - $Problems = RunTeX($JobName,$JobSuffix) ; - if ($AutoMPRun) { $mpchecksumafter = CheckChanges($JobName) } - if ((!$Problems)&&($NOfRuns>1)) - { if (!$NoMPMode) - { $MPrundone = RunTeXMP ($JobName, "mpgraph") ; - $MPrundone = RunTeXMP ($JobName, "mprun") } - $StopRunning = RunTeXutil ($JobName) ; - if ($AutoMPRun) - { $StopRunning = ($StopRunning && - ($mpchecksumafter==$mpchecksumbefore)) } - } } - if (($NOfRuns==1)&&$ForceTeXutil) - { $Ok = RunTeXutil ($JobName) } - if ((!$Problems)&&(($FinalMode||$FinalRunNeeded))&&($NOfRuns>1)) - { MakeOptionFile (1, $FinalMode, $JobName, $OriSuffix, 4) ; - print " final TeX run : $TeXRuns\n\n" ; - $Problems = RunTeX($JobName, $JobSuffix) } - CopyFile("$JobName.top","$JobName.tmp") ; - unlink "$JobName.tup" ; # previous tuo file - unlink "$JobName.top" ; # runtime option file - PopResult($JobName) } - if ($Purge) - { PurgeFiles($JobName) } - if ($DummyFile) # $JobSuffix == run - { unlink "$JobName.$JobSuffix" } } } - -sub RunSomeTeXFile - { my ($JobName, $JobSuffix) = @_ ; - if (-e "$JobName.$JobSuffix") - { PushResult($JobName) ; - print " executable : $TeXProgramPath$TeXExecutable\n" ; - print " format : $TeXFormatPath$Format\n" ; - print " inputfile : $JobName.$JobSuffix\n" ; - $Problems = RunTeX($JobName,$JobSuffix) ; - PopResult($JobName) } } - -my $ModuleFile = "texexec" ; -my $ListingFile = "texexec" ; -my $FiguresFile = "texexec" ; -my $ArrangeFile = "texexec" ; -my $SelectFile = "texexec" ; -my $CopyFile = "texexec" ; -my $CombineFile = "texexec" ; - -sub RunModule - { my @FileNames = sort @_ ; - unless (-e $FileNames[0]) - { my $Name = $FileNames[0] ; - @FileNames = ("$Name.tex", "$Name.mp", "$Name.pl", "$Name.pm") } - foreach $FileName (@FileNames) - { next unless -e $FileName ; - my ($Name, $Suffix) = split (/\./,$FileName) ; - next unless $Suffix =~ /(tex|mp|pl|pm)/io ; - DoRunModule($Name, $Suffix) } } + if ($Options) { print " options :$Options\n" } + if ($ConTeXtModes) { print " possible modes : $ConTeXtModes\n" } + if ($Mode) { print " current mode : $Mode\n" } + else { print " current mode : none\n" } + if ($Arguments) { print " arguments : $Arguments\n" } + if ($Modules) { print " modules : $Modules\n" } + if ($Environments) { print " environments : $Environments\n" } + if ($Suffix) { $Result = "$JobName$Suffix" } + PushResult($JobName); + $Problems = 0; + my $TeXRuns = 0; + + if ( ($PdfArrange) || ($PdfSelect) || ($RunOnce) ) { + MakeOptionFile( 1, 1, $JobName, $OriSuffix, 3 ); + print "\n"; + $Problems = RunTeX( $JobName, $JobSuffix ); + if ($ForceTeXutil) { $Ok = RunTeXutil($JobName) } + CopyFile( "$JobName.top", "$JobName.tmp" ); + unlink "$JobName.top"; # runtime option file + PopResult($JobName); + } else { + while ( !$StopRunning && ( $TeXRuns < $NOfRuns ) && ( !$Problems ) ) + { + ++$TeXRuns; + if ( $TeXRuns == 1 ) { + MakeOptionFile( 0, 0, $JobName, $OriSuffix, 1 ); + } else { + MakeOptionFile( 0, 0, $JobName, $OriSuffix, 2 ); + } + print " TeX run : $TeXRuns\n\n"; + my ( $mpchecksumbefore, $mpchecksumafter ) = ( 0, 0 ); + if ($AutoMPRun) { $mpchecksumbefore = CheckChanges($JobName) } + $Problems = RunTeX( $JobName, $JobSuffix ); + if ($AutoMPRun) { $mpchecksumafter = CheckChanges($JobName) } + if ( ( !$Problems ) && ( $NOfRuns > 1 ) ) { + if ( !$NoMPMode ) { + $MPrundone = RunTeXMP( $JobName, "mpgraph" ); + $MPrundone = RunTeXMP( $JobName, "mprun" ); + } + $StopRunning = RunTeXutil($JobName); + if ($AutoMPRun) { + $StopRunning = + ( $StopRunning + && ( $mpchecksumafter == $mpchecksumbefore ) ); + } + } + } + if ( ( $NOfRuns == 1 ) && $ForceTeXutil ) { + $Ok = RunTeXutil($JobName); + } + if ( ( !$Problems ) + && ( ( $FinalMode || $FinalRunNeeded ) ) + && ( $NOfRuns > 1 ) ) + { + MakeOptionFile( 1, $FinalMode, $JobName, $OriSuffix, 4 ); + print " final TeX run : $TeXRuns\n\n"; + $Problems = RunTeX( $JobName, $JobSuffix ); + } + CopyFile( "$JobName.top", "$JobName.tmp" ); + unlink "$JobName.tup"; # previous tuo file + unlink "$JobName.top"; # runtime option file + PopResult($JobName); + } + if ($Purge) { PurgeFiles($JobName) } + if ($DummyFile) # $JobSuffix == run + { + unlink "$JobName.$JobSuffix"; + } + if (($dosish) && (!$Problems) && ($PdfOpen)) { + if ($Result ne '') { + system("pdfopen --file $Result.pdf") + } else { + system("pdfopen --file $JobName.pdf") + } + } + } +} + +sub RunSomeTeXFile { + my ( $JobName, $JobSuffix ) = @_; + if ( -e "$JobName.$JobSuffix" ) { + PushResult($JobName); + print " executable : $TeXProgramPath$TeXExecutable\n"; + print " format : $TeXFormatPath$Format\n"; + print " inputfile : $JobName.$JobSuffix\n"; + $Problems = RunTeX( $JobName, $JobSuffix ); + PopResult($JobName); + } +} + +my $ModuleFile = "texexec"; +my $ListingFile = "texexec"; +my $FiguresFile = "texexec"; +my $ArrangeFile = "texexec"; +my $SelectFile = "texexec"; +my $CopyFile = "texexec"; +my $CombineFile = "texexec"; + +sub RunModule { + my @FileNames = sort @_; + unless ( -e $FileNames[0] ) { + my $Name = $FileNames[0]; + @FileNames = ( "$Name.tex", "$Name.mp", "$Name.pl", "$Name.pm" ); + } + foreach my $FileName (@FileNames) { + next unless -e $FileName; + my ( $Name, $Suffix ) = split( /\./, $FileName ); + next unless $Suffix =~ /(tex|mp|pl|pm)/io; + DoRunModule( $Name, $Suffix ); + } +} # the next one can be more efficient: directly process ted # file a la --use=abr-01,mod-01 -sub DoRunModule - { my ($FileName,$FileSuffix) = @_ ; - RunPerlScript ($TeXUtil, "--documents $FileName.$FileSuffix" ) ; - print " module : $FileName\n\n" ; - open (MOD, ">$ModuleFile.tex") ; +sub DoRunModule { + my ( $FileName, $FileSuffix ) = @_; + RunPerlScript( $TeXUtil, "--documents $FileName.$FileSuffix" ); + print " module : $FileName\n\n"; + open( MOD, ">$ModuleFile.tex" ); # we need to signal to texexec what interface to use - open(TED, "$FileName.ted") ; my $firstline = <TED> ; close (TED) ; - if ($firstline =~ /interface=en/) - { print MOD $firstline } - else - { print MOD "% interface=nl\n" } + open( TED, "$FileName.ted" ); + my $firstline = <TED>; + close(TED); + if ( $firstline =~ /interface=en/ ) { print MOD $firstline } + else { print MOD "% interface=nl\n" } # so far - print MOD "\\usemodule[abr-01,mod-01]\n" ; - print MOD "\\def\\ModuleNumber{1}\n" ; - print MOD "\\starttekst\n" ; - print MOD "\\readlocfile{$FileName.ted}{}{}\n" ; - print MOD "\\stoptekst\n" ; - close (MOD) ; - RunConTeXtFile($ModuleFile, "tex") ; - if ($FileName ne $ModuleFile) - { foreach my $FileSuffix ("dvi", "pdf", "tui", "tuo", "log") - { unlink ("$FileName.$FileSuffix") ; - rename ("$ModuleFile.$FileSuffix", "$FileName.$FileSuffix") } } - unlink ("$ModuleFile.tex") } - -sub RunFigures - { my @Files = @_ ; - $TypesetFigures = lc $TypesetFigures ; - return unless ($TypesetFigures =~ /[abcd]/o) ; - unlink "$FiguresFile.pdf" ; - if (@Files) { RunPerlScript ($TeXUtil, "--figures @Files" ) } - open (FIG, ">$FiguresFile.tex") ; - print FIG "% format=english\n" ; - print FIG "\\setuplayout\n" ; - print FIG " [topspace=1.5cm,backspace=1.5cm,\n" ; - print FIG " header=1.5cm,footer=0pt,\n" ; - print FIG " width=middle,height=middle]\n" ; - if ($ForceFullScreen) - { print FIG "\\setupinteraction\n" ; - print FIG " [state=start]\n" ; - print FIG "\\setupinteractionscreen\n" ; - print FIG " [option=max]\n" } - print FIG "\\starttext\n" ; - print FIG "\\showexternalfigures[alternative=$TypesetFigures,offset=$PaperOffset]\n" ; - print FIG "\\stoptext\n" ; - close(FIG) ; - $ConTeXtInterface = "en" ; - RunConTeXtFile($FiguresFile, "tex") ; - unlink ('texutil.tuf') if (-f 'texutil.tuf') } - -# sub RunGetXMLFigures -# { return if (($Label eq "") or ($Base eq "") ; -# unlink "$FiguresFile.pdf" ; -# open (FIG, ">$FiguresFile.tex") ; -# print FIG "% format=english\n" ; -# print FIG "\\starttext\n" ; -# print FIG "\\usefigurebase[$Base]\n" ; -# print FIG "\\pagefigure[$Label]\n" ; -# print FIG "\\stoptext\n" ; -# close(FIG) ; -# $ConTeXtInterface = "en" ; -# RunConTeXtFile($FiguresFile, "tex") } - -sub CleanTeXFileName - { my $str = shift ; - $str =~ s/([\$\_\#])/\\$1/go ; - $str =~ s/([\~])/\\string$1/go ; - return $str } - -sub RunListing - { my $FileName = my $CleanFileName = shift ; - my @FileNames = glob $FileName ; - return unless -f $FileNames[0] ; - print " input file : $FileName\n" ; - if ($BackSpace eq "0pt") - { $BackSpace="1.5cm" } - else - { print " backspace : $BackSpace\n" } - if ($TopSpace eq "0pt") - { $TopSpace="1.5cm" } - else - { print " topspace : $TopSpace\n" } - open (LIS, ">$ListingFile.tex") ; - print LIS "% format=english\n" ; - print LIS "\\setupbodyfont[11pt,tt]\n" ; - print LIS "\\setuplayout\n" ; - print LIS " [topspace=$TopSpace,backspace=$BackSpace,\n" ; - print LIS " header=0cm,footer=1.5cm,\n" ; - print LIS " width=middle,height=middle]\n" ; - print LIS "\\setuptyping[lines=yes]\n" ; - if ($Pretty) - { print LIS "\\setuptyping[option=color]\n" } - print LIS "\\starttext\n" ; - foreach $FileName (@FileNames) - { $CleanFileName = lc CleanTeXFileName($FileName) ; - print LIS "\\page\n" ; - print LIS "\\setupfootertexts[$CleanFileName][pagenumber]\n" ; - print LIS "\\typefile\{$FileName\}\n" } - print LIS "\\stoptext\n" ; - close(LIS) ; - $ConTeXtInterface = "en" ; - RunConTeXtFile($ListingFile, "tex") } - -# sub DetermineNOfPdfPages -# { my $FileName = shift ; -# my $NOfPages = 0 ; -# if (($FileName =~ /\.pdf$/io)&&(open(PDF,$FileName))) -# { binmode PDF ; -# my $PagesFound = 0 ; -# while (<PDF>) -# { if (/\/Type \/Pages/o) -# { $PagesFound = 1 } -# if ($PagesFound) -# { if (/\/Count\s*(\d*)/o) -# { if ($1>$NOfPages) { $NOfPages = $1 } } -# elsif (/endobj/o) -# { $PagesFound = 0 } } } -# close ( PDF ) } -# return $NOfPages } - -sub RunArrange - { my @files = @_ ; - print " backspace : $BackSpace\n" ; - print " topspace : $TopSpace\n" ; - print " paperoffset : $PaperOffset\n" ; - if ($AddEmpty eq '') - { print " empty pages added : none\n" } - else - { print " empty pages added : $AddEmpty\n" } - if ($TextWidth eq '0pt') - { print " textwidth : unknown\n" } - else - { print " textwidth : $TextWidth\n" } - open (ARR, ">$ArrangeFile.tex") ; - print ARR "% format=english\n" ; -# if ($PaperFormat ne 'standard') -# { print " paperformat : $PaperFormat\n" ; -# print ARR "\\setuppapersize[$PaperFormat][$PaperFormat]\n" } - print ARR "\\definepapersize\n" ; + print MOD "\\usemodule[abr-01,mod-01]\n"; + print MOD "\\def\\ModuleNumber{1}\n"; + print MOD "\\starttekst\n"; + print MOD "\\readlocfile{$FileName.ted}{}{}\n"; + print MOD "\\stoptekst\n"; + close(MOD); + RunConTeXtFile( $ModuleFile, "tex" ); + + if ( $FileName ne $ModuleFile ) { + foreach my $FileSuffix ( "dvi", "pdf", "tui", "tuo", "log" ) { + unlink("$FileName.$FileSuffix"); + rename( "$ModuleFile.$FileSuffix", "$FileName.$FileSuffix" ); + } + } + unlink("$ModuleFile.tex"); +} + +sub RunFigures { + my @Files = @_; + $TypesetFigures = lc $TypesetFigures; + return unless ( $TypesetFigures =~ /[abcd]/o ); + unlink "$FiguresFile.pdf"; + if (@Files) { RunPerlScript( $TeXUtil, "--figures @Files" ) } + open( FIG, ">$FiguresFile.tex" ); + print FIG "% format=english\n"; + print FIG "\\setuplayout\n"; + print FIG " [topspace=1.5cm,backspace=1.5cm,\n"; + print FIG " header=1.5cm,footer=0pt,\n"; + print FIG " width=middle,height=middle]\n"; + + if ($ForceFullScreen) { + print FIG "\\setupinteraction\n"; + print FIG " [state=start]\n"; + print FIG "\\setupinteractionscreen\n"; + print FIG " [option=max]\n"; + } + print FIG "\\starttext\n"; + print FIG +"\\showexternalfigures[alternative=$TypesetFigures,offset=$PaperOffset]\n"; + print FIG "\\stoptext\n"; + close(FIG); + $ConTeXtInterface = "en"; + RunConTeXtFile( $FiguresFile, "tex" ); + unlink('texutil.tuf') if ( -f 'texutil.tuf' ); +} + +sub CleanTeXFileName { + my $str = shift; + $str =~ s/([\$\_\#])/\\$1/go; + $str =~ s/([\~])/\\string$1/go; + return $str; +} + +sub RunListing { + my $FileName = my $CleanFileName = shift; + my @FileNames = glob $FileName; + return unless -f $FileNames[0]; + print " input file : $FileName\n"; + if ( $BackSpace eq "0pt" ) { $BackSpace = "1.5cm" } + else { print " backspace : $BackSpace\n" } + if ( $TopSpace eq "0pt" ) { $TopSpace = "1.5cm" } + else { print " topspace : $TopSpace\n" } + open( LIS, ">$ListingFile.tex" ); + print LIS "% format=english\n"; + print LIS "\\setupbodyfont[11pt,tt]\n"; + print LIS "\\setuplayout\n"; + print LIS " [topspace=$TopSpace,backspace=$BackSpace,\n"; + print LIS " header=0cm,footer=1.5cm,\n"; + print LIS " width=middle,height=middle]\n"; + print LIS "\\setuptyping[lines=yes]\n"; + if ($Pretty) { print LIS "\\setuptyping[option=color]\n" } + print LIS "\\starttext\n"; + + foreach $FileName (@FileNames) { + $CleanFileName = lc CleanTeXFileName($FileName); + print LIS "\\page\n"; + print LIS "\\setupfootertexts[$CleanFileName][pagenumber]\n"; + print LIS "\\typefile\{$FileName\}\n"; + } + print LIS "\\stoptext\n"; + close(LIS); + $ConTeXtInterface = "en"; + RunConTeXtFile( $ListingFile, "tex" ); +} + +sub RunArrange { + my @files = @_; + print " backspace : $BackSpace\n"; + print " topspace : $TopSpace\n"; + print " paperoffset : $PaperOffset\n"; + if ( $AddEmpty eq '' ) { print " empty pages added : none\n" } + else { print " empty pages added : $AddEmpty\n" } + if ( $TextWidth eq '0pt' ) { print " textwidth : unknown\n" } + else { print " textwidth : $TextWidth\n" } + open( ARR, ">$ArrangeFile.tex" ); + print ARR "% format=english\n"; + print ARR "\\definepapersize\n"; print ARR " [offset=$PaperOffset]\n"; - print ARR "\\setuplayout\n" ; - print ARR " [backspace=$BackSpace,\n" ; - print ARR " topspace=$TopSpace,\n" ; - if ($Markings) - { print ARR " marking=on,\n" ; - print " cutmarkings : on\n" } - print ARR " width=middle,\n" ; - print ARR " height=middle,\n" ; - print ARR " location=middle,\n" ; - print ARR " header=0pt,\n" ; - print ARR " footer=0pt]\n" ; - if ($NoDuplex) - { print " duplex : off\n" } - else - { print " duplex : on\n" ; - print ARR "\\setuppagenumbering\n" ; - print ARR " [alternative=doublesided]\n" } - print ARR "\\starttext\n" ; - foreach my $FileName (@files) - { print " pdffile : $FileName\n" ; - print ARR "\\insertpages\n [$FileName]" ; - if ($AddEmpty ne '') { print ARR "[$AddEmpty]" } - print ARR "[width=$TextWidth]\n" } - print ARR "\\stoptext\n" ; - close (ARR) ; - $ConTeXtInterface = "en" ; - RunConTeXtFile($ModuleFile, "tex") } - -sub RunSelect - { my $FileName = shift ; - print " pdffile : $FileName\n" ; - print " backspace : $BackSpace\n" ; - print " topspace : $TopSpace\n" ; - print " paperoffset : $PaperOffset\n" ; - if ($TextWidth eq '0pt') - { print " textwidth : unknown\n" } - else - { print " textwidth : $TextWidth\n" } - open (SEL, ">$SelectFile.tex") ; - print SEL "% format=english\n" ; - if ($PaperFormat ne 'standard') -# { print " papersize : $PaperFormat\n" ; -# print SEL "\\setuppapersize[$PaperFormat][$PaperFormat]\n" } -# - { $_ = $PaperFormat ; # NO UPPERCASE ! - s/x/\*/io ; my ($from,$to) = split (/\*/) ; - if ($to eq "") { $to = $from } - print " papersize : $PaperFormat\n" ; - print SEL "\\setuppapersize[$from][$to]\n" } -# - print SEL "\\definepapersize\n" ; + print ARR "\\setuplayout\n"; + print ARR " [backspace=$BackSpace,\n"; + print ARR " topspace=$TopSpace,\n"; + + if ($Markings) { + print ARR " marking=on,\n"; + print " cutmarkings : on\n"; + } + print ARR " width=middle,\n"; + print ARR " height=middle,\n"; + print ARR " location=middle,\n"; + print ARR " header=0pt,\n"; + print ARR " footer=0pt]\n"; + if ($NoDuplex) { print " duplex : off\n" } + else { + print " duplex : on\n"; + print ARR "\\setuppagenumbering\n"; + print ARR " [alternative=doublesided]\n"; + } + print ARR "\\starttext\n"; + foreach my $FileName (@files) { + print " pdffile : $FileName\n"; + print ARR "\\insertpages\n [$FileName]"; + if ( $AddEmpty ne '' ) { print ARR "[$AddEmpty]" } + print ARR "[width=$TextWidth]\n"; + } + print ARR "\\stoptext\n"; + close(ARR); + $ConTeXtInterface = "en"; + RunConTeXtFile( $ModuleFile, "tex" ); +} + +sub RunSelect { + my $FileName = shift; + print " pdffile : $FileName\n"; + print " backspace : $BackSpace\n"; + print " topspace : $TopSpace\n"; + print " paperoffset : $PaperOffset\n"; + if ( $TextWidth eq '0pt' ) { print " textwidth : unknown\n" } + else { print " textwidth : $TextWidth\n" } + open( SEL, ">$SelectFile.tex" ); + print SEL "% format=english\n"; + + if ( $PaperFormat ne 'standard' ) { + $_ = $PaperFormat; # NO UPPERCASE ! + s/x/\*/io; + my ( $from, $to ) = split(/\*/); + if ( $to eq "" ) { $to = $from } + print " papersize : $PaperFormat\n"; + print SEL "\\setuppapersize[$from][$to]\n"; + } + # + print SEL "\\definepapersize\n"; print SEL " [offset=$PaperOffset]\n"; - print SEL "\\setuplayout\n" ; - print SEL " [backspace=$BackSpace,\n" ; - print SEL " topspace=$TopSpace,\n" ; - if ($Markings) - { print SEL " marking=on,\n" ; - print " cutmarkings : on\n" } - print SEL " width=middle,\n" ; - print SEL " height=middle,\n" ; - print SEL " location=middle,\n" ; - print SEL " header=0pt,\n" ; - print SEL " footer=0pt]\n" ; - print SEL "\\setupexternalfigures\n" ; - print SEL " [directory=]\n" ; - print SEL "\\starttext\n" ; - if ($Selection ne '') - { print SEL "\\filterpages\n" ; - print SEL " [$FileName][$Selection][width=$TextWidth]\n" } - print SEL "\\stoptext\n" ; - close (SEL) ; - $ConTeXtInterface = "en" ; - RunConTeXtFile($SelectFile, "tex") } - -sub RunCopy - { my $FileName = shift ; - print " pdffile : $FileName\n" ; - if ($PageScale==1000) - { print " offset : $PaperOffset\n" } - else - { print " scale : $PageScale\n" ; - if ($PageScale<10) { $PageScale = int($PageScale*1000) } } - open (COP, ">$CopyFile.tex") ; - print COP "% format=english\n" ; - print COP "\\getfiguredimensions\n" ; - print COP " [$FileName][page=1]\n" ; - print COP "\\definepapersize\n" ; - print COP " [copy]\n" ; - print COP " [width=\\naturalfigurewidth,\n" ; - print COP " height=\\naturalfigureheight]\n" ; - print COP "\\setuppapersize\n" ; - print COP " [copy][copy]\n" ; - print COP "\\setuplayout\n" ; - print COP " [location=middle,\n" ; - print COP " topspace=0pt,\n" ; - print COP " backspace=0pt,\n" ; - print COP " header=0pt,\n" ; - print COP " footer=0pt,\n" ; - print COP " width=middle,\n" ; - print COP " height=middle]\n" ; - print COP "\\setupexternalfigures\n" ; - print COP " [directory=]\n" ; - print COP "\\starttext\n" ; - print COP "\\copypages\n" ; - print COP " [$FileName]\n" ; - print COP " [scale=$PageScale,\n" ; - if ($Markings) - { print COP " marking=on,\n" ; - print " cutmarkings : on\n" } - print COP " offset=$PaperOffset]\n" ; - print COP "\\stoptext\n" ; - close (COP) ; - $ConTeXtInterface = "en" ; - RunConTeXtFile($CopyFile, "tex") } - -sub RunCombine - { my @Files = @_ ; - $Combination =~ s/x/\*/io ; my ($nx,$ny) = split (/\*/,$Combination,2) ; - return unless ($nx&&$ny) ; - print " combination : $Combination\n" ; - open (COM, ">$CombineFile.tex") ; - print COM "% format=english\n" ; - if ($PaperFormat ne 'standard') -# { print " papersize : $PaperFormat\n" ; -# print COM "\\setuppapersize\n" ; -# print COM " [$PaperFormat][$PaperFormat]\n" } -# see RunSelect - { $_ = $PaperFormat ; # NO UPPERCASE ! - s/x/\*/io ; my ($from,$to) = split (/\*/) ; - if ($to eq "") { $to = $from } - print " papersize : $PaperFormat\n" ; - print COM "\\setuppapersize[$from][$to]\n" } -# - if ($PaperOffset eq '0pt') - { $PaperOffset = '1cm' } - print " paper offset : $PaperOffset\n" ; - print COM "\\setuplayout\n" ; - print COM " [topspace=$PaperOffset,\n" ; - print COM " backspace=$PaperOffset,\n" ; - print COM " header=0pt,\n" ; - print COM " footer=1cm,\n" ; - print COM " width=middle,\n" ; - print COM " height=middle]\n" ; - if ($NoBanner) - { print COM "\\setuplayout\n" ; - print COM " [footer=0cm]\n" } - print COM "\\setupexternalfigures\n" ; - print COM " [directory=]\n" ; - print COM "\\starttext\n" ; - for $FileName (@Files) - { next if ($FileName =~ /^texexec/io) ; - next if ($FileName =~ /^$Result/i) ; - print " pdffile : $FileName\n" ; - my $CleanFileName = CleanTeXFileName($FileName) ; - print COM "\\setupfootertexts\n" ; - print COM " [$CleanFileName\\space---\\space\\currentdate\\space---\\space\\pagenumber]\n" ; - print COM "\\combinepages[$FileName][nx=$nx,ny=$ny]\n" ; - print COM "\\page" } - print COM "\\stoptext\n" ; - close (COM) ; - $ConTeXtInterface = "en" ; - RunConTeXtFile($CombineFile, "tex") } - -sub LocatedFormatPath - { my $FormatPath = shift ; - if (($FormatPath eq '')&&($kpsewhich ne '')) - { $FormatPath = `$own_quote$kpsewhich$own_quote --show-path=fmt` ; - chomp $FormatPath ; - $FormatPath =~ s/\.+\;//o ; # should be a sub - $FormatPath =~ s/\;.*//o ; - $FormatPath =~ s/\!//go ; - $FormatPath =~ s/\/\//\//go ; - $FormatPath =~ s/\\\\/\//go ; - $FormatPath =~ s/[\/\\]$// ; - $FormatPath .= '/' ; - if (($FormatPath ne '')&&$Verbose) - { print " located formatpath : $FormatPath\n" } } - return $FormatPath } - -sub RunOneFormat - { my ($FormatName) = @_ ; - my @TeXFormatPath ; - my $TeXPrefix = "" ; - if (($fmtutil ne "")&&($FormatName !~ /metafun|mptopdf/io)) - { my $cmd = "$own_quote$fmtutil$own_quote --byfmt $FormatName" ; + print SEL "\\setuplayout\n"; + print SEL " [backspace=$BackSpace,\n"; + print SEL " topspace=$TopSpace,\n"; + if ($Markings) { + print SEL " marking=on,\n"; + print " cutmarkings : on\n"; + } + print SEL " width=middle,\n"; + print SEL " height=middle,\n"; + print SEL " location=middle,\n"; + print SEL " header=0pt,\n"; + print SEL " footer=0pt]\n"; + print SEL "\\setupexternalfigures\n"; + print SEL " [directory=]\n"; + print SEL "\\starttext\n"; + + if ( $Selection ne '' ) { + print SEL "\\filterpages\n"; + print SEL " [$FileName][$Selection][width=$TextWidth]\n"; + } + print SEL "\\stoptext\n"; + close(SEL); + $ConTeXtInterface = "en"; + RunConTeXtFile( $SelectFile, "tex" ); +} + +sub RunCopy { + my $FileName = shift; + print " pdffile : $FileName\n"; + if ( $PageScale == 1000 ) { + print " offset : $PaperOffset\n"; + } else { + print " scale : $PageScale\n"; + if ( $PageScale < 10 ) { $PageScale = int( $PageScale * 1000 ) } + } + open( COP, ">$CopyFile.tex" ); + print COP "% format=english\n"; + print COP "\\getfiguredimensions\n"; + print COP " [$FileName][page=1]\n"; + print COP "\\definepapersize\n"; + print COP " [copy]\n"; + print COP " [width=\\naturalfigurewidth,\n"; + print COP " height=\\naturalfigureheight]\n"; + print COP "\\setuppapersize\n"; + print COP " [copy][copy]\n"; + print COP "\\setuplayout\n"; + print COP " [location=middle,\n"; + print COP " topspace=0pt,\n"; + print COP " backspace=0pt,\n"; + print COP " header=0pt,\n"; + print COP " footer=0pt,\n"; + print COP " width=middle,\n"; + print COP " height=middle]\n"; + print COP "\\setupexternalfigures\n"; + print COP " [directory=]\n"; + print COP "\\starttext\n"; + print COP "\\copypages\n"; + print COP " [$FileName]\n"; + print COP " [scale=$PageScale,\n"; + + if ($Markings) { + print COP " marking=on,\n"; + print " cutmarkings : on\n"; + } + print COP " offset=$PaperOffset]\n"; + print COP "\\stoptext\n"; + close(COP); + $ConTeXtInterface = "en"; + RunConTeXtFile( $CopyFile, "tex" ); +} + +sub RunCombine { + my @Files = @_; + $Combination =~ s/x/\*/io; + my ( $nx, $ny ) = split( /\*/, $Combination, 2 ); + return unless ( $nx && $ny ); + print " combination : $Combination\n"; + open( COM, ">$CombineFile.tex" ); + print COM "% format=english\n"; + if ( $PaperFormat ne 'standard' ) { + $_ = $PaperFormat; # NO UPPERCASE ! + s/x/\*/io; + my ( $from, $to ) = split(/\*/); + if ( $to eq "" ) { $to = $from } + print " papersize : $PaperFormat\n"; + print COM "\\setuppapersize[$from][$to]\n"; + } + # + if ( $PaperOffset eq '0pt' ) { $PaperOffset = '1cm' } + print " paper offset : $PaperOffset\n"; + print COM "\\setuplayout\n"; + print COM " [topspace=$PaperOffset,\n"; + print COM " backspace=$PaperOffset,\n"; + print COM " header=0pt,\n"; + print COM " footer=1cm,\n"; + print COM " width=middle,\n"; + print COM " height=middle]\n"; + + if ($NoBanner) { + print COM "\\setuplayout\n"; + print COM " [footer=0cm]\n"; + } + print COM "\\setupexternalfigures\n"; + print COM " [directory=]\n"; + print COM "\\starttext\n"; + for my $FileName (@Files) { + next if ( $FileName =~ /^texexec/io ); + next if (($Result ne '') && ( $FileName =~ /^$Result/i )); + print " pdffile : $FileName\n"; + my $CleanFileName = CleanTeXFileName($FileName); + print COM "\\setupfootertexts\n"; + print COM " [$CleanFileName\\space---\\space\\currentdate\\space---\\space\\pagenumber]\n"; + print COM "\\combinepages[$FileName][nx=$nx,ny=$ny]\n"; + print COM "\\page\n"; + } + print COM "\\stoptext\n"; + close(COM); + $ConTeXtInterface = "en"; + RunConTeXtFile( $CombineFile, "tex" ); +} + +sub LocatedFormatPath { + my $FormatPath = shift; + if ( ( $FormatPath eq '' ) && ( $kpsewhich ne '' ) ) { + $FormatPath = `$kpsewhich --show-path=fmt`; + chomp $FormatPath; + $FormatPath =~ s/\.+\;//o; # should be a sub + $FormatPath =~ s/\;.*//o; + $FormatPath =~ s/\!//go; + $FormatPath =~ s/\/\//\//go; + $FormatPath =~ s/\\\\/\//go; + $FormatPath =~ s/[\/\\]$//; + $FormatPath .= '/'; + + if ( ( $FormatPath ne '' ) && $Verbose ) { + print " located formatpath : $FormatPath\n"; + } + } + return $FormatPath; +} + +sub RunOneFormat { + my ($FormatName) = @_; + my @TeXFormatPath; + my $TeXPrefix = ""; + if ( ( $fmtutil ne "" ) && ( $FormatName !~ /metafun|mptopdf/io ) ) { + my $cmd = "$fmtutil --byfmt $FormatName"; if ($Verbose) { print "\n$cmd\n\n" } - MakeUserFile ; # this works only when the path is kept - MakeResponseFile ; - $Problems = system ( "$cmd" ) ; - RemoveResponseFile ; - RestoreUserFile } - else - { $Problems = 1 } - if ($Problems) - { $Problems = 0 ; - if ($TeXExecutable =~ /etex|eetex|pdfetex|pdfeetex|eomega/io) - {$TeXPrefix = "*" } - my $CurrentPath = cwd() ; - $TeXFormatPath = LocatedFormatPath($TeXFormatPath) ; - if ($TeXFormatPath ne '') - { chdir $TeXFormatPath } - MakeUserFile ; - MakeResponseFile ; - my $cmd = "$TeXProgramPath$TeXExecutable $TeXVirginFlag " . - "$TeXPassString $PassOn ${TeXPrefix}$FormatName" ; + MakeUserFile; # this works only when the path is kept + MakeResponseFile; + $Problems = system("$cmd"); + RemoveResponseFile; + RestoreUserFile; + } else { + $Problems = 1; + } + if ($Problems) { + $Problems = 0; + if ( $TeXExecutable =~ /etex|eetex|pdfetex|pdfeetex|eomega/io ) { + $TeXPrefix = "*"; + } + my $CurrentPath = cwd(); + $TeXFormatPath = LocatedFormatPath($TeXFormatPath); + if ( $TeXFormatPath ne '' ) { chdir $TeXFormatPath } + MakeUserFile; + MakeResponseFile; + $own_quote = ($TeXProgramPath =~ m/^[^\"].* / ? "\"" : "") ; + my $cmd = + "$own_quote$TeXProgramPath$TeXExecutable$own_quote $TeXVirginFlag " + . "$TeXPassString $PassOn ${TeXPrefix}$FormatName"; if ($Verbose) { print "\n$cmd\n\n" } - $Problems = system ($cmd) ; - RemoveResponseFile ; - RestoreUserFile ; - if (($TeXFormatPath ne '')&&($CurrentPath ne '')) - { chdir $CurrentPath } } } - -sub RunFormats - { my $ConTeXtFormatsPrefix ; my $MetaFunDone = 0 ; - if (@ARGV) - { @ConTeXtFormats = @ARGV } - elsif ($UsedInterfaces ne '') - { @ConTeXtFormats = split /[\,\s]/,$UsedInterfaces } - if ($Format) - { @ConTeXtFormats = $Format; $ConTeXtFormatsPrefix='' ; } - else - { $ConTeXtFormatsPrefix="cont-" ; } - if ($TeXHashExecutable ne '') - { my $cmd = "$TeXProgramPath$TeXHashExecutable" ; - print "\n" ; - print " TeX hash binary : $TeXProgramPath$TeXHashExecutable\n" ; - print " comment : hashing may take a while ...\n" ; + $Problems = system($cmd) ; + RemoveResponseFile; + RestoreUserFile; + + if ( ( $TeXFormatPath ne '' ) && ( $CurrentPath ne '' ) ) { + chdir $CurrentPath; + } + } +} + +sub RunFormats { + my $ConTeXtFormatsPrefix; + my $MetaFunDone = 0; + if (@ARGV) { @ConTeXtFormats = @ARGV } + elsif ( $UsedInterfaces ne '' ) { + @ConTeXtFormats = split /[\,\s]/, $UsedInterfaces; + } + if ($Format) { @ConTeXtFormats = $Format; $ConTeXtFormatsPrefix = ''; } + else { $ConTeXtFormatsPrefix = "cont-"; } + if ( $TeXHashExecutable ne '' ) { + $own_quote = ($TeXProgramPath =~ m/^[^\"].* / ? "\"" : "") ; + my $cmd = "$own_quote$TeXProgramPath$TeXHashExecutable$own_quote"; + print "\n"; + print " TeX hash binary : $TeXProgramPath$TeXHashExecutable\n"; + print " comment : hashing may take a while ...\n"; if ($Verbose) { print "\n$cmd\n\n" } - system ($cmd) } - foreach my $Interface (@ConTeXtFormats) - { if ($Interface eq $MetaFun) - { RunMpFormat ($MetaFun) ; $MetaFunDone = 1 } - elsif ($Interface eq $MpToPdf) - { if ($TeXExecutable =~ /pdf/io) { RunOneFormat ("$MpToPdf") } } - else - { RunOneFormat ("$ConTeXtFormatsPrefix$Interface") } } - # - # this will be default in a few months, or maybe better: - # add it as interface (fake -) in texexec.ini - # - # if (($ConTeXtFormatsPrefix ne "")&&(!$MetaFunDone)) - # { RunMpFormat ($MetaFun) } } - # - print "\n" ; - print " TeX binary : $TeXProgramPath$TeXExecutable\n" ; - print " format(s) : @ConTeXtFormats\n\n" } - -sub RunMpFormat - { my $MpFormat = shift ; - return if ($MpFormat eq '') ; - my $CurrentPath = cwd() ; - $MpFormatPath = LocatedFormatPath($MpFormatPath) ; - if ($MpFormatPath ne '') { chdir "$MpFormatPath" } - my $cmd = "$own_quote$MpExecutable$own_quote $MpVirginFlag $MpPassString $MpFormat" ; + system($cmd); + } + foreach my $Interface (@ConTeXtFormats) { + if ( $Interface eq $MetaFun ) { + RunMpFormat($MetaFun); + $MetaFunDone = 1; + } elsif ( $Interface eq $MpToPdf ) { + if ( $TeXExecutable =~ /pdf/io ) { RunOneFormat("$MpToPdf") } + } else { + RunOneFormat("$ConTeXtFormatsPrefix$Interface"); + } + } + print "\n"; + print " TeX binary : $TeXProgramPath$TeXExecutable\n"; + print " format(s) : @ConTeXtFormats\n\n"; +} + +sub RunMpFormat { + my $MpFormat = shift; + return if ( $MpFormat eq '' ); + my $CurrentPath = cwd(); + $MpFormatPath = LocatedFormatPath($MpFormatPath); + if ( $MpFormatPath ne '' ) { chdir "$MpFormatPath" } + $own_quote = ($MpExecutable =~ m/^[^\"].* / ? "\"" : "") ; + my $cmd = + "$own_quote$MpExecutable$own_quote $MpVirginFlag $MpPassString $MpFormat"; if ($Verbose) { print "\n$cmd\n\n" } - system ( $cmd ) ; - if (($MpFormatPath ne '')&&($CurrentPath ne '')) - { chdir $CurrentPath } } - -sub RunFiles - { if ($PdfArrange) - { my @arrangedfiles = () ; - foreach my $JobName (@ARGV) - { unless ($JobName =~ /.*\.pdf$/oi) - { if (-f "$JobName.pdf") - { $JobName .= ".pdf" } - else - { $JobName .= ".PDF" } } - push @arrangedfiles, $JobName } - if (@arrangedfiles) - { RunArrange (@arrangedfiles) } } - elsif (($PdfSelect)||($PdfCopy)||($PdfCombine)) - { my $JobName = $ARGV[0] ; - if ($JobName ne '') - { unless ($JobName =~ /.*\.pdf$/oi) - { if (-f "$JobName.pdf") - { $JobName .= ".pdf" } - else - { $JobName .= ".PDF" } } - if ($PdfSelect) - { RunSelect ($JobName) } - elsif ($PdfCopy) - { RunCopy ($JobName) } - else -# { RunCombine ($JobName) } } } - { RunCombine (@ARGV) } } } - elsif ($TypesetModule) - { RunModule (@ARGV) } - else - { my $JobSuffix = "tex" ; - foreach my $JobName (@ARGV) - { if ($JobName =~ s/\.(\w+)$//io) - { $JobSuffix = $1 } - if (($Format eq '')||($Format =~ /^cont.*/io)) - { RunConTeXtFile ($JobName, $JobSuffix) } - else - { RunSomeTeXFile ($JobName, $JobSuffix) } - unless (-s "$JobName.log") { unlink ("$JobName.log") } - unless (-s "$JobName.tui") { unlink ("$JobName.tui") } } } } - -my $MpTmp = "tmpgraph" ; # todo: prefix met jobname -my $MpKep = "$MpTmp.kep" ; # sub => MpTmp("kep") -my $MpLog = "$MpTmp.log" ; -my $MpBck = "$MpTmp.bck" ; -my $MpTex = "$MpTmp.tex" ; -my $MpDvi = "$MpTmp.dvi" ; - -my %mpbetex ; - -sub RunMP ########### - { if (($MpExecutable)&&($MpToTeXExecutable)&&($DviToMpExecutable)) - { foreach my $RawMpName (@ARGV) - { my ($MpName, $Rest) = split (/\./, $RawMpName, 2) ; - my $MpFile = "$MpName.mp" ; - if (-e $MpFile and (-s $MpFile>25)) # texunlink makes empty file - { unlink "$MpName.mpt" ; - doRunMP($MpName,0) ; + system($cmd ) ; + + if ( ( $MpFormatPath ne '' ) && ( $CurrentPath ne '' ) ) { + chdir $CurrentPath; + } +} + +sub RunFiles { + if ($PdfArrange) { + my @arrangedfiles = (); + foreach my $JobName (@ARGV) { + unless ( $JobName =~ /.*\.pdf$/oi ) { + if ( -f "$JobName.pdf" ) { $JobName .= ".pdf" } + else { $JobName .= ".PDF" } + } + push @arrangedfiles, $JobName; + } + if (@arrangedfiles) { RunArrange(@arrangedfiles) } + } elsif ( ($PdfSelect) || ($PdfCopy) || ($PdfCombine) ) { + my $JobName = $ARGV[0]; + if ( $JobName ne '' ) { + unless ( $JobName =~ /.*\.pdf$/oi ) { + if ( -f "$JobName.pdf" ) { $JobName .= ".pdf" } + else { $JobName .= ".PDF" } + } + if ($PdfSelect) { RunSelect($JobName) } + elsif ($PdfCopy) { RunCopy($JobName) } + else { + # RunCombine ($JobName) ; + RunCombine(@ARGV); + } + } + } elsif ($TypesetModule) { + RunModule(@ARGV); + } else { + my $JobSuffix = "tex"; + foreach my $JobName (@ARGV) { + if ( $JobName =~ s/\.(\w+)$//io ) { $JobSuffix = $1 } + if ( ( $Format eq '' ) || ( $Format =~ /^cont.*/io ) ) { + RunConTeXtFile( $JobName, $JobSuffix ); + } else { + RunSomeTeXFile( $JobName, $JobSuffix ); + } + unless ( -s "$JobName.log" ) { unlink("$JobName.log") } + unless ( -s "$JobName.tui" ) { unlink("$JobName.tui") } + } + } +} + +my $MpTmp = "tmpgraph"; # todo: prefix met jobname +my $MpKep = "$MpTmp.kep"; # sub => MpTmp("kep") +my $MpLog = "$MpTmp.log"; +my $MpBck = "$MpTmp.bck"; +my $MpTex = "$MpTmp.tex"; +my $MpDvi = "$MpTmp.dvi"; + +my %mpbetex; + +sub RunMP { ########### + if ( ($MpExecutable) && ($MpToTeXExecutable) && ($DviToMpExecutable) ) { + foreach my $RawMpName (@ARGV) { + my ( $MpName, $Rest ) = split( /\./, $RawMpName, 2 ); + my $MpFile = "$MpName.mp"; + if ( -e $MpFile + and ( -s $MpFile > 25 ) ) # texunlink makes empty file + { + unlink "$MpName.mpt"; + doRunMP( $MpName, 0 ); # test for graphics, new per 14/12/2000 - my $mpgraphics = checkMPgraphics($MpName) ; + my $mpgraphics = checkMPgraphics($MpName); # test for labels - my $mplabels = checkMPlabels($MpName) ; - if ($mpgraphics||$mplabels) - { doRunMP($MpName,$mplabels) } } } } } - -my $mpochecksum = 0 ; - -sub checkMPgraphics # also see makempy - { my $MpName = shift ; - if ($MakeMpy != '') - { $MpName .= " --$MakeMpy " } # extra switches - if ($MpyForce) - { $MpName .= " --force " } # dirty - else - { return 0 unless -s "$MpName.mpo" > 32 ; - return 0 unless (open (MPO,"$MpName.mpo")) ; - $mpochecksum = do { local $/ ; unpack("%32C*",<MPO>) % 65535 } ; - close (MPO) ; - if (open (MPY,"$MpName.mpy")) - { my $str = <MPY> ; chomp $str ; close (MPY) ; - if ($str =~ /^\%\s*mpochecksum\s*\:\s*(\d+)/o) - { return 0 if (($mpochecksum eq $1)&&($mpochecksum ne 0)) } } } - RunPerlScript("makempy", "$MpName") ; - print " second MP run needed : text graphics found\n" ; - return 1 } - -sub checkMPlabels - { my $MpName = shift ; - return 0 unless (-s "$MpName.mpt" > 10) ; - return 0 unless open(MP, "$MpName.mpt") ; - my $n = 0 ; - while (<MP>) - { if (/% figure (\d+) : (.*)/o) - { $mpbetex{$1} .= "$2\n" ; ++$n } } - close (MP) ; - print " second MP run needed : $n tex labels found\n" if $n ; - return $n } - -sub doRunMP ########### - { my ($MpName, $MergeBE) = @_ ; - my $TexFound = 0 ; - my $MpFile = "$MpName.mp" ; - if (open(MP, $MpFile)) - { # fails with % - # local $/ = "\0777" ; $_ = <MP> ; close(MP) ; - - my $MPdata = "" ; - while (<MP>) { unless (/^\%/) { $MPdata .= $_ } } - $_ = $MPdata ; - close (MP) ; + my $mplabels = checkMPlabels($MpName); + if ( $mpgraphics || $mplabels ) { + doRunMP( $MpName, $mplabels ); + } + } + } + } +} + +my $mpochecksum = 0; + +sub checkMPgraphics { # also see makempy + my $MpName = shift; + if ( $MakeMpy != '' ) { $MpName .= " --$MakeMpy " } # extra switches + if ($MpyForce) { $MpName .= " --force " } # dirty + else { + return 0 unless -s "$MpName.mpo" > 32; + return 0 unless ( open( MPO, "$MpName.mpo" ) ); + $mpochecksum = do { local $/; unpack( "%32C*", <MPO> ) % 65535 }; + close(MPO); + if ( open( MPY, "$MpName.mpy" ) ) { + my $str = <MPY>; + chomp $str; + close(MPY); + if ( $str =~ /^\%\s*mpochecksum\s*\:\s*(\d+)/o ) { + return 0 if ( ( $mpochecksum eq $1 ) && ( $mpochecksum ne 0 ) ); + } + } + } + RunPerlScript( "makempy", "$MpName" ); + print " second MP run needed : text graphics found\n"; + return 1; +} + +sub checkMPlabels { + my $MpName = shift; + return 0 unless ( -s "$MpName.mpt" > 10 ); + return 0 unless open( MP, "$MpName.mpt" ); + my $n = 0; + while (<MP>) { + if (/% figure (\d+) : (.*)/o) { $mpbetex{$1} .= "$2\n"; ++$n } + } + close(MP); + print " second MP run needed : $n tex labels found\n" if $n; + return $n; +} + +sub doRunMP { ########### + my ( $MpName, $MergeBE ) = @_; + my $TexFound = 0; + my $MpFile = "$MpName.mp"; + if ( open( MP, $MpFile ) ) { # fails with % + my $MPdata = ""; + while (<MP>) { + unless (/^\%/) { $MPdata .= $_ } + } + $_ = $MPdata; + close(MP); # save old file - unlink ($MpKep) ; - return if (-e $MpKep) ; - rename ($MpFile, $MpKep) ; + unlink($MpKep); + return if ( -e $MpKep ); + rename( $MpFile, $MpKep ); # check for tex stuff - # $TexFound = $MergeBE || /(btex|etex|verbatimtex)/o ; - # verbatim tex can be there due to an environment belonging to - # mpy (not really, but about) - # $TexFound = $MergeBE || /(btex|etex)/o ; - - $TexFound = $MergeBE || /btex .*? etex/o ; + $TexFound = $MergeBE || /btex .*? etex/o; # shorten lines into new file if okay - unless (-e $MpFile) - { open(MP, ">$MpFile") ; - s/(btex.*?)\;(.*?etex)/$1\@\@\@$2/gmois ; - s/\;/\;\n/gmois ; - s/\n\n/\n/gmois ; - s/(btex.*?)\@\@\@(.*?etex)/$1\;$2/gmois ; + unless ( -e $MpFile ) { + open( MP, ">$MpFile" ); + s/(btex.*?)\;(.*?etex)/$1\@\@\@$2/gmois; + s/\;/\;\n/gmois; + s/\n\n/\n/gmois; + s/(btex.*?)\@\@\@(.*?etex)/$1\;$2/gmois; # merge labels - if ($MergeBE) - { s/beginfig\s*\((\d+)\)\s*\;/beginfig($1)\;\n$mpbetex{$1}\n/goims } + if ($MergeBE) { +s/beginfig\s*\((\d+)\)\s*\;/beginfig($1)\;\n$mpbetex{$1}\n/goims; + } # flush - unless (/beginfig\s*\(\s*0\s*\)/gmois) - { print MP $mpbetex{0} } - print MP $_ ; - print MP "\n" . "end" . "\n" ; - close(MP) } - if ($TexFound) - { print " metapost to tex : $MpName\n" ; - $Problems = system ("$own_quote$MpToTeXExecutable$own_quote $MpFile > $MpTex" ) ; - if (-e $MpTex && !$Problems) - { open (TMP,">>$MpTex") ; - print TMP "\\end\{document\}\n" ; # to be sure - close (TMP) ; - if (($Format eq '')||($Format =~ /^cont.*/io)) - { $OutputFormat = "dvips" ; - RunConTeXtFile ($MpTmp, "tex") } - else - { RunSomeTeXFile ($MpTmp, "tex") } - if (-e $MpDvi && !$Problems) - { print " dvi to metapost : $MpName\n" ; - $Problems = system ("$own_quote$DviToMpExecutable$own_quote $MpDvi $MpName.mpx") } - # $Problems = system ("dvicopy $MpDvi texexec.dvi") ; - # $Problems = system ("$own_quote$DviToMpExecutable$own_quote texexec.dvi $MpName.mpx") } - unlink $MpBck ; - rename $MpTex, $MpBck ; - unlink $MpDvi } } - print " metapost : $MpName\n" ; - my $cmd = "$own_quote$MpExecutable$own_quote" ; - if ($EnterBatchMode) - { $cmd .= " $MpBatchFlag " } - if ($EnterNonStopMode) - { $cmd .= " $MpNonStopFlag " } - if (($MpFormat ne '')&&($MpFormat !~ /(plain|mpost)/oi)) - { print " format : $MpFormat\n" ; - $cmd .= " $MpPassString $MpFormatFlag$MpFormat " } -# prevent nameclash, experimental -my $MpMpName = "$MpName" ; -#my $MpMpName = "./$MpName" ; $MpMpName =~ s/\.\/\.\//\.\//o ; -$Problems = system ("$cmd $MpMpName" ) ; -# $Problems = system ("$cmd $MpName" ) ; - open (MPL,"$MpName.log") ; - while (<MPL>) # can be one big line unix under win - { while (/^l\.(\d+)\s/gmois) - { print " error in metapost run : $MpName.mp:$1\n" } } - unlink "mptrace.tmp" ; rename ($MpFile, "mptrace.tmp") ; - if (-e $MpKep) - { unlink ($MpFile) ; - rename ($MpKep, $MpFile) } } } - -sub RunMPX - { my $MpName = shift ; $MpName =~ s/\..*$//o ; - my $MpFile = $MpName . ".mp" ; - if (($MpToTeXExecutable)&&($DviToMpExecutable)&& - (-e $MpFile)&&(-s $MpFile>5)&&open(MP, $MpFile)) - { local $/ = "\0777" ; $_ = <MP> ; close(MP) ; - if (/(btex|etex|verbatimtex)/o) - { print " generating mpx file : $MpName\n" ; - $Problems = system ("$own_quote$MpToTeXExecutable$own_quote $MpFile > $MpTex" ) ; - if (-e $MpTex && !$Problems) - { open (TMP,">>$MpTex") ; - print TMP "\\end\n" ; # to be sure - close (TMP) ; - if (($Format eq '')||($Format =~ /^cont.*/io)) - { RunConTeXtFile ($MpTmp, "tex") } - else - { RunSomeTeXFile ($MpTmp, "tex") } - if (-e $MpDvi && !$Problems) - { $Problems = system ("$own_quote$DviToMpExecutable$own_quote $MpDvi $MpName.mpx") } - unlink $MpTex ; - unlink $MpDvi } } } } - -sub load_set_file - { my %new ; my %old ; - my ($file, $trace) = @_ ; - if (open(BAT,$file)) - { while (<BAT>) - { chomp ; - if (/\s*SET\s+(.+?)\=(.+)\s*/io) - { my ($var,$val) = ($1, $2) ; - $val =~ s/\%(.+?)\%/$ENV{$1}/goi ; - unless (defined($old{$var})) - { if (defined($ENV{$var})) - { $old{$var} = $ENV{$var} } - else - { $old{$var} = "" } } - $ENV{$var} = $new{$var} = $val } } - close (BAT) } - if ($trace) - { foreach my $key (sort keys %new) - { if ($old{$key} ne $new{$key}) - { print " changing env variable : '$key' from '$old{$key}' to '$new{$key}'\n" } - elsif ($old{$key} eq "") - { print " setting env variable : '$key' to '$new{$key}'\n" } - else - { print " keeping env variable : '$key' at '$new{$key}'\n" } } - print "\n" } } - -if ($SetFile ne "") - { load_set_file ($SetFile,$Verbose) } + unless (/beginfig\s*\(\s*0\s*\)/gmois) { print MP $mpbetex{0} } + print MP $_; + print MP "\n" . "end" . "\n"; + close(MP); + } + if ($TexFound) { + print " metapost to tex : $MpName\n"; + $own_quote = ($MpToTeXExecutable =~ m/^[^\"].* / ? "\"" : "") ; + $Problems = + system("$own_quote$MpToTeXExecutable$own_quote $MpFile > $MpTex"); + if ( -e $MpTex && !$Problems ) { + open( TMP, ">>$MpTex" ); + print TMP "\\end\{document\}\n"; # to be sure + close(TMP); + if ( ( $Format eq '' ) || ( $Format =~ /^cont.*/io ) ) { + $OutputFormat = "dvips"; + RunConTeXtFile( $MpTmp, "tex" ); + } else { + RunSomeTeXFile( $MpTmp, "tex" ); + } + if ( -e $MpDvi && !$Problems ) { + print " dvi to metapost : $MpName\n"; + $own_quote = ($DviToMpExecutable =~ m/^[^\"].* / ? "\"" : "") ; + $Problems = system("$own_quote$DviToMpExecutable$own_quote $MpDvi $MpName.mpx"); + } + unlink $MpBck; + rename $MpTex, $MpBck; + unlink $MpDvi; + } + } + print " metapost : $MpName\n"; + $own_quote = ($MpExecutable =~ m/^[^\"].* / ? "\"" : "") ; + my $cmd = "$own_quote$MpExecutable$own_quote"; + if ($EnterBatchMode) { $cmd .= " $MpBatchFlag " } + if ($EnterNonStopMode) { $cmd .= " $MpNonStopFlag " } + if ( ( $MpFormat ne '' ) && ( $MpFormat !~ /(plain|mpost)/oi ) ) { + print " format : $MpFormat\n"; + $cmd .= " $MpPassString $MpFormatFlag$MpFormat "; + } + # prevent nameclash, experimental + my $MpMpName = "$MpName"; + $Problems = system("$cmd $MpMpName"); + open( MPL, "$MpName.log" ); + while (<MPL>) # can be one big line unix under win + { + while (/^l\.(\d+)\s/gmois) { + print " error in metapost run : $MpName.mp:$1\n"; + } + } + unlink "mptrace.tmp"; + rename( $MpFile, "mptrace.tmp" ); + if ( -e $MpKep ) { + unlink($MpFile); + rename( $MpKep, $MpFile ); + } + } +} + +sub RunMPX { + my $MpName = shift; + $MpName =~ s/\..*$//o; + my $MpFile = $MpName . ".mp"; + if ( ($MpToTeXExecutable) + && ($DviToMpExecutable) + && ( -e $MpFile ) + && ( -s $MpFile > 5 ) + && open( MP, $MpFile ) ) + { + local $/ = "\0777"; + $_ = <MP>; + close(MP); + if (/(btex|etex|verbatimtex)/o) { + print " generating mpx file : $MpName\n"; + $own_quote = ($MpToTeXExecutable =~ m/^[^\"].* / ? "\"" : "") ; + $Problems = + system("$own_quote$MpToTeXExecutable$own_quote $MpFile > $MpTex"); + if ( -e $MpTex && !$Problems ) { + open( TMP, ">>$MpTex" ); + print TMP "\\end\n"; # to be sure + close(TMP); + if ( ( $Format eq '' ) || ( $Format =~ /^cont.*/io ) ) { + RunConTeXtFile( $MpTmp, "tex" ); + } else { + RunSomeTeXFile( $MpTmp, "tex" ); + } + if ( -e $MpDvi && !$Problems ) { + $own_quote = ($DviToMpExecutable =~ m/^[^\"].* / ? "\"" : "") ; + $Problems = + system("$own_quote$DviToMpExecutable$own_quote $MpDvi $MpName.mpx"); + } + unlink $MpTex; + unlink $MpDvi; + } + } + } +} + +sub load_set_file { + my %new; + my %old; + my ( $file, $trace ) = @_; + if ( open( BAT, $file ) ) { + while (<BAT>) { + chomp; + if (/\s*SET\s+(.+?)\=(.+)\s*/io) { + my ( $var, $val ) = ( $1, $2 ); + $val =~ s/\%(.+?)\%/$ENV{$1}/goi; + unless ( defined( $old{$var} ) ) { + if ( defined( $ENV{$var} ) ) { $old{$var} = $ENV{$var} } + else { $old{$var} = "" } + } + $ENV{$var} = $new{$var} = $val; + } + } + close(BAT); + } + if ($trace) { + foreach my $key ( sort keys %new ) { + if ( $old{$key} ne $new{$key} ) { + print " changing env variable : '$key' from '$old{$key}' to '$new{$key}'\n"; + } elsif ( $old{$key} eq "" ) { + print " setting env variable : '$key' to '$new{$key}'\n"; + } else { + print " keeping env variable : '$key' at '$new{$key}'\n"; + } + } + print "\n"; + } +} + +if ( $SetFile ne "" ) { load_set_file( $SetFile, $Verbose ) } # todo : more consistent argv handling # @@ -2383,52 +2386,45 @@ if ($SetFile ne "") # else # { print " invalid texmf tree : $tree \n" } } -sub check_texmf_root {} -sub check_texmf_tree {} +sub check_texmf_root { } +sub check_texmf_tree { } # the main thing - if ($HelpAsked) - { show_help_info } -elsif ($TypesetListing) - { check_texmf_root ; - check_texmf_tree ; - RunListing (@ARGV) } -elsif ($TypesetFigures) - { check_texmf_root ; - check_texmf_tree ; - RunFigures (@ARGV) } -elsif ($DoMPTeX) - { check_texmf_root ; - check_texmf_tree ; - RunMP } -elsif ($DoMPXTeX) - { check_texmf_root ; - check_texmf_tree ; - RunMPX ($ARGV[0]) } -elsif ($MakeFormats) - { check_texmf_root ; - check_texmf_tree ; - if ($MpDoFormat ne '') - { RunMpFormat($MpDoFormat) } - else - { RunFormats } } -elsif (@ARGV) - { check_texmf_root ; - check_texmf_tree ; - @ARGV = <@ARGV> ; - RunFiles } - -# else -# { # print $Help{HELP} ; -# # unless ($Verbose) { print $Help{VERBOSE} } } -elsif (!$HelpAsked) - { show_help_options } - -$TotalTime = time - $TotalTime ; - -unless ($HelpAsked) - { print "\n total run time : $TotalTime seconds\n" } +if ($HelpAsked) { show_help_info } +elsif ($TypesetListing) { + check_texmf_root; + check_texmf_tree; + RunListing(@ARGV); +} elsif ($TypesetFigures) { + check_texmf_root; + check_texmf_tree; + RunFigures(@ARGV); +} elsif ($DoMPTeX) { + check_texmf_root; + check_texmf_tree; + RunMP; +} elsif ($DoMPXTeX) { + check_texmf_root; + check_texmf_tree; + RunMPX( $ARGV[0] ); +} elsif ($MakeFormats) { + check_texmf_root; + check_texmf_tree; + if ( $MpDoFormat ne '' ) { RunMpFormat($MpDoFormat) } + else { RunFormats } +} elsif (@ARGV) { + check_texmf_root; + check_texmf_tree; + @ARGV = <@ARGV>; + RunFiles; +} elsif ( !$HelpAsked ) { + show_help_options; +} + +$TotalTime = time - $TotalTime; + +unless ($HelpAsked) { print "\n total run time : $TotalTime seconds\n" } if ($Problems) { exit 1 } @@ -2614,4 +2610,4 @@ alone bypass utilities (e.g. fmtutil for non-standard fmt's) ----------- texutil force TeXUtil run ----------- -setfile load environment (batch) file +setfile load environment (batch) file
\ No newline at end of file |