Build Scripte vorbereitet
This commit is contained in:
parent
caa23cae24
commit
42609466df
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;
|
Loading…
Reference in New Issue
Block a user