Build Scripte vorbereitet
This commit is contained in:
		
							
								
								
									
										45
									
								
								README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
 | 
				
			||||||
 | 
					|                                                                                                  |
 | 
				
			||||||
 | 
					| PACKAGE `gitfile-info'                                                                           |
 | 
				
			||||||
 | 
					|                                                                                                  |
 | 
				
			||||||
 | 
						If you are using git to control versions of \LaTeX-files, you may want to show yourself or
 | 
				
			||||||
 | 
						other users or devs the current version of the file, information about the author and last
 | 
				
			||||||
 | 
						edited date. All packages for git known make that kind of information available for the whole
 | 
				
			||||||
 | 
						repository. But sometimes you have a lot of files within the same repository in different
 | 
				
			||||||
 | 
						versions, from different authors etc. Perhaps you also split up a big project in small files
 | 
				
			||||||
 | 
						and want to show within the document who had edited what. This package gives you the
 | 
				
			||||||
 | 
						opportunity to do so.
 | 
				
			||||||
 | 
					+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
 | 
				
			||||||
 | 
					  Version: 0.1
 | 
				
			||||||
 | 
					  Last Change: 2015-07-12
 | 
				
			||||||
 | 
					  Current Maintainer: André Hilbig 
 | 
				
			||||||
 | 
					                      mail@andrehilbig.de
 | 
				
			||||||
 | 
					+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  This work may be distributed and/or modified under the
 | 
				
			||||||
 | 
					  conditions of the LaTeX Project Public License, either version 1.3
 | 
				
			||||||
 | 
					  of this license of (at your option) any later version.
 | 
				
			||||||
 | 
					  The latest version of this license is in
 | 
				
			||||||
 | 
					    http://www.latex-project.org/lppl.txt
 | 
				
			||||||
 | 
					  and version 1.3 or later is part of all distributions of LaTeX
 | 
				
			||||||
 | 
					  version 2005/12/01 or later.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  This work has the LPPL maintenance status `maintained'.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  This work consists of the files gitfile-info.sty, gfi-run, post-commit, post-merge.
 | 
				
			||||||
 | 
					|                                                                                                  |
 | 
				
			||||||
 | 
					+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
 | 
				
			||||||
 | 
					|                                                                                                  |
 | 
				
			||||||
 | 
					| Installation                                                                                     |
 | 
				
			||||||
 | 
					|                                                                                                  |
 | 
				
			||||||
 | 
					  Getting the files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Getting the documentation:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Copy the following files into a TeX-readable directory:
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  The following files are needed to make a new application:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The following files are needed to make a new documentation-table:
 | 
				
			||||||
 | 
					|                                                                                                  |
 | 
				
			||||||
 | 
					+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
 | 
				
			||||||
							
								
								
									
										32
									
								
								build
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										32
									
								
								build
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					echo "===================================================================" >> build.log
 | 
				
			||||||
 | 
					echo "=+-Lauf vom `date +%Y-%m-%d:%H:%M:%S`----------------------------------+=" >> build.log
 | 
				
			||||||
 | 
					sty2dtx -O -c gitfile-info.sty -o gitfile-info/gitfile-info.sty >> build.log
 | 
				
			||||||
 | 
					echo "=+-sty2dtx abgeschlossen-----------------------------------------+=" >> build.log
 | 
				
			||||||
 | 
					cp -v gfi-run gitfile-info/
 | 
				
			||||||
 | 
					cp -v post-commit gitfile-info/
 | 
				
			||||||
 | 
					cp -v post-merge gitfile-info/
 | 
				
			||||||
 | 
					sed "s/Version: [0-9].[0-9]*/Version: $1/1" README > /tmp/output.readme
 | 
				
			||||||
 | 
					sed "s/Last Change: [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/Last Change: `date +%Y-%m-%d`/1" /tmp/output.readme > output.readme
 | 
				
			||||||
 | 
					mv -v output.readme bewerbung/README
 | 
				
			||||||
 | 
					echo "=+-Kopieren und Anpassen abgeschlossen---------------------------+=" >> build.log
 | 
				
			||||||
 | 
					cd gitfile-info
 | 
				
			||||||
 | 
					echo "=+-Packe DTX-----------------------------------------------------+=" >> build.log
 | 
				
			||||||
 | 
					./makedtx.pl -src "(.*)\.sty=>\1.sty" -doc ../dokumentation.tex \
 | 
				
			||||||
 | 
						-src "gfi-run=>gfi-run" --src "post-commit=>post-commit" --src "post-merge=>post-merge" \
 | 
				
			||||||
 | 
						-macrocode "gfi-run=>gfi-run" --macrocode "post-commit=>post-commit" --macrocode "post-merge=>post-merge" \
 | 
				
			||||||
 | 
						-setambles "gfi-run=>gfi-run" --setambles "post-commit=>post-commit" --setambles "post-merge=>post-merge" \
 | 
				
			||||||
 | 
						-comment "gfi-run=>gfi-run" --comment "post-commit=>post-commit" --comment "post-merge=>post-merge" \
 | 
				
			||||||
 | 
						-date "`date +%Y-%m-%d:%H:%M:%S` -- Version $1" \
 | 
				
			||||||
 | 
						-author "André Hilbig, mail@andrehilbig.de" -codetitle "Implementation" gitfile-info
 | 
				
			||||||
 | 
					pdflatex gitfile-info.dtx
 | 
				
			||||||
 | 
					CHECKSUM=$(grep "The checksum should be" gitfile-info.log | grep -o "[0-9]*")
 | 
				
			||||||
 | 
					echo "The checksum is: $CHECKSUM"
 | 
				
			||||||
 | 
					sed -e s/CheckSum\{[0-9]*\}/CheckSum\{$CHECKSUM\}/1 gitfile-info.dtx > output.dtx
 | 
				
			||||||
 | 
					rm gitfile-info.dtx
 | 
				
			||||||
 | 
					mv output.dtx gitfile-info.dtx
 | 
				
			||||||
 | 
					latexmk -pdf gitfile-info.dtx
 | 
				
			||||||
 | 
					cd ..
 | 
				
			||||||
 | 
					zip -r gitfile-info_latest.zip gitfile-info/gitfile-info.dtx gitfile-info/gitfile-info.ins\
 | 
				
			||||||
 | 
						gitfile-info/gfi-run gitfile-info/post-commit gitfile-info/post-merge
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										979
									
								
								makedtx.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										979
									
								
								makedtx.pl
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,979 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/perl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# File          : makedtx
 | 
				
			||||||
 | 
					# Author        : Nicola L. C. Talbot
 | 
				
			||||||
 | 
					# Date          : 29 Oct 2004
 | 
				
			||||||
 | 
					# Last Modified : 19 Aug 2007
 | 
				
			||||||
 | 
					# Version       : 0.94b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# usage : makedtx [options] -src <expr>=><expr> -doc <filename> <basename>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# -h  : help message
 | 
				
			||||||
 | 
					# -src <expr>=><expr> : e.g. -src "(foo)src\.(bar)=>$1.$2" will add foosrc.bar to <basename>.dtx to be extracted to foo.bar
 | 
				
			||||||
 | 
					# -doc <filename> : file containing documentation.
 | 
				
			||||||
 | 
					# -prefinale <string> : text to add to dtx file just before \Finale (added to version 0.91b)
 | 
				
			||||||
 | 
					# <basename> : create <basename>.dtx and <basename>.ins
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Getopt::Long;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$version = "0.94b";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# process command line options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 %optctl = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					&GetOptions(\%optctl, "h", "help", "v", "src=s@", "doc=s",
 | 
				
			||||||
 | 
					"dir=s", "op=s", "askforoverwrite!", "ins!",
 | 
				
			||||||
 | 
					"preamble=s", "postamble=s", "setambles=s@", "macrocode=s@",
 | 
				
			||||||
 | 
					"author=s", "date=s", "stopeventually=s",
 | 
				
			||||||
 | 
					"prefinale=s", "codetitle=s", "comment=s@",
 | 
				
			||||||
 | 
					"version", "license=s") or &syntaxerror();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$srcdir          = ".";
 | 
				
			||||||
 | 
					$patternop       = "=";
 | 
				
			||||||
 | 
					$verbose         = 0;
 | 
				
			||||||
 | 
					$noins           = 0;
 | 
				
			||||||
 | 
					$askforoverwrite = 0;
 | 
				
			||||||
 | 
					$preamble        = "";
 | 
				
			||||||
 | 
					$postamble       = "";
 | 
				
			||||||
 | 
					$author          = (getpwuid($<))[6] || 'Unknown';
 | 
				
			||||||
 | 
					$stopeventually  = "";
 | 
				
			||||||
 | 
					$prefinale       = "";
 | 
				
			||||||
 | 
					$codetitle       = "The Code";
 | 
				
			||||||
 | 
					$license         = "lppl";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$year = $year + 1900;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach $setting (keys %optctl)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   if (($setting eq "h") || ($setting eq "help"))
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      &help();
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "version")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      die "makedtx version $version\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "doc")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $docsrc   = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "src")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      @source = @{ $optctl{$setting} };
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "dir")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $srcdir = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "op")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $patternop = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "v")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $verbose = 1;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "ins")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $noins = 1-$optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "askforoverwrite")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $askforoverwrite = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "preamble")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $preamble = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "postamble")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $postamble = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "setambles")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      @setambles = @{ $optctl{$setting} };
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "macrocode")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      @macrocode = @{ $optctl{$setting} };
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "author")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $author = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "date")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $year = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "stopeventually")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $stopeventually = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "prefinale")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $prefinale = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "codetitle")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $codetitle = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "comment")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      @comment = @{ $optctl{$setting} };
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "license")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $license = $optctl{$setting};
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($#ARGV != 0)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   print "No basename specified\n";
 | 
				
			||||||
 | 
					   &syntaxerror();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$basename = $ARGV[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($docsrc eq "")
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   print "No document source specified (missing -doc)\n";
 | 
				
			||||||
 | 
					   &syntaxerror();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($#source == -1)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   print "No source code specified (missing -src)\n";
 | 
				
			||||||
 | 
					   &syntaxerror();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					open DTX, ">$basename.dtx" or die "Can't open '$basename.dtx'\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($verbose)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   print "Documentation source : " . $docsrc . "\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# work out the derived files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 @srcdirfile = glob("$srcdir/*");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 @derivedfiles = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 @outputfiles = ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$numoutput = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach $source (@source)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   ($infile, $outfile, $remainder) = split /=>/, $source;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($outfile eq "")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print "-src $source argument invalid (no output file specified)\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      &syntaxerror();
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if (not ($remainder eq ""))
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print "-src $source argument invalid (too many => specified)\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      &syntaxerror();
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   foreach $srcdirfile (@srcdirfile)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $fileexp = $srcdir . "/" . $infile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $_ = $srcdirfile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $expr = "s$patternop$fileexp$patternop$outfile$patternop";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (eval($expr))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         $thisoutfile = $_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $thisinfile  = $srcdirfile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $file{$thisinfile} = $thisoutfile;
 | 
				
			||||||
 | 
					         $derivedfiles[$numoutput]{'in'} = $thisinfile;
 | 
				
			||||||
 | 
					         $derivedfiles[$numoutput]{'out'} = $thisoutfile;
 | 
				
			||||||
 | 
					         $outputfiles[$numoutput] = $thisoutfile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $numoutput++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($preamble eq "")
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   if ($license eq "lppl")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					     $preamble = <<_END_LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 $basename.dtx
 | 
				
			||||||
 | 
					 Copyright $year $author
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 This work may be distributed and/or modified under the
 | 
				
			||||||
 | 
					 conditions of the LaTeX Project Public License, either version 1.3
 | 
				
			||||||
 | 
					 of this license of (at your option) any later version.
 | 
				
			||||||
 | 
					 The latest version of this license is in
 | 
				
			||||||
 | 
					   http://www.latex-project.org/lppl.txt
 | 
				
			||||||
 | 
					 and version 1.3 or later is part of all distributions of LaTeX
 | 
				
			||||||
 | 
					 version 2005/12/01 or later.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 This work has the LPPL maintenance status `maintained'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 The Current Maintainer of this work is $author.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_END_LICENSE
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($license eq 'bsd')
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					     $preamble = <<_END_LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 $basename.dtx
 | 
				
			||||||
 | 
					 Copyright (c) $year $author
 | 
				
			||||||
 | 
					 All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					are met:
 | 
				
			||||||
 | 
					1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					   notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					   notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					   documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					3. The name of the author may not be used to endorse or promote products
 | 
				
			||||||
 | 
					   derived from this software without specific prior written permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 | 
				
			||||||
 | 
					IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
				
			||||||
 | 
					OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | 
				
			||||||
 | 
					IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
				
			||||||
 | 
					INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
				
			||||||
 | 
					NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
				
			||||||
 | 
					DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
				
			||||||
 | 
					THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
				
			||||||
 | 
					(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | 
				
			||||||
 | 
					THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_END_LICENSE
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($license eq 'gpl')
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					     $preamble = <<_END_LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 $basename.dtx
 | 
				
			||||||
 | 
					 Copyright (c) $year $author
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					  it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					  the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					  (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					  GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					  along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_END_LICENSE
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      die "Unknown license '$license'\n".
 | 
				
			||||||
 | 
					          "Known licenses: lppl, bsd, gpl";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $preamble .= " This work consists of the files "
 | 
				
			||||||
 | 
					             . "$basename.dtx and $basename.ins and the derived "
 | 
				
			||||||
 | 
					             . ($numoutput > 1 ? "files" : "file")
 | 
				
			||||||
 | 
					             . " " . join(', ', @outputfiles) . ".\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					open DOC, $docsrc or die "Can't open '$docsrc'\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\%\\iffalse\n";
 | 
				
			||||||
 | 
					print DTX "\% $basename.dtx generated using makedtx version $version (c) Nicola Talbot\n";
 | 
				
			||||||
 | 
					print DTX "\% Command line args:\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach $setting (keys %optctl)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   if ($setting eq "src")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      foreach $source (@source)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         print DTX "\%   -src \"$source\"\n";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "setambles")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      foreach $setamble (@setambles)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         print DTX "\%   -setambles \"$setamble\"\n";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "macrocode")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      foreach $macrocode (@macrocode)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         print DTX "\%   -macrocode \"$macrocode\"\n";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   elsif ($setting eq "comment")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      foreach $comment (@comment)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         print DTX "\%   -comment \"$comment\"\n";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $val = $optctl{$setting};
 | 
				
			||||||
 | 
					      $val=~s/\\/\\\\/g;
 | 
				
			||||||
 | 
					      print DTX "\%   -", $setting, " \"",  $val, "\"\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\%   $basename\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\% Created on $year/", $mon+1, "/$mday $hour:", $min<10?"0$min" : $min,"\n";
 | 
				
			||||||
 | 
					print DTX "\%\\fi\n";
 | 
				
			||||||
 | 
					print DTX "\%\\iffalse\n";
 | 
				
			||||||
 | 
					print DTX "\%<*package>\n";
 | 
				
			||||||
 | 
					print DTX "\%\% \\CharacterTable\n";
 | 
				
			||||||
 | 
					print DTX "\%\%  {Upper-case    \\A\\B\\C\\D\\E\\F\\G\\H\\I\\J\\K\\L\\M\\N\\O\\P\\Q\\R\\S\\T\\U\\V\\W\\X\\Y\\Z\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Lower-case    \\a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\p\\q\\r\\s\\t\\u\\v\\w\\x\\y\\z\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Digits        \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Exclamation   \\!     Double quote  \\\"     Hash (number) \\#\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Dollar        \\\$     Percent       \\\%     Ampersand     \\&\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Acute accent  \\\'     Left paren    \\(     Right paren   \\)\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Asterisk      \\*     Plus          \\+     Comma         \\,\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Minus         \\-     Point         \\.     Solidus       \\/\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Colon         \\:     Semicolon     \\;     Less than     \\<\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Equals        \\=     Greater than  \\>     Question mark \\?\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Commercial at \\\@     Left bracket  \\[     Backslash     \\\\\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Right bracket \\]     Circumflex    \\^     Underscore    \\_\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Grave accent  \\\`     Left brace    \\{     Vertical bar  \\|\n";
 | 
				
			||||||
 | 
					print DTX "\%\%   Right brace   \\}     Tilde         \\~}\n";
 | 
				
			||||||
 | 
					print DTX "\%</package>\n";
 | 
				
			||||||
 | 
					print DTX "\%\\fi\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\% \\iffalse\n";
 | 
				
			||||||
 | 
					print DTX "\% Doc-Source file to use with LaTeX2e\n";
 | 
				
			||||||
 | 
					print DTX "\% Copyright (C) $year $author, all rights reserved.\n";
 | 
				
			||||||
 | 
					print DTX "\% \\fi\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# driver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\% \\iffalse\n";
 | 
				
			||||||
 | 
					print DTX "\%<*driver>\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$indoc=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while (<DOC>)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   s/\\usepackage{creatdtx}//;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $restofline = $_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $beginline = "";
 | 
				
			||||||
 | 
					   $line = $restofline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   while ($restofline =~ /(.*)\\ifmakedtx(.*)/)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $beginline = $1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      ($group,$restofline,$done) = &getnextgroup($2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $startline = $.;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      while (!$done)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         if ($nextline = <DOC>)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $line = $line . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $restofline = $restofline . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ($group,$restofline,$done) = &getnextgroup($restofline);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         else
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            die "EOF found whilst scanning first argument to \\ifmakedtx on line $startline\n";
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # print first arg, ignore second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $beginline = $beginline . $group;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      ($group,$restofline,$done) = &getnextgroup($restofline);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      while (!$done)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         if ($nextline = <DOC>)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $line = $line . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $restofline = $restofline . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ($group,$restofline,$done) = &getnextgroup($restofline);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         else
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            die "EOF found whilst scanning second argument to \\ifmakedtx on line $startline\n";
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $line = $restofline;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $line = $beginline . $restofline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print DTX $line;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($line=~/\\begin{document}/)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $indoc = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      last;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\\DocInput{$basename.dtx}\n";
 | 
				
			||||||
 | 
					print DTX "\\end{document}\n";
 | 
				
			||||||
 | 
					print DTX "\%</driver>\n";
 | 
				
			||||||
 | 
					print DTX "\%\\fi\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$inverb=0;
 | 
				
			||||||
 | 
					$stopfound=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\%";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while (<DOC>)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   if (/\\begin{verbatim}/)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $inverb=1;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if (/\\end{verbatim}/)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $inverb=0;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if (/\\StopEventually/ && ($inverb==0))
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $stopfound=1;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $restofline = $_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $beginline = "";
 | 
				
			||||||
 | 
					   $line = $restofline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   while ($restofline =~ /(.*)\\ifmakedtx(.*)/)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $beginline = $1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      ($group,$restofline,$done) = &getnextgroup($2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $startline = $.;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      while (!$done)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         if ($nextline = <DOC>)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $line = $line . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $restofline = $restofline . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ($group,$restofline,$done) = &getnextgroup($restofline);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         else
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            die "EOF found whilst scanning first argument to \\ifmakedtx on line $startline\n";
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # print first arg, ignore second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $beginline = $beginline . $group;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      ($group,$restofline,$done) = &getnextgroup($restofline);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      while (!$done)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         if ($nextline = <DOC>)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $line = $line . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $restofline = $restofline . $nextline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ($group,$restofline,$done) = &getnextgroup($restofline);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         else
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            die "EOF found whilst scanning second argument to \\ifmakedtx on line $startline\n";
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $line = $restofline;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $line = $beginline . $restofline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if (($line=~/\\end{document}/) and not $inverb)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $indoc=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $line=~s/\\end{document}//;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $line=~s/\n/\n\%/mg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print DTX "$line";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					close DOC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($stopfound==0)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   print DTX "\%\\StopEventually{$stopeventually}\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\%\\section{$codetitle}\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for (my $idx = 0; $idx <= $#derivedfiles; $idx++)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   $thisinfile = $derivedfiles[$idx]{'in'};
 | 
				
			||||||
 | 
					   $thisoutfile = $derivedfiles[$idx]{'out'};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($verbose)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					         print "$srcdirfile -> $_ \n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   open SRC, $thisinfile or die "Can't open $thisinfile\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print DTX "\%\\iffalse\n";
 | 
				
			||||||
 | 
					   print DTX "\%    \\begin{macrocode}\n";
 | 
				
			||||||
 | 
					   print DTX "\%<*$thisoutfile>\n";
 | 
				
			||||||
 | 
					   print DTX "\%    \\end{macrocode}\n";
 | 
				
			||||||
 | 
					   print DTX "\%\\fi\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $macrocode = 0;
 | 
				
			||||||
 | 
					   $comment   = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   foreach $expr (@comment)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if ($thisoutfile =~ m/$expr/)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         print DTX "\%\\iffalse\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $comment = 1;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   foreach $expr (@macrocode)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if ($thisoutfile =~ m/$expr/)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         print DTX "\%    \\begin{macrocode}\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $macrocode = 1;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   while (<SRC>)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print DTX "$_";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($macrocode == 1)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print DTX "\%    \\end{macrocode}\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($comment == 1)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print DTX "\%\\fi\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print DTX "\%\\iffalse\n";
 | 
				
			||||||
 | 
					   print DTX "\%    \\begin{macrocode}\n";
 | 
				
			||||||
 | 
					   print DTX "\%</$thisoutfile>\n";
 | 
				
			||||||
 | 
					   print DTX "\%    \\end{macrocode}\n";
 | 
				
			||||||
 | 
					   print DTX "\%\\fi\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   close SRC;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print DTX "\%$prefinale\n" if ($prefinale);
 | 
				
			||||||
 | 
					print DTX "\%\\Finale\n";
 | 
				
			||||||
 | 
					print DTX "\\endinput\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					close DTX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (!$noins)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   open INS, ">$basename.ins" or die "Can't open '$basename.ins'\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print INS "\% $basename.ins generated using makedtx version $version $year/",$mon+1,"/$mday $hour:", $min<10?"0$min":$min,"\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print INS "\\input docstrip\n\n";
 | 
				
			||||||
 | 
					   print INS "\\preamble\n";
 | 
				
			||||||
 | 
					   print INS "$preamble\n";
 | 
				
			||||||
 | 
					   print INS "\\endpreamble\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($postamble ne "")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print INS "\\postamble\n";
 | 
				
			||||||
 | 
					      print INS "$postamble\n";
 | 
				
			||||||
 | 
					      print INS "\\endpostamble\n\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($askforoverwrite)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print INS "\\askforoverwritetrue\n\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      print INS "\\askforoverwritefalse\n\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print INS "\\generate{";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   for (my $idx = 0; $idx <= $#derivedfiles; $idx++)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $file = $derivedfiles[$idx]{'in'};
 | 
				
			||||||
 | 
					      $outfile = $derivedfiles[$idx]{'out'};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      print INS "\\file{$outfile}{";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $ambleset = 0;
 | 
				
			||||||
 | 
					      $noamble  = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      foreach $setamble (@setambles)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         ($fileexp, $amble, $remainder) = split /=>/, $setamble;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         if (not ($remainder eq ""))
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            die "-setambles $setamble argument invalid (too many => specified)\n";
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         if ($outfile =~ m/$fileexp/)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            if ($verbose)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               print "$fileexp matches $outfile -> setting \"$amble\"\n";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            print INS $amble;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $ambleset = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ($amble =~ m/\\nopreamble/)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               $noamble = 1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (!$ambleset)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         print INS "\\usepreamble\\defaultpreamble\n\\usepostamble\\defaultpostamble";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      print INS "\\from{$basename.dtx}{$outfile";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if ($noamble == 0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         # this will add the character table to all files except those that use \nopreamble
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         print INS ",package";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      print INS "}}\n";
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print INS "}\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print INS "\\endbatchfile\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   close INS;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub syntaxerror
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   die "Syntax : makedtx [options] <basename>\nUse -h for help\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub help
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   print "makedtx Help\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "Current Version : $version\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "usage : makedtx [options] -src \"<expr>=><expr>\" -doc <filename> <basename>\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "makedtx can be used to construct a LaTeX2e dtx and ins file from\n";
 | 
				
			||||||
 | 
					   print "the specified source code.  The final command line argument\n";
 | 
				
			||||||
 | 
					   print "<basename> should be used to specify the basename of the dtx\n";
 | 
				
			||||||
 | 
					   print "and ins files.\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "-src \"<expr1>=><expr2>\"\n";
 | 
				
			||||||
 | 
					   print "The command line switch -src identifies the original source code and the name\n";
 | 
				
			||||||
 | 
					   print "of the file to which it will utimately be extracted on latexing the ins file\n";
 | 
				
			||||||
 | 
					   print "<expr1> can be a Perl expression, such as (foo)src.(sty), and <expr2> can\n";
 | 
				
			||||||
 | 
					   print "a Perl substitution style expression, such as $1.$2\n";
 | 
				
			||||||
 | 
					   print "Note that double quotes must be used to prevent shell expansion\n";
 | 
				
			||||||
 | 
					   print "Multiple invocations of -src are permitted\n";
 | 
				
			||||||
 | 
					   print "See examples below.\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "-doc <filename>\n";
 | 
				
			||||||
 | 
					   print "The name of the documentation source code.  This should be a LaTeX2e document\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "Optional Arguments:\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "-dir <directory>   : search for source files in <directory>\n";
 | 
				
			||||||
 | 
					   print "-op <character>    : set the pattern matching operator (default '$patternop')\n";
 | 
				
			||||||
 | 
					   print "-askforoverwrite   : set askforoverwrite switch in INS file to true\n";
 | 
				
			||||||
 | 
					   print "-noaskforoverwrite : set askforoverwrite switch in INS file to false (default)\n";
 | 
				
			||||||
 | 
					   print "-preamble <text>   : set the preamble.  Standard one inserted if omitted\n";
 | 
				
			||||||
 | 
					   print "-postamble <text>  : set the postamble.\n";
 | 
				
			||||||
 | 
					   print "-setambles \"<pattern>=><text>\" : set pre- and postambles to <text> if file matches pattern\n";
 | 
				
			||||||
 | 
					   print "-author <text>     : name of author (inserted into standard preamble. User name inserted if omitted)\n";
 | 
				
			||||||
 | 
					   print "-date <text>       : copyright date\n";
 | 
				
			||||||
 | 
					   print "-ins               : create the ins file (default)\n";
 | 
				
			||||||
 | 
					   print "-noins             : don't create the ins file\n";
 | 
				
			||||||
 | 
					   print "-prefinale <text>  : add <text> immediately prior to \\Finale\n";
 | 
				
			||||||
 | 
					   print "-macrocode <expr>  : surround any file which matches <expr> in a macrocode environment\n";
 | 
				
			||||||
 | 
					   print "-comment <expr>    : surround any file which matches <expr> with \\iffalse \\fi pair\n";
 | 
				
			||||||
 | 
					   print "-codetitle <text>  : The title for the documented code section (default: The Code)\n";
 | 
				
			||||||
 | 
					   print "-license <license> : use the given license for the preamble.\n";
 | 
				
			||||||
 | 
					   print "                     Known licenses: lppl (default), bsd, gpl.\n";
 | 
				
			||||||
 | 
					   print "-h                 : help message\n";
 | 
				
			||||||
 | 
					   print "-v                 : verbose\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "Examples:\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "Example 1:\n";
 | 
				
			||||||
 | 
					   print "Documenation is in foodoc.tex\n";
 | 
				
			||||||
 | 
					   print "Source code is in foosrc.sty.  The final extracted version should be \n";
 | 
				
			||||||
 | 
					   print "called foo.sty. The dtx file should be called foo.dtx and the ins file\n";
 | 
				
			||||||
 | 
					   print " should be called foo.ins\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "makedtx -src \"foosrc\\.sty=>foo.sty\" -doc foodoc.tex foo\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "Example 2:\n";
 | 
				
			||||||
 | 
					   print "Documenation is in bardoc.tex\n";
 | 
				
			||||||
 | 
					   print "Source code is in barsrc.sty.  The final extracted version should be\n";
 | 
				
			||||||
 | 
					   print "called bar.sty.  Source code is also in barsrc.bst.  The final extracted\n";
 | 
				
			||||||
 | 
					   print "version should be called bar.bst.  The dtx file should be called bar.dtx and\n";
 | 
				
			||||||
 | 
					   print "the ins file should be called bar.ins\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "makedtx -src \"barsrc\\.sty=>bar.sty\" -src \"barsrc\\.bst=>bar.bst\" -doc bardoc.tex bar\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "Or\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   print "makedtx -src \"barsrc\\.(bst|sty)=>bar.\$1\" -doc bardoc.tex bar\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   die;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub eatinitialspaces
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   my ($STR) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   while (substr($STR,0,1) eq "\s")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $STR = substr($STR,1);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return $STR;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub getnextgroup
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   my($curline) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $curline = &eatinitialspaces($curline);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   # check to see if current string is blank
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ($curline!~/[^\s]+/m)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      return ("","",0);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if (($group = substr($curline,0,1)) ne "{")
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					       # next group hasn't been delimited with braces
 | 
				
			||||||
 | 
					       # return first non-whitespace character
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       $curline = substr($curline,1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       # unless it's a backslash, in which case get command name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       if ($group eq "\\")
 | 
				
			||||||
 | 
					       {
 | 
				
			||||||
 | 
					          if ($curline=~/([a-zA-Z]+)(^[a-zA-Z].*)/m)
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					             $group = $1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					             $curline = $2;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          else
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					             # command is made up of backslash followed by symbol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					             $curline=~/([\W_0-9\s\\])(.*)/m;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					             $group = $1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					             $curline = $2;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					       }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       return ($group,$curline,1);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   my $pos=index($curline, "{");
 | 
				
			||||||
 | 
					   my $startpos=$pos;
 | 
				
			||||||
 | 
					   my $posopen=0;
 | 
				
			||||||
 | 
					   my $posclose=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   my $bracelevel = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   my $done=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   while (!$done)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      $pos++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $posopen = index($curline, "{", $pos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # check to make sure it's not a \{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      while ((substr($curline, $posopen-1,1) eq "\\") and ($posopen > 0))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         # count how many backlashes come before it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $i = $posopen-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $numbs = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         while ((substr($curline, $i-1,1) eq "\\") and ($i > 0))
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $numbs++;
 | 
				
			||||||
 | 
					            $i--;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         # is $numbs is odd, we have a \{, otherwise we have \\{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         if ($numbs%2 == 0)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            last;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         else
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $posopen = index($curline, "{", $posopen+1);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $posclose= index($curline, "}", $pos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # check to make sure it's not a \}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      while ((substr($curline, $posclose-1,1) eq "\\") and ($posclose > 0))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         # count how many backlashes come before it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $i = $posclose-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $numbs = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         while ((substr($curline, $i-1,1) eq "\\") and ($i > 0))
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $numbs++;
 | 
				
			||||||
 | 
					            $i--;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         # is $numbs is odd, we have a \}, otherwise we have \\}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         if ($numbs%2 == 0)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            last;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         else
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $posclose = index($curline, "}", $posclose+1);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (($posopen==-1) and ($posclose==-1))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         $done=1;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      elsif ($posopen==-1)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         $pos=$posclose;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $bracelevel--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         if ($bracelevel==0)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $group = substr($curline, $startpos+1, $pos-$startpos-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $curline = substr($curline, $pos+1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return ($group,$curline,1);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      elsif ($posclose==-1)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         $pos=$posopen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $bracelevel++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      elsif ($posopen<$posclose)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         $pos=$posopen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $bracelevel++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      elsif ($posclose<$posopen)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         $pos=$posclose;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         $bracelevel--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         if ($bracelevel==0)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            $group = substr($curline, $startpos+1, $pos-$startpos-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $curline = substr($curline, $pos+1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return ($group,$curline,1);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   # closing brace must be on another line
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return ("", $curline, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					1;
 | 
				
			||||||
		Reference in New Issue
	
	Block a user