From 57f1545214ebba9625b9be722d4e4f9357dab87a Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Sun, 15 Aug 2004 00:00:00 +0200
Subject: stable 2004.08.15

---
 scripts/context/perl/texexec.pl  | 124 ++++++++++++++++++++++++++++++++-------
 scripts/context/perl/texexec.rme |   2 +
 scripts/context/perl/texfont.pl  |  13 ++--
 scripts/context/ruby/xmltools.rb |  11 ++--
 4 files changed, 117 insertions(+), 33 deletions(-)

(limited to 'scripts')

diff --git a/scripts/context/perl/texexec.pl b/scripts/context/perl/texexec.pl
index eb1664357..00e336ea5 100644
--- a/scripts/context/perl/texexec.pl
+++ b/scripts/context/perl/texexec.pl
@@ -184,6 +184,7 @@ my $Random           = 0;
 my $Filters          = '';
 my $NoMapFiles       = 0 ;
 my $Foxet            = 0 ;
+my $UseEnginePath    = 0 ;
 
 my $StartLine        = 0 ;
 my $StartColumn      = 0 ;
@@ -285,6 +286,7 @@ my $MakeMpy = '';
     "globalfile"     => \$GlobalFile,
     "nomapfiles"     => \$NoMapFiles,
     "foxet"          => \$Foxet,
+    "engine"         => \$UseEnginePath,
     #### exxperiment
     "startline=s"    => \$StartLine,
     "startcolumn=s"  => \$StartColumn,
@@ -347,7 +349,7 @@ if ( ( $LogFile ne '' ) && ( $LogFile =~ /\w+\.log$/io ) ) {
     *STDERR = *LOGFILE;
 }
 
-my $Program = " TeXExec 4.3 - ConTeXt / PRAGMA ADE 1997-2004";
+my $Program = " TeXExec 4.4 - ConTeXt / PRAGMA ADE 1997-2004";
 
 print "\n$Program\n\n";
 
