summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx')
-rw-r--r--Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx145
1 files changed, 99 insertions, 46 deletions
diff --git a/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx b/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx
index bfbd61432aa..192804000a8 100644
--- a/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx
+++ b/Master/texmf-dist/source/latex/svn-multi/svn-multi.dtx
@@ -24,27 +24,30 @@
% \fi
% \iffalse
%<*package|driver>
-% $Id: svn-multi.dtx 845 2009-04-21 12:03:08Z martin $
+% $Id: svn-multi.dtx 1448 2009-10-19 21:28:41Z martin $
%
-\def\svnmulti@version {v2.1a}
-\def\svnmulti@rev $#1: #2 ${\def\svnmulti@rev{#2}}
-\def\svnmulti@date $#1: #2-#3-#4 #5 ${\def\svnmulti@date{#2/#3/#4}}
-\svnmulti@rev $Rev: 845 $\relax
-\svnmulti@date $Date: 2009-04-21 13:03:08 +0100 (Tue, 21 Apr 2009) $\relax
-
+\def\svnmulti@version{v2.2}
+\RequirePackage{svn-prov}
%</package|driver>
%<*driver>
-\ProvidesFile{svn-multi.dtx}
- [\svnmulti@date\space\svnmulti@version\space SVN Keywords for multi-file LaTeX documents]
-
-\def\svnmulti@date $#1: #2-#3-#4 #5 $ {%
- \def\svnmulti@today{{\year#2\month#3\day#4\today}}%
- \def\svnmulti@date{#2/#3/#4}%
-}
-\svnmulti@date $Date: 2009-04-21 13:03:08 +0100 (Tue, 21 Apr 2009) $
+\ProvidesFileSVN{$Id: svn-multi.dtx 1448 2009-10-19 21:28:41Z martin $}
+ [\svnmulti@version\space SVN Keywords for multi-file LaTeX documents]
+\GetFileInfoSVN*
+\let\svnmulti@date\filedate
+\let\svnmulti@rev\filerev
\documentclass{ltxdoc}
+\def\svnmulti@today#1/#2/#3\relax{%
+ \begingroup
+ \year#1\relax
+ \month#2\relax
+ \day#3\relax
+ \xdef\svnmulti@today{\today}
+ \endgroup
+}
+\expandafter\svnmulti@today\svnmulti@date\relax
+
\usepackage{svn-multi}[\svnmulti@date]
\usepackage{booktabs}
\usepackage{ifpdf}
@@ -277,6 +280,7 @@
%\OnlyDescription
\widowpenalty=500
\clubpenalty=500
+\listfiles
\begin{document}
\DocInput{svn-multi.dtx}%
\PrintChanges
@@ -287,7 +291,7 @@
%<*package>
% \fi
%
-% \CheckSum{2652}
+% \CheckSum{2728}
%
% {\makeatother
% \CharacterTable
@@ -330,8 +334,8 @@
% support, auto-include of images, files as subgroups and table of revisions.}
% \changes{v2.1}{2009/03/27}{Added automatic extraction of keywords from
% Subversion 'entries' file: 'autokw' option}
-% \changes{v2.1a}{2009/04/21}{Bugfix for macros which external if switches which
-% might not be defined by all classes}
+% \changes{v2.2}{2009/10/19}{Added \css{ifsvnmodified} and
+% \css{ifsvnfilemodified} macros. Some bug fixes.}
%
% ^^A \GetFileInfo{svn-multi.dtx}
%
@@ -856,6 +860,22 @@
% macros. You can \eg say |\svnkwdef{Rev}{123}| and then typeset it with
% |\svnkw{Revision}| or |\svnkw{LastChangedRev}| if you like.
%
+% \subsubsection*{New in version 2.2. Will change in future versions:}
+% \DescribeMacro{ifsvnfilemodified}{\marg{case:~modified}\marg{case:~not
+% modified}}
+% \DescribeMacro*{ifsvnmodified}{\marg{case:~modified}\marg{case:~not modified}}
+% This two macro can be used to check if either the current or any file was
+% modified after it was last checked into the repository. At the moment (v2.2) a
+% file is marked `modified' if there is either a `|*|' or `|M|' after the
+% revision number, \eg `|$||Rev: 123M $|'. Such an marker is automatically added
+% for exported files (`|svn export|') if there where locally modified, but can
+% also be added manually.
+%
+% Future versions of this package might mark files as modified by use of the
+% \op{autokw} option which can read this information out of the working
+% directory Subversion entries.
+%
+% \newpage
% \subsection{Accessing Date Values}\label{sec:date}
% \begin{tabular}{@{}l@{\hspace{-2\macrosep}}l@{\hspace{-2\macrosep}}l@{}}\\
% \DescribeMacro*{svnyear}{}&
@@ -1001,7 +1021,6 @@
% Please note that you can't use \pkg{hyperref}'s |\nolinkurl| because it won't
% expand \cs{svnkw}.
%
-%
% \subsection{Table of Revisions}\label{sec:table}
% Version 2.0 introduces this new feature which allows a overview table to be
% typeset which holds the version control information of all files of the
@@ -1385,8 +1404,9 @@
% \subsubsection*{Package Identification}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\ProvidesPackage{svn-multi}
- [\svnmulti@date\space\svnmulti@version\space SVN Keywords for multi-file LaTeX documents]
+\ProvidesPackageSVN
+ {$Id: svn-multi.dtx 1448 2009-10-19 21:28:41Z martin $}
+ [\svnmulti@version\space SVN Keywords for multi-file LaTeX documents]
% \end{macrocode}
% \subsubsection*{Options}
@@ -1587,22 +1607,22 @@
% \begin{macro}{\svn@ifvalidrev}[1]{macro name}
% Checks if the given macro (by name) is a valid revision, \ie defined and
-% greater than zero.
+% not equal to the init value.
% \begin{macrocode}
\def\svn@ifvalidrev#1{%
\begingroup
\@ifundefined{#1}%
- {\def\svn@temp{-1}}%
+ {\let\svn@temp\svn@revinit}%
{\expandafter\edef
\expandafter\svn@temp\expandafter{\csname #1\endcsname}}%
- \ifnum\svn@temp>-1\relax
+ \ifnum\svn@temp=\svn@revinit\relax
\endgroup
\expandafter
- \@firstoftwo
+ \@secondoftwo
\else
\endgroup
\expandafter
- \@secondoftwo
+ \@firstoftwo
\fi
}
% \end{macrocode}
@@ -1666,7 +1686,7 @@
% \subsection{Definition of init values}
% Initialisation of at least the revision to a numeric value is necessary to not
% break the |\ifnum| tests later in this package. The revision is initialised to
-% -1, but will be set to 0 if an unexpanded |$||Rev:$| keyword is read. This way
+% -2, but will be set to 0 if an unexpanded |$||Rev:$| keyword is read. This way
% it can be tested if a file had any keyword macros or not.\par
% Note that there a two different macros for the document global keywords:\par
% The user level |\svn|\meta{kw} macros hold the global value and are only valid
@@ -1684,7 +1704,10 @@
% |\svn@g|\meta{current group}|@|\meta{kw}.
% \begin{macrocode}
% Init values
-\def\svnrev{-1} \def\@svn@rev{-1}
+\def\svn@revinit{-2}
+\let\svnrev\svn@revinit \let\@svn@rev\svn@revinit
+\let\ifsvnmodified\@secondoftwo
+\def\@svn@modified{@secondoftwo}%
\def\svndate{} \def\@svn@date{}
\def\svnauthor{} \def\@svn@author{}
\def\svnyear{0000} \def\@svn@year{0000}
@@ -1703,7 +1726,8 @@
\let\@svng@@files\relax
\def\svn@initfile{%
- \gdef\svnfilerev{-1}%
+ \global\let\svnfilerev\svn@revinit
+ \global\let\ifsvnfilemodified\@secondoftwo
\gdef\svnfiledate{}%
\gdef\svnfileauthor{}%
\gdef\svnfileyear{0000}%
@@ -1719,6 +1743,8 @@
\gdef\svnfiledir{}%
}
\svn@initfile
+
+\newif\ifsvn@modified
% \end{macrocode}
% \subsection{Auto-Keywords}
@@ -2115,6 +2141,11 @@
% \begin{macrocode}
\def\@svn@updateid#1#2#3#4{%
\xdef\svnfilerev{#1}%
+ \ifsvn@modified
+ \global\let\ifsvnfilemodified\@firstoftwo
+ \else
+ \global\let\ifsvnfilemodified\@secondoftwo
+ \fi
\xdef\svnfiledate{#2}%
\xdef\svnfileauthor{#3}%
\xdef\svnfileurl{#4}%
@@ -2127,6 +2158,7 @@
\ifx\svnfilerev\empty\else
\ifnum\@svn@rev<\svnfilerev
\xdef\@svn@rev{\svnfilerev}%
+ \xdef\@svn@modified{\ifsvnfilemodified{@firstoftwo}{@secondoftwo}}%
\xdef\@svn@date{\svnfiledate}%
\xdef\@svn@author{\svnfileauthor}%
\xdef\@svn@year{\svnfileyear}%
@@ -2167,10 +2199,10 @@
% 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}{}%
+ \svnkwdef{URL}{}%
+ \svnkwdef{Date}{}%
+ \svnkwdef{Revision}{0}%
+ \svnkwdef{Author}{}%
% \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
@@ -2248,11 +2280,11 @@
% \end{macrocode}
% Now the update macros for date and id are called.
% \begin{macrocode}
- \ifx\svnkwLastChangedDate\empty\else
- \@svn@scanlongdate{\svnkwLastChangedDate}%
+ \ifx\svnkwDate\empty\else
+ \@svn@scanlongdate{\svnkwDate}%
\fi
- \@svn@updateid{\svnkw{LastChangedRevision}}{\svnkw{LastChangedDate}}%
- {\svnkw{LastChangedBy}}{\svnkw{HeadURL}}%
+ \@svn@updateid{\svnkw{Revision}}{\svnkw{Date}}%
+ {\svnkw{Author}}{\svnkw{URL}}%
\ignorespaces
}%
% \end{macrocode}
@@ -2356,12 +2388,29 @@
%
% The keywords |Author| and |Date| are just calling \cs{svnkwdef@} with a fixed
% first argument. For the revision the value is checked if empty and then a 0
-% is substituted.
+% is substituted. Also a temp counter is used to strip any trailing characters
+% like `M' which indicate an exported and modified file.
% \begin{macrocode}
\def\svnkwdef@Rev#1{%
\svn@ifempty{#1}%
{\svnkwdef@{Rev}{0}}%
- {\svnkwdef@{Rev}{#1}}%
+ {%
+ \afterassignment\svnkwdef@Rev@
+ \@tempcnta=#1\relax
+ }%
+}
+\def\svnkwdef@Rev@#1\relax{%
+ \svnkwdef@{Rev}{\the\@tempcnta}%
+ \def\svn@temp{#1}%
+ \if M\svn@temp\relax
+ \global\svn@modifiedtrue
+ \else
+ \if *\svn@temp\relax
+ \global\svn@modifiedtrue
+ \else
+ \global\svn@modifiedfalse
+ \fi
+ \fi
}
\def\svnkwdef@Author#1{\svnkwdef@{Author}{#1}}
\def\svnkwdef@Date#1{\svnkwdef@{Date}{#1}}
@@ -2373,14 +2422,14 @@
\let\svnkwdef@Revision=\svnkwdef@Rev
\let\svnkwdef@LastChangedRevision=\svnkwdef@Rev
\let\svnkwdef@LastChangedBy=\svnkwdef@Author
-\let\svnkwdef@LastChangedAt=\svnkwdef@Date
+\let\svnkwdef@LastChangedDate=\svnkwdef@Date
% \end{macrocode}
% and then for reading.
% \begin{macrocode}
\def\svnkwRevision{\svnkwRev}
\def\svnkwLastChangedRevision{\svnkwRev}
\def\svnkwLastChangedBy{\svnkwAuthor}
-\def\svnkwLastChangedAt{\svnkwDate}
+\def\svnkwLastChangedDate{\svnkwDate}
\def\svnkwURL{\svnkwHeadURL}
% \end{macrocode}
% So \eg |\svnkw{LastChangedRevision}| is always be the
@@ -2860,6 +2909,7 @@ Try a different version, e.g. v2.1.1 from 2008/02/27}{}%
{\svnfilefname}%
{\svn@g}%
{\svn@pg}%
+ {\ifsvnfilemodified{@firstoftwo}{@secondoftwo}}%
}\svn@filestack}%
}
@@ -2867,7 +2917,7 @@ Try a different version, e.g. v2.1.1 from 2008/02/27}{}%
\svn@restorefilekws@#1\empty
\empty \empty \empty \empty
\empty \empty \empty \empty
- \empty \empty \empty \empty
+ \empty \empty \empty \empty \empty
\svn@ifempty{#2}%
{\gdef\svn@filestack{{}}}%
{\gdef\svn@filestack{#2}}%
@@ -2885,13 +2935,15 @@ Try a different version, e.g. v2.1.1 from 2008/02/27}{}%
\svn@restorefilekws@@
}
-\def\svn@restorefilekws@@#1#2#3#4#5#6{%
+\def\svn@restorefilekws@@#1#2#3#4#5#6#7{%
\gdef\svnfiletimezonehour{#1}%
\gdef\svnfiletimezoneminute{#2}%
\gdef\svnfileurl{#3}%
\gdef\svnfilefname{#4}%
\gdef\svn@g{#5}%
\gdef\svn@pg{#6}%
+ \expandafter\global\expandafter\let
+ \expandafter\ifsvnfilemodified\csname#7\endcsname%
}
\def\svn@popfilestack{%
@@ -3200,7 +3252,7 @@ Try a different version, e.g. v2.1.1 from 2008/02/27}{}%
% Initialises group.
% \begin{macrocode}
\def\svn@initgroup#1{%
- \svn@gkwset{#1}{rev}{-1}%
+ \svn@gkwset{#1}{rev}{\svn@revinit}%
\svn@gkwset{#1}{date}{}%
\svn@gkwset{#1}{author}{}%
\svn@gkwset{#1}{year}{0000}%
@@ -3306,7 +3358,7 @@ Try a different version, e.g. v2.1.1 from 2008/02/27}{}%
% file keyword information is written.
% \begin{macrocode}
\def\svn@subgroup#1{%
- \ifnum\svnfilerev>-1\relax
+ \ifnum\svnfilerev=\svn@revinit\else
\expandafter\ifx\csname svn@g@#1\endcsname\relax%
\expandafter\gdef\csname svn@g@#1\endcsname{1}%
\svn@updategroup{#1}%
@@ -4115,6 +4167,7 @@ patch generated macros '\string\pgf@image@<name>!' from the 'pgf' package!}%
\immediate\write\svn@write{^^J%
\@percentchar\space Global values:^^J%
\noexpand\def\noexpand\svnrev{\@svn@rev}^^J%
+ \noexpand\let\noexpand\ifsvnmodified\@backslashchar\@svn@modified^^J%
\noexpand\def\noexpand\svndate{\@svn@date}^^J%
\noexpand\def\noexpand\svnauthor{\@svn@author}^^J%
\noexpand\def\noexpand\svnyear{\@svn@year}^^J%
@@ -4305,7 +4358,7 @@ patch generated macros '\string\pgf@image@<name>!' from the 'pgf' package!}%
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{svnkw}
- [2009/03/27 v2.1 Backward compatibility wrapper for svn-multi]
+ [2009/03/27 v2.1 Backward compatibility wrapper for svn-multi]
\PackageWarning{svnkw}{The package 'svnkw' got renamed to 'svn-multi' and is now
only a backward compatibility wrapper which loads 'svn-multi'. Please adjust
your document preamble to use the new name.}