summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/verbatimcopy/verbatimcopy.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/verbatimcopy/verbatimcopy.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/verbatimcopy/verbatimcopy.sty')
-rw-r--r--macros/latex/contrib/verbatimcopy/verbatimcopy.sty231
1 files changed, 231 insertions, 0 deletions
diff --git a/macros/latex/contrib/verbatimcopy/verbatimcopy.sty b/macros/latex/contrib/verbatimcopy/verbatimcopy.sty
new file mode 100644
index 0000000000..fb2e74157a
--- /dev/null
+++ b/macros/latex/contrib/verbatimcopy/verbatimcopy.sty
@@ -0,0 +1,231 @@
+\ProvidesPackage{verbatimcopy}[2008/11/17 v0.06 by Lars Madsen and Ulrich Diez]
+
+%% This package be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% The Current Maintainer of this work is Lars Madsen <daleif@imf.au.dk>
+%%
+%% Package code: Ulrich Diez <eu_angelion@web.de>
+%% Packing and user documentation: Lars Madsen <daleif@imf.au.dk>
+%%
+%%
+%% The implementation is as is, any questions about the implementaion
+%% of this package should preferably be send to Ulrich Diez via the
+%% email above.
+%%
+%% For usage information see the user manual
+%
+\RequirePackage{verbatim}
+%
+% Directory-separator usually is slash.
+%
+\newcommand\VC@slash{/}%
+\@onelevel@sanitize\VC@slash
+%
+% Enquote file-names with quotes.
+%
+\newcommand\VC@quote{"}%
+\@onelevel@sanitize\VC@quote
+%
+\newcommand*\VC@@quote{}%
+%
+\newcommand*\VC@outputdir{}%
+%
+\begingroup
+\long\def\@@setOutputDir#1{%
+ \endgroup
+ %
+ %\@@setOutputDir automatically adds a trailing /
+ %
+ \@ifdefinable\@@setOutputDir{%
+ \long\def\@@setOutputDir##1#1\@nil##2\@nil#1{%
+ \ifx\@nil##2\@nil
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }%
+ }%
+ \newcommand\setOutputDir[1]{%
+ \@bsphack
+ \@@setOutputDir##1\@nil#1\@nil\@nil#1%
+ {\def\VC@outputdir{##1#1}}%
+ {\def\VC@outputdir{##1}}%
+ \@esphack
+ }%
+}%
+\expandafter\@@setOutputDir\expandafter{\VC@slash}%
+%
+% memoir defines this one, verbatim does not
+%
+\@ifundefined{verbatim@out}{\newwrite\verbatim@out}{}
+%
+% the following is basically based on an idea
+% by Ulrich Diez on comp.text.tex
+% (http://groups.google.com/group/comp.text.tex/msg/153e3dc7a8d0e548?hl=en&)
+%
+% be very carefull, this will overwrite without asking
+%
+% the idea is simply to mess with \verbatiminput such that it write
+% instead of read
+%
+\newcommand*\VerbatimCopy[2]{% {from file}{to file}
+ \@bsphack
+ \expandafter\def\expandafter\VC@target\expandafter{\VC@outputdir#2}%
+ \IfFileExists{\VC@@quote#1\VC@@quote}%
+ {%
+ \bgroup
+ \def\@verbatim{%
+ \obeylines
+ \let\do\@makeother
+ \dospecials
+ }%
+ \let\endtrivlist\relax
+ \def\verbatim@processline{%
+ \immediate\write\verbatim@out{\the\verbatim@line}%
+ }%
+ \immediate\openout\verbatim@out\VC@@quote\VC@target\VC@@quote\relax
+ \verbatiminput{\VC@@quote#1\VC@@quote}%
+ \immediate\closeout\verbatim@out%
+ \egroup%
+ }%
+ {%
+ \PackageError{verbatimcopy}%
+ {Source-file cannot be found}%
+ {%
+ For copying source-file to target-file it would be nice to
+ have the source-file available.%
+ }%
+ }%
+ \@esphack
+}%
+%
+% Copy the original user-level-macros.
+%
+\@ifdefinable\OldVerbatimCopy{%
+ \let\OldVerbatimCopy\VerbatimCopy
+}%
+\@ifdefinable\OldsetOutputDir{%
+ \let\OldsetOutputDir\setOutputDir
+}%
+%
+% Implement stuff for reading arguments "verbatim":
+%
+% Syntax of \VCverbaction:
+%
+% \VCverbaction{<Mandatory 1>}{<Mandatory 2>}<verbatim-Arg>
+%
+% yields:
+%
+% <Mandatory 1>{<Mandatory2>{<verbatim-Arg>}}
+%
+% The Mandatory-Arguments are mandatory. If they consist of several
+% tokens, they must be nested into catcode-1/2-character-pair / braces.
+% If reading is necessary, they will be read under normal catcode-
+% conditions.
+% The verbatim-Arg is also mandatory. It will be read under
+% verbatim-catcode-conditions. If its first character is a brace,
+% it will be "assumed" that the argument is nested into braces.
+% Otherwise it will be assumed, that the argument is delimited
+% by the first character - like the argument of \verb.
+%
+% Empty-lines will not be ignored.
+%
+% By nesting calls to \VCverbaction within \VCverbaction's first
+% argument, you can collect "verbatim-arguments" within its second
+% argument.
+%
+% E.g.,
+%
+% \VCverbaction{\VCverbaction{\VCverbaction{\action}}}% <- Mandatory 1
+% {}% <- Mandatory 2 is empty!
+% <verbatim-Arg1><verbatim-Arg2><verbatim-Arg3>
+%
+% yields:
+%
+% \VCverbaction{\VCverbaction{\action}}% <- Mandatory 1
+% {<verbatim-Arg1>}% <- Mandatory 2
+% <verbatim-Arg2><verbatim-Arg3>
+%
+% yields:
+%
+% \VCverbaction{\action}% <- Mandatory 1
+% {{<verbatim-Arg1>}{<verbatim-Arg2>}}% <- Mandatory 2
+% <verbatim-Arg3>
+%
+% yields:
+%
+% \action{{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}}
+%
+\newcommand\VCverbaction[2]{%
+ \@bsphack
+ \begingroup
+ \let\do\@makeother\dospecials
+ \catcode`\{=1 %
+ \catcode`\ =10 %
+ \@ifnextchar\bgroup
+ {\catcode`\}=2 \@@VCverbaction{#1}{#2}}%
+ {\do\{\@VCverbaction{#1}{#2}}%
+}%
+\newcommand\@VCverbaction[3]{%
+ \do\ %
+ \catcode`\^^M=14 %
+ \long\def\@tempb##1#3{%
+ \def\@tempb{##1}%
+ \@onelevel@sanitize\@tempb
+ \expandafter\@@@VCverbaction\expandafter{\@tempb}{#1}{#2}%
+ }%
+ \@tempb
+}%
+\newcommand\@@VCverbaction[2]{%
+ \do\ %
+ \catcode`\^^M=14 %
+ \long\def\@tempb##1{%
+ \def\@tempb{##1}%
+ \@onelevel@sanitize\@tempb
+ \expandafter\@@@VCverbaction\expandafter{\@tempb}{#1}{#2}%
+ }%
+ \@tempb
+}%
+\newcommand\@@@VCverbaction[3]{%
+ \endgroup
+ \@esphack
+ #2{#3{#1}}%
+}%
+%
+%
+\DeclareOption{compatibility}{\endinput}
+\DeclareOption{enquotefilenames}{\let\VC@@quote=\VC@quote}
+\ProcessOptions\relax
+%
+% If compatibility-option is provided, then package-loading is done
+% and loading finishes via \endinput.
+%
+% Otherwise have the copies called when a nesting-chain of \VCverbaction
+% has read and collected all the arguments needed for the copies
+% "verbatimly".
+%
+\outer\def\VerbatimCopy{%
+ \@bsphack
+ \VCverbaction{%
+ \VCverbaction{%
+ \expandafter\@esphack\expandafter\OldVerbatimCopy\@firstofone
+ }%
+ }{}%
+}%
+%
+\outer\def\setOutputDir{%
+ \@bsphack
+ \VCverbaction{%
+ \expandafter\@esphack\expandafter\OldsetOutputDir\@firstofone
+ }{}%
+}%
+%
+\endinput