@@ -645,6 +647,11 @@ if ( open( INI, $IniPath ) ) {
 sub IniValue {
     my ( $Key, $Default ) = @_;
     if ( defined( $Done{$Key} ) ) { $Default = $Done{$Key} }
+    if ($Default =~ /^(true|yes|on)$/io) {
+        $Default = 1 ;
+    } elsif ($Default =~ /^(false|no|off)$/io) {
+        $Default = 0 ;
+    }
     if ($Verbose) { print "          used setting : $Key = $Default\n" }
     return $Default;
 }
@@ -676,11 +683,14 @@ my $MpPassString      = IniValue( 'MpPassString',      '' );
 my $MpFormat          = IniValue( 'MpFormat',          $MetaFun );
 my $MpFormatPath      = IniValue( 'MpFormatPath',      $TeXFormatPath );
 
+my $UseEnginePath     = IniValue( 'UseEnginePath',     $UseEnginePath);
+
 my $FmtLanguage = IniValue( 'FmtLanguage', '' );
 my $FmtBodyFont = IniValue( 'FmtBodyFont', '' );
 my $FmtResponse = IniValue( 'FmtResponse', '' );
 my $TcXPath     = IniValue( 'TcXPath',     '' );
 
+
 $SetFile = IniValue( 'SetFile', $SetFile );
 
 if ( ($Verbose) && ( $kpsewhich ne '' ) ) {
@@ -718,6 +728,11 @@ if ( $MpFormatFlag eq "" ) {
         $MpFormatFlag = "-mem=" ;
 }
 
+if ($UseEnginePath && (! $MakeFormats)) {
+    $MpFormatFlag .= $MpExecutable . '/' ;
+    $TeXFormatFlag .= $TeXExecutable . '/' ;
+}
+
 #~ if ( $TeXFormatFlag eq "" ) { $TeXFormatFlag = "&" }
 #~ if ( $MpFormatFlag  eq "" ) { $MpFormatFlag  = "&" }
 
@@ -730,8 +745,12 @@ if ($TeXProgram) { $TeXExecutable = $TeXProgram }
 
 my $fmtutil = '';
 
+# for the moment forget about fmtutil, since it does not support $engine subpaths
+
+$Alone = 1 ;
+
 if ( $MakeFormats || $Verbose ) {
-    if ($Alone) {
+    if ($Alone || $UseEnginePath) {
         if ($Verbose) { print "     generating format : not using fmtutil\n" }
     } elsif ( $TeXShell =~ /tetex|fptex/i ) {
         foreach (@paths) {
@@ -739,7 +758,7 @@ if ( $MakeFormats || $Verbose ) {
             if    ( -e $p )          { $fmtutil = $p;          last }
             elsif ( -e $p . '.exe' ) { $fmtutil = $p . '.exe'; last }
         }
-	$fmtutil = ($fmtutil =~ m/^[^\"].* / ? "\"$fmtutil\"" : "$fmtutil") ;
+     	$fmtutil = ($fmtutil =~ m/^[^\"].* / ? "\"$fmtutil\"" : "$fmtutil") ;
         if ($Verbose) {
             if ( $fmtutil eq '' ) {
                 print "      locating fmtutil : not found in path\n";
@@ -921,11 +940,14 @@ sub print_opt {
 
 sub show_help_options {
     print    # "\n" .
-      "                --help   overview of all options and their values\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";
+      . "        --help '*.pdf'   all about options containing 'pdf'\n"
+      . "\n"
+      . "            more info    http://www.pragma-ade.com/general/manuals/mtexexec.pdf\n"
+      . "                         http://www.ntg.nl/mailman/listinfo/ntg-context\n";
 }
 
 # determine what user wants to see
@@ -1238,7 +1260,7 @@ sub CheckPositions { }
 my $ConTeXtVersion = "unknown";
 my $ConTeXtModes   = '';
 
-sub ScanPreamble {
+sub ScanTeXPreamble {
     my ($FileName) = @_;
     open( TEX, $FileName );
     while (<TEX>) {
@@ -1266,6 +1288,12 @@ sub ScanPreamble {
         }
     }
     close(TEX);
+
+    # handy later on
+
+    $ProducePdfT = ($OutputFormat eq "pdftex") ;
+    $ProducePdfM = ($OutputFormat eq "dvipdfm") ;
+    $ProducePdfX = ($OutputFormat eq "dvipdfmx") ;
 }
 
 sub ScanContent {
@@ -1570,6 +1598,23 @@ sub RunConTeXtFile {
     if ($DummyFile) {
         open( TMP, ">$JobName.run" );
         if ( ( $JobSuffix =~ /(xml|fo|fox)/io ) || $ForceXML ) {
+            # scan xml preamble
+            open(XML,"<$JobName.$JobSuffix") ;
+            while (<XML>) {
+                if (/\<[a-z]+/io) {
+                    last ;
+                } elsif (/\<\?context\-directive\s+(.+?)\s+(.+?)\s+(.+?)\s*\?\>/o) {
+                    my ($class, $key, $value) = ($1, $2, $3) ;
+                    if ($class eq 'job') {
+                        if ($key eq 'stylefile') {
+                            print TMP "\\environment $value\n" ;
+                        } elsif ($key eq 'interface') {
+                            $ConTeXtInterface = $value ;
+                        }
+                    }
+                }
+            }
+            close(XML) ;
             if ( $Filters ne "" ) {
                 print "     using xml filters : $Filters\n";
             }
@@ -1585,9 +1630,8 @@ sub RunConTeXtFile {
         $JobSuffix = "run";
     }
     if ( ( -e "$JobName.$JobSuffix" ) || ($GlobalFile) ) {
-        unless ($DummyFile)    # we don't need this for xml
-        {
-            ScanPreamble("$JobName.$JobSuffix");
+        unless ($DummyFile) {    # we don't need this for xml
+            ScanTeXPreamble("$JobName.$JobSuffix");
             if ( $ConTeXtInterface eq "unknown" ) {
                 ScanContent("$JobName.$JobSuffix");
             }
@@ -1692,6 +1736,11 @@ sub RunConTeXtFile {
             CopyFile( "$JobName.top", "$JobName.tmp" );
             unlink "$JobName.tup";    # previous tuo file
             unlink "$JobName.top";    # runtime option file
+            if ($ProducePdfX) {
+                system("dvipdfmx -f dvipdfmx.map -d 4 $JobName") ;
+            } elsif ($ProducePdfM) {
+                system("dvipdfm $JobName") ;
+            }
             PopResult($JobName);
         }
         if ($Purge) { PurgeFiles($JobName) }
@@ -2033,6 +2082,7 @@ sub RunCombine {
 
 sub LocatedFormatPath {
     my $FormatPath = shift;
+    my $EnginePath = shift;
     if ( ( $FormatPath eq '' ) && ( $kpsewhich ne '' ) ) {
         $FormatPath = `$kpsewhich --show-path=fmt`;
         chomp $FormatPath;
@@ -2048,6 +2098,14 @@ sub LocatedFormatPath {
             print "    located formatpath : $FormatPath\n";
         }
     }
+
+    if ($UseEnginePath && ($FormatPath ne '' && ($FormatPath !~ /$EnginePath\/$/))) {
+        $FormatPath .= $EnginePath . '/' ;
+        unless (-d $FormatPath) {
+            mkdir $FormatPath ;
+        }
+    }
+
     return $FormatPath;
 }
 
@@ -2056,6 +2114,7 @@ sub RunOneFormat {
     my @TeXFormatPath;
     my $TeXPrefix = "";
     if ( ( $fmtutil ne "" ) && ( $FormatName !~ /metafun|mptopdf/io ) ) {
+# could not happen, not supported any more
         my $cmd = "$fmtutil --byfmt $FormatName";
         if ($Verbose) { print "\n$cmd\n\n" }
         MakeUserFile;    # this works only when the path is kept
@@ -2072,11 +2131,11 @@ sub RunOneFormat {
             $TeXPrefix = "*";
         }
         my $CurrentPath = cwd();
-        $TeXFormatPath = LocatedFormatPath($TeXFormatPath);
-        if ( $TeXFormatPath ne '' ) { chdir $TeXFormatPath }
+        my $TheTeXFormatPath = LocatedFormatPath($TeXFormatPath, $TeXExecutable);
+        if ( $TheTeXFormatPath ne '' ) { chdir $TheTeXFormatPath }
         MakeUserFile;
         MakeResponseFile;
-	$own_quote = ($TeXProgramPath =~ m/^[^\"].* / ? "\"" : "") ;
+	    $own_quote = ($TeXProgramPath =~ m/^[^\"].* / ? "\"" : "") ;
         my $cmd =
             "$own_quote$TeXProgramPath$TeXExecutable$own_quote $TeXVirginFlag "
           . "$TeXPassString $PassOn ${TeXPrefix}$FormatName";
@@ -2085,7 +2144,7 @@ sub RunOneFormat {
         RemoveResponseFile;
         RestoreUserFile;
 
-        if ( ( $TeXFormatPath ne '' ) && ( $CurrentPath ne '' ) ) {
+        if ( ( $TheTeXFormatPath ne '' ) && ( $CurrentPath ne '' ) ) {
             chdir $CurrentPath;
         }
     }
@@ -2130,15 +2189,15 @@ sub RunMpFormat {
     my $MpFormat = shift;
     return if ( $MpFormat eq '' );
     my $CurrentPath = cwd();
-    $MpFormatPath = LocatedFormatPath($MpFormatPath);
-    if ( $MpFormatPath ne '' ) { chdir "$MpFormatPath" }
+    my $TheMpFormatPath = LocatedFormatPath($MpFormatPath, $MpExecutable);
+    if ( $TheMpFormatPath ne '' ) { chdir $TheMpFormatPath }
     $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 '' ) ) {
+    if ( ( $TheMpFormatPath ne '' ) && ( $CurrentPath ne '' ) ) {
         chdir $CurrentPath;
     }
 }
@@ -2298,14 +2357,37 @@ sub checkMPlabels {
     return 0 unless ( -s "$MpName.mpt" > 10 );
     return 0 unless open( MP, "$MpName.mpt" );
     my $n = 0;
+    my $t = "" ;
     while (<MP>) {
-        if (/% figure (\d+) : (.*)/o) { $mpbetex{$1} .= "$2\n"; ++$n }
+        if (/% setup : (.*)/o) {
+            $t = $1 ;
+        } else {
+            $t = "" ;
+        }
+        if (/% figure (\d+) : (.*)/o) {
+            if ($t ne "") {
+                $mpbetex{$1} .= "$t\n" ;
+                $t = "" ;
+            }
+            $mpbetex{$1} .= "$2\n";
+            ++$n ;
+        }
     }
     close(MP);
     print "  second MP run needed : $n tex labels found\n" if $n;
     return $n;
 }
 
+sub doMergeMP {
+    # make sure that the verbatimtex ends up before btex etc
+    my ($n,$str) = @_ ;
+    if ($str =~ /(.*?)(verbatimtex.*?etex)\s*\;(.*)/mois) {
+        return "beginfig($n)\;\n$1$2\;\n$mpbetex{$n}\n$3\;endfig\;\n" ;
+    } else {
+        return "beginfig($n)\;\n$mpbetex{$n}\n$str\;endfig\;\n" ;
+    }
+}
+
 sub doRunMP {    ###########
     my ( $MpName, $MergeBE ) = @_;
     my $TexFound = 0;
@@ -2337,9 +2419,9 @@ sub doRunMP {    ###########
             s/(\".*?)\@\@\@(.*?\")/$1\;$2/gmois; # added
             # merge labels
             if ($MergeBE) {
-                s/beginfig\s*\((\d+)\)\s*\;/beginfig($1)\;\n$mpbetex{$1}\n/goims;
+                # i hate this indirect (sub regexp) mess
+                s/beginfig\s*\((\d+)\)\s*\;(.*?)endfig\s*\;/doMergeMP($1,$2)/gems ;
             }
-            # flush
             unless (/beginfig\s*\(\s*0\s*\)/gmois) { print MP $mpbetex{0} }
             print MP $_;
             print MP "\n" . "end" . "\n";
@@ -2347,7 +2429,7 @@ sub doRunMP {    ###########
         }
         if ($TexFound) {
             print "       metapost to tex : $MpName\n";
-	    $own_quote = ($MpToTeXExecutable =~ m/^[^\"].* / ? "\"" : "") ;
+            $own_quote = ($MpToTeXExecutable =~ m/^[^\"].* / ? "\"" : "") ;
             $Problems =
               system("$own_quote$MpToTeXExecutable$own_quote $MpFile > $MpTex");
             if ( -e $MpTex && !$Problems ) {
@@ -2411,7 +2493,7 @@ sub RunMPX {
         local $/ = "\0777";
         $_ = <MP>;
         close(MP);
-        if (/(btex|etex|verbatimtex)/o) {
+        if (/(btex|etex|verbatimtex)/mos) {
             print "   generating mpx file : $MpName\n";
 	    $own_quote = ($MpToTeXExecutable =~ m/^[^\"].* / ? "\"" : "") ;
             $Problems =
diff --git a/scripts/context/perl/texexec.rme b/scripts/context/perl/texexec.rme
index 5ccf1f645..419d1faec 100644
--- a/scripts/context/perl/texexec.rme
+++ b/scripts/context/perl/texexec.rme
@@ -51,6 +51,8 @@ set  TeXShell  to  tetex
 %
 % Here are some general defaults. They can be overruled later.
 
+set  UseEnginePath      to  false
+
 set  UsedInterfaces     to  en nl metafun mptopdf
 set  UserInterface      to  en
 
diff --git a/scripts/context/perl/texfont.pl b/scripts/context/perl/texfont.pl
index bf93ccaf1..bebb636f5 100644
--- a/scripts/context/perl/texfont.pl
+++ b/scripts/context/perl/texfont.pl
@@ -155,9 +155,6 @@ my $variant         = "" ;    # atl: encoding variant
 my $extension       = "pfb" ; # atl: default font extension
 my $lcdf            = "" ;    # atl: trigger for lcdf otftotfm
 
-my $mappath         = 'fonts/map/pdftex/context' ; # will be set later
-my $encpath         = 'fonts/enc/dvips/context' ; # will be set later
-
 my @cleanup         = () ;    # atl: build list of generated files to delete
 
 # todo: parse name for style, take face from command line
@@ -495,7 +492,7 @@ if ($sourcepath eq "auto") # todo uppercase root
         else
           { $path = `kpsewhich -expand-path=\\\$$root` }
         chomp $path ;
-        $path = $ENV{$root} if (($path == '') && defined($ENV{$root})) ;
+        $path = $ENV{$root} if (($path eq '') && defined($ENV{$root})) ;
         report ("checking root : $root") ;
         if ($preproc)
           { $sourcepath = "$path/fonts/truetype/$vendor/$collection" }
@@ -566,7 +563,7 @@ if ($sourcepath eq "auto") # todo uppercase root
     error ("unknown subpath ../fonts/afm/$vendor/$collection") unless -d $sourcepath }
 
 error ("unknown source path $sourcepath") unless -d $sourcepath ;
-error ("unknown option $ARGV[0]")         if ($ARGV[0] =~ /\-\-/) ;
+error ("unknown option $ARGV[0]")         if (($ARGV[0]||'') =~ /\-\-/) ;
 
 my $afmpath = "$fontroot/fonts/afm/$vendor/$collection" ;
 my $tfmpath = "$fontroot/fonts/tfm/$vendor/$collection" ;
@@ -694,7 +691,7 @@ sub globafmfiles
        }
     return @files }
 
-if ($ARGV[0] ne "")
+if ($ARGV[0])
   { $pattern = $ARGV[0] ;
     report ("processing files : all in pattern $ARGV[0]") ;
     @files = globafmfiles($runpath,$pattern) }
@@ -760,7 +757,7 @@ if ($map)
     print MAP "%\n" ;
     print MAP "% Alternatively in your TeX source you can say:\n" ;
     print MAP "%\n" ;
-    print MAP "%   \\pdfmapfile\{+$mapfile\}\n" ;
+    print MAP "%   \\pdf    \{+$mapfile\}\n" ;
     print MAP "%\n" ;
     print MAP "% In ConTeXt you can best use:\n" ;
     print MAP "%\n" ;
@@ -906,7 +903,7 @@ foreach my $file (@files)
             if ($afmpl)
               { report "         generating pl : $cleanname$fontsuffix (from $cleanname)" ;
                 $encstr = " -p $encfil" ;
-                my $command = "afm2pl $shape $passon $encstr $file $cleanname$fontsuffix.vpl" ;
+                my $command = "afm2pl -f afm2tfm $shape $passon $encstr $file $cleanname$fontsuffix.vpl" ;
                 print "$command\n" if $trace ;
                 my $ok = `$command` ;
                 if (open (TMP,"$cleanname$fontsuffix.map"))
diff --git a/scripts/context/ruby/xmltools.rb b/scripts/context/ruby/xmltools.rb
index b4a983c9c..c4fcc5937 100644
--- a/scripts/context/ruby/xmltools.rb
+++ b/scripts/context/ruby/xmltools.rb
@@ -35,7 +35,7 @@ class Commands
 
             class << output
                 def xputs(str,n=0)
-                    puts("#{' '*n} #{str}")
+                    puts("#{' '*n}#{str}")
                 end
             end
 
@@ -170,7 +170,7 @@ class Commands
                         end
                         f.close
                     else
-                        report("missing data log file #{filename}")
+                        report("missing data log file #{file}")
                     end
                 end
                 if png then
@@ -182,11 +182,11 @@ class Commands
                     system("imagemagick #{long}.pdf #{long}-%d.jpg")
                 end
             else
-                report("error in processing file #{filename}")
+                report("error in processing file #{file}")
             end
             system("texmfstart texutil --purge")
         else
-            report("error in processing file #{filename}")
+            report("error in processing file #{file}")
         end
 
     end
@@ -199,6 +199,9 @@ commandline = CommandLine.new
 commandline.registeraction('dir',     'generate directory listing')
 commandline.registeraction('mmlpages','generate graphic from mathml')
 
+# commandline.registeraction('dir',     'filename --pattern= --output= [--recurse --stripname --url --root]')
+# commandline.registeraction('mmlpages','filename [--eps --jpg --png --style= --mode=]')
+
 commandline.registeraction('ls')
 
 commandline.registeraction('help')
-- 
cgit v1.2.3