From 0712d6aa258c39076a89220dd0d7284bf5f00091 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 16 Jul 2007 15:58:40 +0000 Subject: svn-multi 1.3a (11jul07) git-svn-id: svn://tug.org/texlive/trunk@4604 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/svn-multi/README | 64 ++ Master/texmf-dist/doc/latex/svn-multi/example.pdf | Bin 37257 -> 41256 bytes .../doc/latex/svn-multi/example_chap1.tex | 32 +- .../doc/latex/svn-multi/example_main.tex | 20 +- .../texmf-dist/doc/latex/svn-multi/svn-multi.pdf | Bin 0 -> 281239 bytes Master/texmf-dist/doc/latex/svn-multi/svnkw.pdf | Bin 118018 -> 0 bytes Master/texmf-dist/source/latex/svn-multi/Makefile | 79 ++ .../source/latex/svn-multi/svn-multi.dtx | 1055 ++++++++++++++++++++ .../source/latex/svn-multi/svn-multi.ins | 71 ++ Master/texmf-dist/source/latex/svn-multi/svnkw.dtx | 556 ----------- Master/texmf-dist/source/latex/svn-multi/svnkw.ins | 56 -- .../texmf-dist/tex/latex/svn-multi/svn-multi.sty | 335 +++++++ Master/texmf-dist/tex/latex/svn-multi/svnkw.sty | 195 +--- 13 files changed, 1648 insertions(+), 815 deletions(-) create mode 100644 Master/texmf-dist/doc/latex/svn-multi/README create mode 100644 Master/texmf-dist/doc/latex/svn-multi/svn-multi.pdf delete mode 100644 Master/texmf-dist/doc/latex/svn-multi/svnkw.pdf create mode 100644 Master/texmf-dist/source/latex/svn-multi/Makefile create mode 100644 Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx create mode 100644 Master/texmf-dist/source/latex/svn-multi/svn-multi.ins delete mode 100644 Master/texmf-dist/source/latex/svn-multi/svnkw.dtx delete mode 100644 Master/texmf-dist/source/latex/svn-multi/svnkw.ins create mode 100644 Master/texmf-dist/tex/latex/svn-multi/svn-multi.sty diff --git a/Master/texmf-dist/doc/latex/svn-multi/README b/Master/texmf-dist/doc/latex/svn-multi/README new file mode 100644 index 00000000000..11fa5b30a08 --- /dev/null +++ b/Master/texmf-dist/doc/latex/svn-multi/README @@ -0,0 +1,64 @@ +-------------------------------------------------------------- + svn-multi (was svnkw) + version 1.3a, July 10th, 2007 +-------------------------------------------------------------- + +This package lets you typeset keywords of the version +control system Subversion inside your LaTeX files anywhere +you like. Unlike the very similar package 'svn' the usage of +multiple files for one LaTeX document is well supported. + +Copyright (C) 2006,2007 Martin Scharrer +E-mail: martin@scharrer-online.de +WWW: http://www.scharrer-online.de/latex/svn-multi/ + +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 Martin Scharrer. + +This work consists of the files svn-multi.dtx and svn-multi.ins +and the derived files svn-multi.sty and svnkw.sty. + + +Tiny example: +~~~~~~~~~~~~~ +Put the following Subversion keyword in all your LaTeX files of +your document: + +\svnid{$Id$} + +Subversion will expand it (set property svn:keyword to 'Id') and +then you can typeset the SVN information using + \svnauthor, \svnrev, \svndate, \svnhour, ... +which will hold the information of the latest comitted file +anywhere in your multi-file LaTeX document. + +Also per-file macros exist: + \svnfileauthor, \svnfilerev, ... +which hold the keyword values of the current file. + + +INSTALL: +~~~~~~~~ +From the .dtx file (if you don't get the .sty files directly): +================== +Unpack the zip file and run 'make'. +You also can do it manually: + [pdf]latex svn-multi.ins # for the style file + [pdf]latex svn-multi.dtx # for the documentation + [pdf]latex example-main.tex # for the example + +Place the two .sty files + svn-multi.sty # Package + svnkw.sty # Wrapper for backward compatibility +into your TEXMF tree, e.g. in + $TEXMF/tex/latex/svn-multi + diff --git a/Master/texmf-dist/doc/latex/svn-multi/example.pdf b/Master/texmf-dist/doc/latex/svn-multi/example.pdf index ffb2ac039de..870d6f8811f 100644 Binary files a/Master/texmf-dist/doc/latex/svn-multi/example.pdf and b/Master/texmf-dist/doc/latex/svn-multi/example.pdf differ diff --git a/Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex b/Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex index 9b06aed5c3e..6881ebe6ab6 100644 --- a/Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex +++ b/Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex @@ -7,25 +7,45 @@ \svnid{$Id: example_chap1.tex 14 2006-05-26 14:37:12Z johnd $} \chapter{Example Chapter} -Text ... \section{Version} \subsection*{This chapter} % \url is needed because there is an underscore in the name -% The package 'underscore' seems not to work properly, so the 'hyperref' +% The package 'underscore' seems not to work properly, so the 'hyperref' % package is used which is not the best solution. Avoid underscore in LaTeX filenames. -Filename: \url{\svnkw{Filename}}\\ +Filename: \svnnolinkurl{\svnkw{Filename}}\\ URL: \url{\svnkw{HeadURL}}\\ % Something like \href{\svnkw{HeadURL}}{Download} works also! -Last change:\\ +\textbf{Last change}\\ Revision: \svnfilerev\\ Date: \svnfiledate\\ +Year: \svnfileyear\\ +Time: \svnfilehour:\svnfileminute:\svnfilesecond\ \svnfiletimezone00\\ Author: \svnfileauthor\\ \subsection*{Whole document} -Last change:\\ +Filename: \svnnolinkurl{\svnmainfilename}\\ +URL: \url{\svnmainurl}\\ +\textbf{Last change}\\ Revision: \svnrev\\ Date: \svndate\\ +Year: \svnyear\\ +Time: \svnhour:\svnminute:\svnsecond\ \svntimezone00\\ Author: \svnauthor\\ - % [...] + +\section{Tests} +\svnRegisterRevision{14}{Test} + +Registered author name: \svnFullAuthor{\svnfileauthor}\\ +Registered revision name: \svnFullRevision{\svnfilerev}\\ +Registered author name (*): \svnFullAuthor*{\svnfileauthor}\\ +Registered revision name (*): \svnFullRevision*{\svnfilerev}\\ + +\subsubsection*{Behaviour if value is not registered:} +Not registered user name: \svnFullAuthor{someusername}\\ +Not registered revision name: \svnFullRevision{12}\\ +Not registered user name (*): \svnFullAuthor*{someusername}\\ +Not registered revision name (*): \svnFullRevision*{12}\\ + + diff --git a/Master/texmf-dist/doc/latex/svn-multi/example_main.tex b/Master/texmf-dist/doc/latex/svn-multi/example_main.tex index 9c82baab8cd..0ac69ca129b 100644 --- a/Master/texmf-dist/doc/latex/svn-multi/example_main.tex +++ b/Master/texmf-dist/doc/latex/svn-multi/example_main.tex @@ -1,5 +1,5 @@ \documentclass[12pt]{report} -\usepackage{svnkw} +\usepackage{svn-multi} % Version control information: \svnidlong {$HeadURL: file://somewhere/example_main.tex $} @@ -7,35 +7,47 @@ {$LastChangedRevision: 15 $} {$LastChangedBy: maryd $} \svnid{$Id: example_main.tex 15 2006-05-26 15:47:47Z maryd $} -% Don't forget to set the svn property 'svn:keywords' to +% Don't forget to set the svn property 'svn:keywords' to % 'HeadURL LastChangedDate LastChangedRevision LastChangedBy' or % 'Id' or both depending if you use \svnidlong and/or \svnid \usepackage{hyperref} +\usepackage{url} \usepackage{fancyhdr} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\footrulewidth}{0.4pt} \setlength{\headheight}{14.5pt} % This will display the last changed revision of the current chapter. -% Change \svnkw{LastChangedRevision} to \svnrev if you like to have the +% Change \svnkw{LastChangedRevision} to \svnrev if you like to have the % document revision. -\newcommand{\svnfooter}{Last Changed Rev: \svnkw{LastChangedRevision}} +\newcommand{\svnfooter}{Last Changed Rev: \svnkw{LastChangedRevision}} +\pdfinfo{% + /CreationDate (D:\svnpdfdate) +} \svnRegisterAuthor{johnd}{John Doe} \svnRegisterAuthor{maryd}{Mary Doe} +\svnRegisterRevision{15}{Version~1} +\listfiles \begin{document} \begin{titlepage} \vspace{8ex} {\huge Title\par} + \vspace{2ex} + {\large \noindent This is an example document for the \texttt{svn-multi} (aka + \texttt{svnkw}) package. Please also look at the LaTeX source code of this + document.} \vfill \flushleft\sffamily Version control information:\\ Head URL: \url{\svnkw{HeadURL}}\\ + Head URL: \svnnolinkurl{\svnkw{HeadURL}}\\ Last changed date: \svndate\\ Last changes revision: \svnrev\\ + Version: \svnFullRevision*{\svnrev}\\ Last changed by: \svnFullAuthor*{\svnauthor}\\ \end{titlepage} diff --git a/Master/texmf-dist/doc/latex/svn-multi/svn-multi.pdf b/Master/texmf-dist/doc/latex/svn-multi/svn-multi.pdf new file mode 100644 index 00000000000..166ed038a6b Binary files /dev/null and b/Master/texmf-dist/doc/latex/svn-multi/svn-multi.pdf differ diff --git a/Master/texmf-dist/doc/latex/svn-multi/svnkw.pdf b/Master/texmf-dist/doc/latex/svn-multi/svnkw.pdf deleted file mode 100644 index c1ec176d251..00000000000 Binary files a/Master/texmf-dist/doc/latex/svn-multi/svnkw.pdf and /dev/null differ diff --git a/Master/texmf-dist/source/latex/svn-multi/Makefile b/Master/texmf-dist/source/latex/svn-multi/Makefile new file mode 100644 index 00000000000..9938f54c67a --- /dev/null +++ b/Master/texmf-dist/source/latex/svn-multi/Makefile @@ -0,0 +1,79 @@ +# $Id: Makefile 628 2007-07-10 20:32:06Z martin $ + +PACKAGE=svn-multi +PACKFILES = ${PACKAGE}.dtx ${PACKAGE}.ins ${PACKAGE}.pdf example_main.tex \ + example_chap1.tex example.pdf Makefile README +TEXAUX = *.aux *.log *.glo *.ind *.idx *.out *.svn *.toc *.ilg *.gls *.hd +TESTDIR = tests +TESTS = $(patsubst %.tex,%,$(subst ${TESTDIR}/,,$(wildcard ${TESTDIR}/test?.tex ${TESTDIR}/test??.tex))) # look for all test*.tex file names and remove the '.tex' +TESTARGS = -output-directory ${TESTDIR} +GENERATED = ${PACKAGE}.pdf ${PACKAGE}.sty svnkw.sty example.pdf ${PACKAGE}.zip ${PACKAGE}.tar.gz ${TESTDIR}/test*.pdf + +RED = \033[01;31m +GREEN = \033[01;32m +WHITE = \033[00m + +.PHONY: all doc package clean fullclean example ${TESTS} + +all: package doc example +new: fullclean all + +doc: ${PACKAGE}.pdf + +package: ${PACKAGE}.sty + +${PACKAGE}.pdf: ${PACKAGE}.dtx ${PACKAGE}.sty + pdflatex ${PACKAGE}.dtx + pdflatex ${PACKAGE}.dtx + pdflatex ${PACKAGE}.dtx + makeindex -s gind.ist -o ${PACKAGE}.ind ${PACKAGE}.idx + makeindex -s gglo.ist -o ${PACKAGE}.gls ${PACKAGE}.glo + pdflatex ${PACKAGE}.dtx + pdflatex ${PACKAGE}.dtx + +${PACKAGE}.sty: ${PACKAGE}.dtx ${PACKAGE}.ins + yes | latex ${PACKAGE}.ins + +clean: + rm -f ${TEXAUX} $(addprefix ${TESTDIR}/, ${TEXAUX}) + +fullclean: + rm -f ${TEXAUX} $(addprefix ${TESTDIR}/, ${TEXAUX}) ${GENERATED} *~ *.backup + +example: example.pdf + +example.pdf: example_main.tex example_chap1.tex ${PACKAGE}.sty + pdflatex $< + pdflatex $< + mv example_main.pdf $@ + +nsexample: namespace_example.tex $(wildcard namespace*.tex) + pdflatex $< + pdflatex $< + +zip: package doc example ${PACKAGE}.zip + +${PACKAGE}.zip: ${PACKFILES} + grep -q '\* Checksum passed \*' svn-multi.log + cd .. && zip ${PACKAGE}/$@ $(addprefix ${PACKAGE}/, ${PACKFILES}) + +tar.gz: ${PACKAGE}.tar.gz + +${PACKAGE}.tar.gz: + tar -czf $@ ${PACKFILES} + +# Make sure TeX finds the input files in TESTDIR +tests ${TESTS}: export TEXINPUTS:=${TEXINPUTS}:${TESTDIR} + +tests: package + @echo "Running tests: ${TESTS}:" + @${MAKE} -e -i --no-print-directory ${TESTS} \ + TESTARGS="-interaction=batchmode -output-directory=${TESTDIR}"\ + > /dev/null + +${TESTS}: % : ${TESTDIR}/%.tex package + @if (pdflatex ${TESTARGS} $<) && (pdflatex ${TESTARGS} $<); \ + then echo -e "${GREEN}$@ succeeded${WHITE}" >&2; \ + else echo -e "${RED}$@ failed!!!!!!${WHITE}" >&2; fi + + diff --git a/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx b/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx new file mode 100644 index 00000000000..467d21b9367 --- /dev/null +++ b/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx @@ -0,0 +1,1055 @@ +% \iffalse meta-comment +% Copyright (C) 2006-2007 by Martin Scharrer +% http://www.scharrer-online.de/latex/ +% ----------------------------------------------------------------- +% +% 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 Martin Scharrer. +% +% This work consists of the files svn-multi.dtx and svn-multi.ins +% and the derived files svn-multi.sty and svnkw.sty. +% $Id: svn-multi.dtx 628 2007-07-10 20:32:06Z martin $ +% \fi +% \iffalse +%<*driver> +\ProvidesFile{svn-multi.dtx} +% +%%% DTX Id: $Id: svn-multi.dtx 628 2007-07-10 20:32:06Z martin $ +%\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%\ProvidesPackage{svn-multi} +%<*package|driver> + [2007/07/10 v1.3a SVN Keywords for multi-file LaTeX documents] +% +%\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%\ProvidesPackage{svnkw} +% [2007/07/10 v1.3a Backward compatibility wrapper for svn-multi] +%\RequirePackage{svn-multi}[2007/07/10] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{svn-multi} +\usepackage{ifpdf} +\ifpdf + % use hypdoc if you have it, hyperref else + %\usepackage[hyperfootnotes=false]{hyperref} + \usepackage{hypdoc} +\else\let\url=\texttt\fi +\usepackage{xspace} +\newcommand{\ie}{i.e.\@\xspace} +\newcommand{\eg}{e.g.\@\xspace} + +\iffalse % crossreference of macros in documentation +\begingroup +\catcode`\*=0 +\catcode`\\=12 +*gdef*removeslash\#1 #2END{#1#2} +*endgroup + +\makeatletter + % link \cs to macro definitions + \let\origmacro\macro + \let\origendmacro\endmacro + \let\origStopEventually\StopEventually + \let\origPrintDescribeMacro\PrintDescribeMacro + + \renewenvironment{macro}[1]{% + \edef\macroname{\expandafter\removeslash\detokenize{#1}END} + \hypertarget{\macroname}{} + \origmacro#1} + {\origendmacro} + + \DeclareRobustCommand{\cs}[1]{\hyperlink{Desc@#1}{\texttt{\textbackslash#1}}} + + \def\StopEventually#1{\origStopEventually{#1}% + \DeclareRobustCommand{\cs}[1]{\hyperlink{##1}{\texttt{\textbackslash##1}}} + } + + \def\PrintDescribeMacro#1{% + \edef\macroname{\expandafter\removeslash\detokenize{#1}END}% + \raisebox{11pt}[11pt]{\hypertarget{Desc@\macroname}{}} + \origPrintDescribeMacro{#1} + } +\fi + +\EnableCrossrefs +%\DisableCrossrefs +\CodelineIndex +%\PageIndex +\RecordChanges +%\OnlyDescription +\begin{document} + \DocInput{svn-multi.dtx} + \PrintChanges + \PrintIndex +\end{document} +% +%<*package> +% \fi +% +% \CheckSum{573} +% +% {\makeatother +% \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{v1.0}{2006/05/27}{Initial version} +% \changes{v1.1}{2006/06/08}{Added macros to extract and typeset date/time +% informations. Added macros to set and typeset main URL or filename.} +% \changes{v1.2}{2007/06/22}{Renamed packet from \texttt{svnkw} to +% \texttt{svn-multi} to match CTAN directory. Wrapper file +% \texttt{svnkw.sty} is provided for backward compatibility.} +% \changes{v1.3}{2007/07/01}{Added verbatim support. Keywords can now contain +% special character like \texttt{\_ \^{} \$ \% \& \textbackslash}. Rewrote +% keyword check macros to work with verbatim code. \texttt{\textbackslash +% nofiles} is now obeyed.} +% \changes{v1.3a}{2007/07/10}{Fixed issue with unwanted spaces generated by +% \cs{svnid}, \cs{svnidlong} and \cs{svnkwsave}, \eg when used in a file which is +% included with \cs{input}} +% +% \GetFileInfo{svn-multi.sty} +% +% \DoNotIndex{\newcommand,\newenvironment,\AtBeginDocument,\AtEndDocument} +% \DoNotIndex{\def,\let,\edef,\xdef,\item,\space,\write,\jobname,\relax,\!} +% \DoNotIndex{\closeout,\csname,\DeclareRobustCommand,\else,\empty,\newwrite} +% \DoNotIndex{\endcsname,\expandafter,\fi,\Hurl,\hyper@normalise,\@ifnextchar} +% \DoNotIndex{\ifnum,\@ifundefined,\ifx,\immediate,\InputIfFileExists,\ } +% \DoNotIndex{\newcount,\noexpand,\openout,\PackageWarning,\@percentchar} +% \DoNotIndex{\@sanitize,\@makeother,\@iwsvn,\%,\_,\&,\^,\$,\#,\ ,\\,\if@filesw} +% \DoNotIndex{\gdef,\begingroup,\endgroup,\catcode} +% +% +% \title{The \textsf{svn-multi} package\thanks{This document +% corresponds to \textsf{svn-multi}~\fileversion, dated \filedate.} +% \\also known as \textsf{svnkw}} +% \author{Martin Scharrer \\ \url{martin@scharrer-online.de} \\ +% \url{http://www.scharrer-online.de/latex/svn-multi}} +% +% \ifpdf +% \hypersetup{ +% pdfauthor={Martin Scharrer }, +% pdftitle={The svn-multi package also known as svnkw}, +% pdfsubject={Documentation of LaTeX package svn-multi which allows the +% typesetting of Subversion keywords in multi-file LaTeX documents}, +% pdfkeywords={svn-multi, svnkw, LaTeX, Subversion, keywords, Version +% Control, Id} +% } +% \fi +% \maketitle +% +% \section{Package naming} +% The authors first choice for this package was |svnkw| but the CTAN +% maintainer suggested a more descriptive name and put the package in the +% |svn-multi|\footnote{CTAN: +% \url{http://www.ctan.org/tex-archive/macros/latex/contrib/svn-multi/}} +% directory. In this version the style file is renamed to |svn-multi|, but a +% |svnkw| dummy style file is still provided for backward compatibility. +% +% \section{Introduction} +% This package lets you typeset keywords of the version control system Subversion\footnote +% {Subversion homepage: \url{http://subversion.tigris.org/}} (svn), which is the successor of the popular CVS, +% inside your \LaTeX{} files anywhere you like. +% Unlike the very similar package +% |svn|\footnote{CTAN: +% \url{http://www.ctan.org/tex-archive/macros/latex/contrib/svn/}} the usage of +% multiple files for one \LaTeX{} document is well supported. The package +% acquires the keywords of the last changed file and provides them to the user +% through macros. The package has to read all keywords of all files first and +% writes the most recent values in an auxiliary file with an `.svn' +% extention. This file is read back at the next \LaTeX{} run which introduces a +% delay like by the table of contents. The standard \LaTeX{} switch |\nofiles| +% can be used to suppress the file generation. Macros to typeset the keywords +% of the current |include|d or |input|ed \LaTeX{} file are also provided. +% +% +% \section{Usage} +% +% \subsection{Including of the Subversion keywords} +% To include your Subversion Id keywords use \cs{svnid} or \cs{svnidlong}. +% This macros should be written very +% early in each file, \ie in the preamble of the main document soon after +% |\documentclass| and |\usepackage{svn-multi}| (or, outdated, +% |\usepackage{svnkw}|) and as first in \emph{every} |\include|d +% subfile before the |\chapter| macro. They do not create any output. +% See section~\ref{sec:kwaccess} to learn how to typeset the keyword values. +% +% \DescribeMacro{\svnid} +% Macro for the svn Id keyword. +% Write the macro as |\svnid{$||Id$}| into your \LaTeX{} files. A trailing colon +% with spaces after the |Id| is also valid but \textbf{everything else} except +% a valid Subversion string will cause a \TeX{} parse error. +% Don't forget to set the subversion property |svn:keywords| of the files +% to at least `|Id|'. Subversion will expand it at the next commit. +% Please note that because the value is read verbatim the macro should exactly be +% written like above. Spaces, newlines or comments between |\svnid| and +% the \{ will lead to \TeX{} parse errors. +% +% \DescribeMacro{\svnidlong} +% Macro for a ``long Id''. +% Saves similar values like in `|Id|' but from the keywords +% |HeadURL|, |LastChangedDate|, |LastChangedRevision| and |LastChangedBy|. +% The usage of \cs{svnid} or \cs{svnidlong} is a matter of taste. The second is +% more readable inside the code and results in a nicer date and a full URL, +% not only the filename. Both can also be used together. +% +% Write this macro like this (order of arguments not meaningfull)\\[2ex] +% |\svnidlong|\\ +% |{$||HeadURL$}|\\ +% |{$||LastChangedDate$}|\\ +% |{$||LastChangedRevision$}|\\ +% |{$||LastChangedBy$}|\\[2ex] +% in your files and set the subversion +% property |svn:keywords| of them +% to\\`|HeadURL LastChangedDate LastChangedRevision LastChangedBy|'. +% +% Please note that the arguments are read verbatim. Special precaution are +% taken to allow spaces, newlines and comments direct after the |\svnidlong| +% and after each of the four arguments, just in case someone need this. +% In fact everything not inside braces \{ \} is ignored. +% +% The two macros above are sufficient for the operation of |svn-multi| but +% the following macros are provided for additional or alternative keyword +% handling. +% +% \DescribeMacro{\svn} +% \DescribeMacro{\svn*} +% This macro let you typeset svn keywords directly. The only argument is +% the svn keyword in the usual dollars. The dollars will be stripped +% and the rest is typeset as normal text. The star version strips also the +% space before the last dollar. +% This macro alone was the very first version of |svnkw| and is still included +% for fast and simple keyword typesetting. +% +% \DescribeMacro{\svnkwsave} +% This macro lets you include and save any keyword you like. The syntax is +% |\svnkwsave|\{\$\meta{keyword}\$\}. The keyword can be already expanded or +% not (no value and only ``|:|'' or nothing after the key name). This macro is +% also used internally and does not create any output. +% Please note that the argument is read verbatim and that there should be no +% space between the macro and the argument's left brace. +% +% \subsection{Typesetting the keyword values}\label{sec:kwaccess} +% The following macros can be used to typeset the keyword values anywhere in +% the document. Please note that note all \LaTeX{} fonts have all special +% characters, \eg `\_' is not provided in the standard roman font. To proper +% typeset filename and URL containing these letters you can use either +% texttyper font (|\texttt|) or use |{\urlstyle{rm}\svnnolinkurl{...}}| which +% needs the |hyperref| package. +% +% Like already mentioned |svn-multi| knows two groups of keywords. The first +% group contains of the keywords for the whole document which hold the values +% of the most recent committed file, the second contains of the \emph{current} +% or \emph{file local} keywords, \eg the keywords of the current file. +% +% \DescribeMacro{\svnrev} +% \DescribeMacro{\svndate} +% \DescribeMacro{\svnauthor} +% These macros hold the keyword values of the whole document, \ie of the +% most recent revision. They can be used everywhere in every file of the +% \LaTeX{} document, after |\usepackage{svn}| of course. Please see +% section~\ref{sec:date} how to typeset parts of the date. +% +% \DescribeMacro{\svnfilerev} +% \DescribeMacro{\svnfiledate} +% \DescribeMacro{\svnfileauthor} +% These macros hold the keyword values of the current \LaTeX{} file, but +% only if it contains a \cs{svnid} or \cs{svnidlong} macro. Otherwise +% the macros hold still the values of the last file. Please see +% section~\ref{sec:date} how to typeset parts of the date. See \cs{svnkw} below +% for all other keywords. +% +% \DescribeMacro{\svnmainurl} +% \DescribeMacro{\svnmainfilename} +% The macro |\svnmainurl| and |\svnmainfilename| hold the URL and the filename +% of the main \LaTeX{file} as long the keywords |HeadURL| or |Id| were used in +% it, respectively. +% These can be used to typeset this information anywhere in the document +% which might be more descriptive as the name of the current file (which can +% be typeset with |\svnkw{HeadURL}| or |\svnkw{Filename}| after \cs{svnid} or +% \cs{svnidlong}, respectively). +% +% \DescribeMacro{\svnsetmainfile} +% This will declare the current file as the main LaTeX +% file by defining the above macros. It will automatically be called at the +% end of the preamble so the user normally doesn't have to use it by him- or +% herself as long it isn't needed in the preamble. \par +% Please note that this macro changes the definition of |\svnmainurl| and +% |\svnmainfilename| directly without going over the auxiliary file. Calling +% it in several files will make this two macros inconsistent. +% +% \DescribeMacro{\svnkw} +% All keywords saved with \cs{svnid}, \cs{svnidlong} or \cs{svnkwsave} can be typeset +% by this macro which is a holdover of pare-multi-file times of this package. +% It takes one argument which must be a subversion keyword name. It +% then returns the current value of this keyword or nothing (|\relax|) when +% the keyword was not set yet. +% Examples:\\ +% \indent\indent |\textsl{Revision: \svnkw{Revision}}|\\ +% \indent\indent |URL: \url{\svnkw{HeadURL}}|\\ +% In the second example |\url| (|hyperref| package) is used to add a +% hyperlink and to avoid problems with underscores (|_|) inside the URL. +% |svn-multi| is also providing a macro \cs{svnnolinkurl} which works like |\url| +% but doesn't adds an hyperlink. See the description of this macro for more +% details. +% +% If the given keyword doesn't exists a package warning is given to allow +% spelling errors to be tracked down. This doesn't work well when \cs{svnkw} +% is used inside |\url|. In this case the +% warning code will be typeset(!) verbatim into the document by |\url|. +% +% \DescribeMacro{\svnkwdef} +% This macro is used to define the keyword values, \ie +% \cs{svnkwdef}\marg{keyword}\marg{value}. This is normally only +% called internally but could be used by the user to override single keywords. +% The values can then be typeset by \cs{svnkw}. +% Note that this macro has no influence on the calculation of the latest +% revision. +% +% Note that for \cs{svnkw} and \cs{svnkwdef} all different names for one keyword +% are valid and result in the access of the same variable. So \eg subversion +% treats |Rev|, |Revision| and |LastChangedRev| the same way and so does this +% macros. You can \eg say |\svnkwdef{Rev}{123}| and then typeset it with +% |\svnkw{Revision}| or |\svnkw{LastChangedRev}| if you like. +% +% \subsubsection{Accessing Date Values}\label{sec:date} +% \DescribeMacro{\svnfileyear} +% \DescribeMacro{\svnfilemonth} +% \DescribeMacro{\svnfileday} +% \DescribeMacro{\svnfilehour} +% Whenever the date information is read, \ie by \cs{svnidlong}, \cs{svnid}, +% |\svnkwsave{Date}| or |\svnkwsave{LastChangedDate}|, the following macros are +% set to the appropriate date parts for the current file (the |\svnfile...| +% versions) and for the whole document. +% +% \iffalse Put here and not above to avoid 'to many floats' error. \fi +% \DescribeMacro{\svnfileminute} +% \DescribeMacro{\svnfilesecond} +% \DescribeMacro{\svnfiletimezone} +% Please note that the hour and timezone are dependend on the keyword which +% defines the date informations. The hour will be in UTC aka Zulu-time, \ie +% timezone +0000, when the date comes from the |Id| keyword. +% \iffalse Put here and not above to avoid 'to many floats' error. \fi +% \DescribeMacro{\svnyear} +% \DescribeMacro{\svnmonth} +% \DescribeMacro{\svnday} +% \DescribeMacro{\svnhour} +% Otherwise the hour and timezone will be in local time. +% To avoid confusion the |Id| and |Date|/|LastChangedDate| keywords, \eg +% \cs{svnid} and \cs{svnidlong}, should not be intermixed and/or the timezone +% should always be typeset together with the time. +% +% \iffalse Put here and not above to avoid 'to many floats' error. \fi +% \DescribeMacro{\svnminute} +% \DescribeMacro{\svnsecond} +% \DescribeMacro{\svntimezone} +% Please also note that the timezone macros only hold the sign and the first +% two digits of the timezone. This is needed to define \cs{svnpdfdate}. The last +% two digits are always `00' anyway. If you need full ISO timezone write +% |\svnfiletimezone00| or |\svntimezone00|. +% +% \vspace{7ex} +% +% \DescribeMacro{\svnpdfdate} +% Returns the last changed date of the whole document in a format needed for +% |\pdfinfo|. Can be used like this: +% |\pdfinfo{ /CreationDate (D:\svnpdfdate) }|, to set the PDF creation date to +% the last changed date if you use |pdflatex| to compile your \LaTeX{} document. +% +% \subsection{Using full author names} +% If you like to have the full author\footnote{This means subversion authors, +% \eg the persons who commit changes into the svn repository.} +% names, not only the usernames, in your +% document you can use the following macros. First you have to register all +% authors of the document with \cs{svnRegisterAuthor} and then you can write +% \eg |\svnFullAuthor{\svnauthor}| or |\svnFullAuthor{\svnfileauthor}|. +% +% \DescribeMacro{\svnRegisterAuthor} +% The usage is \cs{svnRegisterAuthor}\marg{username}\marg{full name} which +% registers \meta{full name} as full name for \meta{username}. +% +% \DescribeMacro{\svnFullAuthor} +% \DescribeMacro{\svnFullAuthor*} +% Takes the username as argument and returns the full name if it was +% registered first with \cs{svnRegisterAuthor}, otherwise it returns the given +% username. The star version returns the username in parentheses after the +% full name. +% +% \subsection{Using full revision names} +% Like the author's also revision names/tags can be registered and used later. +% This macros were implemented on user request and have the drawback +% that you have to guess the next revision number of your document in order +% to get correct results when you like to tag the to-be-checked-in revision. +% Please note that this has nothing to do with the normal subversion tagging. +% +% \DescribeMacro{\svnRegisterRevision} +% The usage is \cs{svnRegisterRevision}\marg{revision number}\marg{tag name} +% which registers \meta{tag name} as tag name for \meta{revision number}. +% +% \DescribeMacro{\svnFullRevision} +% \DescribeMacro{\svnFullRevision*} +% Takes a \marg{revision number} (\ie |\svnrev|, |\svnfilerev| or a number) +% as argument and returns the full name if it was registered first with +% \cs{svnRegisterRevision}, otherwise it returns ``Revision \meta{revision +% number}''. +% The star version returns also the revision number leaded by `r' in parentheses +% after the tag name, \eg |Name (r123)|. +% +% \subsection{Verbatim URLs with and without hyperlinks} +% \DescribeMacro{\svnnolinkurl} +% This macro allows you to write |\svnnolinkurl{\svnkw{HeadURL}}| and get +% the Head URL typeset verbatim. However |\url{\svnkw{HeadURL}}| (|hyperref| +% package) gives you the same result with hyperlinked. Both macros require +% the |hyperref| package which is not automatically loaded by |svn-multi|. +% Please load it manually when you like to use \cs{svnnolinkurl}. +% +% Since v1.3 all keywords are read and typeset verbatim so this macro isn't +% this important anymore. However together with |hyperref|s |\urlstyle| macro +% it can be used to have keyword values with special characters in roman font, +% which normaly doesn't hold letters like `\_'. +% +% Please note that you can't use |hyperref|s |\nolinkurl| because it won't +% expand \cs{svnkw}. +% +% +% +% \StopEventually{} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \section{Implementation} + +% \begin{macro}{\svn} +% \begin{macro}{\svn*} +% After *-testing, the intermediate macros |\svn@s| and |\svn@n| are called to +% strip the |{ }| from |\svn|[|*|]|{$...$}| and to remove the |*|. Then the +% actual macros are called to strip the dollars with or without the space +% before the last dollar. +% \changes{v1.2}{2007/06/22}{Added star version. Normal version was not +% changed to not break existing documents with user defined keywords without +% leading space.} +% \begin{macrocode} +\newcommand{\svn}{\@ifnextchar{*}{\svn@s}{\svn@n}} +\def\svn@n#1{\@svn@n#1} +\def\svn@s*#1{\@svn@s#1} +\def\@svn@n$#1${#1} +\def\@svn@s$#1 ${#1} +% \end{macrocode} +% \end{macro} +% \end{macro} + +% \subsection{Definition of init values} +% \begin{macrocode} +% Init values +\def\svnrev{0} \def\svnfilerev{0} \def\@svn@rev{0} +\def\svndate{} \def\svnfiledate{} \def\@svn@date{} +\def\svnauthor{} \def\svnfileauthor{} \def\@svn@author{} +\def\svnyear{0} \def\svnfileyear{0} \def\@svn@year{0} +\def\svnmonth{0} \def\svnfilemonth{0} \def\@svn@month{0} +\def\svnday{0} \def\svnfileday{0} \def\@svn@day{0} +\def\svnhour{0} \def\svnfilehour{0} \def\@svn@hour{0} +\def\svnminute{0} \def\svnfileminute{0} \def\@svn@minute{0} +\def\svnsecond{0} \def\svnfilesecond{0} \def\@svn@second{0} +\def\svntimezone{0} \def\svnfiletimezone{0} \def\@svn@timezone{0} +\def\svnmainurl{NOT SET}\def\svnmainfilename{NOT SET} +% \end{macrocode} +% + +% \subsection{Id macros} +% \subsubsection{Normal Id} +% \begin{macro}{\svnid} +% Calls \cs{svnkwsave} with |\@svnidswtrue| so that the Id keyword will be +% parsed at the end of \cs{svnkwsave}. +% \begin{macrocode} +\newcommand*{\svnid}{% +\@svnidswtrue +\svnkwsave +} +\newif\if@svnidsw +\@svnidswfalse +% \end{macrocode} +% \end{macro} +% + +% \begin{macro}{\svn@scanId} +% Scans svn Id (after it got parsed by \cs{svnkwsave}). +% Awaits only Id value without leading `|Id:|' and a trailing |\relax| as end +% marker. +% It calls \cs{@svn@scandate} to extract the date informations and +% \cs{@svn@updateid} to update global Id values and also sets the appropriate +% keywords. +% \begin{macrocode} +\def\svn@scanId#1 #2 #3 #4 #5\relax{% +% #1 is filename, #2 is revision, #3 is date (JJJJ-MM-DD), +% #4 is time (HH:MM:SST), #5 is author (username) +\@svn@scandate{#3 #4}% +\@svn@updateid{#2}{#3 #4}{#5}% +\svnkwdef{Filename}{#1}% +\svnkwdef{Date}{#3 #4}% +\svnkwdef{Revision}{#2}% +\svnkwdef{Author}{#5}% +} +% \end{macrocode} +% \end{macro} +% + +% \begin{macro}{\@svn@updateid} +% We first define the expanded arguments to variables for the user. +% The expansion is needed because the arguments content is mostly generic like +% |\svn@key| and |\svn@value| which can change very soon after this macro. +% \begin{macrocode} +\def\@svn@updateid#1#2#3{% #1 = rev, #2 date, #3 author (username) +\xdef\svnfilerev{#1}% +\xdef\svnfiledate{#2}% +\xdef\svnfileauthor{#3}% +% \end{macrocode} +% Then we check if the revision is non-empty (not yet expanded by +% subversion?) and larger then the current maximum value |\@svn@rev|. +% If yes we save all value to save them in the .svn-file later. +% \begin{macrocode} +\ifx\svnfilerev\empty\else +\ifnum\@svn@rev<\svnfilerev +\xdef\@svn@rev{#1}% +\xdef\@svn@date{#2}% +\xdef\@svn@author{#3}% +\xdef\@svn@year{\svnfileyear}% +\xdef\@svn@month{\svnfilemonth}% +\xdef\@svn@day{\svnfileday}% +\xdef\@svn@hour{\svnfilehour}% +\xdef\@svn@minute{\svnfileminute}% +\xdef\@svn@second{\svnfilesecond}% +\xdef\@svn@timezone{\svnfiletimezone}% +\else\fi +\fi +} +% \end{macrocode} +% \end{macro} +% + +% \subsubsection{Long Id} +% \begin{macro}{\svnidlong} +% We clear the keyword value first to reduce the risk though bad user input. +% \begin{macrocode} +\newcommand{\svnidlong}{% +\svnkwdef{HeadURL}{}% +\svnkwdef{LastChangedDate}{}% +\svnkwdef{LastChangedRevision}{0}% +\svnkwdef{LastChangedBy}{}% +% \end{macrocode} +% The catcodes are changed by \cs{svn@catcodes} to allow \TeX-special characters +% inside the keywords. +% The braces \{ \} are changed to allow comments between the arguments. +% \cs{svnidlong@readargsfull} is called to read the arguments. +% \begin{macrocode} +\begingroup +\svn@catcodes +\catcode`\{=12 +\catcode`\}=12 +\svnidlong@readargsfull +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svn@catcodes} +% Changes all \TeX-special character to category ``other''. The newline aka +% return is changed to category ``ignore'' so line breaks are not taken as +% part of the verbatim arguments. +% \begin{macrocode} +\def\svn@catcodes{% +\catcode`\%=12 +\catcode`\_=12 +\catcode`\^=12 +\catcode`\$=12 +\catcode`\&=12 +\catcode`\#=12 +\catcode`\~=12 + %%\catcode`\ =10 +\catcode`\\=12 +\catcode`\^^M=9 +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnidlong@readargsfull} +% Reads all four arguments of \cs{svnidlong} and passes them to +% \cs{svnidlong@readargs}. The normal argument braces are changed to category +% ``other'' and put into the macros parameter text to remove all code between +% them. This is done to avoid problems with comments direct after one of the +% arguments. Because the braces are now non-special the parentheses are made +% to a local replacement. +% +% \begin{macrocode} +\begingroup +\catcode`\{=12\catcode`\}=12 +\catcode`\(=1\catcode`\)=2 +\gdef\svnidlong@readargsfull#1{#2}#3{#4}#5{#6}#7{#8}(% + \svnidlong@readargs(#2)(#4)(#6)(#8)% +) +\endgroup +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnidlong@readargs} +% Calls sub macro for all four arguments and ends the catcode changes made +% by \cs{svnidlong}. +% \begin{macrocode} +\def\svnidlong@readargs#1#2#3#4{% +\svnkwsave@read #1\relax +\svnkwsave@read #2\relax +\svnkwsave@read #3\relax +\svnkwsave@read #4\relax +\endgroup +% \end{macrocode} +% Now the update macros for date and id are called. +% \begin{macrocode} +\ifx\svnkwLastChangedDate\empty +\else\@svn@scanlongdate{\svnkwLastChangedDate}\fi +\@svn@updateid{\svnkw{LastChangedRevision}}{\svnkw{LastChangedDate}} +{\svnkw{LastChangedBy}}% +\ignorespaces +}% +% \end{macrocode} +% \end{macro} + +% \subsection{KeyWord Macros} +% \begin{macro}{\svnkwsave} +% Save macro. Takes a dollar wrapped keyword string, reads it though +% \cs{svn@readkw} and saves it using \cs{svnkwdef}. +% \begin{macrocode} +\def\svnkwsave{% +\begingroup +\svn@catcodes +\svnkwsave@readargs +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnkwsave@readargs} +% Reads full argument, calls parse submacro and ends catcode changes. +% If \cs{svnkwsave} was called by \cs{svnid} scans the id keyword by calling the +% scan macro. +% \begin{macrocode} +\gdef\svnkwsave@readargs#1{% +\svnkwsave@read#1\relax +\endgroup +\if@svnidsw + \ifx\svnkwId\empty + \else + \expandafter + \svn@scanId\svnkwId\relax + \@svnidswfalse + \fi +\fi +\ignorespaces +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnkwsave@read} +% Reads the full keyword and strips the dollars. +% \begin{macrocode} +\begingroup +\catcode`\$=12 +\gdef\svnkwsave@read $#1$\relax{% + \svn@checkcolon#1:\relax +} +\endgroup +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnkwsave@parse} +% Parse the keyword and save it away. +% \begin{macrocode} +\begingroup +\catcode`\$=11 +\gdef\svnkwsave@parse$#1:#2${% +\expandafter\xdef\csname svnkw#1\endcsname{#2}} +\endgroup +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnkwdef} +% First we check if there is a `setter'-macro for the keyword called +% \cs{svnkwdef@}\meta{keyword}. +% \begin{macrocode} +\newcommand{\svnkwdef}[2]{% +\@ifundefined{svnkwdef@#1} +% \end{macrocode} +% If not we call the general macro \cs{svnkwdef@}. +% \begin{macrocode} +{\svnkwdef@{#1}{#2}} +% \end{macrocode} +% If yes we just call it with the value as argument. +% \begin{macrocode} +{\csname svnkwdef@#1\endcsname{#2}}% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnkwdef@} +% This macro defines the second argument under \cs{svnkw}\meta{1st argument}. +% The |\xdef| is used to expand the content first (needed for internal use) +% and make the definition globally. +% \begin{macrocode} +\newcommand{\svnkwdef@}[2] +{\expandafter\xdef\csname svnkw#1\endcsname{#2}} +% \end{macrocode} +% Example: |\svnkwdef{Revision}{23}| will define |\svnkwRevision| as 23. +% \end{macro} + +% \begin{macro}{\svnkwdef@Rev} +% \begin{macro}{\svnkwdef@Author} +% \begin{macro}{\svnkwdef@Date} +% `Setter'-macros for single keywords, used by \cs{svnkwdef}.\\ +% These are needed to have have a common value for all alternative keyword +% names ala |Rev|, |Revision|, |LastChangedRevision|. +% +% The keywords |Rev|, |Author| and |Date| +% are just calling \cs{svnkwdef@} with a fixed first argument. +% \begin{macrocode} +\def\svnkwdef@Rev#1{\svnkwdef@{Rev}{#1}} +\def\svnkwdef@Author#1{\svnkwdef@{Author}{#1}} +\def\svnkwdef@Date#1{\svnkwdef@{Date}{#1}} +% \end{macrocode} +% The long keywords are defined then as aliases of the short,\\ +% first for writing +% \begin{macrocode} +\let\svnkwdef@Revision=\svnkwdef@Rev +\let\svnkwdef@LastChangedRevision=\svnkwdef@Rev +\let\svnkwdef@LastChangedBy=\svnkwdef@Author +\let\svnkwdef@LastChangedAt=\svnkwdef@Date +% \end{macrocode} +% and then for reading. +% \begin{macrocode} +\def\svnkwRevision{\svnkwRev} +\def\svnkwLastChangedRevision{\svnkwRev} +\def\svnkwLastChangedBy{\svnkwAuthor} +\def\svnkwLastChangedAt{\svnkwDate} +% \end{macrocode} +% So \eg |\svnkw{LastChangedRevision}| is always be the +% same as |\svnkw{Rev}|. +% \end{macro} +% \end{macro} +% \end{macro} + +% We define default values for normal keywords. Keyword |Filename| is the name +% given by |Id| and not a real keyword. +% \begin{macrocode} +\svnkwdef{Rev}{0} +\svnkwdef{Date}{} +\svnkwdef{Author}{} +\svnkwdef{Filename}{} +\svnkwdef{HeadURL}{} +% \end{macrocode} + +% \begin{macro}{\svnkw} +% Macro to get keyword value. Just calls \cs{svnkw}\meta{ARGUMENT} where +% the argument interpreted as text. So \eg |\svnkw{Date}| is the same as +% |\svnkwDate| but this could be changed later so always use this interface +% to get the keyword values. +% +% \changes{v1.2}{2007/06/22}{Added warning when a wrong, maybe +% misspelled, keyword is given.} +% \begin{macrocode} +\newcommand{\svnkw}[1]{% +\@ifundefined{svnkw#1} +{\PackageWarning{svn-multi}{SVN keyword '#1' not defined (typo?)}} +{\csname svnkw#1\endcsname}}% +% \end{macrocode} +% \end{macro} +% + +% \subsection{Keyword check and strip macros} +% The following macros are used to test whether the given keywords are fully +% expanded or not. +% Subversion supports unexpanded keywords as input with or without colon and +% with or without trailing space(s), \ie a:~|$KW$|, b:~|$KW:$| or c:~|$KW: $|. +% To avoid \LaTeX{} syntax errors in this pre-commit state the keyword is +% checked by the following macros. Unexpanded keywords result in an empty value. +% Also leading and trailing spaces are removed. +% +% \begin{macro}{\svn@checkcolon} +% Checks if the keyword contains a colon. It is called by \cs{svnkwsave@read} +% with a trailing |:\relax| so that \#2 will be empty if there is no earlier +% colon or will hold the value with this trailing colon otherwise. +% The first case means that the keyword is unexpanded without colon (case a) +% which leads to an empty value. In the second case \cs{svn@stripcolon} is +% called to strip the colon and surrounding spaces. The final value is +% returned by |\svn@value|. +% \begin{macrocode} +\def\svn@checkcolon#1:#2\relax{% + \def\svn@test{#2}% + \ifx\svn@test\empty + \svnkwdef{#1}{}% + \else + \svn@stripcolon#2\relax + \svnkwdef{#1}{\svn@value}% + \fi +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svn@stripcolon} +% Strips the previous added colon (for \cs{svn@checkcolon}). +% The remaining argument is checked if it's empty (case b) or only a space +% (case c). Otherwise the keyword is expanded and \cs{svn@stripspace} is +% called to strip the spaces. +% \begin{macrocode} +\def\svn@stripcolon#1:\relax{% + \def\svn@test{#1}% + \ifx\svn@test\empty + \gdef\svn@value{}% + \else + \ifx\svn@test\svn@spaceonly + \gdef\svn@value{}% + \else + \svn@stripspace#1\relax\relax + \fi\fi +} + +\def\svn@spaceonly{ } +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svn@stripspace} +% Strips leading space if present and calls \cs{svn@striptrailingspace} to +% strip the trailing space. +% \begin{macrocode} +\def\svn@stripspace#1#2\relax{% + \def\svn@test{#1}% + \ifx\svn@test\svn@spaceonly + \gdef\svn@value{#2}% + \else + \svn@striptrailingspace#1#2\relax + \fi +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svn@striptrailingspace} +% Strips trailing space using the macros parameter text. Must be called with +% |\relax| as end marker. +% \begin{macrocode} +\def\svn@striptrailingspace#1 \relax{% + \gdef\svn@value{#1}% +} +% \end{macrocode} +% \end{macro} + +% \subsection{Date Macros} +% \begin{macro}{\@svn@scandate} +% Scans data informations in Id keyword and saves them in macros. +% \begin{macrocode} +\def\@svn@scandate#1{\@svn@scandate@#1\relax} + +\def\@svn@scandate@#1-#2-#3 #4:#5:#6#7#8\relax{% +\gdef\svnfileyear{#1}% +\gdef\svnfilemonth{#2}% +\gdef\svnfileday{#3}% +\gdef\svnfilehour{#4}% +\gdef\svnfileminute{#5}% +\gdef\svnfilesecond{#6#7}% +\gdef\svnfiletimezone{+00}% #8 always 'Z' for Zulu-time (UTC) +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@svn@scanlongdate} +% Scans data informations in Date keyword and saves them in macros. +% \begin{macrocode} +\def\@svn@scanlongdate#1{\expandafter\@svn@scanlongdate@#1\relax} +% +\def\@svn@scanlongdate@#1-#2-#3 #4:#5:#6 #700 #8\relax{% +\gdef\svnfileyear{#1}% +\gdef\svnfilemonth{#2}% +\gdef\svnfileday{#3}% +\gdef\svnfilehour{#4}% +\gdef\svnfileminute{#5}% +\gdef\svnfilesecond{#6}% +\gdef\svnfiletimezone{#7}% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnpdfdate} +% Returns date in a format needed for |\pdfinfo|. +% \begin{macrocode} +\def\svnpdfdate{\svnyear\svnmonth\svnday +\svnhour\svnminute\svnsecond\svntimezone'00'} +% \end{macrocode} +% \end{macro} + +% \subsection{Mainfile Makros} +% \begin{macro}{\svnsetmainfile} +% Saves the current |HeadURL| and |Filename| keywords to macros. +% Will be called automatically in the preamble. +% \changes{v1.2}{2007/06/22}{New macro} +% \begin{macrocode} +\newcommand{\svnsetmainfile} +{\edef\svnmainurl{\svnkw{HeadURL}} +\edef\svnmainfilename{\svnkw{Filename}}} +\AtBeginDocument{\svnsetmainfile} +% \end{macrocode} +% \end{macro} + +% \subsection{Register and FullName Macros} +% \begin{macro}{\svnRegisterAuthor} +% Saves the author's name by defining +% |\svn@author@|\meta{username} to it. +% \begin{macrocode} +\newcommand{\svnRegisterAuthor}[2]{% +\expandafter\def\csname svn@author@#1\endcsname{#2}% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnFullAuthor} +% \begin{macro}{\svnFullAuthor*} +% We test if the starred or the normal version is used and call the +% appropriate submacro |\svnFullAuthor@star| or |\svnFullAuthor@normal|. +% \changes{v1.2}{2007/06/22}{Macro now returns the username if the full name +% was not registered.} +% \begin{macrocode} +\newcommand{\svnFullAuthor}{% +\@ifnextchar{*} +{\svnFullAuthor@star} +{\svnFullAuthor@normal} +} +% \end{macrocode} +% Both submacros are calling |\svnFullAuthor@| but with different arguments. +% The star macro also removes the star of course. +% \begin{macrocode} +\def\svnFullAuthor@star*#1{\svnFullAuthor@{#1}{~(#1)}} +\def\svnFullAuthor@normal#1{\svnFullAuthor@{#1}{}} +% \end{macrocode} +% |\svnFullAuthor@| now sets the author's full name. Note that |#2| is empty +% when the normal version is called. +% \begin{macrocode} +\def\svnFullAuthor@#1#2{% +\@ifundefined{svn@author@#1} +{#1} +{\csname svn@author@#1\endcsname #2}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} + +% \begin{macro}{\svnRegisterRevision} +% Saves the revision's name or tag by defining +% |\svn@revision@|\meta{revisionnumber} to it. +% \changes{v1.2}{2007/06/22}{New macro} +% \begin{macrocode} +\newcommand{\svnRegisterRevision}[2]{% +\expandafter\def\csname svn@revision@#1\endcsname{#2} +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\svnFullRevision} +% \begin{macro}{\svnFullRevision*} +% We test if the starred or the normal version is used and call the +% appropriate submacro |\svnFullRevision@star| or |\svnFullRevision@normal|. +% \changes{v1.2}{2007/06/22}{New macro} +% \begin{macrocode} +\newcommand{\svnFullRevision}{% +\@ifnextchar{*} +{\svnFullRevision@star} +{\svnFullRevision@normal} +} +% \end{macrocode} +% Both submacros are calling |\svnFullRevision@| but with different arguments. +% The star macro also removes the star of course. +% \begin{macrocode} +\def\svnFullRevision@star*#1{\svnFullRevision@{#1}{~(r#1)}} +\def\svnFullRevision@normal#1{\svnFullRevision@{#1}{}} +% \end{macrocode} +% |\svnFullRevision@| now sets the revision name. Note that |#2| is empty +% when the normal version is called. +% \begin{macrocode} +\def\svnFullRevision@#1#2{% +\@ifundefined{svn@revision@#1} +{Revision #1} +{\csname svn@revision@#1\endcsname #2}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} + +% \begin{macro}{\svnnolinkurl} +% This code is taken from the |hyperref| package and is the definition of +% |\url| just without the part which creates the actual hyperlink. This needs +% of course the |hyperref| package. A warning is given if it isn't loaded. +% \changes{v1.2}{2007/06/22}{New macro} +% \begin{macrocode} + \DeclareRobustCommand*{\svnnolinkurl}{% + \@ifundefined{hyper@normalise} + {\PackageWarning{svn-multi}{Package hyperref is needed for \noexpand + \svnnolinkurl.}} + {\hyper@normalise\svnnolinkurl@}}% + \def\svnnolinkurl@#1{\Hurl{#1}} +% \end{macrocode} +% \end{macro} + +% \subsection{Auxiliary file generation and read-back} +% At the end of document we write the values to an auxiliary file. +% \begin{macrocode} +\AtEndDocument{% +% \end{macrocode} +% We first check if we have something to save. Revision, date and author must be +% non-empty. This suppresses the auxiliary file if the user doesn't use the +% appropriate macros but other provided by this package. +% \begin{macrocode} + \if@filesw + \ifx\@svn@rev\empty\else + \ifnum\@svn@rev=0\else + \ifx\@svn@date\empty\else + \ifx\@svn@author\empty\else +% \end{macrocode} +% Open outfile to write project keywords. +% \begin{macrocode} + \newwrite\svn@write + \immediate\openout\svn@write=\jobname.svn + \immediate\write\svn@write{% + \@percentchar\space SVN cache^^J% + \noexpand\def\noexpand\svnrev{\@svn@rev}^^J% + \noexpand\def\noexpand\svndate{\@svn@date}^^J% + \noexpand\def\noexpand\svnauthor{\@svn@author}^^J% + \noexpand\def\noexpand\svnyear{\@svn@year}^^J% + \noexpand\def\noexpand\svnmonth{\@svn@month}^^J% + \noexpand\def\noexpand\svnday{\@svn@day}^^J% + \noexpand\def\noexpand\svnhour{\@svn@hour}^^J% + \noexpand\def\noexpand\svnminute{\@svn@minute}^^J% + \noexpand\def\noexpand\svnsecond{\@svn@second}^^J% + \noexpand\def\noexpand\svntimezone{\@svn@timezone}^^J% + } + \immediate\closeout\svn@write% + \fi\fi\fi\fi\fi% +} + +% \end{macrocode} +% Reread output from last compile run if it exists. +% \begin{macrocode} +\InputIfFileExists{\jobname.svn}{}{} +% \end{macrocode} +% +% \Finale +\endinput + diff --git a/Master/texmf-dist/source/latex/svn-multi/svn-multi.ins b/Master/texmf-dist/source/latex/svn-multi/svn-multi.ins new file mode 100644 index 00000000000..9bd6a2eb4da --- /dev/null +++ b/Master/texmf-dist/source/latex/svn-multi/svn-multi.ins @@ -0,0 +1,71 @@ +%% Copyright (C) 2006-2007 by Martin Scharrer +%% +%% 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 Martin Scharrer. +%% +%% This work consists of the files svn-multi.dtx and svn-multi.ins +%% and the derived files svn-multi.sty and svnkw.sty. +%% $Id: svn-multi.ins 628 2007-07-10 20:32:06Z martin $ + +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/svn-multi} + +\preamble + +This is a generated file. + +Copyright (C) 2006-2007 by Martin Scharrer + +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 Martin Scharrer. + +This work consists of the files svn-multi.dtx and svn-multi.ins +and the derived files svn-multi.sty and svnkw.sty. + +\endpreamble + +\generate{% + %\file{svn-multi.drv}{\from{svn-multi.dtx}{driver}} + \file{svn-multi.sty}{\from{svn-multi.dtx}{package}} + \nopreamble \nopostamble + \file{svnkw.sty}{\from{svn-multi.dtx}{wrapper}} + } + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* filesinto a directory searched by TeX: *} +\Msg{* *} +\Msg{* svn-multi.sty svnkw.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file svn-multi.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile + + diff --git a/Master/texmf-dist/source/latex/svn-multi/svnkw.dtx b/Master/texmf-dist/source/latex/svn-multi/svnkw.dtx deleted file mode 100644 index bd416456437..00000000000 --- a/Master/texmf-dist/source/latex/svn-multi/svnkw.dtx +++ /dev/null @@ -1,556 +0,0 @@ -% \iffalse meta-comment -% -% Copyright (C) 2006 by Martin Scharrer -% ----------------------------------------------------------------- -% -% This file may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.2 -% 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.2 or later is part of all distributions of LaTeX -% version 1999/12/01 or later. -% -% \fi -% -% \iffalse -%<*driver> -\ProvidesFile{svnkw.dtx} -% -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{svnkw} -%<*package> - [2006/05/27 v1.0 SVN Keywords] -% -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{svnkw}[2004/11/05] -\EnableCrossrefs -\CodelineIndex -\RecordChanges -\begin{document} - \DocInput{svnkw.dtx} - \PrintChanges - \PrintIndex -\end{document} -% -% \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{v1.0}{2006/05/27}{Initial version} -% -% \GetFileInfo{svnkw.dtx} -% -% \DoNotIndex{\newcommand,\newenvironment} -% -% -% \title{The \textsf{svnkw} package\thanks{This document -% corresponds to \textsf{svnkw}~\fileversion, dated \filedate.}} -% \author{Martin Scharrer \\ \texttt{martin@scharrer-online.de}} -% -% \maketitle -% -% \section{Introduction} -% This package lets you typeset keywords of the version control system Subversion\footnote -% {Subversion homepage: http://subversion.tigris.org/} (svn), which is the successor of the popular CVS, -% inside your \LaTeX\ files anywhere you like. -% Unlike the very similar package -% |svn|\footnote{CTAN: -% http://www.ctan.org/tex-archive/macros/latex/contrib/svn/} the usage of -% multiple files for one \LaTeX\ document is well supported. The package -% acquires the keywords of the last changed file and provides them to the user -% through macros. The package has to read all keywords of all files first and -% writes the most recent values in an axiliary file with an '.svn' -% extention. This file is read back at the next \LaTeX\ run which introduces a -% delay like by the table of contents. -% -% The special date features of the |svn| package are not (yet?) supported. If -% you need them you can try to use both packages together which should work -% but is not tested by the author. -% -% \section{Usage} -% -% \subsection{Including of the Subversion keywords} -% To include your Subversion Id keywords use |\svnid| or |\svnidlong|. -% This macros should be written very -% early in each file, i.e.\ in the preamble of the main document soon after -% |\documentclass| and |\usepackage{svnkw}| and as first in every |\include|d -% subfile before the |\chapter| macro. They do not create any output. -% -% \DescribeMacro{\svnid} -% Macro for the svn Id keyword. -% Write the macro as |\svnid{$||Id$}| into your files and set the subversion -% property |svn:keywords| of them -% to at least '|Id|'. Subversion will expand it. A trailing colon -% with spaces after the |Id| is also valid but \textbf{everything else} will -% cause a \TeX\ parse error. -% -% The keyword content will be interpreted and -% saved in the variables (ah, macros) |\svnfilerev|, |\svnfiledate| and -% |\svnfileauthor|. The most recent values (i.e.\ with the highest revision) -% are written as |\svnrev|, |\svndate| and |\svnauthor| in a .svn-file which -% is read back at the next \LaTeX\ run. The idea is that the first variables -% holding the local values for the current file and the otheris the values for -% the complete document. -% Nevertheless all keywords can also be typeset with |\svnkw|\marg{keyword} -% which returns the latest saved value. This macro is used internally. -% -% \DescribeMacro{\svnidlong} -% Macro for a "long Id". -% Saves similar values like in '|Id|' but from the keywords -% |HeadURL|, |LastChangedDate|, |LastChangedRevision| and |LastChangedBy|. -% The usage of |\svnid| or |\svnidlong| is a matter of taste. The second is -% more readable inside the code and results in a nicer date and a full URL, -% not only the filename. Both can be used together. -% -% Write this as (order of arguments not meaningfull)\\ -% |\svnidlong|\\ -% |{$||HeadURL$}|\\ -% |{$||LastChangedDate$}|\\ -% |{$||LastChangedRevision$}|\\ -% |{$||LastChangedBy$}|\\ -% in your files and set the subversion -% property |svn:keywords| of them -% to\\'|HeadURL LastChangedDate LastChangedRevision LastChangedBy|'. -% -% \DescribeMacro{\svn} -% This macro lets you set svn keywords directly. The only argument is -% the svn keyword in the usual dollars. The dollars will be stripped -% by the macro and the rest is typeset as normal text. -% This macro alone was the very first version of |svnkw| and is still included -% for fast and simple keyword typesetting. -% -% \DescribeMacro{\svnkwsave} -% This macro lets you include and save any keyword you like. The only argument -% is the keyword wrapped in dollars. The keyword can be already expanded or -% not (no value and only "|:|" or nothing after the key name). This macro is -% also used internally and does not create any output. -% -% \subsection{Access to the keyword values} -% -% \DescribeMacro{\svnkw} -% Keyword values can be typeset by this macro. -% It takes one argument which must be a subversion keyword name. It -% then returns the current value of this keyword or nothing (|\relax|) when -% the keyword was not set yet.\\ -% Examples:\\|\textsl{Revision: \svnkw{Revision}}|\\ -% |URL: \url{\svnkw{HeadURL}}|\\ -% In the second example |\url| (|hyperref| package) is used to add a -% hyperlink and to avoid problems with underscores (|_|) inside the URL. -% -% \DescribeMacro{\svnkwdef} -% This macro is used to define the keyword values. This is normally only -% called internally but could be used by the user to override single keywords. -% The values can then be typeset by |\svnkw|. -% Note that |\svnid| and |\svnidlong| both sets some keywords to new values -% using this macro. -% -% Note that for |\svnkw| and |\svnkwdef| all different names for one keyword -% are valid and result in the access of the same variable. So e.g.\ subversion -% treats |Rev|, |Revision| and |LastChangedRev| the same way and so does this -% macros. You can e.g.\ say |\svnkwdef{Rev}| and then typeset it with -% |\svnkw{Revision}| or |\svnkw{LastChangedRev}| if you like. -% -% \subsection{Using full author names} -% If you like to have the full author\footnote{This means subversion authors, -% e.g.\ the persons who commit changes into the svn reprository.} -% names, not only the usernames, in your -% document you can use the following macros. First you have to register all -% authors of the document with |\svnRegisterAuthor| and then you can write -% e.g.\ |\svnFullAuthor{\svnauthor}| or |\svnFullAuthor{\svnfileauthor}|. -% -% \DescribeMacro{\svnRegisterAuthor} -% The usage is |\svnRegisterAuthor|\marg{username}\marg{full name} which -% registers \meta{full name} as full name for \meta{username}. -% -% \DescribeMacro{\svnFullAuthor} -% Takes the username as argument and returns the full name if it was -% registered first with |\svnRegisterAuthor| or nothing (|\relax|) else. There is -% also a star version |\svnFullAuthor*| which also returns the username in -% parentheses after the full name. - -% \StopEventually{} -% -% \section{Implementation} -% -% \begin{macro}{\svn} -% Just calls TeX macro |\@svn| to strip the dollars. -% \begin{macrocode} -\newcommand{\svn}[1]{\@svn#1} -\def\@svn$#1${#1} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svnkwdef} -% First we check if there is a 'setter'-macro for the keyword called -% |\svnkwdef@|\meta{keyword}. -% \begin{macrocode} -\newcommand{\svnkwdef}[2]{% -\@ifundefined{svnkwdef@#1} -% \end{macrocode} -% If not we call the general macro |\svnkwdef@|. -% \begin{macrocode} -{\svnkwdef@{#1}{#2}} -% \end{macrocode} -% If yes we just call it with the value as argument. -% \begin{macrocode} -{\csname svnkwdef@#1\endcsname{#2}} -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svnkwdef@} -% This macro defines the second argument under |\svnkw|\meta{2nd argument}. -% The |\xdef| is used to expand the content first (needed for internal use) -% and make the definition globally. -% \begin{macrocode} -\newcommand{\svnkwdef@}[2] -{\expandafter\xdef\csname svnkw#1\endcsname{#2}} -% \end{macrocode} -% Example: |\svnkwdef{Revision}{23}| will define |\svnkwRevision| as 23. -% \end{macro} - -% \begin{macro}{\svnkwdef@...} -% 'Setter'-macros for single keywords, used by |\svnkwdef|.\\The keywords |Rev|, |Author| and |Date| -% are just calling |\svnkwdef@| with a fixed first argument. -% \begin{macrocode} -\def\svnkwdef@Rev#1{\svnkwdef@{Rev}{#1}} -\def\svnkwdef@Author#1{\svnkwdef@{Author}{#1}} -\def\svnkwdef@Date#1{\svnkwdef@{Date}{#1}} -% \end{macrocode} -% The long keywords are defined then as aliases of the short,\\ -% first for writting -% \begin{macrocode} -\let\svnkwdef@Revision=\svnkwdef@Rev -\let\svnkwdef@LastChangedRevision=\svnkwdef@Rev -\let\svnkwdef@LastChangedBy=\svnkwdef@Author -\let\svnkwdef@LastChangedAt=\svnkwdef@Date -% \end{macrocode} -% and then for reading. -% \begin{macrocode} -\def\svnkwRevision{\svnkwRev} -\def\svnkwLastChangedRevision{\svnkwRev} -\def\svnkwLastChangedBy{\svnkwAuthor} -\def\svnkwLastChangedAt{\svnkwDate} -% \end{macrocode} -% So e.g. |\svnkw{LastChangedRevision}| is always be the -% same as |\svnkw{Rev}|. -% \end{macro} -% -% We define default values for normal keywords. Keyword |Filename| is the name -% given by |Id| and not a real keyword. -% \begin{macrocode} -\svnkwdef{Rev}{0} % must always be numerical -\svnkwdef{Date}{} -\svnkwdef{Author}{} -\svnkwdef{Filename}{} -\svnkwdef{HeadURL}{} -% \end{macrocode} - -% \begin{macro}{\svnkw} -% Macro to get keyword value. Just calls |\svnkwARGUMENT| where |ARGUMENT| is -% the argument interpreted as text. So e.g. |\svnkw{Date}| is the same as -% |\svnkwDate| but this could be changed later so always use this interface -% to get the keyword values. -% \begin{macrocode} -\newcommand{\svnkw}[1]{\csname svnkw#1\endcsname} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svn@scanId} -% Scans svn Id (after it got parsed by |\svn@readkw|). -% Awaits only Id value without leading '|Id:|' and a trailing dollar as end -% marker. It calls -% |\@svn@updateid| to update global Id values and also sets the approbriate -% keywords. -% \begin{macrocode} -\def\svn@scanId#1 #2 #3 #4 #5${% -% #1 is filename, #2 is revision, #3 is date (JJJJ-MM-DD), -% #4 is time (HH:MM:SST), #5 is author (username) -\@svn@updateid{#2}{#3 #4}{#5}% -\svnkwdef{Filename}{#1}% -\svnkwdef{Date}{#3 #4}% -\svnkwdef{Revision}{#2}% -\svnkwdef{Author}{#5}% -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svn@readkw} -% General macro to read keywords. -% Saves key in |\svn@key| and the value in |\svn@value|. -% We have to analyse the argument but need it in full later. So we use the submacro -% |\svn@readkw@sub| to do the scan job. Sets |\svn@case| to one of three -% cases, where the first two cases result in identical code. -% \begin{macrocode} -\def\svn@readkw$#1${% -\svn@readkw@sub$#1: $ % call submacro to get case -\ifnum\svn@case<3 -% \end{macrocode} -% If there is no value set |\svn@value| to empty and define |\svn@key| to the -% full argument. -% \begin{macrocode} -\def\svn@key{#1} -\let\svn@value=\svn@empty -\svn@checkkeyforcolon$#1:$ % needed for case '$kw:$' -\relax -\else -% \end{macrocode} -% If there is a value split the argument again by calling |\svn@readkw@def|. -% \begin{macrocode} -\svn@readkw@def$#1$ % needed to remove leading space -\fi -} - -\newcount\svn@case -\let\svn@empty=\empty -% \end{macrocode} -% -% The submacro |\svn@readkw@sub| checks if the argument ends with '|: |'. In -% order to mach always we add a '|: |' at the macro call and then test here if -% |#2| is empty. This is the case if there was no '|: |' before. We return 1 -% if there was no colon which means the keyword is not yet expanded by -% Subversion. -% \begin{macrocode} -\def\svn@readkw@sub$#1: #2${% -\def\svn@temp{#2} -\ifx\svn@temp\empty -\svn@case=1 -\else -% \end{macrocode} -% If there was an tailing '|: |' we check if |#2| is now just '|: |' -% which would be the '|: |' we added at the macro call. -% \begin{macrocode} -\svn@checkcolon$#2$ -\ifx\svn@temp\empty -% \end{macrocode} -% If we have nothing (empty value) in |#2| return 2. -% \begin{macrocode} -\svn@case=2 -\else -% \end{macrocode} -% If we have something in |#2| return 3. -% \begin{macrocode} -\svn@case=3 -\fi\fi -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svn@readkw@def} -% Submacro for |\svn@readkw| to split argument and to save the parts. -% \begin{macrocode} -\def\svn@readkw@def$#1: #2 ${% -\def\svn@key{#1} -\def\svn@value{#2} -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svn@checkcolon} -% Checks whether value is just '|: |', -% if yes |\svn@temp| is empty. -% \begin{macrocode} -\def\svn@checkcolon$#1: ${% -\def\svn@temp{#1} -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svn@checkkeyforcolon} -% Checks whether key includes a trailing '|:|' -% and removes it. Must be called with an trailing '|:|' to always mach! So its -% check actually for tow trailing '|:|'. -% \begin{macrocode} -\def\svn@checkkeyforcolon$#1:#2${% -\def\svn@temp{#2} -\ifx\svn@temp\empty -\else -\def\svn@key{#1} -\fi -} -% \end{macrocode} -% \end{macro} - -% Definition of init values. -% \begin{macrocode} -% Init values -\def\svnrev{0} % \ -\def\svndate{} % > Values for whole project -\def\svnauthor{} % / -\def\svnfilerev{0} % \ -\def\svnfiledate{} % > Values for current file -\def\svnfileauthor{} % / -\def\@svn@rev{0} % \ -\def\@svn@date{} % > Values for packet internal use -\def\@svn@author{} % / -% \end{macrocode} - -% \begin{macro}{\svnid} -% We read the argument with |\svn@readkw| and provide the value to -% |\svn@scanId|. -% \begin{macrocode} -\newcommand{\svnid}[1]{% -\svn@readkw#1 % Read keyword -\ifx\svn@value\empty % Check if value is empty -\else -\expandafter\svn@scanId\svn@value$ % Scan Id -\fi -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svnidlong} -% We clear the keyword value first to reduce the risk though bad user input. -% \begin{macrocode} -\newcommand{\svnidlong}[4]{ -\svnkwdef{HeadURL}{}% -\svnkwdef{LastChangedDate}{}% -\svnkwdef{LastChangedRevision}{0}% -\svnkwdef{LastChangedBy}{}% -% \end{macrocode} -% Then we save the four keywords/arguments using |\svnkwsave|. -% \begin{macrocode} -\svnkwsave{#1}\svnkwsave{#2} -\svnkwsave{#3}\svnkwsave{#4} -% \end{macrocode} -% And update the latest values. -% \begin{macrocode} -\@svn@updateid{\svnkw{LastChangedRevision}}{\svnkw{LastChangedDate}}% -{\svnkw{LastChangedBy}} -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svnkwsave} -% Save macro. Takes a dollar wrapped keyword string, reads it though -% |\svn@readkw| and saves it using |\svnkwdef|. -% \begin{macrocode} -\newcommand{\svnkwsave}[1]{% -\def\svn@temp{#1} -\ifx\svn@temp\empty -%% skip at empty argument -\else -\svn@readkw#1% read keyword -\svnkwdef{\svn@key}{\svn@value} -\fi -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\@svn@updateid} -% We first define the expanded arguments to variables for the user. -% The expansion is needed because the arguments content is mostly generic like -% |\svn@key| and |\svn@value| which can change very soon after this macro. -% \begin{macrocode} -\def\@svn@updateid#1#2#3{% #1 = rev, #2 date, #3 author (username) -\edef\svnfilerev{#1} -\edef\svnfiledate{#2} -\edef\svnfileauthor{#3} -% \end{macrocode} -% Then we check if the revision is non-empty (not yet expanded by -% subversion?) and larger then the current maximum value |\@svn@rev|. -% If yes we save all value to save them in the .svn-file later. -% \begin{macrocode} -\ifx\svnfilerev\empty\else % skip rest if rev is empty -\ifnum\@svn@rev<\svnfilerev% -\edef\@svn@rev{#1} -\edef\@svn@date{#2} -\edef\@svn@author{#3} -\else\fi -\fi -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svnRegisterAuthor} -% Saves the author's name by defining -% |\svn@author@|\meta{username} to it. -% \begin{macrocode} -\newcommand{\svnRegisterAuthor}[2]{% -\expandafter\def\csname svn@author@#1\endcsname{#2} -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\svnFullAuthor} -% We test if the starred or the normal version is used and call the -% appropriate submacro |\svnFullAuthor@star| or |\svnFullAuthor@normal|. -% \begin{macrocode} -\newcommand{\svnFullAuthor}{% -\@ifnextchar{*} -{\svnFullAuthor@star} -{\svnFullAuthor@normal} -} -% \end{macrocode} -% Both submacros are calling |\svnFullAuthor@| but with different arguments. -% The star macro also removes the star of course. -% \begin{macrocode} -\def\svnFullAuthor@star*#1{\svnFullAuthor@{#1}{\ (#1)}} -\def\svnFullAuthor@normal#1{\svnFullAuthor@{#1}{}} -% \end{macrocode} -% |\svnFullAuthor@| now sets the author's full name. Note that |#2| is empty -% when the normal version is called. -% \begin{macrocode} -\def\svnFullAuthor@#1#2{% -\csname svn@author@#1\endcsname #2 -} -% \end{macrocode} -% \end{macro} - -% -% At the end of document we write the values to an auxiliary file. -% \begin{macrocode} -\AtEndDocument{ -% \end{macrocode} -% We first check if we have somthing to save. Revision, date and author must be -% non-empty. This suppresses the auxiliary file if the user doesn't use the -% appropriate macros but other provided by this package. -% \begin{macrocode} - \ifx\@svn@rev\empty\else - \ifnum\@svn@rev=0\else - \ifx\@svn@date\empty\else - \ifx\@svn@author\empty\else -% \end{macrocode} -% Open outfile to write project keywords. -% \begin{macrocode} - \newwrite\svnwrite - \immediate\openout\svnwrite=\jobname.svn - \immediate\write\svnwrite{\@percentchar\space SVN cache} - \immediate\write\svnwrite{\noexpand\def\noexpand\svnrev{\@svn@rev}} - \immediate\write\svnwrite{\noexpand\def\noexpand\svndate{\@svn@date}} - \immediate\write\svnwrite{\noexpand\def\noexpand\svnauthor{\@svn@author}} - \immediate\closeout\svnwrite - \fi\fi\fi\fi -} - -% \end{macrocode} -% Reread output from last compile run if it exists. -% \begin{macrocode} -\InputIfFileExists{\jobname.svn}{}{} -% \end{macrocode} -% -% \Finale -\endinput - diff --git a/Master/texmf-dist/source/latex/svn-multi/svnkw.ins b/Master/texmf-dist/source/latex/svn-multi/svnkw.ins deleted file mode 100644 index f03ab673a16..00000000000 --- a/Master/texmf-dist/source/latex/svn-multi/svnkw.ins +++ /dev/null @@ -1,56 +0,0 @@ -%% -%% Copyright (C) 2006 by Martin Scharrer -%% -%% This file may be distributed and/or modified under the conditions of -%% the LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX version -%% 1999/12/01 or later. -%% - -\input docstrip.tex -\keepsilent - -\usedir{tex/latex/svnkw} - -\preamble - -This is a generated file. - -Copyright (C) 2006 by Martin Scharrer - -This file may be distributed and/or modified under the conditions of -the LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX version -1999/12/01 or later. - -\endpreamble - -\generate{\file{svnkw.sty}{\from{svnkw.dtx}{package}}} - -\obeyspaces -\Msg{*************************************************************} -\Msg{* *} -\Msg{* To finish the installation you have to move the following *} -\Msg{* file into a directory searched by TeX: *} -\Msg{* *} -\Msg{* svnkw.sty *} -\Msg{* *} -\Msg{* To produce the documentation run the file svnkw.dtx *} -\Msg{* through LaTeX. *} -\Msg{* *} -\Msg{* Happy TeXing! *} -\Msg{* *} -\Msg{*************************************************************} - -\endbatchfile - diff --git a/Master/texmf-dist/tex/latex/svn-multi/svn-multi.sty b/Master/texmf-dist/tex/latex/svn-multi/svn-multi.sty new file mode 100644 index 00000000000..15061b18576 --- /dev/null +++ b/Master/texmf-dist/tex/latex/svn-multi/svn-multi.sty @@ -0,0 +1,335 @@ +%% +%% This is file `svn-multi.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% svn-multi.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2006-2007 by Martin Scharrer +%% +%% 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 Martin Scharrer. +%% +%% This work consists of the files svn-multi.dtx and svn-multi.ins +%% and the derived files svn-multi.sty and svnkw.sty. +%% +%% DTX Id: $Id: svn-multi.dtx 628 2007-07-10 20:32:06Z martin $ +\NeedsTeXFormat{LaTeX2e}[1999/12/01] +\ProvidesPackage{svn-multi} + [2007/07/10 v1.3a SVN Keywords for multi-file LaTeX documents] + +\newcommand{\svn}{\@ifnextchar{*}{\svn@s}{\svn@n}} +\def\svn@n#1{\@svn@n#1} +\def\svn@s*#1{\@svn@s#1} +\def\@svn@n$#1${#1} +\def\@svn@s$#1 ${#1} + +\def\svnrev{0} \def\svnfilerev{0} \def\@svn@rev{0} +\def\svndate{} \def\svnfiledate{} \def\@svn@date{} +\def\svnauthor{} \def\svnfileauthor{} \def\@svn@author{} +\def\svnyear{0} \def\svnfileyear{0} \def\@svn@year{0} +\def\svnmonth{0} \def\svnfilemonth{0} \def\@svn@month{0} +\def\svnday{0} \def\svnfileday{0} \def\@svn@day{0} +\def\svnhour{0} \def\svnfilehour{0} \def\@svn@hour{0} +\def\svnminute{0} \def\svnfileminute{0} \def\@svn@minute{0} +\def\svnsecond{0} \def\svnfilesecond{0} \def\@svn@second{0} +\def\svntimezone{0} \def\svnfiletimezone{0} \def\@svn@timezone{0} +\def\svnmainurl{NOT SET}\def\svnmainfilename{NOT SET} + +\newcommand*{\svnid}{% +\@svnidswtrue +\svnkwsave +} +\newif\if@svnidsw +\@svnidswfalse + +\def\svn@scanId#1 #2 #3 #4 #5\relax{% +\@svn@scandate{#3 #4}% +\@svn@updateid{#2}{#3 #4}{#5}% +\svnkwdef{Filename}{#1}% +\svnkwdef{Date}{#3 #4}% +\svnkwdef{Revision}{#2}% +\svnkwdef{Author}{#5}% +} + +\def\@svn@updateid#1#2#3{% #1 = rev, #2 date, #3 author (username) +\xdef\svnfilerev{#1}% +\xdef\svnfiledate{#2}% +\xdef\svnfileauthor{#3}% +\ifx\svnfilerev\empty\else +\ifnum\@svn@rev<\svnfilerev +\xdef\@svn@rev{#1}% +\xdef\@svn@date{#2}% +\xdef\@svn@author{#3}% +\xdef\@svn@year{\svnfileyear}% +\xdef\@svn@month{\svnfilemonth}% +\xdef\@svn@day{\svnfileday}% +\xdef\@svn@hour{\svnfilehour}% +\xdef\@svn@minute{\svnfileminute}% +\xdef\@svn@second{\svnfilesecond}% +\xdef\@svn@timezone{\svnfiletimezone}% +\else\fi +\fi +} + +\newcommand{\svnidlong}{% +\svnkwdef{HeadURL}{}% +\svnkwdef{LastChangedDate}{}% +\svnkwdef{LastChangedRevision}{0}% +\svnkwdef{LastChangedBy}{}% +\begingroup +\svn@catcodes +\catcode`\{=12 +\catcode`\}=12 +\svnidlong@readargsfull +} + +\def\svn@catcodes{% +\catcode`\%=12 +\catcode`\_=12 +\catcode`\^=12 +\catcode`\$=12 +\catcode`\&=12 +\catcode`\#=12 +\catcode`\~=12 + %%\catcode`\ =10 +\catcode`\\=12 +\catcode`\^^M=9 +} + +\begingroup +\catcode`\{=12\catcode`\}=12 +\catcode`\(=1\catcode`\)=2 +\gdef\svnidlong@readargsfull#1{#2}#3{#4}#5{#6}#7{#8}(% + \svnidlong@readargs(#2)(#4)(#6)(#8)% +) +\endgroup + +\def\svnidlong@readargs#1#2#3#4{% +\svnkwsave@read #1\relax +\svnkwsave@read #2\relax +\svnkwsave@read #3\relax +\svnkwsave@read #4\relax +\endgroup +\ifx\svnkwLastChangedDate\empty +\else\@svn@scanlongdate{\svnkwLastChangedDate}\fi +\@svn@updateid{\svnkw{LastChangedRevision}}{\svnkw{LastChangedDate}} +{\svnkw{LastChangedBy}}% +\ignorespaces +}% + +\def\svnkwsave{% +\begingroup +\svn@catcodes +\svnkwsave@readargs +} + +\gdef\svnkwsave@readargs#1{% +\svnkwsave@read#1\relax +\endgroup +\if@svnidsw + \ifx\svnkwId\empty + \else + \expandafter + \svn@scanId\svnkwId\relax + \@svnidswfalse + \fi +\fi +\ignorespaces +} + +\begingroup +\catcode`\$=12 +\gdef\svnkwsave@read $#1$\relax{% + \svn@checkcolon#1:\relax +} +\endgroup + +\begingroup +\catcode`\$=11 +\gdef\svnkwsave@parse$#1:#2${% +\expandafter\xdef\csname svnkw#1\endcsname{#2}} +\endgroup + +\newcommand{\svnkwdef}[2]{% +\@ifundefined{svnkwdef@#1} +{\svnkwdef@{#1}{#2}} +{\csname svnkwdef@#1\endcsname{#2}}% +} + +\newcommand{\svnkwdef@}[2] +{\expandafter\xdef\csname svnkw#1\endcsname{#2}} + +\def\svnkwdef@Rev#1{\svnkwdef@{Rev}{#1}} +\def\svnkwdef@Author#1{\svnkwdef@{Author}{#1}} +\def\svnkwdef@Date#1{\svnkwdef@{Date}{#1}} +\let\svnkwdef@Revision=\svnkwdef@Rev +\let\svnkwdef@LastChangedRevision=\svnkwdef@Rev +\let\svnkwdef@LastChangedBy=\svnkwdef@Author +\let\svnkwdef@LastChangedAt=\svnkwdef@Date +\def\svnkwRevision{\svnkwRev} +\def\svnkwLastChangedRevision{\svnkwRev} +\def\svnkwLastChangedBy{\svnkwAuthor} +\def\svnkwLastChangedAt{\svnkwDate} + +\svnkwdef{Rev}{0} +\svnkwdef{Date}{} +\svnkwdef{Author}{} +\svnkwdef{Filename}{} +\svnkwdef{HeadURL}{} + +\newcommand{\svnkw}[1]{% +\@ifundefined{svnkw#1} +{\PackageWarning{svn-multi}{SVN keyword '#1' not defined (typo?)}} +{\csname svnkw#1\endcsname}}% + +\def\svn@checkcolon#1:#2\relax{% + \def\svn@test{#2}% + \ifx\svn@test\empty + \svnkwdef{#1}{}% + \else + \svn@stripcolon#2\relax + \svnkwdef{#1}{\svn@value}% + \fi +} + +\def\svn@stripcolon#1:\relax{% + \def\svn@test{#1}% + \ifx\svn@test\empty + \gdef\svn@value{}% + \else + \ifx\svn@test\svn@spaceonly + \gdef\svn@value{}% + \else + \svn@stripspace#1\relax\relax + \fi\fi +} + +\def\svn@spaceonly{ } + +\def\svn@stripspace#1#2\relax{% + \def\svn@test{#1}% + \ifx\svn@test\svn@spaceonly + \gdef\svn@value{#2}% + \else + \svn@striptrailingspace#1#2\relax + \fi +} + +\def\svn@striptrailingspace#1 \relax{% + \gdef\svn@value{#1}% +} + +\def\@svn@scandate#1{\@svn@scandate@#1\relax} + +\def\@svn@scandate@#1-#2-#3 #4:#5:#6#7#8\relax{% +\gdef\svnfileyear{#1}% +\gdef\svnfilemonth{#2}% +\gdef\svnfileday{#3}% +\gdef\svnfilehour{#4}% +\gdef\svnfileminute{#5}% +\gdef\svnfilesecond{#6#7}% +\gdef\svnfiletimezone{+00}% #8 always 'Z' for Zulu-time (UTC) +} + +\def\@svn@scanlongdate#1{\expandafter\@svn@scanlongdate@#1\relax} +\def\@svn@scanlongdate@#1-#2-#3 #4:#5:#6 #700 #8\relax{% +\gdef\svnfileyear{#1}% +\gdef\svnfilemonth{#2}% +\gdef\svnfileday{#3}% +\gdef\svnfilehour{#4}% +\gdef\svnfileminute{#5}% +\gdef\svnfilesecond{#6}% +\gdef\svnfiletimezone{#7}% +} + +\def\svnpdfdate{\svnyear\svnmonth\svnday +\svnhour\svnminute\svnsecond\svntimezone'00'} + +\newcommand{\svnsetmainfile} +{\edef\svnmainurl{\svnkw{HeadURL}} +\edef\svnmainfilename{\svnkw{Filename}}} +\AtBeginDocument{\svnsetmainfile} + +\newcommand{\svnRegisterAuthor}[2]{% +\expandafter\def\csname svn@author@#1\endcsname{#2}% +} + +\newcommand{\svnFullAuthor}{% +\@ifnextchar{*} +{\svnFullAuthor@star} +{\svnFullAuthor@normal} +} +\def\svnFullAuthor@star*#1{\svnFullAuthor@{#1}{~(#1)}} +\def\svnFullAuthor@normal#1{\svnFullAuthor@{#1}{}} +\def\svnFullAuthor@#1#2{% +\@ifundefined{svn@author@#1} +{#1} +{\csname svn@author@#1\endcsname #2}% +} + +\newcommand{\svnRegisterRevision}[2]{% +\expandafter\def\csname svn@revision@#1\endcsname{#2} +} + +\newcommand{\svnFullRevision}{% +\@ifnextchar{*} +{\svnFullRevision@star} +{\svnFullRevision@normal} +} +\def\svnFullRevision@star*#1{\svnFullRevision@{#1}{~(r#1)}} +\def\svnFullRevision@normal#1{\svnFullRevision@{#1}{}} +\def\svnFullRevision@#1#2{% +\@ifundefined{svn@revision@#1} +{Revision #1} +{\csname svn@revision@#1\endcsname #2}% +} + + \DeclareRobustCommand*{\svnnolinkurl}{% + \@ifundefined{hyper@normalise} + {\PackageWarning{svn-multi}{Package hyperref is needed for \noexpand + \svnnolinkurl.}} + {\hyper@normalise\svnnolinkurl@}}% + \def\svnnolinkurl@#1{\Hurl{#1}} + +\AtEndDocument{% + \if@filesw + \ifx\@svn@rev\empty\else + \ifnum\@svn@rev=0\else + \ifx\@svn@date\empty\else + \ifx\@svn@author\empty\else + \newwrite\svn@write + \immediate\openout\svn@write=\jobname.svn + \immediate\write\svn@write{% + \@percentchar\space SVN cache^^J% + \noexpand\def\noexpand\svnrev{\@svn@rev}^^J% + \noexpand\def\noexpand\svndate{\@svn@date}^^J% + \noexpand\def\noexpand\svnauthor{\@svn@author}^^J% + \noexpand\def\noexpand\svnyear{\@svn@year}^^J% + \noexpand\def\noexpand\svnmonth{\@svn@month}^^J% + \noexpand\def\noexpand\svnday{\@svn@day}^^J% + \noexpand\def\noexpand\svnhour{\@svn@hour}^^J% + \noexpand\def\noexpand\svnminute{\@svn@minute}^^J% + \noexpand\def\noexpand\svnsecond{\@svn@second}^^J% + \noexpand\def\noexpand\svntimezone{\@svn@timezone}^^J% + } + \immediate\closeout\svn@write% + \fi\fi\fi\fi\fi% +} + +\InputIfFileExists{\jobname.svn}{}{} +\endinput +%% +%% End of file `svn-multi.sty'. diff --git a/Master/texmf-dist/tex/latex/svn-multi/svnkw.sty b/Master/texmf-dist/tex/latex/svn-multi/svnkw.sty index ec63ae8c440..ca72d3de2ca 100644 --- a/Master/texmf-dist/tex/latex/svn-multi/svnkw.sty +++ b/Master/texmf-dist/tex/latex/svn-multi/svnkw.sty @@ -1,195 +1,4 @@ -%% -%% This is file `svnkw.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% svnkw.dtx (with options: `package') -%% -%% This is a generated file. -%% -%% Copyright (C) 2006 by Martin Scharrer -%% -%% This file may be distributed and/or modified under the conditions of -%% the LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX version -%% 1999/12/01 or later. -%% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{svnkw} - [2006/05/27 v1.0 SVN Keywords] - -\newcommand{\svn}[1]{\@svn#1} -\def\@svn$#1${#1} - -\newcommand{\svnkwdef}[2]{% -\@ifundefined{svnkwdef@#1} -{\svnkwdef@{#1}{#2}} -{\csname svnkwdef@#1\endcsname{#2}} -} - -\newcommand{\svnkwdef@}[2] -{\expandafter\xdef\csname svnkw#1\endcsname{#2}} - -\def\svnkwdef@Rev#1{\svnkwdef@{Rev}{#1}} -\def\svnkwdef@Author#1{\svnkwdef@{Author}{#1}} -\def\svnkwdef@Date#1{\svnkwdef@{Date}{#1}} -\let\svnkwdef@Revision=\svnkwdef@Rev -\let\svnkwdef@LastChangedRevision=\svnkwdef@Rev -\let\svnkwdef@LastChangedBy=\svnkwdef@Author -\let\svnkwdef@LastChangedAt=\svnkwdef@Date -\def\svnkwRevision{\svnkwRev} -\def\svnkwLastChangedRevision{\svnkwRev} -\def\svnkwLastChangedBy{\svnkwAuthor} -\def\svnkwLastChangedAt{\svnkwDate} -\svnkwdef{Rev}{0} % must always be numerical -\svnkwdef{Date}{} -\svnkwdef{Author}{} -\svnkwdef{Filename}{} -\svnkwdef{HeadURL}{} - -\newcommand{\svnkw}[1]{\csname svnkw#1\endcsname} - -\def\svn@scanId#1 #2 #3 #4 #5${% -\@svn@updateid{#2}{#3 #4}{#5}% -\svnkwdef{Filename}{#1}% -\svnkwdef{Date}{#3 #4}% -\svnkwdef{Revision}{#2}% -\svnkwdef{Author}{#5}% -} - -\def\svn@readkw$#1${% -\svn@readkw@sub$#1: $ % call submacro to get case -\ifnum\svn@case<3 -\def\svn@key{#1} -\let\svn@value=\svn@empty -\svn@checkkeyforcolon$#1:$ % needed for case '$kw:$' -\relax -\else -\svn@readkw@def$#1$ % needed to remove leading space -\fi -} - -\newcount\svn@case -\let\svn@empty=\empty -\def\svn@readkw@sub$#1: #2${% -\def\svn@temp{#2} -\ifx\svn@temp\empty -\svn@case=1 -\else -\svn@checkcolon$#2$ -\ifx\svn@temp\empty -\svn@case=2 -\else -\svn@case=3 -\fi\fi -} - -\def\svn@readkw@def$#1: #2 ${% -\def\svn@key{#1} -\def\svn@value{#2} -} - -\def\svn@checkcolon$#1: ${% -\def\svn@temp{#1} -} - -\def\svn@checkkeyforcolon$#1:#2${% -\def\svn@temp{#2} -\ifx\svn@temp\empty -\else -\def\svn@key{#1} -\fi -} - -\def\svnrev{0} % \ -\def\svndate{} % > Values for whole project -\def\svnauthor{} % / -\def\svnfilerev{0} % \ -\def\svnfiledate{} % > Values for current file -\def\svnfileauthor{} % / -\def\@svn@rev{0} % \ -\def\@svn@date{} % > Values for packet internal use -\def\@svn@author{} % / - -\newcommand{\svnid}[1]{% -\svn@readkw#1 % Read keyword -\ifx\svn@value\empty % Check if value is empty -\else -\expandafter\svn@scanId\svn@value$ % Scan Id -\fi -} - -\newcommand{\svnidlong}[4]{ -\svnkwdef{HeadURL}{}% -\svnkwdef{LastChangedDate}{}% -\svnkwdef{LastChangedRevision}{0}% -\svnkwdef{LastChangedBy}{}% -\svnkwsave{#1}\svnkwsave{#2} -\svnkwsave{#3}\svnkwsave{#4} -\@svn@updateid{\svnkw{LastChangedRevision}}{\svnkw{LastChangedDate}}% -{\svnkw{LastChangedBy}} -} - -\newcommand{\svnkwsave}[1]{% -\def\svn@temp{#1} -\ifx\svn@temp\empty -%% skip at empty argument -\else -\svn@readkw#1% read keyword -\svnkwdef{\svn@key}{\svn@value} -\fi -} - -\def\@svn@updateid#1#2#3{% #1 = rev, #2 date, #3 author (username) -\edef\svnfilerev{#1} -\edef\svnfiledate{#2} -\edef\svnfileauthor{#3} -\ifx\svnfilerev\empty\else % skip rest if rev is empty -\ifnum\@svn@rev<\svnfilerev% -\edef\@svn@rev{#1} -\edef\@svn@date{#2} -\edef\@svn@author{#3} -\else\fi -\fi -} - -\newcommand{\svnRegisterAuthor}[2]{% -\expandafter\def\csname svn@author@#1\endcsname{#2} -} - -\newcommand{\svnFullAuthor}{% -\@ifnextchar{*} -{\svnFullAuthor@star} -{\svnFullAuthor@normal} -} -\def\svnFullAuthor@star*#1{\svnFullAuthor@{#1}{\ (#1)}} -\def\svnFullAuthor@normal#1{\svnFullAuthor@{#1}{}} -\def\svnFullAuthor@#1#2{% -\csname svn@author@#1\endcsname #2 -} - -\AtEndDocument{ - \ifx\@svn@rev\empty\else - \ifnum\@svn@rev=0\else - \ifx\@svn@date\empty\else - \ifx\@svn@author\empty\else - \newwrite\svnwrite - \immediate\openout\svnwrite=\jobname.svn - \immediate\write\svnwrite{\@percentchar\space SVN cache} - \immediate\write\svnwrite{\noexpand\def\noexpand\svnrev{\@svn@rev}} - \immediate\write\svnwrite{\noexpand\def\noexpand\svndate{\@svn@date}} - \immediate\write\svnwrite{\noexpand\def\noexpand\svnauthor{\@svn@author}} - \immediate\closeout\svnwrite - \fi\fi\fi\fi -} - -\InputIfFileExists{\jobname.svn}{}{} -\endinput -%% -%% End of file `svnkw.sty'. + [2007/07/10 v1.3a Backward compatibility wrapper for svn-multi] +\RequirePackage{svn-multi}[2007/07/10] -- cgit v1.2.3