diff options
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/latex/svn-multi/Makefile | 164 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/svn-multi/example_chap1.tex | 52 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/svn-multi/example_main.tex | 71 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/svn-multi/group_example.tex | 371 | ||||
-rwxr-xr-x | Master/texmf-dist/scripts/svn-multi/svn-multi.pl | 374 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkginfo | 4 |
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). |