From add048e43ff3b102377c17b6f18d71a5a5cde9a6 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 12 Jan 2006 23:55:29 +0000
Subject: extract

git-svn-id: svn://tug.org/texlive/trunk@900 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/extract/extract.sty | 466 ++++++++++++++++++++++++
 1 file changed, 466 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/extract/extract.sty

(limited to 'Master/texmf-dist/tex/latex/extract/extract.sty')

diff --git a/Master/texmf-dist/tex/latex/extract/extract.sty b/Master/texmf-dist/tex/latex/extract/extract.sty
new file mode 100644
index 00000000000..994ba5c6f1c
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/extract/extract.sty
@@ -0,0 +1,466 @@
+%%
+%% This is file `extract.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% extract.dtx  (with options: `extract')
+%% 
+%% ---------------------------------------
+%% Copyright (C) 2004-2005 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% This work may 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".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file extract.dtx and the derived files
+%% extract.sty, xtrex1.tex, xtrex2.tex, xtrex3.tex, xtrex4.tex,
+%% xtrex5.tex, xtrex6.tex and xtrex7.tex.
+%%
+%% The following files constitute the extract package and must be
+%% distributed as a whole: readme, extract.dtx, extract.pdf and
+%% extract.sty.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{extract}[2005/02/14 v1.6 extract content from document (HA)]
+\RequirePackage{verbatim}
+\RequirePackage{xkeyval}
+\newwrite\XTR@out
+\newwrite\XTR@tmp
+\newif\ifXTR@st
+\newif\ifXTR@skip
+\newif\ifXTR@active
+\newif\ifXTR@extract
+\newif\ifXTR@header\XTR@headertrue
+\newif\ifXTR@handles\XTR@handlestrue
+\def\XTR@err#1{\PackageError{extract}{#1}\@ehc}
+\def\XTR@namelet#1#2{\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
+\DeclareOptionX[XTR]{active}{\XTR@activetrue}
+\DeclareOptionX[XTR]{generate}{\lowercase{\def\XTR@file{#1}}}
+\DeclareOptionX[XTR]{no-header}[false]{\XKV@setbool{XTR@header}{#1}}
+\DeclareOptionX[XTR]{document-handles}[true]{\XKV@setbool{XTR@handles}{#1}}
+\DeclareOptionX[XTR]{extract-env}{%
+  \def\XTR@envs{#1}%
+  \@for\XTR@tempa:=\XTR@envs\do\XTR@tempb
+}
+\DeclareOptionX[XTR]{extract-cmd}{%
+  \def\XTR@cmdsargs{#1}%
+  \@for\XTR@tempa:=\XTR@cmdsargs\do\XTR@tempb
+}
+\DeclareOptionX[XTR]{extract-cmdline}{%
+  \def\XTR@cmdsline{#1}%
+  \@for\XTR@tempa:=\XTR@cmdsline\do\XTR@tempb
+}
+\def\XTR@tempb{%
+  \DeclareOptionX[XTR]{\XTR@tempa-nrs}{%
+    \expandafter\XKV@sp@deflist\csname XTR@\XKV@tkey\endcsname{##1}%
+    \XTR@namelet{XTR@\XKV@tkey @cnt}{z@}%
+  }%
+  \DeclareOptionX[XTR]{\XTR@tempa-labels}{%
+    \expandafter\XKV@sp@deflist\csname XTR@\XKV@tkey\endcsname{##1}%
+  }%
+}
+\def\XTR@tempa{line}\XTR@tempb
+\def\XTR@tempa{extract}\XTR@tempb
+\def\XTR@tempa{extractskip}\XTR@tempb
+\DeclareOptionX*{\XTR@err{Unknown option `\CurrentOption'}}
+\ProcessOptionsX[XTR]
+\def\XTR@opentmp{\immediate\openout\XTR@tmp\jobname.xtr\relax}
+\def\XTR@writetmp{\immediate\write\XTR@tmp}
+\def\XTR@closetmp{\immediate\closeout\XTR@tmp}
+\def\XTR@writeout{\immediate\write\XTR@out}
+\ifXTR@active
+  \XKV@ifundefined{XTR@file}{
+    \XTR@activefalse
+    \XTR@err{no file to generate; extract deactivated}
+  }{}
+  \XTR@opentmp
+  \XTR@writetmp{\string\lowercase{\string\def\string\XTR@tempa{\jobname}}}
+  \XTR@closetmp
+  \input{\jobname.xtr}
+  \ifx\XTR@tempa\XTR@file
+    \XTR@activefalse
+    \XTR@err{attempt to overwrite source file; extract deactivated}
+  \fi
+\fi
+\newcount\@envdepth\@envdepth\z@
+\def\begin#1{%
+  \@ifundefined{#1}%
+    {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
+    {\def\reserved@a{\def\@currenvir{#1}%
+     \edef\@currenvline{\on@line}%
+     \csname #1\endcsname}}%
+  \@ignorefalse
+  \begingroup\@endpefalse
+  \global\advance\@envdepth\@ne
+  \global\@namedef{@afterendenvhook@\romannumeral\@envdepth}{}%
+  \reserved@a}
+\def\end#1{%
+  \csname end#1\endcsname\@checkend{#1}%
+  \expandafter\endgroup\if@endpe\@doendpe\fi
+  \expandafter\let\expandafter\reserved@a
+    \csname @afterendenvhook@\romannumeral\@envdepth\endcsname
+  \global\advance\@envdepth\m@ne
+  \reserved@a\relax
+  \if@ignore\@ignorefalse\ignorespaces\fi}
+\def\AfterEndEnv{%
+  \expandafter\g@addto@macro
+    \csname @afterendenvhook@\romannumeral\@envdepth\endcsname
+}
+\def\XTR@checkxtr#1#2{%
+  \@nameuse{XTR@#1false}%
+  \XTR@namelet{XTR@maketrue}{XTR@#1true}%
+  \XKV@ifundefined{XTR@#2-nrs}{%
+    \XKV@ifundefined{XTR@#2-labels}\XTR@maketrue{}%
+  }{%
+    \begingroup
+      \expandafter\count@\csname XTR@#2-nrs@cnt\endcsname
+      \advance\count@\@ne
+      \edef\XTR@resa{\expandafter\noexpand\expandafter\gdef\expandafter
+        \noexpand\csname XTR@#2-nrs@cnt\endcsname{\the\count@}}%
+    \expandafter\endgroup\XTR@resa
+  }%
+  \@nameuse{ifXTR@#1}\else
+    \XKV@ifundefined{XTR@#2-labels}{}{%
+      \ifx\XTR@currentlabel\relax\else
+        \@expandtwoargs\in@{,\XTR@currentlabel,}{,\csname XTR@#2-labels\endcsname,}%
+        \ifin@\XTR@maketrue\fi
+      \fi
+    }%
+  \fi
+  \@nameuse{ifXTR@#1}\else
+    \XKV@ifundefined{XTR@#2-nrs}{}{%
+      \expandafter\XTR@ch@ckxtr\csname XTR@#2-nrs\expandafter
+        \endcsname\csname XTR@#2-nrs@cnt\endcsname
+    }%
+  \fi
+  \global\let\XTR@currentlabel\relax
+}
+\def\XTR@ch@ckxtr#1#2{%
+  \@for\XTR@resa:=#1\do{\expandafter\XTR@ch@ck@tr\XTR@resa--\@nil#2}%
+}
+\def\XTR@ch@ck@tr#1-#2-#3\@nil#4{%
+  \ifx\@empty#1\@empty
+    \ifnum#4>#2 \else\XTR@maketrue\fi
+  \else
+    \ifx\@empty#2\@empty
+      \ifx\@empty#3\@empty
+        \ifnum#4=#1 \XTR@maketrue\fi
+      \else
+        \ifnum#4<#1 \else\XTR@maketrue\fi
+      \fi
+    \else
+      \ifnum#4<#1 \else\ifnum#4>#2 \else\XTR@maketrue\fi\fi
+    \fi
+  \fi
+}
+\def\extractionlabel{\KV@@sp@def\XTR@currentlabel}
+\let\XTR@currentlabel\relax
+\def\extract{\XTR@stfalse\XTR@extract}
+\@namedef{extract*}{\XTR@sttrue\XTR@extract}
+\def\XTR@extract{%
+  \@bsphack
+  \let\do\@makeother\dospecials\catcode`\^^M\active
+  \@testopt\XTR@@xtract\@nil
+}
+\def\XTR@@xtract[#1]{%
+  \ifXTR@active
+    \def\XTR@tempa{#1}%
+    \ifx\XTR@tempa\@nnil\else
+      \KV@@sp@def\XTR@currentlabel{#1}%
+    \fi
+    \XTR@checkxtr{extract}{extract}%
+  \else
+    \XTR@extractfalse
+  \fi
+  \ifXTR@st\XTR@opentmp\fi
+  \let\verbatim@processline\XTR@processline@begin
+  \verbatim@start
+}
+\begingroup
+  \lccode`\!=`\\ \lccode`\(=`\{ \lccode`\)=`\}
+\lowercase{\endgroup
+\def\XTR@processline@begin{%
+  \@temptokena{}%
+  \expandafter\verbatim@line\expandafter{\expandafter}\expandafter
+    \XTR@testbegin\the\verbatim@line!begin(extractskip)\@nil
+}
+\def\XTR@testbegin#1!begin(extractskip)#2\@nil{%
+  \@temptokena\expandafter{\the\@temptokena#1}%
+  \verbatim@line\expandafter{\the\verbatim@line#1}%
+  \def\XTR@tempa{#2}%
+  \ifx\XTR@tempa\@empty\XTR@processline@write\else\XKV@afterfi
+    \XTR@skiplabel#2[]\@nil
+    \XTR@checkxtr{skip}{extractskip}%
+    \let\verbatim@processline\XTR@processline@end
+    \ifx\XTR@tempa\@nnil\XKV@afterelsefi
+      \XTR@t@stbegin#2\@nil
+    \else\XKV@afterfi
+      \expandafter\XTR@t@stbegin\XTR@tempa\@nil
+    \fi
+  \fi
+}
+\def\XTR@skiplabel#1[#2]#3\@nil{%
+  \def\XTR@tempa{#1}%
+  \def\XTR@tempb{#2}%
+  \ifx\XTR@tempa\@empty
+    \ifx\XTR@tempb\@empty
+      \let\XTR@tempa\@nnil
+    \else
+      \KV@@sp@def\XTR@currentlabel{#2}%
+      \XTR@sk@plabel#3\@nil
+    \fi
+  \else
+    \let\XTR@tempa\@nnil
+  \fi
+}
+\def\XTR@sk@plabel#1[]\@nil{\def\XTR@tempa{#1}}
+\def\XTR@t@stbegin#1!begin(extractskip)\@nil{\XTR@testend#1!end(extractskip)\@nil}
+\def\XTR@processline@end{%
+  \@temptokena{}%
+  \expandafter\verbatim@line\expandafter{\expandafter}\expandafter
+    \XTR@testend\the\verbatim@line!end(extractskip)\@nil
+}
+\def\XTR@testend#1!end(extractskip)#2\@nil{%
+  \@temptokena\expandafter{\the\@temptokena#1}%
+  \ifXTR@skip\else\verbatim@line\expandafter{\the\verbatim@line#1}\fi
+  \def\XTR@tempa{#2}%
+  \ifx\XTR@tempa\@empty\XTR@processline@write\else\XKV@afterfi
+    \let\verbatim@processline\XTR@processline@begin
+    \XTR@t@stend#2\@nil
+  \fi
+}
+\def\XTR@t@stend#1!end(extractskip)\@nil{\XTR@testbegin#1!begin(extractskip)\@nil}
+\def\XTR@processline@write{%
+  \ifXTR@st\ifcat$\the\@temptokena$\else
+      \XTR@writetmp{\the\@temptokena}%
+  \fi\fi
+  \ifXTR@extract\ifcat$\the\verbatim@line$\else
+      \XTR@writeout{\the\verbatim@line}%
+  \fi\fi
+}}
+\def\endextract{\XTR@stfalse\XTR@endextract}
+\@namedef{endextract*}{\XTR@sttrue\XTR@endextract}
+\def\XTR@endextract{%
+  \@esphack
+  \ifXTR@st
+    \XTR@closetmp
+    \AfterEndEnv{\input{\jobname.xtr}}%
+  \fi
+}
+\@namedef{extractskip}{\XTR@activefalse\@nameuse{extract*}}
+\XTR@namelet{endextractskip}{endextract*}
+\def\extractline{%
+  \XKV@ifstar{\XTR@sttrue\XTR@extractline}{\XTR@stfalse\XTR@extractline}%
+}
+\def\XTR@extractline{%
+  \begingroup
+    \let\do\@makeother\dospecials\catcode`\^^M\active
+    \@testopt\XTR@@xtractline\@nil
+}
+\begingroup
+  \catcode`\~=\active\lccode`\~=`\^^M
+\lowercase{\endgroup
+  \def\XTR@@xtractline[#1]#2~{%
+      \ifXTR@active
+        \def\XTR@tempa{#1}%
+        \ifx\XTR@tempa\@nnil\else
+          \KV@@sp@def\XTR@currentlabel{#1}%
+        \fi
+        \XTR@checkxtr{extract}{line}%
+      \else
+        \XTR@extractfalse
+      \fi
+      \ifXTR@extract\XTR@writeout{#2}\fi
+      \ifXTR@st\XTR@opentmp\XTR@writetmp{#2}\XTR@closetmp\fi
+    \endgroup
+    \ifXTR@st
+      \input{\jobname.xtr}%
+    \fi
+  }%
+}
+\ifXTR@active
+\immediate\openout\XTR@out\XTR@file\relax
+\ifXTR@header
+  \begingroup
+    \catcode`\%=12
+    \gdef\XTR@tempa{%%\space}
+    \@tempcnta\time
+    \divide\@tempcnta 60
+    \edef\XTR@tempb{\the\year/\the\month/\the\day, \the\@tempcnta:}
+    \multiply\@tempcnta 60
+    \@tempcntb\time
+    \advance\@tempcntb-\@tempcnta
+    \ifnum\@tempcntb<10
+      \xdef\XTR@tempb{\XTR@tempb0\the\@tempcntb}
+    \else
+      \xdef\XTR@tempb{\XTR@tempb\the\@tempcntb}
+    \fi
+  \endgroup
+  \XTR@writeout{\XTR@tempa}
+  \filename@parse\XTR@file
+  \ifx\filename@ext\relax\def\filename@ext{tex}\fi
+  \XTR@writeout{\XTR@tempa This is file, `\filename@base.\filename@ext',}
+  \XTR@writeout{\XTR@tempa generated with the extract package.^^J\XTR@tempa}
+  \XTR@writeout{\XTR@tempa Generated on : \space\XTR@tempb}
+  \filename@parse\jobname
+  \ifx\filename@ext\relax\def\filename@ext{tex}\fi
+  \XTR@writeout{\XTR@tempa From source \space: \space\filename@base.\filename@ext}
+  \XTR@writeout{\XTR@tempa Using options: \space\csname opt@extract.sty\endcsname}
+  \XTR@writeout{\XTR@tempa}
+\fi
+\AtBeginDocument{%
+  \ifXTR@handles
+    \XTR@writeout{}%
+    \XTR@writeout{\string\begin{document}}%
+  \fi
+  \XKV@ifundefined{XTR@envs}{}{%
+    \@for\XTR@tempa:=\XTR@envs\do{%
+      \XKV@ifundefined\XTR@tempa{%
+        \XTR@err{environment `\XTR@tempa' not defined; extraction canceled}%
+      }{%
+        \XTR@namelet{XTR\XTR@tempa}{\XTR@tempa}%
+        \@namedef{\XTR@tempa\expandafter}\expandafter{\expandafter
+          \def\expandafter\XTR@tempa\expandafter{\XTR@tempa}%
+          \XTR@checkxtr{extract}\XTR@tempa
+          \ifXTR@extract
+            \XTR@writeout{}\XTR@opentmp
+            \@bsphack
+            \let\do\@makeother\dospecials\catcode`\^^M\active
+            \def\verbatim@processline{%
+              \let\verbatim@processline\XTR@processline@begin
+              \XTR@writeout{\string\begin{\XTR@tempa}\the\verbatim@line}%
+              \XTR@writetmp{\string\begin{XTR\XTR@tempa}\the\verbatim@line}%
+            }%
+            \XTR@sttrue\let\XTR@tempb\verbatim@
+          \else
+            \edef\XTR@tempb{\noexpand\begin{XTR\XTR@tempa}}%
+          \fi
+          \XTR@tempb
+        }%
+        \XTR@namelet{endXTR\XTR@tempa}{end\XTR@tempa}%
+        \@namedef{end\XTR@tempa\expandafter}\expandafter{\expandafter
+          \def\expandafter\XTR@tempa\expandafter{\XTR@tempa}%
+          \ifXTR@extract
+            \@esphack
+            \XTR@writeout{\string\end{\XTR@tempa}}%
+            \XTR@writetmp{\string\end{XTR\XTR@tempa}}%
+            \XTR@closetmp
+            \AfterEndEnv{\input{\jobname.xtr}}%
+          \else
+            \edef\XTR@tempa{\noexpand\end{XTR\XTR@tempa}}%
+            \expandafter\XTR@tempa
+          \fi
+        }%
+      }%
+    }%
+  }%
+  \XKV@ifundefined{XTR@cmdsargs}{}{%
+    \let\XTR@sect\@sect
+    \let\XTR@chapter\@chapter
+    \def\XTR@tempb{chapter}%
+    \@for\XTR@tempa:=\XTR@cmdsargs\do{%
+      \XKV@ifundefined\XTR@tempa{%
+        \XTR@err{command `\@backslashchar\XTR@tempa' not defined; extraction canceled}%
+      }{%
+        \@expandtwoargs\in@{,\XTR@tempa,}{,chapter,section,subsection,subsubsection,}%
+        \ifin@
+          \ifx\XTR@tempa\XTR@tempb
+            \def\@chapter[#1]#2{%
+              \XTR@checkxtr{extract}{chapter}%
+              \ifXTR@extract
+                \XTR@writeout{}%
+                \def\XTR@tempa{#1}%
+                \def\XTR@tempb{#2}%
+                \ifx\XTR@tempa\XTR@tempb
+                  \@temptokena{{#2}}%
+                \else
+                  \@temptokena{[#1]{#2}}%
+                \fi
+                \XTR@writeout{\string\chapter\the\@temptokena}%
+              \fi
+              \XTR@chapter[#1]{#2}%
+            }%
+          \else
+            \def\@sect#1#2#3#4#5#6[#7]#8{%
+              \@expandtwoargs\in@{,#1,}{,\XTR@cmdsargs,}%
+              \ifin@
+                \XTR@checkxtr{extract}{#1}%
+                \ifXTR@extract
+                  \XTR@writeout{}%
+                  \def\XTR@tempa{#7}%
+                  \def\XTR@tempb{#8}%
+                  \ifx\XTR@tempa\XTR@tempb
+                    \@temptokena{{#8}}%
+                  \else
+                    \@temptokena{[#7]{#8}}%
+                  \fi
+                  \XTR@writeout{\expandafter
+                    \string\csname#1\endcsname\the\@temptokena}%
+                \fi
+              \fi
+              \XTR@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8}%
+            }%
+          \fi
+        \else
+          \XTR@err{unsupported command `\XTR@tempa'; try the `extract-cmdline option}%
+        \fi
+      }%
+    }%
+  }%
+  \XKV@ifundefined{XTR@cmdsline}{}{%
+    \@for\XTR@tempa:=\XTR@cmdsline\do{%
+      \XKV@ifundefined\XTR@tempa{%
+        \XTR@err{command `\@backslashchar\XTR@tempa' not defined; extraction canceled}%
+      }{%
+        \@expandtwoargs\in@{,\XTR@tempa,}{,chapter,section,subsection,subsubsection,}%
+        \ifin@
+          \XTR@err{use the `extract-cmd' option for command `\XTR@tempa'}%
+        \else
+          \XTR@namelet{XTR\XTR@tempa}{\XTR@tempa}%
+          \@namedef{\XTR@tempa\expandafter}\expandafter{\expandafter
+            \def\expandafter\XTR@tempa\expandafter{\XTR@tempa}%
+            \XTR@checkxtr{extract}\XTR@tempa
+              \begingroup
+                \let\do\@makeother\dospecials\catcode`\^^M\active
+                \XTR@extractcmdline
+          }%
+        \fi
+      }%
+    }%
+    \begingroup
+      \catcode`\~=\active\lccode`\~=`\^^M
+    \lowercase{\endgroup
+      \def\XTR@extractcmdline#1~{\verbatim@line{#1}\XTR@@xtractcmdline}%
+    }%
+    \def\XTR@@xtractcmdline{%
+        \XTR@writeout{}%
+        \XTR@writeout{\expandafter\string\csname\XTR@tempa\endcsname\the\verbatim@line}%
+        \XTR@opentmp
+        \XTR@writetmp{\expandafter\string\csname XTR\XTR@tempa\endcsname\the\verbatim@line}%
+        \XTR@closetmp
+      \endgroup
+      \input{\jobname.xtr}%
+    }%
+  }%
+}
+\AtEndDocument{%
+  \ifXTR@handles
+    \XTR@writeout{}%
+    \XTR@writeout{\string\end{document}}%
+  \fi
+  \immediate\closeout\XTR@out
+}
+\fi
+\endinput
+%%
+%% End of file `extract.sty'.
-- 
cgit v1.2.3

