From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/svninfo/Makefile | 86 ++ macros/latex/contrib/svninfo/README | 73 ++ macros/latex/contrib/svninfo/svninfo.dtx | 1373 ++++++++++++++++++++++++++++++ macros/latex/contrib/svninfo/svninfo.ins | 90 ++ macros/latex/contrib/svninfo/svninfo.pdf | Bin 0 -> 274729 bytes 5 files changed, 1622 insertions(+) create mode 100644 macros/latex/contrib/svninfo/Makefile create mode 100644 macros/latex/contrib/svninfo/README create mode 100644 macros/latex/contrib/svninfo/svninfo.dtx create mode 100644 macros/latex/contrib/svninfo/svninfo.ins create mode 100644 macros/latex/contrib/svninfo/svninfo.pdf (limited to 'macros/latex/contrib/svninfo') diff --git a/macros/latex/contrib/svninfo/Makefile b/macros/latex/contrib/svninfo/Makefile new file mode 100644 index 0000000000..822d6e301d --- /dev/null +++ b/macros/latex/contrib/svninfo/Makefile @@ -0,0 +1,86 @@ +######################################################################## +## LaTeX2e Makefile +## +## For configuration, update the following defines: +## +## $Id: Makefile 4701 2010-03-21 19:44:08Z brucker $ +## +## This file ist part of the svninfo package. Please see the file +## svninfo.dtx for copyright information. +######################################################################## + +BASE = svninfo + +TEXDIR = +CONTRIB = $(TEXDIR)/lib/texmf/tex/latex2e/contrib/$(BASE) +DOCDIR = $(TEXDIR)/doc/latex2e + +DVIPS = dvips +LATEX = latex +MAKEINDEX = makeindex +PDFLATEX = pdflatex + +TAR = tar + +######################################################################## + +REV = 0.7.4 +TAR_FILE = svninfo-$(REV).tar.gz +TAR_DIR = svninfo-$(REV) +SRC = svninfo.dtx svninfo.ins README Makefile +GEN = svninfo.sty svninfo.cfg svninfo.init + +all: $(BASE).sty dvi ps pdf clean + +sty: svninfo.sty +dtx: svninfo.dtx +dvi: svninfo.dvi +ps: svninfo.ps +pdf: svninfo.pdf +idx: $(BASE).ind $(BASE).gls + $(LATEX) $(BASE).dtx + +%.sty:%.dtx %.ins + $(LATEX) $*.ins + +svninfo.cfg: svninfo.sty +svninfo.init: svninfo.sty + +%.dvi:%.dtx + $(LATEX) $*.dtx + makeindex -s gind.ist -o svninfo.ind svninfo.idx + makeindex -s gglo.ist -o svninfo.gls svninfo.glo + $(LATEX) $*.dtx + +%.dvi:%.tex + $(LATEX) $*.tex + $(LATEX) $*.tex + +%.pdf:%.dtx + rm -f *.toc *.out + $(PDFLATEX) $*.dtx + $(PDFLATEX) $*.dtx + +%.pdf:%.tex + $(PDFLATEX) $*.tex + $(PDFLATEX) $*.tex + +%.ps:%.dvi + $(DVIPS) $*.dvi + +tar: distclean + rm -fr $(TAR_DIR) $(TAR_FILE) $(TAR_FILE).gz + mkdir $(TAR_DIR) + cp -p $(SRC) $(TAR_DIR) + $(TAR) -zcvf $(TAR_FILE) $(TAR_DIR); + rm -rf $(TAR_DIR) + +clean: + rm -f *.log *.aux *.lof *.lot *.toc *.idx *.ind *.glo *.gls *~ *.ilg \ + *.out + +realclean: clean + rm -fr *.dvi *.ps $(GEN) *.pdf + +distclean: realclean + rm -fr README-* diff --git a/macros/latex/contrib/svninfo/README b/macros/latex/contrib/svninfo/README new file mode 100644 index 0000000000..8ee1c8af6b --- /dev/null +++ b/macros/latex/contrib/svninfo/README @@ -0,0 +1,73 @@ + + `svninfo' + + version 0.7.4, March 23, 2010 + +This package is used to extract the revision and file information provided +by the subversion revision control system. + +Copyright (C) 2003-2010 Achim D. Brucker +email: brucker@member.fsf.org + +License: + This program can be redistributed and/or modified under the terms + of the LaTeX Project Public License Distributed from CTAN + archives in directory macros/latex/base/lppl.txt; either + version 1 of the License, or any later version. + +You are allowed to distribute this file under the condition that it is +distributed together with all the following files: + svninfo.ins + svninfo.dtx + Makefile + README + +If you receive only some of these files from someone, complain! + +To install: + unpack and + `make' +or execute the commands manually: + latex svninfo.ins // creates the file of this package + latex svninfo.dtx // create the package documentation + +The following files are created by 'latex svninfo.ins' + - svninfo.cfg + - svninfo.sty + - svninfo.perl + - svninfo.init + +then copy the files + svninfo.sty + svninfo.cfg +to a place where LaTeX can find it + (e.g. under UNIX: $HOME/tex/inputs + and set the environment variable + TEXINPUTS=$HOME/tex/inputs//:$TEXINPUTS + ) + +============================================================================ + +HISTORY +0.7.4 : Fixed localization of date formats, e.g., \svnToday. +0.7.3 : Fixed bug resulting in wrong date for maximal + revision (\svnInfoMaxToday). +0.7.2 : Fixed documentation: the option for using scrpage2 package is called + scrpage. Fixed support for svk. +0.7.1 : Fixed \svnMaxToday and introduced \svnInfoMaxToday as an alternative + name. Improved documentation +0.7 : Added option margin for showing version info in the margins of the + document; added option svk for supporting the keyword expansion of svk; + added new command \svnMaxToday; and fixed the use of fancyhdr for + single-sided documents. +0.6 : Added \svnInfoMinRevision and \svnInfoMaxRevision together with the + option "revrange". Also added support for \ in keywords. +0.5 : Removed support for LaTeX2HTML and added new command \svnKeyword + for defining arbitrary svn keywords (e.g. $Author:$). +0.4 : Added new package options draft, final, eso-foot, and scrpage. Fixed + problem with `\_' in file names. +0.3 : Added support for Id-keywords without owner information + (fixes a bug reported by Uwe Ziegenhagen). +0.2.1 : Added \svnId (suggested by Thomas Weber). +0.2 : Removed latex2html build-dependency +0.1 : Initial Version, based on rcsinfo from Dr. Juergen Vollmer diff --git a/macros/latex/contrib/svninfo/svninfo.dtx b/macros/latex/contrib/svninfo/svninfo.dtx new file mode 100644 index 0000000000..e8e70d0c85 --- /dev/null +++ b/macros/latex/contrib/svninfo/svninfo.dtx @@ -0,0 +1,1373 @@ + +% \iffalse +%<*header> + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% `svninfo' package to use with LaTeX2e. +%% +%% This package is used to extract the revision and file information provided +%% by the Subversion revision control system. +%% +%% Copyright (C) 1995 Dr. Juergen Vollmer +%% Copyright (C) 2003-2010 Achim D. Brucker +%% +%% License: +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1 of the License, or any later version. +%% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% +%\iffalse +% to test the checksum, uncomment \OnlyDescription +% in the driver +%\fi +% +%% \CheckSum{628} +%% \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 \~} +% +%\fi + +% \DoNotIndex{\begin,\CodelineIndex,\CodelineNumbered,\def,\DisableCrossrefs} +% \DoNotIndex{\DocInput,\documentclass,\EnableCrossrefs,\end,\GetFileInfo} +% \DoNotIndex{\NeedsTeXFormat,\OnlyDescription,\RecordChanges,\usepackage} +% \DoNotIndex{\ProvidesClass,\ProvidesPackage,\ProvidesFile,\RequirePackage} +% \DoNotIndex{\LoadClass,\PassOptionsToClass,\PassOptionsToPackage} +% \DoNotIndex{\DeclareOption,\CurrentOption,\ProcessOptions,\ExecuteOptions} +% \DoNotIndex{\AtEndOfClass,\AtEndOfPackage,\AtBeginDocument,\AtEndDocument} +% \DoNotIndex{\InputIfFileExists,\IfFileExists,\ClassError,\PackageError} +% \DoNotIndex{\if,\else,\fi,\emph,\footnotesize,\footrulewidth,\let} +% \DoNotIndex{\newcount,\newif,\number,\or,\parindent,\plainfootrulewidth} +% \DoNotIndex{\PrintChanges,\PrintIndex,\relax,\setlength,\space} +% \DoNotIndex{\the,\textwidth,\thepage,\newcommand,\texttt,\verb,\vfill} +% \DoNotIndex{\input,\newpage,\setcounter,\newcounter,\\,\ ,\typeout,\today} +% +% \MakeShortVerb{\|} +% \newcommand{\LatexToHtml}{\LaTeX 2\texttt{HTML}} +% \def\param#1{\texttt{\##1}} +% \newcommand{\Cmd}[1]{\texttt{$\backslash$#1}} +% \newcommand{\Svn}{\emph{Subversion}} +% \newcommand{\Svk}{\emph{svk}} +% \newcommand{\blank}{{\tiny$_\sqcup$}} +% \newcommand{\Id}{\texttt{\$Id\$}} +% \newcommand{\SvnInfoCmd}[1]{\texttt{$\backslash$svnInfo\blank\$Id#1\$\blank}} +% +% \changes{v0.7.4}{2010/03/23}{Fixed localization of date formats, +% e.g., \texttt{\\svnToday}.} +% \changes{v0.7.3}{2008/08/09}{Fixed bug resulting in wrong date for maximal +% revision} +% \changes{v0.7.2}{2008/04/28}{Fixed documentation: the option for using +% the \texttt{scrpage2} package is called \texttt{scrpage}. Fixed +% support for \texttt{svk}.} +% \changes{v0.7.1}{2007/04/27}{Fixed \texttt{\\svnMaxToday} and +% introduced \texttt{\\svnInfoMaxToday} as an alternative +% name. Improved documentation} +% \changes{v0.7}{2007/03/26}{Added option \texttt{margin} for showing +% version info in the margins of the document; added option +% \texttt{svk} for supporting the keyword expansion of svk; added command +% \texttt{\\svnMaxToday}; and fixed the use of \texttt{fancyhdr} for +% single-sided documents.} +% \changes{v0.6}{2006/05/11}{Added \texttt{\\svnInfoMinRevision} and +% \texttt{\\svnInfoMaxRevision} together with the option +% \texttt{revrange}. Also added support for \texttt{\textbackslash} in keywords.} +% \changes{v0.5}{2006/01/11}{Removed support for \LatexToHtml{} (it is +% non-free software and also seems to be unmaintained) and added new +% command \texttt{\\svnKeyword} for defining arbitrary svn keywords +% (e.g. \texttt{\string$Author:\string$}).} +% \changes{v0.4}{2005/11/07}{Added new package options \texttt{draft}, \texttt{final}, +% \texttt{eso-foot}, and \texttt{scrpage}. Fixed problem +% with `\_' in file names.} +% \changes{v0.3}{2005/09/30}{Added support for \texttt{\$Id:\$} keywords without +% owner information.} +% \changes{v0.2.1}{2005/04/07}{Added \texttt{\\svnId}.} +% \changes{v0.2}{2005/01/17}{Removed \LatexToHtml{} build-dependency.} +% \changes{v0.1}{2003/08/14}{Initial version, mainly a modified version +% of the \texttt{rcsinfo} package.} +% +% \title{The \texttt{svninfo} package} +% \author{Achim D.~Brucker\\ +% {\footnotesize brucker@member.fsf.org}\\ +% {\footnotesize http://www.brucker.ch/}} +% \date{March 23, 2010\\Version 0.7.4} +% +% \maketitle +% +% \begin{abstract} +% \noindent This package is used to extract the revision and file +% information provided by the \Svn\ +% (\texttt{http://subversion.tigris.org}) and the \Svk\ +% (\texttt{http://svk.elixus.org}) revision control system. +% \end{abstract} +% +%\section{Introduction} +% +% To maintain different versions of a document or to keep track on the +% development of one, the document is kept under a revision control +% system like \emph{SCCS}, \emph{CVS}, \Svn, or \Svk. This package +% assumes you are using either the \Svn\ or the \Svk\ system. To +% present the version information of a document, one needs to extract +% it from somewhere. For example, \Svk\ and \Svn\ offer several keywords +% that are expanded by the \Svn\ and \Svk\ \emph{update} +% commands.\footnote{The expansion of keywords has to be enabled +% manually, e.g., \texttt{svn propset svn:keywords "Id" +% svninfo.dtx}.} The most informative keyword is |$Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $| which +% contains a lot of useful information. This information is made +% available through this package. Additionally, the package allows one +% to extract also the information from the more specific keywords, +% e.g., |$Author$| or |$Date$|. +% +% In this documentation we use \Svn\ in the examples; but the results +% should be similar if you are using \Svk. Note that you have to use +% the \texttt{svk} option if you use \Svk. +% +% Moreover, one has to set the \Svn\ property for keywords expansion of +% that file, e.g., by executing: +% \begin{verbatim} +% svn propset svn:keywords "Id" svninfo.dtx +% \end{verbatim} +% Please consult the manual of \Svn\ (e.g., \emph{h}) or \Svk\ for further +% details about keyword expansion. +% +% The information obtained from the expanded \Id\ string are +% \begin{itemize} +% \item the filename, +% \item the revision number, +% \item the date and time of the last \Svn\ \emph{co} command, and +% \item name of the user who has done this action. +% \end{itemize} +% For each of these items a macro is defined. +% When \emph{updating} a file, the \Svn\ keywords should be contained in +% the \emph{updated} source. Further, one has to set the \Svn\ property +% for keyword expansion of that file, e.g.\ +% \begin{verbatim} +% svn propset svn:keywords "Id" svninfo.dtx +% \end{verbatim} +% See the \Svn\ documentation for more details. +% +% If you want to read about the implementation, put a \% before +% |\Only|\-|Description| in the code marked with |<*driver>| in the file +% |svninfo.dtx|. +% +%\section{User Interface} +% +%\subsection{Options} +% +% Options for this package are: +% \begin{description} +% \item[svk] +% Use \texttt{svk} for parsing the Id information generated by +% \Svk. +% \item[today] +% Set the date of |\today| to the date obtained by the \Svn\ information. +% If the \Id\ string is not expanded (see below), the current date is +% used. +% \item[notoday] +% Don't use the \Svn\ date for |\today|. +% \item[revrange] For multi-file documents, display minimum and +% maximum revision. Every file of the document must either +% include a |\svnInfo| or a |\svnKeyword $Revision:$| statement. +% This is information needs two runs of \LaTeX{} to be correct. +% \item[fancyhdr] +% We use the \texttt{fancyhdr} package to fill the footline with +% \Svn\ information: filename, revision-number and date. +% +% If the \texttt{fancyhdr} package is not already loaded, it will be +% loaded +% by this package. To use the footnotes, put something like:\\ +% \hspace*{1em}|\pagestyle{fancyplain}|\\ +% \hspace*{1em}|\fancyhead[RE,LO]{\leftmark}|\\ +% \hspace*{1em}|\fancyhead[LE,RO]{\thepage}|\\ +% in the preamble. +% \item[nofancy] +% We don't define the footline. The +% \texttt{fancyhdr} package is not loaded. +% \item[scrpage] +% Use \texttt{scrpage2} instead of \texttt{fancyhdr}. +% \item[eso-foot] +% Use \texttt{eso-pic} for showing a tiny info line at the bottom +% line of the paper. +% \item[margin] Use \texttt{margin} for showing the version info in +% the margin area. +% \item[long] +% If used together with \texttt{fancy} / \texttt{fancyhdr} the date +% string is printed in the long format +% as |\today| returns it. If \texttt{fancy} / \texttt{fancyhdr} +% is not used, nothing. +% \item[short] +% If used together with \texttt{fancy} / \texttt{fancyhdr} the date +% string is printed in the short +% format \emph{YYYY-MM-DD}. +% If \texttt{fancy} / \texttt{fancyhdr} is not used, nothing. +% \item[final] Don't define the footline. If you want the \Svn\ in the +% final document, please use\\ +% \verb|\usepackage{draft}| +% \item[draft] If \texttt{nofancy} is not used, show a footline with \Svn\ information. +% \end{description} +% If the \texttt{babel} package is used, the |\svnToday| string is language +% dependent. +% +% The default options are: \emph{draft,today,long}. You may also +% configure the default fancy heading packages in the configuration +% file |svninfo.cfg|. +% +%\subsection{Commands} +% +% \subsubsection{Defining the \Svn\ Id information} +% +% There is only one macro to define the information: +% |\svnInfo|\DescribeMacro{\svnInfo}. Since it must collaborate with +% \Svn\ it has an ``unusual'' calling sequence: The arguments are +% prefaced with a `\$' and completed with a `\$\blank' (note the final +% space or carriage return). +% The following arguments are valid:\\ +% \hspace*{0.5em} \SvnInfoCmd{}\\ +% \hspace*{0.5em} \SvnInfoCmd{:}\\ +% \hspace*{0.5em} +% \SvnInfoCmd{:\blank\emph{file}\blank\emph{rev}\blank\emph{YYYY-MM-DD}\blank\emph{hh:mm:ss}\blank\emph{owner}\blank} +% +% In the first two forms, \Svn\ has not expanded the \Id\ string. +% This form will usually be used before the file is \emph{checked in} +% the first time. +% +% \emph{YYYY-MM-DD} is a date, \emph{hh:mm:ss} a time. +% Note: when you perform the \Svn\ \emph{check out} command, the \Id\ string +% is expanded by \Svn\ automatically. +% +% To take effect, |\svnInfo| must follow the |\begin{document}|. +% If you are using multiple files for a document, you could place +% |\svnInfo| at the +% beginning of each file, so the information from the current file is +% obtained. +% +% \subsubsection{Accessing the \Svn\ Id information} +% There are the following macros to access the information provided by \Svn. +% If \Svn\ has not expanded the \Id\ string, or no |\svnInfo| command is given, +% default values are returned. +% +% \begin{itemize} +% \item \DescribeMacro{\svnInfoFile} The name of the source file. +% Default: \texttt{--sourcefile--}. +% \item \DescribeMacro{\svnInfoRevision} The revision number, of the +% \emph{checked out} file. +% Default: \texttt{--revision--}. +% \item \DescribeMacro{\svnInfoMinRevision} The minimum revision +% number of multi-file documents. Every file of the document must either +% include a |\svnInfo| or a |\svnKeyword $Revision:$| statement. +% This is information needs two runs of \LaTeX{} to be correct. +% Default: \texttt{--minrevision--}. +% \item \DescribeMacro{\svnInfoMaxRevision} The maximum revision +% number of multi-file documents. Every file of the document must either +% include a |\svnInfo| or a |\svnKeyword $Revision:$| statement. +% This is information needs two runs of \LaTeX{} to be correct. +% Default: \texttt{--maxrevision--}. +% \item \DescribeMacro{\svnInfoDate} The date in the form \emph{YYYY-MM-DD}, +% when the file was \emph{checked out}. +% Default: the current date. +% \item \DescribeMacro{\svnInfoTime} The time, when the file was +% \emph{checked out}. +% Default: \texttt{--time--}. +% \item \DescribeMacro{\svnInfoOwner} The user name of the file owner. +% Default: \texttt{--owner--}. +% \item \DescribeMacro{\svnInfoYear} The year \emph{YYYY} of |\svnInfoDate|. +% Default: the current year. +% \item \DescribeMacro{\svnInfoMonth} The month \emph{MM} of |\svnInfoDate|. +% Default: the current month. +% \item \DescribeMacro{\svnInfoDay} The day \emph{DD} of |\svnInfoDate|. +% Default: the current day. +% \item \DescribeMacro{\svnInfoLongDate} The date in the form of |\today| +% when the file was \emph{checked out}. This is language depended. +% Default: the current date. +% \item \DescribeMacro{\svnId} Mimics the behavior of the \Id\ strings, i.e.\ it +% prints a string with a summary of the above described +% information. +% \item \DescribeMacro{\svnToday} The date obtained from the \Svn\ information +% in the format |\today| is using. +% \item \DescribeMacro{\svnInfoMaxToday} The date obtained from the latest +% \Svn\ revision in the format |\today| is using. +% \end{itemize} +% \section{Examples} +% +% \newcommand{\svnExample}{ +% \begin{tabular}[t]{rl} +% \Cmd{svnInfoFile} & \svnInfoFile \\ +% \Cmd{svnInfoRevision} & \svnInfoRevision \\ +% \Cmd{svnInfoMinRevision} & \svnInfoMinRevision \\ +% \Cmd{svnInfoMaxRevision} & \svnInfoMaxRevision \\ +% \Cmd{svnInfoDate} & \svnInfoDate \\ +% \Cmd{svnInfoTime} & \svnInfoTime \\ +% \Cmd{svnInfoOwner} & \svnInfoOwner \\ +% \end{tabular} +% \begin{tabular}[t]{rl} +% \Cmd{svnInfoYear} & \svnInfoYear \\ +% \Cmd{svnInfoMonth} & \svnInfoMonth \\ +% \Cmd{svnInfoDay} & \svnInfoDay \\ +% \Cmd{svnInfoLongDate} & \svnInfoLongDate \\ +% \Cmd{svnToday} & \svnToday \\ +% \Cmd{svnInfoMaxYear} & \svnInfoMaxYear \\ +% \Cmd{svnInfoMaxDay} & \svnInfoMaxDay \\ +% \Cmd{svnInfoMaxMonth} & \svnInfoMaxMonth \\ +% \Cmd{svnInfoMaxToday} & \svnInfoMaxToday \\ +% \end{tabular}\\ +% \Cmd{svnId} \svnId +% \bigskip +%} +% +% \svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $ +% |\svnInfo| not expanded, no colon\\ +% \verb+\svnInfo $+\verb+Id$+\\ +% \svnExample +% +% \svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $ +% |\svnInfo| not expanded, having colon\\ +% \verb+\svnInfo $+\verb+Id:$+\\ +% \svnExample +% +% \svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $ +% |\svnInfo| standard version\\ +% {\small\verb+\svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $+}\\ +% \svnExample +% +% \svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $ +% |\svnInfo| standard version without owner\\ +% {\small\verb+\svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $+}\\ +% \svnExample +% +% \svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $ +% |\svnInfo| standard version with \\ in the owner \\ +% {\small\verb+\svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $+}\\ +% \svnExample +% +% \svnInfo Id: svninfo.dtx 12 2002-04-19 12:27:55 brucker $ +% |\svnInfo| no leading \$\\ +% {\footnotesize\verb+\svnInfo Id: svninfo.dtx 12 2002-04-19 12:27:55 brucker $+}\\ +% \svnExample +% +% \section{The generic \Svn\ keyword interface} +% In addition to the already presented |\svnInfo| macro which is +% specially built for analyzing the \Svn\ |$Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $| information we also +% provide a generic interface via +% |\svnKeyword|\DescribeMacro{\svnKeyword}. This interface can +% be used to extract information from the remaining keywords: +% \begin{itemize} +% \item |$Date$|: The date of the last commit with changes. This +% information can also be accessed using the keyword +% |$LastChangedDate$|. +% \item |$Revision$|: The revision of the last commit with +% changes. This information can also be accessed using the keyword +% |$LastChangedRevision$| or |$Rev$|. +% \item |$Author$|: The author of the last commit with changes. This +% information can also be accessed using the keyword +% |$LastChangeBy$|. +% \item |$HeadURL$|: The the full URL to the latest version of the +% file in the repository. This information can also be accessed +% using the keyword |$URL$|. +% \end{itemize} +% These keywords can be accessed using the |\svnKeyword| +% macro. This macro accepts a single argument that should be of the +% form |$|\meta{Keyword}|$| (unexpanded) or +% |$|\meta{Keyword}:\blank\meta{value}\blank|$| (expanded), e.g.: +% \begin{verbatim} +% \svnKeyword $Author: brucker $ +% \end{verbatim} +% The |\svnKeyword| updates the corresponding \Svn\ Id +% information, e.g., our example updates |\svnInfoOwner|. In more +% detail: +% \begin{itemize} +% \item |\svnKeyword $Date:$| updates the date and time +% information, e.g., |\svnInfoDate|\DescribeMacro{\svnInfoDate}, +% |\svnInfoMonth|\DescribeMacro{\svnInfoMonth}, or +% |\svnInfoTime|\DescribeMacro{\svnInfoTime}. +% \item |\svnKeyword $Revision:$| updates +% |\svnInfoRevision|\DescribeMacro{\svnInfoRevision}. +% \item |\svnKeyword $Author:$| updates +% |\svnInfoOwner|\DescribeMacro{\svnInfoOwner}. +% \item |\svnKeyword $HeadURL:$| updates +% |\svnInfoHeadURL|\DescribeMacro{\svnInfoHeadURL}. +% \end{itemize} +% +% Note, the parser used by |\svnKeyword| is not that powerful than +% the one used by |\svnInfo|. Thus it is advisable to use +% |\svnKeywordId| for the |$Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $| keyword and |\svnKeyword| +% only for the keywords described in this section. +% +% Further, the |\svnKeyword| macro does not reset all keyword +% definitions globally, i.e., you can combine the |$Revision$| +% of one file, with the |$Author$| of another file. Please take +% care of that! +% +% \section{Acknowledgments} +% %%%%%%%%%%%%%%%%%%%%%%%%% +% This package is based on \texttt{rcsinfo} from Dr.~J{\"u}rgen +% Vollmer. The \texttt{rcsinfo} package is distributed via the CTAN +% archives ('\texttt{macros/latex/contrib/rcsinfo}'). +% +% The code for parsing generic \Svn{} keywords was taken from the +% \texttt{svn} packages written by Richard Lewis. The \texttt{svn} +% package is distributed via the CTAN archives +% ('\texttt{macros/latex/contrib/svn}'). +% +% Further I want to thank all the people that reported bugs and ideas +% for improvements, often including patches: Andreas Haller, Benjamin +% Hiller, Christophe Jacquet, Dries Kimpe, Jami Lawrence, Henning +% Lenz, Stefan Mann, Nigel Metheringham, Igor Nikolic, Michael +% Niedermair, Heiko Oberdiek, Oliver Pons, Bernd Raichle, Krzysztof +% Retel, J\"org, Sommer, Arnout Standaert, Daniel Tr\"umper, Thomas +% Weber, and Uwe Ziegenhagen. +% +% \section{Copyright and License} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \begin{tabular}{ll} +% Copyright (\copyright) 1995 & Dr. J{\"u}rgen Vollmer\\ +% Copyright (\copyright) 2003--2010 & Achim D.~Brucker \texttt{brucker@member.fsf.org}\\ +% \end{tabular} +% +% \noindent This program can be redistributed and/or modified under +% the terms of the \LaTeX{} Project Public License Distributed from +% CTAN archives in directory '\texttt{macros/latex/base/lppl.txt}'; +% either version 1 of the License, or any later version. +% +% \StopEventually{} +% +% \section{The Documentation Driver File} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% The next bit of code contains the documentation driver file for +% \TeX\, i.e., the file that will produce the documentation you are +% currently reading. It will be extracted from this file by the +% \texttt{docstrip} program. +% +% If you want to read about the implementation, put a \% before +% |\OnlyDescription| in the following code. +% \begin{macrocode} +%<*driver> +\documentclass{article} +\usepackage{doc} +\usepackage[nofancy]{svninfo} +\OnlyDescription +\makeatletter +\if@svnInfoUseFancyhdr@ +\pagestyle{fancyplain} +\if@twoside +\fancyhead[RE,LO]{\leftmark} +\fancyhead[LE,RO]{\thepage} +\else +\fancyhead[R]{\leftmark} +\fancyhead[L]{\thepage} +\fi +\fi +\makeatother +\RecordChanges +\EnableCrossrefs +\CodelineIndex +\begin{document} +\DocInput{svninfo.dtx} +\PrintChanges +\setcounter{IndexColumns}{2} +\PrintIndex +\end{document} +% +% \end{macrocode} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \section{The Configuration File} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% You can set up the default fancy headings package in the file +% |svninfo.cfg|. +% Use the |fancyhdr| package, by setting the default option: |fancyhdr|. +% \begin{macrocode} +%<*config> +\ExecuteOptions{fancyhdr} +% +% \end{macrocode} +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \section{The Implementation} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% The implementation is based on cracking the \Id\ string. +% +% What do we need, and who we are: +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{svninfo}[2010/03/22 v0.7.4] +% \end{macrocode} +% +% Declare some local counters to store the \Svn\ date +% \begin{macrocode} +\newcount\@svnInfoDay +\newcount\@svnInfoMonth +\newcount\@svnInfoYear +% \end{macrocode} +% +% To memorize, that we want to set |\svnToday| to the date obtained by the +% \Svn\ information. +% \begin{macrocode} +\newif\if@svnInfoToday@ +% \end{macrocode} +% +% |\svnToday| should return the date obtained by the \Svn\ information. +% \begin{macrocode} +\DeclareOption{today}{ + \@svnInfoToday@true +} +% \end{macrocode} +% +% Ok we don't want do use it. +% \begin{macrocode} +\DeclareOption{notoday}{ + \@svnInfoToday@false +} +% \end{macrocode} +% To memorize if we should show ranges of revision (for multiple-file +% documents): +% \begin{macrocode} +\newif\if@svnInfoRevRange@ +\@svnInfoRevRange@false +% \end{macrocode} +% \begin{macrocode} +\DeclareOption{revrange}{ + \@svnInfoRevRange@true +} +% \end{macrocode} +% \begin{macrocode} +% To memorize if we are in final or draft mode: +% \begin{macrocode} +\newif\if@svnInfoDraft@ +% \end{macrocode} +% \begin{macrocode} +\DeclareOption{final}{ + \@svnInfoDraft@false +} +\DeclareOption{draft}{ + \@svnInfoDraft@true +} +% \end{macrocode} +% +% To memorize, that we want to have the old \texttt{fancyheadings}, the new +% \texttt{fancyhdr}, \texttt{srcpage2}, \texttt{eso-pic}, or \texttt{margin}. +% footline filled with \Svn\ information. +% \begin{macrocode} +\newif\if@svnInfoNotPreamble@% +\@svnInfoNotPreamble@false% +\newif\if@svnInfoUseFancy@ +\newif\if@svnInfoUseFancyhdr@ +\newif\if@svnInfoUseScrpage@ +\newif\if@svnInfoUseEsofoot@ +\newif\if@svnInfoUseMargin@ +\newif\if@svnInfoSVK@ +% \end{macrocode} +% +% We want to use the \texttt{fancyhdr} +% package, and set the footline with the \Svn\ information. +% Only one option may be in effect. +% \begin{macrocode} +\DeclareOption{fancy}{ + \@svnInfoUseFancy@true + \@svnInfoUseFancyhdr@false + \@svnInfoUseScrpage@false + \@svnInfoUseEsofoot@false +} +\DeclareOption{fancyhdr}{ + \@svnInfoUseFancy@false + \@svnInfoUseFancyhdr@true + \@svnInfoUseScrpage@false + \@svnInfoUseEsofoot@false +} +\DeclareOption{scrpage}{ + \@svnInfoUseFancy@false + \@svnInfoUseFancyhdr@false + \@svnInfoUseScrpage@true + \@svnInfoUseEsofoot@false +} +\DeclareOption{eso-foot}{ + \@svnInfoUseFancy@false + \@svnInfoUseFancyhdr@false + \@svnInfoUseScrpage@false + \@svnInfoUseEsofoot@true +} +\DeclareOption{margin}{ + \@svnInfoUseMargin@true +} +\DeclareOption{svk}{ + \@svnInfoSVK@true +} +% \end{macrocode} +% +% Ok we don't want do use it. +% \begin{macrocode} +\DeclareOption{nofancy}{ + \@svnInfoUseFancy@false + \@svnInfoUseFancyhdr@false + \@svnInfoUseScrpage@false + \@svnInfoUseEsofoot@false +} +% \end{macrocode} +% +% To memorize, that we want to use the long date format. +% \begin{macrocode} +\newif\if@svnInfoLong@ +% \end{macrocode} +% +% We want to use the long date format. +% \begin{macrocode} +\DeclareOption{long}{ + \@svnInfoLong@true +} +% \end{macrocode} +% +% Ok we don't want do use it. +% \begin{macrocode} +\DeclareOption{short}{ + \@svnInfoLong@false +} +% \end{macrocode} +% +% Use these default options, +% \begin{macrocode} +\ExecuteOptions{draft,today,long} +% \end{macrocode} +% +% read the configuration file, to set the default fancy headings package, +% \begin{macrocode} +\IfFileExists{svninfo.cfg}{\input{svninfo.cfg}}{} +% \end{macrocode} +% +% and the process the user options. +% \begin{macrocode} +\ProcessOptions*\relax +% \end{macrocode} +% Load packages for page headers of footers if necessary. +% \begin{macrocode} +\if@svnInfoDraft@ + \if@svnInfoUseFancy@ + \RequirePackage{fancyheadings} + \fi + \if@svnInfoUseFancyhdr@ + \RequirePackage{fancyhdr} + \fi + \if@svnInfoUseScrpage@ + \RequirePackage{scrpage2} + \fi + \if@svnInfoUseEsofoot@ + \RequirePackage{eso-pic} + \fi +\fi +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{ifthen} +% \end{macrocode} +% +% If no language for the |babel| package is given in the document, +% we have to redefine |\svnToday| (otherwise the changed |\year|, |\month| and +% |\day| won't work). In this case use the English version of |\svnToday|. +% \begin{macrocode} +\def\svnToday{\@svnInfoToday} +%ifcase\month\or +% January\or February\or March\or April\or May\or June\or +% July\or August\or September\or October\or November\or December\fi +% \space\number\day, \number\year} +% \end{macrocode} +% +% We have a problem, since the number of arguments of |\svnInfo| vary from +% zero to five. +% To deal with that, we use some kind ``continuation passing'' style of +% programming. +% |\@svnInfoNext| contains the action to be done next. +% + +%\begin{macro}{\svnInfo} +% Extract the \Svn\ information, and give commands shown above their values. +% Check the catcode of |:| and set the flag. The restoration is done after the +% |:| has been read. Allow \_ (underscore) in file names, hence change the +% |\catcode| of it. +% \begin{macrocode} + +% +% Whenever reading another portion of the SVN/RCS info, +% expand \@svnBeginRead before calling the reading macro +% and call \@svnEndRead as first thing inside the reading macro. +\def\@svnBeginRead{\begingroup + \catcode`\_=13 % + \catcode`:=12 % + \catcode`\\=12 % +} +\def\@svnEndRead{\endgroup +} + + +\def\svnInfo {\@svnBeginRead + \@svnInfoReadArgs + } +% \end{macrocode} +%\end{macro} + +%\begin{macro}{\@svnInfoReadArgs} +% First check, if the \Id\ string is not-expanded. +% Set the default values, so that for not expanded \Id\ strings, we get them. +% The \$ before |Id| may be omitted (I use this to avoid expansion of +% \$Id-Tags to be expanded by SVN in some cases). +% Restore the catcode of the |:|. +% \begin{macrocode} + +\def\@svnInfoReadArgs #1Id#2 {\@svnEndRead + \@svnInfoDefaults + \if $#2 \expandafter\@svnInfoEat + \else \@svnBeginRead + \expandafter\@svnInfoEatColon + \fi + $Id#2 % +} +% \end{macrocode} +%\end{macro} + +%\begin{macro}{\@svnInfoEat} +% This macro eats up its argument, i.e.\ removes it from the input. +% Reset the |\catcode| of the underscore. +% \begin{macrocode} +\def\@svnInfoEat #1 {} +% \end{macrocode} +%\end{macro} + +%\begin{macro}{\@svnInfoEatColon} +% This macro eats up the colon following \texttt{Id}. +% The colon may be followed by a \$, which means that the \Id\ string is not +% expanded. +% \begin{macrocode} +\def\@svnInfoEatColon $Id:#1 {\@svnEndRead + \if $#1 \expandafter\@svnInfoEat + \else \@svnBeginRead + \expandafter\@svnInfoCrackAndEat + \fi + #1 % +} +% \end{macrocode} +%\end{macro} + +%\begin{macro}{\@svnInfoCrackAndEat} +% Take an expanded \Id\ string pass it to the crack routine +% |\@svnInfoCrack|\-|String|, which specifies what has to be done +% after it. We have already eaten the \$. +% Note: here we don't give an argument to |\@svnInfoNext|, since it is taken +% form the source, in case of |\@svnInfoEat|. +% We have to take the next 7 tokens. +% Note, first argument (\verb|#1|) contains only spaces. +% \begin{macrocode} +\def\@svnInfoCrackAndEat #1 #2 #3 #4 #5 #6 {\@svnEndRead + \@svnInfoCrackString #2 #3 #4 #5 #6 % +} +% \end{macrocode} +%\end{macro} + +%\begin{macro}{\@svnInfoCrackString} +% Take an expanded \Id\ string and crack it:\\ +% \#1: filename, \#2 revision, \#3 date, \#4 time, \#5 owner\\ +% Hence we have to consume the terminating \$ afterwards. Reset +% the |\catcode| of the underscore. +% +% If the document checked into the repository without authentication, +% the owner may be empty. In that case the argument \#5 is \$ and +% we already consumed the terminating \$. +% +% Split the date into year,month and day. +% If the option \texttt{today} is given, |\svnToday| returns from now +% on the \Svn\ date. +% +% \begin{macrocode} +\def\@svnInfoCrackString #1 #2 #3 #4 #5 {% + \def\svnInfoFile{#1}% + \def\svnInfoRevision{#2}% + \def\svnInfoTime{#4}% + % + \@svnInfoSplitDate x#3r#2x% + \@svnInfoMargin% + \def\svnInfoLongDate{\@svnInfoToday}% +% + \if@svnInfoToday@ + \year =\@svnInfoYear + \month =\@svnInfoMonth + \day =\@svnInfoDay + \fi +\ifthenelse{\(\equal{\svnInfoMaxRevision}{--maxrevision--}\) % + \OR \( \svnInfoMaxRevision < #2 \)}{% + \def\svnInfoMaxRevision{#2}% + }{}% + \ifthenelse{\(\equal{\svnInfoMinRevision}{--minrevision--}\) % + \OR \( #2 < \svnInfoMinRevision \)}{\def\svnInfoMinRevision{#2}}{}% + \if $#5 \def\svnInfoOwner{}%$% + \def\svnId{#1\ #2\ #3\ #4}% + \else + \def\svnInfoOwner{#5}% + \def\svnId{#1\ #2\ #3\ #4\ #5}% + \expandafter\@svnInfoEat + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@svnInfoSplitDate} +% This macro sets |\svnInfoYear|, |\svnInfoMonth|, and |\svnInfoDay|. +% It takes a \texttt{x}\emph{YYYY-MM-DD}\texttt{x} style of argument. +% \begin{macrocode} +\if@svnInfoSVK@ + \def\@svnInfoSplitDate x#1-#2-#3T#4Zr#5x{% + \@svnInfoDay =#3\relax + \@svnInfoMonth=#2\relax + \@svnInfoYear =#1\relax + \ifthenelse{\(\equal{\svnInfoMaxRevision}{--maxrevision--}\) + \OR \( \svnInfoMaxRevision < #5 \)}{% + \def\svnInfoMaxYear{#1}% + \def\svnInfoMaxMonth{#2}% + \def\svnInfoMaxDay{#3}% + }{}% +} +\else% + \def\@svnInfoSplitDate x#1-#2-#3r#4x{% + \@svnInfoDay =#3\relax + \@svnInfoMonth=#2\relax + \@svnInfoYear =#1\relax + \ifthenelse{\(\equal{\svnInfoMaxRevision}{--maxrevision--}\) + \OR \( \svnInfoMaxRevision < #4 \)}{% + \def\svnInfoMaxYear{#1}% + \def\svnInfoMaxMonth{#2}% + \def\svnInfoMaxDay{#3}% + }{}% +} +\fi% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@svnInfoToday} +% Returns the \Svn\ date in the form as |\today| does it. +% To do this, we set |\year|, |\month| and |\day| commands to the +% corresponding \Svn\ information, let |\svnToday| does its work, i.e.\ +% transforming the date into a language dependent string and reset +% |\year|, |\month| and |\day| to their previous value. +% +% \begin{macrocode} +\def\@svnInfoToday {% + \begingroup + \year =\@svnInfoYear + \month =\@svnInfoMonth + \day =\@svnInfoDay + \today + \endgroup +} +\def\@svnInfoMaxToday {% + \begingroup + \year =\svnInfoMaxYear + \month =\svnInfoMaxMonth + \day =\svnInfoMaxDay + \today + \endgroup +} + +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@svnInfoDefaults} +% This macro sets the default values. +% \begin{macrocode} +\def\@svnInfoDefaults {% + \@svnInfoYear =\year + \@svnInfoMonth =\month + \@svnInfoDay =\day + \ifthenelse{\isundefined{\svnInfoMaxYear}}{\def\svnInfoMaxYear{\the\year}}{} + \ifthenelse{\isundefined{\svnInfoMaxMonth}}{\def\svnInfoMaxMonth{\the\month}}{} + \ifthenelse{\isundefined{\svnInfoMaxDay}}{\def\svnInfoMaxDay{\the\day}}{} + \def\svnInfoFile{--sourcefile--}% + \def\svnInfoHeadURL{--head-url--}% + \def\svnInfoDate{\the\@svnInfoYear-\two@digits\@svnInfoMonth-% + \two@digits\@svnInfoDay}% + \def\svnInfoTime{--time--}% + \def\svnInfoRevision{--revision--}% + \ifthenelse{\isundefined{\svnInfoMinRevision}}{\def\svnInfoMinRevision{--minrevision--}}{}% + \ifthenelse{\isundefined{\svnInfoMaxRevision}}{\def\svnInfoMaxRevision{--maxrevision--}}{}% + \def\svnInfoOwner{--owner--}% + \def\svnInfoYear{\the\@svnInfoYear}% + \def\svnInfoMonth{\the\@svnInfoMonth}% + \def\svnInfoDay{\the\@svnInfoDay}% + \def\svnInfoLongDate{\@svnInfoToday}% + \def\svnInfoMaxToday{\@svnInfoMaxToday}% + \def\svnMaxToday{\@svnInfoMaxToday}% + \def\svnId{\svnInfoFile\ \svnInfoRevision\ \svnInfoTime\ \svnInfoOwner}% +} + +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@svnInfoFancyFoot} +% This defines the contents of the footline +% \begin{macrocode} +\def\@svnInfoFancyFoot {% + \if@svnInfoRevRange@ + \def\@svnInfoRevisionRange{{ (\svnInfoMinRevision : \svnInfoMaxRevision)}}% + \else + \def\@svnInfoRevisionRange{\relax}% + \fi + \if@svnInfoLong@ + \def\@svnInfoFancyInfo{{\footnotesize + \emph{Rev: \svnInfoRevision\@svnInfoRevisionRange, % + \svnInfoLongDate}}}% + \else + \def\@svnInfoFancyInfo{{\footnotesize + \emph{Rev: \svnInfoRevision\@svnInfoRevisionRange, % + \svnInfoDate}}}% + \fi + \def\@svnInfoFancyFile{{\footnotesize\emph{\svnInfoFile}}}% +% \end{macrocode} +% and set it for the \texttt{fancyheadings} package, +% package page style. +% \begin{macrocode} + \if@svnInfoDraft@ + \if@svnInfoUseFancy@ + \rfoot[\fancyplain{\@svnInfoFancyFile}{\@svnInfoFancyFile}]% + {\fancyplain{\@svnInfoFancyInfo}{\@svnInfoFancyInfo}}% + \lfoot[\fancyplain{\@svnInfoFancyInfo}{\@svnInfoFancyInfo}]% + {\fancyplain{\@svnInfoFancyFile}{\@svnInfoFancyFile}}% + \setlength{\footrulewidth}{0.4pt}% + \setlength{\plainfootrulewidth}{0.4pt}% + \fi + \fi +% \end{macrocode} +% for the \texttt{fancyhdr} package, +% \begin{macrocode} + \if@svnInfoDraft@ + \if@svnInfoUseFancyhdr@ + \if@twoside + \fancyfoot[LE,RO]{\@svnInfoFancyInfo}% + \fancyfoot[LO,RE]{\@svnInfoFancyFile}% + \fancyfoot[CO,CE]{\thepage}% + \renewcommand{\footrulewidth}{0.4pt}% + \fancypagestyle{plain}{% + \fancyfoot[LE,RO]{\@svnInfoFancyInfo}% + \fancyfoot[LO,RE]{\@svnInfoFancyFile}% + \fancyfoot[CO,CE]{\thepage}% + \renewcommand{\footrulewidth}{0.4pt}% + } + \else + \fancyfoot[L]{\@svnInfoFancyInfo}% + \fancyfoot[R]{\@svnInfoFancyFile}% + \fancyfoot[C]{\thepage}% + \renewcommand{\footrulewidth}{0.4pt}% + \fancypagestyle{plain}{% + \fancyfoot[L]{\@svnInfoFancyInfo}% + \fancyfoot[R]{\@svnInfoFancyFile}% + \fancyfoot[C]{\thepage}% + \renewcommand{\footrulewidth}{0.4pt}% + } + \fi + \fi + \fi +% \end{macrocode} +% for the \texttt{srcpage2} package, +% \begin{macrocode} + \if@svnInfoDraft@ +\if@svnInfoUseScrpage@ + \clearscrheadfoot% + \ohead{\headmark}% + \cfoot[\emph{\@svnInfoFancyInfo}]{\emph{\@svnInfoFancyInfo}}% + \ifoot[\@svnInfoFancyFile]{\@svnInfoFancyFile}% + \ofoot[\pagemark]{\pagemark}% + \pagestyle{scrheadings}% + \fi +\fi +% \end{macrocode} +% for the \texttt{eso-pic} package, +% \begin{macrocode} + \if@svnInfoDraft@ + \if@svnInfoUseEsofoot@ + \AddToShipoutPicture{% + \setlength{\unitlength}{1mm}% + \put(5,5){\tiny\svnInfoFile\quad\svnInfoRevision\quad\svnInfoDate% + \quad\svnInfoTime\quad\svnInfoOwner}% + } +\fi +\fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@svnInfoMargin} +% for the \texttt{margin} option. +% \begin{macrocode} +\def\@svnInfoMargin{ + \if@svnInfoDraft@ + \if@svnInfoNotPreamble@ + \if@svnInfoUseMargin@ + \expandafter\marginpar[% + {\raggedleft\tiny\svnInfoFile, \svnInfoRevision, % + \svnInfoDate, \svnInfoTime, \svnInfoOwner}% + ]{% + {\raggedright\tiny\svnInfoFile, \svnInfoRevision, % + \svnInfoDate, \svnInfoTime, \svnInfoOwner}% + }% +\fi +\fi +\fi +} +% \end{macrocode} +% +% \end{macro} +% +% Initialize the defaults +% \begin{macrocode} +\@svnInfoDefaults +% \end{macrocode} + +% At the start of the document, if we use the +% \texttt{fancyhdr} footline, we should set it here. +% \begin{macrocode} +\AtBeginDocument{% + \@svnInfoNotPreamble@true + \if@svnInfoDraft@ + \if@svnInfoUseFancy@ + \@svnInfoFancyFoot + \fi + \if@svnInfoUseFancyhdr@ + \@svnInfoFancyFoot + \fi + \if@svnInfoUseScrpage@ + \@svnInfoFancyFoot + \fi + \if@svnInfoUseEsofoot@ + \@svnInfoFancyFoot + \fi +\fi +} +% \end{macrocode} +% At the end of the document +% \begin{macrocode} +\AtEndDocument{% + \immediate\write\@mainaux{\string\gdef\string\svnInfoMinRevision{\svnInfoMinRevision}}% + \immediate\write\@mainaux{\string\gdef\string\svnInfoMaxRevision{\svnInfoMaxRevision}}% + \immediate\write\@mainaux{\string\gdef\string\svnInfoMaxDay{\svnInfoMaxDay}}% + \immediate\write\@mainaux{\string\gdef\string\svnInfoMaxMonth{\svnInfoMaxMonth}}% + \immediate\write\@mainaux{\string\gdef\string\svnInfoMaxYear{\svnInfoMaxYear}}% +} +% \end{macrocode} +%\subsection{The generic \texttt{\string\svnKeyword} command} +% \begin{macro}{\svnKeyword} +% |\svnKeyword| is the main construct. The single argument +% should be of the form |$|\meta{Keyword}|$| or +% |$|\meta{Keyword}:\meta{space}\meta{value}\meta{space}|$|, where +% \meta{Keyword} and \meta{value} must be non-empty as well as +% brace- and |\if|--|\fi|- balanced. \meta{space} is a single space +% (if more are present they will be subsumed into \meta{value}). If +% `|$empty$|', `|$generic$|', |$Time$| or ever become keywords, or +% if keywords containing |@| ever exist then we may have problems. +% \begin{macrocode} +\def\svnKeyword $#1${\svn@$#1: $} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\svnKeywordempty} +% If \meta{Keyword} is unexpanded then |\svnKeywordKeyword| is +% set to the macro |\svnKeywordempty|, which is initially empty. +% \begin{macrocode} +\let\svnKeywordempty\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\svn@} +% \begin{macro}{\svn@tmp} +% |\svn@| does the work for |\svnKeyword|. It takes two +% arguments, the first is the \meta{Keyword}'s name, the second is +% empty (in which case \meta{Keyword} was unexpanded) or +% \meta{value}, the expansion of \meta{keyword}. +% \begin{macrocode} +\def\svn@$#1: #2${% + \def\svn@tmp{#2}% +% \end{macrocode} +% \begin{macro}{\svn@suffix} +% If \param2 is empty, then the keyword was unexpanded and +% |\svn@suffix| is set to |@unexp|, otherwise we had an +% expanded keyword so |\svn@suffix| is set to |@exp|. +% \begin{macrocode} + \ifx\svn@tmp\@empty + \def\svn@suffix{@unexp}% + \else + \def\svn@suffix{@exp}% + \fi +% \end{macrocode} +% If |\svnKeyword@|\param1\meta{suffix} is defined then run it +% with arguments `\param1\param2', else run +% |\svnKeyword@generic@|\meta{suffix} (again with argument +% \param1\param2---by default this defines `|\svnKeyword|\meta{\param1}' to +% be \param2, or |\svnKeywordempty| in the unexpanded case). +% \begin{macrocode} + \@ifundefined{svnKeyword@#1\svn@suffix}% + {\@nameuse{svnKeyword@generic\svn@suffix}{#1}{#2}}% + {\@nameuse{svnKeyword@#1\svn@suffix}{#1}{#2}}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \subsubsection{Dealing with general \texttt{\string$Keyword\string$}s} +% \begin{macro}{\svnKeyword@generic@exp} +% When we see |\svnKeyword $KeyWord: $|, and +% |\svnKeyword@KeyWord@exp| is undefined, then we define the macro +% |\svnKeywordKeyWord| to be || using +% |\svnKeyword@generic@exp{KeyWord}{}|. +% \begin{macrocode} +\def\svnKeyword@generic@exp#1#2{% + \expandafter\svn@set\csname svnKeyword#1\endcsname$#2$% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\svnKeyword@generic@unexp} +% When we see |\svnKeyword $KeyWord$| and +% |\svnKeyword@KeyWord@unexp| is undefined, we define +% |\svnKeywordKeyWord| to be |\svnKeywordempty| using +% |\svnKeyword@generic@unexp{KeyWord}|. +% \begin{macrocode} +\def\svnKeyword@generic@unexp#1#2{% + \expandafter\global\expandafter\let\csname svnKeyword#1\endcsname\svnKeywordempty +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\svn@set} +% |\svn@set#1$#2$| defines the command in \param{1} to be \param{2} +% without the trailing `\verb*| : |' that the call to |\svn@| added. +% \begin{macrocode} +\def\svn@set#1$#2 : ${\gdef#1{#2}} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Dealing with the \texttt{\string$Date\string$} keyword} +% \begin{macro}{\svnKeyword@Date@unexp} +% \begin{macro}{\svnKeyword@LastChangedDate@unexp} +% \begin{macrocode} +\def\svnKeyword@Date@unexp#1#2{}% +\let\svnKeyword@LastChangedDate@unexp\svnKeyword@Date@unexp% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\svnKeyword@Date@exp} +% \begin{macro}{\svnKeyword@LastChangedDate@exp} +% \begin{macrocode} +\def\svnKeyword@Date@exp#1#2{% + \svn@parse@date$#2$% +}% +\let\svnKeyword@LastChangedDate@exp\svnKeyword@Date@exp +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\svn@parse@date} +% \begin{macrocode} +\if@svnInfoSVK@ + \def\svn@parse@date$#1-#2-#3T#4:#5:#6.#7${% + \@svnInfoDay =#3\relax% + \@svnInfoMonth=#2\relax% + \@svnInfoYear =#1\relax% + \def\svnInfoLongDate{\@svnInfoToday}% + \if@svnInfoToday@ + \year =\@svnInfoYear + \month =\@svnInfoMonth + \day =\@svnInfoDay + \fi +% \end{macrocode} +% We could add `GMT' to |\svnKeywordTime|. Or not bother. +% \begin{macrocode} + \def\svnInfoTime{#4:#5:#6}% + } +\else +\def\svn@parse@date$#1-#2-#3 #4:#5:#6 #7${% + + \@svnInfoDay =#3\relax% + \@svnInfoMonth=#2\relax% + \@svnInfoYear =#1\relax% + \def\svnInfoLongDate{\@svnInfoToday}% + \if@svnInfoToday@ + \year =\@svnInfoYear + \month =\@svnInfoMonth + \day =\@svnInfoDay + \fi + \def\svnInfoTime{#4:#5:#6}% + } +\fi +% \end{macrocode} +% \end{macro} + +% \subsubsection{Dealing with the \texttt{\string$Id\string$} keyword} +% \begin{macro}{\svnKeyword@Id@unexp} +% \begin{macrocode} +\def\svnKeyword@Id@unexp#1#2{}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\svnKeyword@Id@exp} +% \begin{macrocode} +\def\svnKeyword@Id@exp#1#2{% + \svn@parse@id$#2$ +}% +\def\svn@parse@id$#1 : ${% + \svnInfo $Id: svninfo.dtx 4705 2010-03-23 19:57:29Z brucker $ % +}% +% \end{macrocode} +% \end{macro} + +% \subsubsection{Dealing with the \texttt{\string$Author\string$} keyword} +% \begin{macro}{\svnKeyword@Author@unexp} +% \begin{macro}{\svnKeyword@LastChangedBy@exp} +% \begin{macrocode} +\def\svnKeyword@Author@unexp#1#2{}% +\let\svnKeyword@LastChangedBy@unexp\svnKeyword@Author@unexp% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\svnKeyword@Author@exp} +% \begin{macro}{\svnKeyword@LastChangedBy@exp} +% \begin{macrocode} +\def\svnKeyword@Author@exp#1#2{% + \svn@parse@Author$#2$ +}% +\def\svn@parse@Author$#1 : ${% + \def\svnInfoOwner{#1}% +}% +\let\svnKeyword@LastChangedBy\svnKeyword@Author@exp% +% \end{macrocode} +% \end{macro} +% \end{macro} + +% \subsubsection{Dealing with the \texttt{\string$Revision\string$} keyword} +% \begin{macro}{\svnKeyword@Revision@unexp} +% \begin{macro}{\svnKeyword@LastChangedRevision@unexp} +% \begin{macro}{\svnKeyword@Rev@unexp} +% \begin{macrocode} +\def\svnKeyword@Revision@unexp#1#2{}% +\let\svnKeyword@LastChangedRevision@unexp\svnKeyword@Revision@unexp% +\let\svnKeyword@Rev@unexp\svnKeyword@Revision@unexp% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\svnKeyword@Revision@exp} +% \begin{macro}{\svnKeyword@LastChangedRevision@exp} +% \begin{macro}{\svnKeyword@Rev@exp} +% \begin{macrocode} +\def\svnKeyword@Revision@exp#1#2{% + \svn@parse@Revision$#2$% +}% +\def\svn@parse@Revision$#1 : ${% + \def\svnInfoRevision{#1}% + \ifthenelse{\(\equal{\svnInfoMaxRevision}{--maxrevision--}\) % + \OR \(#1 > \svnInfoMaxRevision \)}{\def\svnInfoMaxRevision{#1}}{}% + \ifthenelse{\(\equal{\svnInfoMinRevision}{--minrevision--}\) % + \OR \( #1 < \svnInfoMinRevision \)}{\def\svnInfoMinRevision{#1}}{}% +}% +\let\svnKeyword@LastChangedRevision@exp\svnKeyword@Revision@exp% +\let\svnKeyword@Rev@unexp\svnKeyword@Revision@exp% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} + +% \subsubsection{Dealing with the \texttt{\string$HeadURL\string$} keyword} +% \begin{macro}{\svnKeyword@HeadURL@unexp} +% \begin{macrocode} +\def\svnKeyword@HeadURL@unexp#1#2{}% +\let\svnKeyword@URL@unexp\svnKeyword@HeadURL@unexp% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\svnKeyword@HeadURL@exp} +% \begin{macrocode} +\def\svnKeyword@HeadURL@exp#1#2{% + \svn@parse@HeadURL$#2$% +}% +\def\svn@parse@HeadURL$#1 : ${% + \def\svnInfoHeadURL{#1}% +}% +\let\svnKeyword@URL@exp\svnKeyword@HeadURL@exp% +% +% \end{macrocode} +% \end{macro} +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \centerline{That's the end} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \Finale +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \iffalse +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% The following stuff does not show up in the documentation of the package: +% svninfo.ins +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%<*ins> +\def\batchfile{svninfo.ins} +\input docstrip.tex + +\Msg{} +\Msg{***********************************************************} +\Msg{** Hello to the installation of the `svninfo' package.} +\Msg{** Version 0.7.4, March 22, 2010} +\Msg{***********************************************************} +\Msg{} + +\generate{ + \askforoverwritefalse +% \file{svninfo.ins}{\from{svninfo.dtx}{header,ins}} + \file{svninfo.sty}{\from{svninfo.dtx}{header,package}} + \usepreamble\empty + \usepostamble\empty + \file{svninfo.perl}{\from{svninfo.dtx}{perl}} + \file{svninfo.init}{\from{svninfo.dtx}{init}} + \file{svninfo.cfg}{\from{svninfo.dtx}{header,config}} +} + +\Msg{} +\Msg{***********************************************************} +\Msg{** Edit the file svninfo.cfg and set the default fancy headings package} +\Msg{** To finish the installation move the file `svninfo.sty' and} +\Msg{** svninfo.cfg to a place where LaTeX will find it.} +\Msg{** To Get the documentation: `latex svninfo.dtx'} +\Msg{** Happy TeXing} +\Msg{***********************************************************} +\Msg{} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% E N D of S V N I N F O . D T X +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\fi diff --git a/macros/latex/contrib/svninfo/svninfo.ins b/macros/latex/contrib/svninfo/svninfo.ins new file mode 100644 index 0000000000..7c3404f847 --- /dev/null +++ b/macros/latex/contrib/svninfo/svninfo.ins @@ -0,0 +1,90 @@ +%% +%% This is file `svninfo.ins', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% svninfo.dtx (with options: `header,ins') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from svninfo.ins. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file svninfo.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% `svninfo' package to use with LaTeX2e. +%% +%% This package is used to extract the revision and file information provided +%% by the Subversion revision control system. +%% +%% Copyright (C) 1995 Dr. Juergen Vollmer +%% Copyright (C) 2003-2010 Achim D. Brucker +%% License: +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1 of the License, or any later version. +%% +%% +%% $Id: svninfo.ins 4705 2010-03-23 19:57:29Z brucker $ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% \CheckSum{389} +%% \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 \~} + +\def\batchfile{svninfo.ins} +\input docstrip.tex + +\Msg{} +\Msg{***********************************************************} +\Msg{** Hello to the installation of the `svninfo' package.} +\Msg{** Version 0.7.4, March 23, 2010} +\Msg{***********************************************************} +\Msg{} + +\generate{ + \askforoverwritefalse + \file{svninfo.sty}{\from{svninfo.dtx}{header,package}} + \usepreamble\empty + \usepostamble\empty + \file{svninfo.init}{\from{svninfo.dtx}{init}} + \file{svninfo.cfg}{\from{svninfo.dtx}{header,config}} +} + +\Msg{} +\Msg{***********************************************************} +\Msg{** Edit the file svninfo.cfg and set the default fancy headings package} +\Msg{** To finish the installation move the file `svninfo.sty' and} +\Msg{** svninfo.cfg to a place where LaTeX will find it.} +\Msg{** To Get the documentation: `latex svninfo.dtx'} +\Msg{** Happy TeXing} +\Msg{***********************************************************} +\Msg{} +\endinput +%% +%% End of file `svninfo.ins'. diff --git a/macros/latex/contrib/svninfo/svninfo.pdf b/macros/latex/contrib/svninfo/svninfo.pdf new file mode 100644 index 0000000000..53fefdce8a Binary files /dev/null and b/macros/latex/contrib/svninfo/svninfo.pdf differ -- cgit v1.2.3