summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/svn-multi/Makefile164
-rw-r--r--Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex52
-rw-r--r--Master/texmf-dist/doc/latex/svn-multi/example_main.tex71
-rw-r--r--Master/texmf-dist/doc/latex/svn-multi/group_example.tex371
-rwxr-xr-xMaster/texmf-dist/scripts/svn-multi/svn-multi.pl374
-rwxr-xr-xMaster/tlpkg/bin/tlpkginfo4
6 files changed, 1034 insertions, 2 deletions
diff --git a/Master/texmf-dist/doc/latex/svn-multi/Makefile b/Master/texmf-dist/doc/latex/svn-multi/Makefile
new file mode 100644
index 00000000000..381ffd10fbe
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/svn-multi/Makefile
@@ -0,0 +1,164 @@
+# $Id: Makefile 1052 2009-05-03 12:24:53Z martin $
+
+PACKAGE = svn-multi
+PACKAGE_STY = ${PACKAGE}.sty
+PACKAGE_DTX = ${PACKAGE}.dtx ${PACKAGE}-pl.dtx
+PACKAGE_SCR = ${PACKAGE}.pl
+PACKAGE_DOC = $(PACKAGE_DTX:.dtx=.pdf)
+PACKAGE_SRC = ${PACKAGE_DTX} ${PACKAGE}.ins Makefile example_chap1.tex example_main.tex group_example.tex
+PACKFILES = ${PACKAGE_SRC} ${PACKAGE_DOC} README
+
+TEXAUX = *.aux *.log *.glo *.ind *.idx *.out *.svn *.svx *.svt *.toc *.ilg *.gls *.hd *.exa *.exb *.fdb_latexmk
+INSGENERATED = ${PACKAGE_STY} svnkw.sty svn-multi.pl
+GENERATED = ${INSGENERATED} ${PACKAGE}.pdf svn-multi-pl.pdf example.pdf group_example.pdf group_example_*.tex ${PACKAGE}.zip ${PACKAGE}.tar.gz ${TESTDIR}/test*.pdf
+ZIPFILE = ${PACKAGE}-${ZIPVERSION}.zip
+TDSZIPFILE = ${PACKAGE}-${ZIPVERSION}.tds.zip
+
+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}
+
+LATEX_OPTIONS = -interaction=batchmode
+LATEX = pdflatex ${LATEX_OPTIONS}
+
+TEXMFDIR = ${HOME}/texmf
+
+RED = \033[01;31m
+GREEN = \033[01;32m
+WHITE = \033[00m
+
+CP = cp -v
+MV = mv -v
+RMDIR = rm -rf
+MKDIR = mkdir -p
+
+.PHONY: all doc package clean fullclean example testclean ${TESTS} tds ${CHECK_LOG}
+
+###############################################################################
+
+all: package doc example
+new: fullclean all
+
+doc: ${PACKAGE_DOC}
+
+package: ${PACKAGE_STY} ${PACKAGE_SCR}
+
+%.pdf: %.dtx
+ ${LATEX} $*.dtx
+ -makeindex -s gind.ist -o $*.ind $*.idx
+ -makeindex -s gglo.ist -o $*.gls $*.glo
+ ${LATEX} $*.dtx
+ ${LATEX} $*.dtx
+
+${PACKAGE}.pdf: ${PACKAGE}.sty
+
+${INSGENERATED}: ${PACKAGE_DTX} ${PACKAGE}.ins
+ yes | latex ${PACKAGE}.ins
+ @-chmod +x *.pl
+
+clean:
+ rm -f ${TEXAUX} $(addprefix ${TESTDIR}/, ${TEXAUX})
+
+fullclean: clean
+ rm -f ${GENERATED} *~ *.backup
+ rm -f ${PACKAGE}*.zip
+ rm -rf tds/
+
+###############################################################################
+
+example: example.pdf gexample
+
+example.pdf: example_main.tex example_chap1.tex ${PACKAGE}.sty
+ ${LATEX} $<
+ perl ./svn-multi.pl $<
+ ${LATEX} $<
+ mv example_main.pdf $@
+
+gexample: group_example.pdf
+
+group_example.pdf: group_example.tex svn-multi.sty
+ ${RM} $(addprefix group_example, ${TEXAUX}) group_example_*.tex
+ ${LATEX} $<
+ perl svn-multi.pl group_example
+ ${LATEX} $<
+ ${LATEX} $<
+ ${LATEX} $<
+
+###############################################################################
+
+zip: ${PACKFILES}
+ @${MAKE} --no-print-directory ${ZIPFILE}
+
+zip: ZIPVERSION=$(shell grep "Package: ${PACKAGE} " ${PACKAGE}.log | \
+ sed -e "s/.*Package: ${PACKAGE} ....\/..\/..\s\+\(v\S\+\).*/\1/")
+
+tdszip: ZIPVERSION=$(shell grep "Package: ${PACKAGE} " ${PACKAGE}.log | \
+ sed -e "s/.*Package: ${PACKAGE} ....\/..\/..\s\+\(v\S\+\).*/\1/")
+
+${PACKAGE}%.zip: ${PACKFILES}
+ @test -n "${IGNORE_CHECKSUM}" || grep -L '\* Checksum passed \*' ${PACKAGE_DTX:.dtx=.log} | wc -l | grep -q '^0$$'
+ -pdfopt ${PACKAGE}.pdf opt_${PACKAGE}.pdf && mv opt_${PACKAGE}.pdf ${PACKAGE}.pdf
+ ${RM} $@
+ zip $@ ${PACKFILES}
+ @echo
+ @echo "ZIP file $@ created!"
+
+release: fullclean package doc example tests ${ZIPFILE}
+
+###############################################################################
+
+# Make sure TeX finds the input files in TESTDIR
+tests ${TESTS}: export TEXINPUTS:=${TEXINPUTS}:${TESTDIR}
+tests ${TESTS}: LATEX_OPTIONS=
+
+testclean:
+ @${RM} $(foreach ext, aux log out pdf svn svx, tests/test*.${ext})
+
+tests: package testclean
+ @echo "Running tests: ${TESTS}:"
+ @${MAKE} -e -i --no-print-directory ${TESTS} \
+ TESTARGS="-interaction=batchmode -output-directory=${TESTDIR}"\
+ TESTPLOPT="-q"\
+ > /dev/null
+
+${TESTS}: % : ${TESTDIR}/%.tex package testclean
+ @-${LATEX} -interaction=nonstopmode ${TESTARGS} $< 1>/dev/null 2>/dev/null
+ @if test -e ${TESTDIR}/$*.svn; then perl ./svn-multi.pl ${TESTDIR}/$* 1>/dev/null ; fi
+ @if (${LATEX} ${TESTARGS} $< && (test ! -e ${TESTDIR}/$*.pl || ${TESTDIR}/$*.pl ${TESTPLOPT})); \
+ then /bin/echo -e "${GREEN}$@ succeeded${WHITE}" >&2; \
+ else /bin/echo -e "${RED}$@ failed!!!!!!${WHITE}" >&2; fi
+
+###############################################################################
+
+tds: .tds
+
+.tds: ${PACKAGE_STY} ${PACKAGE_DOC} ${PACKAGE_SRC}
+ @grep -q '\* Checksum passed \*' ${PACKAGE}.log
+ ${RMDIR} tds
+ ${MKDIR} tds/
+ ${MKDIR} tds/tex/ tds/tex/latex/ tds/tex/latex/${PACKAGE}/
+ ${MKDIR} tds/doc/ tds/doc/latex/ tds/doc/latex/${PACKAGE}/
+ ${MKDIR} tds/source/ tds/source/latex/ tds/source/latex/${PACKAGE}/
+ test -n "${PACKAGE_SCR}" && ${MKDIR} tds/scripts/ tds/scripts/${PACKAGE}/
+ ${CP} ${PACKAGE_STY} tds/tex/latex/${PACKAGE}/
+ ${CP} ${PACKAGE_DOC} tds/doc/latex/${PACKAGE}/
+ ${CP} ${PACKAGE_SRC} tds/source/latex/${PACKAGE}/
+ test -n "${PACKAGE_SCR}" && ${CP} ${PACKAGE_SCR} tds/scripts/${PACKAGE}/
+ @touch $@
+
+tdszip: ${TDSZIPFILE}
+
+${TDSZIPFILE}: .tds
+ ${RM} ${TDSZIPFILE}
+ cd tds && zip -r ../${TDSZIPFILE} .
+
+###############################################################################
+
+install: .tds
+ test -d "${TEXMFDIR}" && ${CP} -a tds/* "${TEXMFDIR}/" && texhash ${TEXMFDIR}
+
+uninstall:
+ test -d "${TEXMFDIR}" && ${RM} -rv "${TEXMFDIR}/tex/latex/${PACKAGE}" \
+ "${TEXMFDIR}/doc/latex/${PACKAGE}" "${TEXMFDIR}/source/latex/${PACKAGE}" \
+ "${TEXMFDIR}/scripts/${PACKAGE}" && texhash ${TEXMFDIR}
+
diff --git a/Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex b/Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex
new file mode 100644
index 00000000000..24ac0bc313b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex
@@ -0,0 +1,52 @@
+% Version control information:
+\svnidlong
+{$HeadURL: svn://server/dir/example_chap1.tex $}
+{$LastChangedDate: 2009-02-27 13:58:39 +0000 (Fri, 27 Feb 2009) $}
+{$LastChangedRevision: 211 $}
+{$LastChangedBy: martin $}
+
+\chapter{Example Chapter}
+
+\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'
+% package is used which is not the best solution. Avoid underscore in LaTeX filenames.
+Filename: \svnnolinkurl{\svnfilefname}\\
+URL: \svnnolinkurl{\svnfileurl}\\
+% Something like \href{\svnfileurl}{Download} works also!
+\textbf{Last change}\\
+Revision: \svnfilerev\\
+Date: \svnfiledate\\
+Year: \svnfileyear\\
+Time: \svnfilehour:\svnfileminute:\svnfilesecond\ \svnfiletimezone\\
+Timezone: \svnfiletimezonehour : \svnfiletimezoneminute\\
+Author: \svnfileauthor\\
+
+\subsection*{Whole document}
+Filename: \svnnolinkurl{\svnmainfilename}\\
+URL: \url{\svnmainurl}\\
+\textbf{Last change}\\
+Revision: \svnrev\\
+Date: \svndate\\
+Year: \svnyear\\
+Time: \svnhour:\svnminute:\svnsecond\ \svntimezone\\
+Timezone: \svntimezonehour : \svntimezoneminute\\
+Author: \svnauthor\\
+% [...]
+
+\section{Full Author Names}
+\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
new file mode 100644
index 00000000000..ef4ebce0f33
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/svn-multi/example_main.tex
@@ -0,0 +1,71 @@
+\documentclass[12pt]{report}
+
+% Traditional way to include keywords:
+\usepackage{svn-multi}[2009/03/03]
+% Version control information:
+\svnidlong
+{$HeadURL: svn://server/dir/example_main.tex $}
+{$LastChangedDate: 2008-12-03 13:29:19 +0000 (Wed, 03 Dec 2008) $}
+{$LastChangedRevision: 146 $}
+{$LastChangedBy: martin $}
+% The extra Id to access the file name is not needed anymore because it is
+% extracted from the URL:
+%\svnid{$Id: example_main.tex 146 2008-12-03 13:29:19Z martin $}
+%
+% 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
+
+% Alternative you can use the auto-keyword feature to extract the keywords from
+% the Subversion working directory:
+%\usepackage[autokw=all]{svn-multi}[2009/03/28]
+
+\usepackage{hyperref}
+
+\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 \svnfilerev to \svnrev if you like to have the
+% document revision.
+\newcommand{\svnfooter}{Last Changed Rev: \svnfilerev}
+
+\pdfinfo{%
+ /CreationDate (D:\svnpdfdate)
+}
+
+\svnRegisterAuthor{johnd}{John Doe}
+\svnRegisterAuthor{maryd}{Mary Doe}
+\svnRegisterAuthor{martin}{Martin S.}
+\svnRegisterRevision{15}{Version~1}
+
+\listfiles
+\begin{document}
+
+\begin{titlepage}
+ \vspace{8ex}
+ {\huge Title\par}
+ \vspace{2ex}
+ {\large \noindent This is an small example document for the \texttt{svn-multi}
+ (aka \texttt{svnkw}) package. Please also look at the LaTeX source code of this
+ document. An advanced example which includes keyword groups is shown in
+ \url{group\_example.pdf}}
+ \vfill
+ \flushleft\sffamily
+ Version control information:\\
+ Head URL: \svnnolinkurl{\svnmainurl}\\
+ %or with hyperlink: Head URL: \url{\svnurl}\\
+ Last changed file: \texttt{\svnfname}\\
+ Last changed date: \svndate\\
+ Last changes revision: \svnrev\\
+ Version: \svnFullRevision*{\svnrev}\\
+ Last changed by: \svnFullAuthor*{\svnauthor}\\
+\end{titlepage}
+
+% Include chapters
+\include{example_chap1}
+%\include{example_chap2}
+%\include{example_chap3}
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/svn-multi/group_example.tex b/Master/texmf-dist/doc/latex/svn-multi/group_example.tex
new file mode 100644
index 00000000000..692687d4f97
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/svn-multi/group_example.tex
@@ -0,0 +1,371 @@
+\documentclass[a4paper,oneside]{scrbook}
+\usepackage[all]{svn-multi}[2009/03/06]
+\svnidlong
+{$HeadURL: svn://server/group_example.tex $}
+{$LastChangedDate: 2000-01-01 01:44:01 +0000 (Main file) $}
+{$LastChangedRevision: 98 $}
+{$LastChangedBy: author3 $}
+
+% Pre-declaration of groups to define order in table
+\svngroup{abc}
+\svngroup{def}
+\svngroup{ghi}
+\svngroup{jkl}
+%\svngroup{Images}
+\svngroup{}
+
+% Ignore logo in subfiles and set it explicitly into the main file:
+%\svnexternal{{logo.jpg}}%
+%\svnignoregraphic{logo.jpg}
+
+% Special groups for images and other external files:
+%\svngraphicsgroup{Images}
+%\svnexternalgroup{external}
+
+\let\ifvtex=\relax
+\usepackage{hyperref}
+\usepackage{ifthen}
+\usepackage{listings}
+\lstset{basicstyle=\ttfamily}
+\makeatletter
+% Workaround for listinputlisting
+\newcommand*{\svnlstinputlisting}[2][]{%
+ {\let\input\@input\lstinputlisting[#1]{#2}}%
+}
+\makeatother
+\usepackage{booktabs}
+\usepackage{tabularx}
+\usepackage{longtable}
+
+% This is an example document to show the group feature of svn-multi 2.0.
+% Please the notes below.
+
+\makeatletter
+% Version control information table for each chapter
+\newcommand{\chaptervctable}{%
+\par\noindent
+\textbf{Version Control Information for this chapter}\\[\bigskipamount]%
+\begin{tabular}{lp{0.7\textwidth}}
+Chapter URL & \svnnolinkurl{\svnfileurl}\\
+Chapter File name & \svnnolinkurl{\svnfilefname}\\
+Last Changed Revision & \svnfilerev\\
+Last Changed Author & \svnfileauthor\\
+Last Changed Date & \svnfiledate\\
+\end{tabular}
+\bigskip
+\par\noindent
+This files contains the following SVN keywords:\\*[-\baselineskip]
+{\let\input\@input
+\svnlstinputlisting[firstline=5,lastline=9]{\finkpath}
+}
+}
+\makeatother
+
+% This file generates some example sub files from this file to avoid a lot of small
+% example files in the CTAN directory. In real life there would be separate
+% files from the beginning.
+
+\begin{filecontents}{group_example_part1a.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part1a.tex $}
+{$LastChangedDate: 2000-01-01 01:00:01 +0000 (Chapter 1a) $}
+{$LastChangedRevision: 101 $}
+{$LastChangedBy: author1 $}
+
+\chapter{Subfile 1a}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_part1b.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part1b.tex $}
+{$LastChangedDate: 2001-01-01 00:00:01 +0000 (Subfile 1b) $}
+{$LastChangedRevision: 102 $}
+{$LastChangedBy: author2 $}
+
+\chapter{Subfile 1b}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_part1c.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part1c.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (Subfile 1c) $}
+{$LastChangedRevision: 104 $}
+{$LastChangedBy: author3 $}
+
+\chapter{Subfile 1c}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_part2a.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part2a.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (Subfile 2a) $}
+{$LastChangedRevision: 100 $}
+{$LastChangedBy: author1 $}
+
+\chapter{Subfile 2a}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_part2b.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part2b.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (Subfile 2b) $}
+{$LastChangedRevision: 101 $}
+{$LastChangedBy: author1 $}
+
+\chapter{Subfile 2b}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_part3a.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part3a.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (Subfile 3a) $}
+{$LastChangedRevision: 104 $}
+{$LastChangedBy: author3 $}
+
+\chapter{Subfile 3a}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_part3b.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part3b.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (Subfile 3b) $}
+{$LastChangedRevision: 103 $}
+{$LastChangedBy: author2 $}
+
+\chapter{Subfile 3b}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_part4a.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part4a.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (Subfile 4a) $}
+{$LastChangedRevision: 99 $}
+{$LastChangedBy: author3 $}
+
+\chapter{Subfile 4a}
+\chaptervctable
+\input{group_example_part4a_sub1.tex}
+\end{filecontents}
+
+\begin{filecontents}{group_example_part4a_sub1.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part4a_sub1.tex $}
+{$LastChangedDate: 2000-01-01 00:00:00 +0000 (SubSubfile 4a-1) $}
+{$LastChangedRevision: 96 $}
+{$LastChangedBy: author2 $}
+
+\section{SubSubfile 4a-1}
+This is a sub file in a sub file.
+\svnexternal{{Makefile}}
+\end{filecontents}
+
+\begin{filecontents}{group_example_part4b.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_part4b.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (Subfile 4b) $}
+{$LastChangedRevision: 105 $}
+{$LastChangedBy: author2 $}
+
+\chapter{Subfile 4b}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_end.tex}
+\svnidlong
+{$HeadURL: svn://server/group_example_end.tex $}
+{$LastChangedDate: 2000-01-01 00:00:01 +0000 (End) $}
+{$LastChangedRevision: 100 $}
+{$LastChangedBy: author1 $}
+
+\chapter{End credits}
+\chaptervctable
+\end{filecontents}
+
+\begin{filecontents}{group_example_unexpanded.tex}
+\svnidlong
+{$HeadURL$}
+{$LastChangedDate$}
+{$LastChangedRevision$}
+{$LastChangedBy$}
+
+\chapter{File with unexpanded keywords}
+\chaptervctable
+\end{filecontents}
+
+\svnRegisterAuthor{author1}{Andy Author, I.}
+\svnRegisterAuthor{author2}{A. Author, II.}
+\svnRegisterAuthor{author3}{Anthony Author, III.}
+
+% Have VC info on every part page
+\let\origpart=\part
+\def\part{%
+\setpartpreamble{%
+\vspace*{5cm}
+\par\noindent
+\textbf{Version Control Information for this part:}\\[\bigskipamount]%
+\begin{tabular}{lp{0.7\textwidth}}
+URL of latest File & \svnnolinkurl{\svncgurl}\\
+Name of latest File & \svnnolinkurl{\svncgfname}\\
+Last Changed Revision & \svncgrev\\
+Last Changed Author & \svncgauthor\\
+Last Changed Date & \svncgdate\\
+\end{tabular}
+}\origpart
+}
+
+\listfiles
+\begin{document}
+
+% Custom titlepage:
+\hbox{}%
+\vfill
+\pdfbookmark{Title Page}{titlepage}%
+{\centering
+\Huge\texttt{svn-multi} v2.0 Keyword Groups Example Document\\
+\Large Martin Scharrer\\
+\large 2009/03/01\\
+}%
+\vfill
+\par\noindent
+This is an example and test document for the group feature of svn-multi 2.0.
+Please note that the revision keywords were generated manually for testing
+purposes. The dates are not consistent with the revisions and contain a debug
+name instead of the date text like `(Sat, January 1 2009)'. This doesn't
+influence the correct functionality of the svn-multi package.\\
+\bigskip
+{\hbox{}\hfill Happy \TeX ing!}\\
+\vfill%
+\par\noindent
+{\large Version Control Information for this document:\\[\bigskipamount]}%
+\begin{tabular}{lp{0.7\textwidth}}
+Main URL & \svnnolinkurl{\svnmainurl}\\
+Main File name & \svnnolinkurl{\svnmainfilename}\\
+URL of latest file & \svnnolinkurl{\svnurl}\\
+Name of latest file & \svnnolinkurl{\svnfname}\\
+Last Changed Revision & \svnrev\\
+Last Changed Author & \svnauthor\\
+Last Changed Date & \svndate\\
+\end{tabular}
+\bigskip\par\noindent
+The main file of this document contains the following SVN
+keywords:\\*[-\baselineskip]
+\svnlstinputlisting[firstline=3,lastline=7]{\finkpath}
+\thispagestyle{empty}
+\clearpage
+
+% Default in Engish
+\renewcommand{\svnbeforetable}{%
+This is an automatic generated table using the \textbf{\sffamily table} option.
+\bigskip\par\noindent
+}
+\clearpage
+\pdfbookmark{Table of Revisions (1)}{tora}%
+\tableofrevisions
+\clearpage
+
+% Redefined to German
+% Uses booktabs for nicer table
+\renewcommand{\svnbeforetable}{%
+Can be redefined to another format and language: Verstehen Sie Deutsch?
+\bigskip\par\noindent
+}
+\renewenvironment{svntable}{%
+\begin{longtable}{p{6.2cm}rll}
+\toprule
+}
+{%
+\bottomrule
+\end{longtable}
+}
+\renewcommand*\svntablehead{%
+ Name & Rev & Autor & Datum \\
+\midrule[\heavyrulewidth]
+}
+\renewcommand{\svnrevisionsname}{Revisionen}
+\renewcommand{\svntabgroup}[1]{Gruppe `#1'}
+
+% Some highlight examples:
+% Print highest revision bold:
+\renewcommand{\svntabrev}[1]{\ifthenelse{#1=\svnrev}{\textbf{#1}}{#1}}
+% Highlight all dates after the 14th March 2008 12:00:00:
+\renewcommand{\svntabdate}[8]{%
+ \ifthenelse{#1#2#3#4>2008031412}{\color{red}\bfseries}{}%
+ \small #3.#2.#1\ #4:#5:#6%
+}
+% Mark all files last changed by the last author:
+\renewcommand{\svntabauthor}[1]{%
+ \ifthenelse{\equal{#1}{\svnauthor}}{\color{green}}{}%
+ \svnFullAuthor{#1}%
+}
+
+% Using \scriptsize and \svnnolinkurl for files and subgroups:
+\renewcommand{\svntabfile}[2]{%
+ \addtolength{\leftskip}{#1\medskipamount}%
+ Datei `{\scriptsize\svnnolinkurl{#2}}'
+}
+\renewcommand{\svntabsubgroup}[2]{%
+ \addtolength{\leftskip}{#1\medskipamount}%
+ Untergruppe `{\scriptsize\svnnolinkurl{#2}}'%
+}
+\renewcommand{\svntabglobal}[1]{Gesamtes Dokument}
+
+% Add rule before group rows:
+\renewcommand{\svngrouprow}{\midrule}
+% Add rule and description after global row:
+\renewcommand{\endsvnglobalrow}{\midrule Ohne Gruppe:\\}
+
+\pdfbookmark{Table of Revisions (2)}{torb}%
+\tableofrevisions
+\clearpage
+
+
+\svngroup{abc}
+\part{Abc}
+\include{group_example_part1a}
+\include{group_example_part1b}
+\include{group_example_part1c}
+
+\svngroup{def}
+\part{Def}
+\include{group_example_part2a}
+\include{group_example_part2b}
+
+\svngroup{ghi}
+\part{Ghi}
+\include{group_example_part3a}
+\include{group_example_part3b}
+
+\svngroup{jkl}
+\part{jkl}
+\include{group_example_part4a}
+\include{group_example_part4b}
+
+% The rest doesn't belong to a file group:
+\svngroup{}
+\include{group_example_end}
+\include{group_example_unexpanded}
+
+\chapter*{Reference Examples}
+%To reference e.g.\ keyword from group `abc' use:
+\section*{Group `abc'}
+\svnsetcg{abc} Revision \svncgrev\ from \svncgtoday\ \svncgtime\ done by
+\svnFullAuthor{\svncgauthor}. Latest file is \svnnolinkurl{\svncgfname} (URL: \url{\svncgurl}).
+
+\section*{Subgroup `group\_example\_part3b'}
+\svnsetcg{group_example_part3b} Revision \svncgrev\ from \svncgtoday\ \svncgtime\ done by
+\svnFullAuthor{\svncgauthor}. Latest file is \svnnolinkurl{\svncgfname} (URL: \url{\svncgurl}).
+
+\section*{File `group\_example\_part3b.tex'}
+\svnsetcg{group_example_part3b.tex} Revision \svncgrev\ from \svncgtoday\ \svncgtime\ done by
+\svnFullAuthor{\svncgauthor}. File name and url: \svnnolinkurl{\svncgfname} (URL: \url{\svncgurl}).
+
+
+\end{document}
+
diff --git a/Master/texmf-dist/scripts/svn-multi/svn-multi.pl b/Master/texmf-dist/scripts/svn-multi/svn-multi.pl
new file mode 100755
index 00000000000..54acfc79169
--- /dev/null
+++ b/Master/texmf-dist/scripts/svn-multi/svn-multi.pl
@@ -0,0 +1,374 @@
+#!/usr/bin/perl
+# --------------------------------------------------------------
+# svn-multi.pl for the svn-multi v2.0 LaTeX package
+# version 0.1, Mar 1st, 2009
+# --------------------------------------------------------------
+#
+# Copyright (C) 2006-2009 Martin Scharrer
+# E-mail: martin@scharrer-online.de
+# WWW: http://latex.scharrer-online.de/svn-multi/
+#
+# $Id: svn-multi-pl.dtx 1866 2010-07-19 11:17:15Z martin $
+#
+# This program works only in combination with the LaTeX package 'svn-multi' and
+# generates .svx files with '\svnidlong' macros holding Subversion keywords for
+# files declared with '\svnexternal' inside the LaTeX document.
+#
+# This program is free software under the GPL v3 and LPPL v1.3c or later.
+#
+#
+# GPL v3:
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#
+# LPPL v1.3c:
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3c
+# 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.3c or later is part of all distributions of LaTeX
+# version 2008/05/04 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, svn-multi-pl.dtx and
+# svn-multi.ins and the derived files svn-multi.sty, svnkw.sty and svn-multi.pl.
+#
+# The file 'svn-multi.pl' may be renamed to 'svn-multi' for installation
+# purposes.
+#
+#
+use strict;
+use warnings;
+use File::Basename;
+my $VERSION = "0.2";
+my ($REV,$DATE) =
+ (split ' ','$Id: svn-multi-pl.dtx 1866 2010-07-19 11:17:15Z martin $')[2,3];
+
+my $dollar = '$';
+my @PATH;
+my %EXCLUDE = map { $_ => 1 } qw(sty tex aux log out toc fff ttt svn svx);
+
+sub create_svxfile ($@);
+sub usage;
+
+if (!@ARGV or grep { $_ eq '--help' or $_ eq '-h' } @ARGV) {
+ usage();
+}
+
+print STDOUT "This is svn-multi.pl, Version $VERSION-$REV, $DATE\n";
+
+my ($jobname, $dir, $suffix) = fileparse(shift @ARGV, qr/\.(tex|ltx|dtx|svn)$/);
+if ($dir && $dir ne './') {
+ printf STDOUT "Main directory is '$dir'.\n";
+ chdir($dir);
+}
+
+if ($jobname =~ /^-/) {
+ usage();
+}
+my $outfile = "$jobname.svx";
+
+my %external;
+
+my $resvnexternalpath = qr/
+ ^ # at begin of line
+ \s* # allow for spaces
+ \\\@svnexternalpath # the macro name
+ \s*
+ { # begin token group
+ \s*
+ (?: # paths:
+ { # { of first path
+ (.*) # everything else, e.g: 'patha}{pathb}{pathc'
+ } # } of last path
+ | # or nothing
+ )
+ \s*
+ } # end token group
+ \s*
+ $ # end of line
+ /x;
+
+my $resvnexternal = qr/
+ ^ # at begin of line
+ \s* # allow for spaces
+ \\\@svnexternal # the macro name
+ \s*
+ (?: # optional:
+ \[ # opening [
+ ([^\]]*) # group name (everything until ])
+ \] # closing ]
+ )?
+ \s*
+ { # begin token group
+ ([^}]+) # file name (everything until })
+ } # end token group
+ \s*
+ { # begin token group
+ \s*
+ (?: # paths:
+ { # { of first file
+ (.*) # everything else, e.g: 'filea}{fileb}{filec'
+ } # } of last file
+ | # or nothing
+ )
+ \s*
+ } # end token group
+ \s*
+ $ # end of line
+ /x;
+
+if (-e "$jobname.svn" and open( my $svnfh, '<', "$jobname.svn")) {
+ print STDOUT "Reading '$jobname.svn'.\n";
+ while (<$svnfh>) {
+ chomp;
+ if (/$resvnexternalpath/) {
+ push @PATH, ( split /}\s*{/, $1 );
+ }
+ elsif (/$resvnexternal/) {
+ my ($group,$file,$list) = ($1||"",$2,$3||"");
+ $file =~ s/^\.\///;
+ push @{$external{$file}{$group} ||= []}, ( split /}\s*{/, $list );
+ }
+ }
+ close ($svnfh);
+}
+else {
+ warn "No .svn file found for '$jobname'!\n";
+}
+
+# Add TEXINPUTS to path
+push @PATH, map { $_ =~ s/(?<!\/)$/\//; $_ } grep { $_ }
+ split(':', $ENV{'TEXINPUTS'}||"");
+
+my @mainfilepairs;
+my $maintex = "$jobname.tex";
+if (exists $external{$maintex}) {
+ while ( my ($group,$list) = each %{$external{$maintex}} ) {
+ push @mainfilepairs, [ $group, [ @$list ] ];
+ }
+ delete $external{$maintex};
+}
+
+push @mainfilepairs, parse_args(@ARGV);
+create_svxfile("$jobname.svx", @mainfilepairs )
+ if @mainfilepairs;
+
+foreach my $file (keys %external) {
+ my @pairs;
+ my $svxfile = $file;
+ $svxfile =~ s/\.(tex|ltx)$/.svx/;
+ while ( my ($group,$list) = each %{$external{$file}} ) {
+ push @pairs, [ $group, [ @$list ] ];
+ }
+ create_svxfile($svxfile, @pairs);
+}
+
+
+sub parse_args {
+ my @args = @_;
+ my $group = '';
+ my @files;
+ my $readfg;
+ my @pairs;
+
+ foreach my $arg (@args) {
+ if ($readfg) {
+ $readfg = 0;
+ $group = $arg;
+ $group =~ s/^["']|["']$//; # '
+ }
+ elsif ($arg =~ /^--group|^-?-fg/) {
+ push @pairs, [ $group, [ @files ] ];
+ @files = ();
+ if ($arg =~ /^--group=(.*)/) {
+ $group = $1;
+ $group =~ s/^["']|["']$//; # '
+ }
+ else {
+ $readfg = 1;
+ }
+ }
+ elsif ($arg =~ /^--fls/) {
+ push @files, read_fls("$jobname.fls");
+ }
+ else {
+ push @files, $arg;
+ }
+ }
+ push @pairs, [ $group, [ @files ] ] if @files;
+ return @pairs;
+}
+
+sub path_search {
+ my $file = shift;
+ $file =~ s/##/#/g;
+ return $file if not $file or -e $file or not @PATH;
+
+ foreach my $dir (@PATH) {
+ if (-e "$dir$file") {
+ return "$dir$file";
+ }
+ }
+
+ return $file;
+}
+
+sub create_svxfile ($@) {
+ my ($svxfile, @fgpair) = @_;
+ my $lastgroup;
+ my $fgused = 0;
+ my %seen;
+ return if not @fgpair or not $svxfile;
+
+ open(my $svxfh, '>', $svxfile) or do {
+ warn "ERROR: Could not create SVX file '$svxfile'!\n";
+ return;
+ };
+ print STDOUT "Generating .svx file '$svxfile'.\n";
+ select $svxfh;
+ print "% Generated by svn-multi.pl v$VERSION\n\n";
+
+ while ( my ($group, $files) = @{shift @fgpair||[]}) {
+ no warnings 'uninitialized';
+ if ( (not defined $lastgroup and $group) or ($group ne $lastgroup) ) {
+ print "\\svngroup{$group}\n";
+ }
+ use warnings;
+ if ($group) {
+ $fgused = 1;
+ }
+
+ foreach my $file (@$files) {
+ $file = path_search($file);
+
+ # Only print the file once per group and .svx file
+ next if $seen{$group}{$file};
+ $seen{$group}{$file} = 1;
+
+ open(my $infoh, '-|', "svn info '$file' 2>/dev/null") or next;
+ my %info = map { chomp; split /\s*:\s*/, $_, 2 } <$infoh>;
+ close($infoh);
+ if (not keys %info) {
+ print "% Could not receive keywords for '$file'!\n\n";
+ next;
+ }
+ print "% Keywords for '$file'\n";
+ print svnidlong(\%info);
+ print "\\svnexternalfile";
+ print "[$group]" if $group;
+ print "{$file}\n";
+ print "\n"
+ }
+
+ $lastgroup = $group;
+ }
+ print "\n";
+ close ($svxfh);
+}
+
+sub svnid {
+ use Date::Parse;
+ use Date::Format;
+ my $href = shift;
+ return "" if (not defined $href->{Name});
+ my $date = time2str("%Y-%m-%d %XZ", str2time($href->{'Last Changed Date'}), 'Z');
+ return <<"EOT";
+\\svnid{${dollar}Id: $href->{Name} $href->{'Last Changed Rev'} $date $href->{'Last Changed Author'} \$}
+EOT
+}
+
+sub svnidlong {
+ my $href = shift;
+ return <<"EOT";
+\\svnidlong
+{${dollar}HeadURL: $href->{URL} \$}
+{${dollar}LastChangedDate: $href->{'Last Changed Date'} \$}
+{${dollar}LastChangedRevision: $href->{'Last Changed Rev'} \$}
+{${dollar}LastChangedBy: $href->{'Last Changed Author'} \$}
+EOT
+}
+
+sub read_fls {
+ my $fls = shift;
+ my %stack;
+ open (my $fh, '<', $fls) or return;
+ while (<$fh>) {
+ chomp;
+ if (/^INPUT ([^\/].*)$/) {
+ my $file = $1;
+ my $ext = substr($file, rindex($file,'.')+1);
+ $stack{$1} = 1 if not exists $EXCLUDE{$ext};
+ }
+ }
+ close($fh);
+ return keys %stack;
+}
+
+sub usage {
+ print STDOUT <<'EOT';
+Usage:
+ svn-multi.pl jobname[.tex] [--fls] [--group|-g <group name>] [input_files] ...
+ ... [--group|-g <group name>] [input_files] ...
+
+Description:
+ This LaTeX helper script collects Subversion keywords from non-(La)TeX files
+ and provides it to the 'svn-multi' package using '.svx' files. It will first
+ scan the file '<jobname>.svn' for files declared by the '\svnextern' macro but
+ also allows to provide additional files including the corresponding groups. The
+ keywords for the additional files will be written in the file '<jobname>.svx'.
+
+Options:
+ jobname[.tex] : The LaTeX `jobname`, i.e. the basename of your main LaTeX file.
+ --group <GN> : Use given group name <GN> for all following files,
+ or -g <GN> including the one read by a '--fls' option, until the next
+ group is specified.
+ --fls : Read list of (additional) files from the file '<jobname>.fls'. This
+ file is produced by LaTeX when run with the '--recorder' option and
+ contains a list of all input and output files used by the LaTeX main
+ file. Only input files with a relative path will be used. A
+ previously selected group will be honoured.
+
+Examples:
+The main LaTeX file here is 'mymainlatexfile.tex'.
+
+ svn-multi.pl mymainlatexfile
+ Creates Subversion keywords for all files declared by '\svnextern' inside
+ the LaTeX code.
+
+ svn-multi.pl mymainlatexfile --group=FLS --fls
+ Creates Subversion keywords for all files declared by '\svnextern' inside
+ the LaTeX code. In addition it does the same for all relative input files
+ mentioned in the .fls file which are placed in the 'FLS' group.
+
+ svn-multi.pl mymainlatexfile a b c --group=B e d f
+ In addition to the '\svnextern' declared files the keywords for the files
+ 'a', 'b' and 'c' will be added without a specific group, i.e. the last group
+ specified in the LaTeX file before the '\svnextern' macro will be used. The
+ keywords for 'e', 'd', 'f' will be part of group 'B'.
+
+ svn-multi.pl mymainlatexfile --group=A a --group=B b --group='' c
+ File 'a' is in group 'A', 'b' is in 'B' and 'c' is not in any group.
+
+Further Information:
+See the svn-multi package manual for more information about this script.
+EOT
+ exit(0);
+}
+
+__END__
diff --git a/Master/tlpkg/bin/tlpkginfo b/Master/tlpkg/bin/tlpkginfo
index 8a31d7c57ad..df57712ea55 100755
--- a/Master/tlpkg/bin/tlpkginfo
+++ b/Master/tlpkg/bin/tlpkginfo
@@ -19,8 +19,8 @@ sub main
# erroneous or problematic tds files (warn Robin about them)
# list format: pkg1|pkg2|etc
$erroneous_tds = join ("|",
- qw(engpron fmtcount imtekda paresse purifyeps thailatex tufte-latex
- xetexref xtab),
+ qw(engpron fmtcount imtekda paresse purifyeps svn-multi
+ thailatex tufte-latex xetexref xtab),
qw(lastpage pageslts papermas papertex undolabl)); #muench
# Heiko's tds files (don't propagate through CTAN fast enough).