summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/codesection
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-06-28 22:28:37 +0000
committerKarl Berry <karl@freefriends.org>2014-06-28 22:28:37 +0000
commita6fa94386add9ed9605b19145be8fa55ca8b8ed7 (patch)
treed6d436ae51c971974edcb879ec6fc56d5cffa401 /Master/texmf-dist/source/latex/codesection
parentb3de83bfade84ad4e11703492d0250c5ec22edec (diff)
codesection (28jun14)
git-svn-id: svn://tug.org/texlive/trunk@34473 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/codesection')
-rw-r--r--Master/texmf-dist/source/latex/codesection/codesection.dtx363
-rw-r--r--Master/texmf-dist/source/latex/codesection/codesection.ins28
2 files changed, 391 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/codesection/codesection.dtx b/Master/texmf-dist/source/latex/codesection/codesection.dtx
new file mode 100644
index 00000000000..a62f3e909f6
--- /dev/null
+++ b/Master/texmf-dist/source/latex/codesection/codesection.dtx
@@ -0,0 +1,363 @@
+% \iffalse meta-comment
+% !TeX spellcheck = en-US
+%
+% File: codesection.sty
+% Version: 2014/06/27 v0.1
+% Author: Matthias Pospiech
+% Email: <matthias@pospiech.eu>
+%
+% Copyright (C) 2014 by Matthias Pospiech <matthias@pospiech.eu>
+% ---------------------------------------------------------------------------
+% 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 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Matthias Pospiech.
+%
+% This work consists of the files codesection.dtx and codesection.ins
+% and the derived filebase codesection.sty.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{codesection.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{codesection}
+%<*package>
+ [2014/06/27 v0.1 disableable code sections]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{hypdoc}
+\RequirePackage[%
+ loadHyperref=true,
+ createIndexEntries=false,
+ applyLayout=true]
+{doctools} %
+%
+\usepackage{lmodern}
+
+\usepackage{codesection}[2014/06/27]
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+\begin{document}
+ \DocInput{codesection.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+% {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
+% 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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v0.1}{2014/06/27}{Converted to DTX file}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{codesection.dtx}
+% \title{The \textsf{codesection} package}
+% \author{Matthias Pospiech \\ \url{matthias@pospiech.eu}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% \section{Introduction}
+% This packages provides an environment to switch a section of code
+% on or off. The code can be placed anywhere in the file and is
+% not limited to the document or the preamble.
+% The motivation for this package was to have commands which allow to preselect if
+% sections of code in a preamble of a template are executed or not.
+%
+% \section{Origin of the code}
+% The code is based on the \texttt{verbatim.sty} package and was
+% originally modified by Ulrich Diez to match the pure comment
+% functionality. Further modifications are contributed by
+% Matthias Pospiech.
+% During the development some discussion about the best approach took place
+% on de.comp.text.tex%
+% \footnote{\url{http://groups.google.com/group/de.comp.text.tex/%
+% browse_thread/thread/2c18f0c221ab167f/}}, which resulted in the current code.
+%
+% \section{Usage}
+% The idea of the following commands is to define a collection of code, here
+% notated as a \emph{section}, which can be executed as it would be without the
+% commands or which is not executed at all. To use that section it must be defined
+% with \emph{true} (execute code) or \emph{false} (skip code).
+%
+% \DescribeMacro{\DefineCodeSection} \oarg{true/false}\marg{name}
+% \AfterLastParam
+% Defines a code section with a \emph{name}. The default is \emph{true},
+% thus the code will be executed.
+%
+% \DescribeMacro{\SetCodeSection} \marg{name}\marg{true/false}
+% \AfterLastParam
+% is like \cs{DefineCodeSection}, but with both arguments mandatory.
+%
+% \DescribeMacro{\BeginCodeSection} \marg{name} \AfterLastParam
+% starts the code section with the given name and
+%
+% \DescribeMacro{\EndCodeSection} \marg{name} \AfterLastParam
+% ends the code section with the given name. Note that both commands need to
+% be paired and not to be nested with other code sections.
+%
+% \cs{BeginCodeSection} and \cs{EndCodeSection} \AfterLastParam
+% mimic an environment. It would be preferable to define them as an
+% environment, but that opens a group in \TeX{}, which has many disadvantages.
+% For example this would make it impossible to load packages. Therefore this
+ % package defines paired commands and consequently, has no such limitations.
+%
+% %
+% \section{Example}
+% In the following code the first section is going to be executed and the second
+% and the third are completely skipped.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}[style=lstDemoStyleLaTeXCode]
+\DefineCodeSection[true]{ExecuteMe}
+\DefineCodeSection[false]{SkipMe}
+%
+\BeginCodeSection{ExecuteMe}
+ This sentence has ...
+\EndCodeSection{ExecuteMe}
+%
+\BeginCodeSection{SkipMe}
+ no end.
+\EndCodeSection{SkipMe}
+%
+\SetCodeSection{ExecuteMe}{false}
+%
+\BeginCodeSection{ExecuteMe}
+ a different ending.
+\EndCodeSection{ExecuteMe}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \DefineCodeSection[true]{ExecuteMe}
+% \DefineCodeSection[false]{SkipMe}
+% \BeginCodeSection{ExecuteMe}
+% This sentence has ...
+% \EndCodeSection{ExecuteMe}
+% %
+% \BeginCodeSection{SkipMe}
+% no end.
+% \EndCodeSection{SkipMe}
+% %
+% \SetCodeSection{ExecuteMe}{false}
+% %
+% \BeginCodeSection{ExecuteMe}
+% a different ending.
+% \EndCodeSection{ExecuteMe}%
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*codesection.sty>
+% \fi
+%
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{codesection}
+ [2014/06/27 v0.1 disableable code sections]
+\RequirePackage{etoolbox}
+% \end{macrocode}
+%
+% \begin{macro}{\DefineCodeSection}
+% \begin{macrocode}
+%%----------------------------------------------------------------------
+%% provide new if (\ifCodeSection<name>)
+%% with definition \CodeSection<name><true>
+%%
+\newcommand{\DefineCodeSection}[2][true]{%
+ \expandafter\newif\csname ifCodeSection#2\endcsname
+ \csname CodeSection#2#1\endcsname
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\SetCodeSection}
+% \begin{macrocode}
+%%----------------------------------------------------------------------
+%% Alternative to \DefineCodeSection
+\newcommand{\SetCodeSection}[2]{%
+ \DefineCodeSection[#2]{#1}
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\BeginCodeSection}
+% \begin{macrocode}
+%%----------------------------------------------------------------------
+\newcommand\BeginCodeSection[1]{%
+ \ifcsdef{ifCodeSection#1}{}{%
+ \PackageError{codesection}{Section #1 is unknown\MessageBreak}{}%
+ }
+ \csname ifCodeSection#1\endcsname
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ {% comment all code inside template section
+ \@bsphack
+%% open new group
+ \begingroup
+%% save current template section name
+ \def\@currtemplate{#1}%
+ \let\do\@makeother\dospecials
+ \catcode`\^^M\active
+%% enter main loop
+ \codeSection@
+ }%
+ {% execute all code inside template section
+%% = do nothing except trimming spaces
+ \@bsphack\@esphack%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\EndCodeSection}
+% \begin{macrocode}
+%%----------------------------------------------------------------------
+%% The macros \@bsphack and \@esphack are internal to LaTeX;
+%% they ensure that an entity like a marginal note or
+%% label definition does not introduce any extra space
+%% into a paragraph, independently of whether or not
+%% it is attached to a word.
+\newcommand\EndCodeSection[1]{\@bsphack\@esphack}
+% \end{macrocode}
+% \end{macro}
+%
+% Modified code from \texttt{verbatim.sty}. This code is not very well documented,
+% because I do not understand it well enough.
+% \begin{macrocode}
+%%----------------------------------------------------------------------
+%% usage ???
+\@ifundefined{vrb@catcodes}{%
+ \def\vrb@catcodes{%
+ \catcode`\!12\catcode`\[12\catcode`\]12%
+ }%
+}{}%
+%%----------------------------------------------------------------------
+\begingroup
+\vrb@catcodes
+\lccode`\!=`\\
+\lccode`\[=`\{
+\lccode`\]=`\}
+\catcode`\~=\active
+\lccode`\~=`\^^M
+\lccode`\C=`\C
+\lowercase{%
+%%----------------------------------------------------------------------
+ \def\codeSection@#1{%
+ \endgroup
+%% ----
+ \def\codeSection@##1~{\codeSection@@##1!#1\@nil}%
+%% ----
+ \def\codeSection@@##1!#1{\futurelet\next\codeSection@@@}%
+%% ----
+ \def\codeSection@@@##1\@nil{%
+ \ifx\next\@nil
+ \let\next\codeSection@
+ \else
+ \def\@tempa####1!#1\@nil{####1}%
+ \def\next{\expandafter\codeSection@test\@tempa##1\@nil~}%
+ \fi
+ \next
+ }%
+%% ----
+ \def\codeSection@test##1{%
+ \let\next\codeSection@test
+ \if\noexpand##1\noexpand~\let\next\codeSection@
+ \else \if\noexpand##1
+ \else \if\noexpand##1\noexpand[\let\@tempc\@empty
+ \let\next\codeSection@testend
+ \else \def\next{\codeSection@##1}%
+ \fi\fi\fi
+ \next
+ }%
+%% ----
+ \def\codeSection@testend##1{%
+ \if\noexpand##1\noexpand~\let\next\codeSection@
+ \else \if\noexpand##1\noexpand]\let\next\codeSection@@testend
+ \else\if\noexpand##1\noexpand!\def\next{\codeSection@!}%
+ \else \expandafter\def\expandafter\@tempc\expandafter
+ {\@tempc##1}%
+ \fi\fi\fi
+ \next
+ }%
+%% ---- test if end statement belongs to current section
+%% saved in \@currtemplate
+ \def\codeSection@@testend{%
+ \ifx\@tempc\@currtemplate
+%% end group and call rescan
+ \edef\next{\noexpand\endgroup\noexpand\@esphack
+ \noexpand\codeSection@rescan{\@currtemplate}}%
+ \else
+%% start loop gain
+ \let\next\codeSection@
+ \fi
+ \next
+ }%
+%% ---- does what ???
+ \def\codeSection@rescan##1##2~{%
+ \if\noexpand~\noexpand##2~%
+ \else
+ \@warning{%
+ Characters dropped after
+ `\string\EndCodeSection{##1}'%
+ }%
+ \fi
+ }%
+ }%
+%%----------------------------------------------------------------------
+} % lowercase
+\codeSection@{EndCodeSection}%
+%%----------------------------------------------------------------------
+% \end{macrocode}
+%
+%
+% \iffalse
+%</codesection.sty>
+% \fi
+%
+% \Finale
+\endinput
+
diff --git a/Master/texmf-dist/source/latex/codesection/codesection.ins b/Master/texmf-dist/source/latex/codesection/codesection.ins
new file mode 100644
index 00000000000..63909b975cc
--- /dev/null
+++ b/Master/texmf-dist/source/latex/codesection/codesection.ins
@@ -0,0 +1,28 @@
+% See file 'codesection.dtx' for copyright and licence.
+
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+\usedir{tex/latex/codesection}
+
+\generate{
+ \file{codesection.sty}{\from{codesection.dtx}{codesection.sty}}
+}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* codesection.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* codesection.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile