diff options
Diffstat (limited to 'tex/context/base/texexec.pl')
-rw-r--r-- | tex/context/base/texexec.pl | 624 |
1 files changed, 624 insertions, 0 deletions
diff --git a/tex/context/base/texexec.pl b/tex/context/base/texexec.pl new file mode 100644 index 000000000..0a8d69dab --- /dev/null +++ b/tex/context/base/texexec.pl @@ -0,0 +1,624 @@ +#!/usr/bin/perl +#-w + +# nog doen: automatisch log scannen op overfull en missing +# +# fastmode tzt anders: \iffastmode \fi + +#D \module +#D [ file=texexec.pl, +#D version=1999.01.07, +#D title=running \ConTeXt, +#D subtitle=\TEXEXEC, +#D author=Hans Hagen, +#D date=\currentdate, +#D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +#C +#C This script is part of the \CONTEXT\ macro||package and is +#C therefore copyrighted by \PRAGMA. Non||commercial use is +#C granted. + +# sample 'texexec.ini' file +# +# set UsedInterfaces to nl,en +# set UserInterface to nl +# set TeXExecutable to pdfetex +# set TeXFormatFlag to & +# set TeXVirginFlag to -ini +# set TeXFormatPath to t:/tex/web2c/fmt/ +# set ConTeXtPath to t:/pragma/sources/ +# set SetupPath to t:/pragma/sources/ +# set TeXScriptsPath to t:/pragma/programs/ + +use Getopt::Long ; +use Cwd ; +use Time::Local ; + +$Getopt::Long::passthrough = 1 ; # no error message +$Getopt::Long::autoabbrev = 1 ; # partial switch accepted + +$ConTeXtInterface = "unknown" ; +$OutputFormat = "standard" ; +$MainLanguage = "standard" ; +$PaperFormat = "standard" ; +$PrintFormat = "standard" ; +$NOfRuns = 10 ; +$SetupPath = "" ; +$Format = "" ; +$Environment = "" ; + +$UserInterface = "en" ; # default +$UsedInterfaces = "" ; + +&GetOptions + ( "interface=s" => \$ConTeXtInterface , + "output=s" => \$OutputFormat , + "language=s" => \$MainLanguage , + "paper=s" => \$PaperFormat , + "print=s" => \$PrintFormat , + "help" => \$HelpAsked , + "fast" => \$FastMode , + "nomp" => \$NoMPMode , + "final" => \$FinalMode , + "runs=s" => \$NOfRuns , + "tex=s" => \$TeXProgram , + "verbose" => \$Verbose , + "module" => \$TypesetModule , + "make" => \$MakeFormats , + "mode=s" => \$Mode , + "pages=s" => \$Pages , + "format=s" => \$Format , + "pdf" => \$ProducePdf , + "convert=s" => \$Convert , + "once" => \$RunOnce , + "batch" => \$EnterBatchMode , + "color" => \$UseColor , + "environment=s" => \$Environment , + "result=s" => \$Result ) ; + +if ($ProducePdf) { $OutputFormat = "pdf" } +if ($RunOnce) { $NOfRuns = 1 } + +$Program = " TeXExec 1.1 - ConTeXt / PRAGMA ADE 1997-1999" ; + +$Script = "texexec" ; + +print "\n$Program\n\n"; + +$SIG{INT} = "IGNORE" ; + +sub CheckPath + { ($Key, $Value) = @_ ; + if ($Value =~ /\//) + { $Last = chop $Value ; + unless ($Last eq "/" ) { $Value = $Value . $Last } + unless (-d $Value) + { print " error : $Key set to unknown path $Value\n" } } } + +if ($ENV{TEXEXEC_INI_FILE}) + { $_ = $ENV{TEXEXEC_INI_FILE} } +else + { $_ = $0 } + +s/\.(pl|ini)//io ; + +$IniPath = $_ . ".ini" ; + +# set <variable> to <value> +# for <script> set <variable> to <value> + +if (open(INI, $IniPath)) + { if ($Verbose) + { print " reading : $IniPath\n\n" } + while (<INI>) + { if (!/^[a-zA-Z\s]/oi) + { } +# elsif (/for\s+(\w+)\s+set\s+(\w+)\s*to\s*([\w|\:|\/]+)/goi) + elsif (/for\s+(\S+)\s+set\s+(\S+)\s*to\s*(\S+)/goi) + { if ($1 eq $Script) # not yet used + { if ($Verbose) + { print " setting : '$2' to '$3' for '$1'\n" } + $Done{$2} = 1 ; + ${$2} = $3 ; CheckPath ($2, $3) } } +# elsif (/set\s+(\w+)\s*to\s*([\w|\:|\/|\,]+)/goi) + elsif (/set\s+(\S+)\s*to\s*(\S+)/goi) + { unless ($Done{$1}) + { if ($Verbose) + { print " setting : '$1' to '$2' for 'all'\n" } + ${$1} = $2 ; CheckPath ($1, $2) } } } + close (INI) ; + if ($Verbose) + { print "\n" } } +else + { print " warning : $IniPath not found\n" ; + exit 1 } + +if ($TeXProgram) + { $TeXExecutable = $TeXProgram } +elsif (!$TeXExecutable) + { $TeXExecutable = "tex" } + +unless ($TeXFormatFlag) { $TeXFormatFlag="&" } +unless ($TeXVirginFlag) { $TeXVirginFlag="-ini" } + +# $_ = $0 ; s/texexec\.pl//io ; $TeXScriptsPath = $_ ; + +unless ($TeXScriptsPath) + { $_ = $0 ; s/texexec\.pl//io ; $TeXScriptsPath = $_ } + +unless ($ConTeXtPath) + { $ConTeXtPath = $TeXScriptsPath } + +if ($ENV{"HOME"}) + { if ($SetupPath) { $SetupPath .= "," } + $SetupPath .= $ENV{"HOME"} } + +$OutputFormats{pdf} = "pdftex" ; +$OutputFormats{pdftex} = "pdftex" ; +$OutputFormats{dvips} = "dvips" ; +$OutputFormats{dvipsone} = "dvipsone" ; +$OutputFormats{acrobat} = "acrobat" ; +$OutputFormats{dviwindo} = "dviwindo" ; +$OutputFormats{dviview} = "dviview" ; + +@ConTeXtFormats = ("nl", "en", "de", "cz", "uk") ; + +$ConTeXtInterfaces{nl} = "nl" ; $ConTeXtInterfaces{dutch} = "nl" ; +$ConTeXtInterfaces{en} = "en" ; $ConTeXtInterfaces{english} = "en" ; +$ConTeXtInterfaces{de} = "de" ; $ConTeXtInterfaces{german} = "de" ; +$ConTeXtInterfaces{cz} = "cz" ; $ConTeXtInterfaces{czech} = "cz" ; +$ConTeXtInterfaces{uk} = "uk" ; $ConTeXtInterfaces{brittish} = "uk" ; + +$Help{HELP} = + " --help show this or more, e.g. '--help interface'\n" ; + +$Help{LANGUAGE} = + " --language main hyphenation language \n" ; + +$Help{language} = $Help{LANGUAGE} . + " =xx : standard abbreviation \n" ; + +$Help{TEX} = + " --tex tex binary \n" ; + +$Help{tex} = $Help{TEX} . + " =name : binary of executable \n" ; + +$Help{FORMAT} = + " --format fmt file \n" ; + +$Help{format} = $Help{FORMAT} . + " =name : format file (memory dump) \n" ; + +$Help{MODE}= + " --mode running mode \n" ; + +$Help{mode} = $Help{MODE} . + " =list : modes to set \n" ; + +$Help{OUTPUT} = + " --output specials to use \n" ; + +$Help{output} = $Help{OUTPUT} . + " =pdftex \n" . + " =dvips dvipsone \n" . + " =dviwindo dviview \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{PRINT} = + " --print page imposition scheme \n" ; + +$Help{PAGES} = + " --pages pages to output \n" ; + +$Help{paper} = $Help{PAPER} . + " =odd : odd pages \n" . + " =even : even pages \n" . + " =x,y,z : pages x, y and z \n" ; + +$Help{"print"} = $Help{PRINT} . + " =up : 2 pages per sheet doublesided \n" . + " =down : 2 rotated pages per sheet doublesided \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" ; + +$Help{RUNS} = + " --runs maximum number of TeX runs \n" ; + +$Help{FAST} = + " --fast skip as much as possible \n" ; + +$Help{NOMP} = + " --nomp don't run MetaPost \n" ; + +$Help{FINAL} = + " --final add a final run without skipping \n" ; + +$Help{MODULE} = + " --module typeset tex/pl/mp module \n" ; + +$Help{MAKE} = + " --make build format files \n" ; + +$Help{VERBOSE} = + " --verbose shows some additional info \n" ; + +$Help{CONVERT} = + " --convert converts file first \n" ; + +$Help{convert} = $Help{CONVERT} . + " =xml : xml => tex \n" . + " =sgml : sgml => tex \n" ; + +$Help{RESULTS} = + " --results resulting file \n" ; + +# nog Result in help + +if ($HelpAsked) + { if (@ARGV) + { foreach (@ARGV) { print "$Help{$_}\n" } } + else + { print $Help{LANGUAGE} ; + print $Help{OUTPUT} ; + print $Help{PRINT} ; + print $Help{PAPER} ; + print $Help{PAGES} ; + print $Help{INTERFACE} ; + print $Help{RUNS} ; + print $Help{TEX} ; + print $Help{MODE} ; + print $Help{FAST} ; + print $Help{NOMP} ; + print $Help{FINAL} ; + print $Help{VERBOSE} ; + print $Help{MODULE} ; + print $Help{MAKE} ; + print $Help{FORMAT} ; + print $Help{CONVERT} ; + print "\n" ; + print $Help{HELP} ; + print "\n" } + exit 0 } + +$FinalRunNeeded = 0 ; + +sub ConvertXMLFile + { ($FileName) = @_ ; + system ("sgml2tex $FileName.xml") } + +sub ConvertSGMLFile + { ($FileName) = @_ ; + system ("sgml2tex $FileName.sgm") } + +sub MakeOptionFile + { ($FinalRun, $FastDisabled) = @_ ; + open (OPT, ">cont-opt.tex") ; + print OPT "\\unprotect\n" ; + $MainLanguage = lc $MainLanguage ; + unless ($MainLanguage eq "standard") + { print OPT "\\setuplanguage[$MainLanguage]\n" } + $FullFormat = "" ; + $Ok = 1 ; + @OutputFormat = split(/,/,$OutputFormat) ; + foreach $Format (@OutputFormat) + { if ($OutputFormats{lc $Format}) + { if ($FullFormat) { $FullFormat .= "," } + $FullFormat .= "$OutputFormats{lc $Format}" } + elsif ($Format ne "standard") + { $Ok = 0 } } + if (!$Ok) + { print $Help{output} } + elsif ($FullFormat) + { print OPT "\\setupoutput[$FullFormat]\n" } + else + { $FullFormat = "standard" } + if ($EnterBatchMode) + { print OPT "\\batchmode\n" } + if ($UseColor) + { print OPT "\\setupcolors[\\c!status=\\v!start]\n" } + if ($NoMPMode) + { print OPT "\\runMPgraphicsfalse\n" } + if (($FastMode)&&(!$FastDisabled)) + { print OPT "\\fastmode\n" } + if ($SetupPath) + { print OPT "\\setupsystem[\\c!gebied=\{$SetupPath\}]\n" } + $_ = $PaperFormat ; + if (/.4.3/goi) + { print OPT "\\stelpapierformaatin[A4][A3]\n" } + elsif (/.5.4/goi) + { print OPT "\\stelpapierformaatin[A5][A4]\n" } + else + { unless (/standard/) { print $Help{paper} } } + $_ = $PrintFormat ; + if (/.*up/goi) + { $FinalRunNeeded = 1 ; + if ($FinalRun) + { print OPT "\\stelarrangerenin[2UP,\\v!geroteerd,\\v!dubbelzijdig]\n" } } + elsif (/.*down/goi) + { $FinalRunNeeded = 1 ; + if ($FinalRun) + { print OPT "\\stelarrangerenin[2DOWN,\\v!geroteerd,\\v!dubbelzijdig]\n" } } + else + { unless (/standard/goi) { print $Help{"print"} } } + 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 + { print OPT "\\def\\pagestoshipout\{$Pages\}\n" } } + print OPT "\\protect\n" ; + if ($Environment) + { foreach $E ($Environment) { print OPT "\\omgeving $E\n" } } + close (OPT) } + +sub CompareFiles + { $Ok = open (TUO1, $_[0]) && open (TUO2, $_[1]); + while (($Line1=<TUO1>)&&($Line2=<TUO2>)&&$Ok) + { $Ok = ($Line1 eq $Line2) } + close (TUO1) ; + close (TUO2) ; + return ($Ok) } + +$ConTeXtVersion = "unknown" ; +$ConTeXtModes = "" ; + +sub ScanPreamble + { my ($FileName) = @_ ; + open (TEX, $FileName) ; + while (<TEX>) + { chomp ; + if (!$_) + { last } + elsif (/^\%/) + { if (/^\%\&(.*\w)/) + { $ConTeXtInterface = $ConTeXtInterfaces{$1} } + else + { if (/tex=([a-z]*)/goi) { $TeXExecutable = $1 } + if (/program=([a-z]*)/goi) { $TeXExecutable = $1 } + if (/modes=([a-z\,]*)/goi) { $ConTeXtModes = $1 } + if (/output=([a-z\,]*)/goi) { $OutputFormat = $1 } + 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 + { ($ConTeXtInput) = @_ ; + open (TEX, $ConTeXtInput) ; + while (<TEX>) + { if (/\\(starttekst|stoptekst|startonderdeel)/) + { $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 (/(hoogte|breedte|letter)=/) + { $ConTeXtInterface = "nl" ; last } + elsif (/(height|width|style)=/) + { $ConTeXtInterface = "en" ; last } + elsif (/(hoehe|breite|schrift)=/) + { $ConTeXtInterface = "de" ; last } + elsif (/externfiguur/) + { $ConTeXtInterface = "nl" ; last } + elsif (/externalfigure/) + { $ConTeXtInterface = "en" ; last } + elsif (/externeabbildung/) + { $ConTeXtInterface = "de" ; last } } + close (TEX) } + +if ($ConTeXtInterfaces{$ConTeXtInterface}) + { $ConTeXtInterface = $ConTeXtInterfaces{$ConTeXtInterface} } + +my $Problems = 0 ; + +sub RunTeX + { my $StartTime = time ; + $Problems = system + ( "$TeXProgramPath$TeXExecutable " . + "$TeXFormatFlag$TeXFormatPath$Format $JobName" ) ; + my $StopTime = time - $StartTime ; + print "\n run time : $StopTime\n" ; + return $Problems } + +sub PushResult + { if ($Result) + { print " outputfile : $Result\n" ; + unlink ("texexec.tuo") ; rename ("$_[0].tuo", "texexec.tuo") ; + unlink ("texexec.log") ; rename ("$_[0].log", "texexec.log") ; + unlink ("texexec.dvi") ; rename ("$_[0].dvi", "texexec.dvi") ; + unlink ("texexec.pdf") ; rename ("$_[0].pdf", "texexec.pdf") ; + if (-f "$Result.tuo") + { unlink ("$_[0].tuo") ; + rename ("$Result.tuo", "$_[0].tuo") } } } + +sub PopResult + { if ($Result) + { unlink ("$Result.tuo") ; rename ("$_[0].tuo", "$Result.tuo") ; + unlink ("$Result.log") ; rename ("$_[0].log", "$Result.log") ; + unlink ("$Result.dvi") ; rename ("$_[0].dvi", "$Result.dvi") ; + unlink ("$Result.pdf") ; rename ("$_[0].pdf", "$Result.pdf") ; + rename ("texexec.tuo", "$_[0].tuo") ; + rename ("texexec.log", "$_[0].log") ; + rename ("texexec.dvi", "$_[0].dvi") ; + rename ("texexec.pdf", "$_[0].pdf") } } + +sub RunConTeXtFile + { ($JobName) = @_ ; + $JobName =~ s/\\/\//goi ; + if (-e "$JobName.tex") + { if ($ConTeXtInterface eq "unknown") + { ScanPreamble ("$JobName.tex") } + if ($ConTeXtInterface eq "unknown") + { ScanContent ("$JobName.tex") } + if ($ConTeXtInterface eq "unknown") + { $ConTeXtInterface = $UserInterface } + if (lc $Convert eq "xml") + { print " xml input : $JobName.xml\n" ; + ConvertXMLFile ($JobName) } + elsif (lc $Convert eq "sgml") + { print " sgml input : $JobName.sgm\n" ; + ConvertSGMLFile ($JobName) } + MakeOptionFile ( 0, 0 ) ; + $StopRunning = 0 ; + $Format = "cont-$ConTeXtInterface" ; + unless ($FullFormat) { $FullFormat = "standard" } + print " executable : $TeXProgramPath$TeXExecutable\n" ; + print " format : $TeXFormatPath$Format\n" ; + print " inputfile : $JobName\n" ; + print " output : $FullFormat\n" ; # OutputFormat\n" ; + print " interface : $ConTeXtInterface\n" ; + $Options = "" ; + if ($FastMode) { $Options .= " fast" } + if ($FinalMode) { $Options .= " final" } + if ($Verbose) { $Options .= " verbose" } + if ($TypesetModule) { $Options .= " module" } + if ($MakeFormats) { $Options .= " make" } + if ($RunOnce) { $Options .= " once" } + if ($UseColor) { $Options .= " color" } + if ($EnterBatchMode){ $Options .= " batch" } + if ($NoMPMode) { $Options .= " nomp" } + if ($Options) + { print " options :$Options\n" } + if ($ConTeXtModes) + { print " possible modes : $ConTeXtModes\n" } + if ($Mode) + { print " current mode : $Mode\n" } + else + { print " current mode : all\n" } + if ($Environment) + { print " environments : $Environment\n" } + PushResult($JobName) ; + while (!$StopRunning&&($TeXRuns<$NOfRuns)) + { ++$TeXRuns ; + print " TeX run : $TeXRuns\n\n" ; + $Problems = RunTeX() ; + if ($Problems) + { last } + if ($NOfRuns>1) + { unlink "texutil.tuo" ; + rename "$JobName.tuo", "texutil.tuo" ; + system + ( "perl " . "$TeXScriptsPath" . "texutil.pl " . + "--references --ij --high $JobName" ) ; + $StopRunning = + CompareFiles("texutil.tuo", "$JobName.tuo") } } + if ((!$Problems)&&(($FinalMode||$FinalRunNeeded))&&($NOfRuns>1)) + { MakeOptionFile ( 1 , $FinalMode) ; + print " final TeX run : $TeXRuns\n\n" ; + $Problems = RunTeX() } + PopResult($JobName) } } + +sub RunSomeTeXFile + { ($JobName) = @_ ; + if (-e "$JobName.tex") + { PushResult($JobName) ; + print " executable : $TeXProgramPath$TeXExecutable\n" ; + print " format : $TeXFormatPath$Format\n" ; + print " inputfile : $JobName\n" ; + $Problems = RunTeX() ; + PopResult($JobName) } } + +sub RunModule + { my ($FileName) = @_ ; + if ((-e "$FileName.tex")||(-e "$FileName.pl")||(-e "$FileName.mp")|| + (-e "$FileName.pm")) + { system + ( "perl " . "$TeXScriptsPath" . "texutil.pl " . + "--documents $FileName.pl $FileName.pm $FileName.mp $FileName.tex" ) ; + print " module : $FileName\n\n" ; + open (MOD, ">$Script.tex") ; + print MOD "% format=dutch \n" ; + print MOD "\\starttekst \n" ; + print MOD "\\input modu-abr \n" ; + print MOD "\\input modu-arg \n" ; + print MOD "\\input modu-env \n" ; + print MOD "\\input modu-mod \n" ; + print MOD "\\input modu-pap \n" ; + print MOD "\\input modu-opt \n" ; + print MOD "\\def\\ModuleNumber{1}\n" ; + print MOD "\\input $FileName.ted \n" ; + print MOD "\\stoptekst \n" ; + close (MOD) ; + $ConTeXtInterface = "nl" ; + RunConTeXtFile($Script) ; + if ($FileName ne $Script) + { foreach $FileSuffix ("dvi", "pdf", "tui", "tuo", "log") + { unlink ("$FileName.$FileSuffix") ; + rename ("$Script.$FileSuffix", "$FileName.$FileSuffix") } } + unlink ("$Script.tex") } } + +sub RunFormats + { if (@ARGV) + { @ConTeXtFormats = @ARGV } + elsif ($UsedInterfaces ne "") + { @ConTeXtFormats = split /\,/,$UsedInterfaces } + $CurrentPath = cwd() ; + if ($TeXExecutable =~ /etex|eetex|pdfetex|pdfeetex/gio) + {$TeXPrefix = "*" } + else + {$TeXPrefix = "" } + if (chdir "$TeXFormatPath") + { if ($Format) + { system + ( "$TeXProgramPath$TeXExecutable " . + "$TeXVirginFlag " . + "${TeXPrefix}$Format" ) ; + @ConTeXtFormats = $Format } + else + { foreach $Interface (@ConTeXtFormats) + { system + ( "$TeXProgramPath$TeXExecutable " . + "$TeXVirginFlag " . + "${TeXPrefix}cont-$Interface" ) } } + print "\n" ; + print " executable : $TeXProgramPath$TeXExecutable\n" ; + print " format(s) : @ConTeXtFormats\n\n" ; + chdir $CurrentPath } } + +sub RunFiles + { foreach $JobName (@ARGV) + { $JobName =~ s/\.tex//goi ; + if ($TypesetModule) + { unless ($Format) { RunModule ($JobName) } } + else + { if ($Format) + { RunSomeTeXFile ($JobName) } + else + { RunConTeXtFile ($JobName) } } + unless (-s "$JobName.log") { unlink ("$JobName.log") } + unless (-s "$JobName.tui") { unlink ("$JobName.tui") } } } + +if ($MakeFormats) + { RunFormats } +elsif (@ARGV) + { RunFiles } +else + { print $Help{HELP} } + +if (-f "cont-opt.tex") + { unlink ("cont-opt.bak") ; + rename ("cont-opt.tex", "cont-opt.bak") } + +if ($Problems) { exit 1 } |