You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1849 lines
43 KiB

%%
%% 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-2009 by Martin Scharrer <martin@scharrer-online.de>
%%
%% 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, svn-multi-pl.dtx, svn-multi.ins
%% and the derived files svn-multi.sty, svnkw.sty and svn-multi.pl.
%%
\makeatletter
\def\svnmulti@version{v2.3}
\RequirePackage{svn-prov}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackageSVN
{$Id: svn-multi.dtx 1866 2010-07-19 11:17:15Z martin $}
[\svnmulti@version\space SVN Keywords for multi-file LaTeX documents]
\RequirePackage{kvoptions}
\SetupKeyvalOptions{%
family = svn-multi,
prefix = @svnmulti@
}
\newif\if@svnmulti@anygraphic
\newif\if@svnmulti@autoload
\newif\if@svnmulti@autokw
\newif\if@svnmulti@autokwall
\DeclareVoidOption{old}{%
\@svnmulti@verbatimtrue
\@svnmulti@groupsfalse
\@svnmulti@externalfalse
\@svnmulti@graphicsfalse
\@svnmulti@pgfimagesfalse
\@svnmulti@autoloadfalse
\@svnmulti@tablefalse
\@svnmulti@filehooksfalse
\@svnmulti@subgroupsfalse
}
\DeclareVoidOption{all}{%
\@svnmulti@verbatimtrue
\@svnmulti@groupstrue
\@svnmulti@externaltrue
\@svnmulti@graphicstrue
\@svnmulti@pgfimagestrue
\@svnmulti@autoloadtrue
\@svnmulti@tabletrue
\@svnmulti@filehookstrue
\@svnmulti@subgroupstrue
}
\DeclareBoolOption[true]{verbatim}
\DeclareBoolOption[false]{groups}
\DeclareBoolOption[false]{external}
\DeclareBoolOption[false]{subgroups}
\DeclareBoolOption[false]{graphics}
\DeclareBoolOption[false]{pgfimages}
\DeclareStringOption{autoload}[true]
\DeclareBoolOption[false]{table}
\DeclareBoolOption[false]{filehooks}
\DeclareStringOption[false]{autokw}[all]
\ExecuteOptions{old}
\ProcessKeyvalOptions{svn-multi}
\def\svn@depoption#1{%
\csname if@svnmulti@#1\endcsname\else
\message{svn-multi: Required option '#1' enabled.}%
\csname @svnmulti@#1true\endcsname
\fi
}
\if@svnmulti@groups
\svn@depoption{filehooks}
\fi
\if@svnmulti@external
\svn@depoption{filehooks}
\fi
\if@svnmulti@subgroups
\svn@depoption{groups}
\svn@depoption{filehooks}
\fi
\if@svnmulti@graphics
\svn@depoption{external}
\svn@depoption{autoload}
\svn@depoption{filehooks}
\fi
\if@svnmulti@pgfimages
\svn@depoption{external}
\svn@depoption{autoload}
\svn@depoption{filehooks}
\fi
\if@svnmulti@autoload
\svn@depoption{external}
\svn@depoption{filehooks}
\fi
\if@svnmulti@table
\svn@depoption{groups}
\svn@depoption{filehooks}
\fi
\ifx\@svnmulti@autoload\@undefined
\else
\ifx\@svnmulti@autoload\empty
\else
\def\svn@temp{true}
\ifx\@svnmulti@autoload\svn@temp
\@svnmulti@autoloadtrue
\svn@depoption{external}
\svn@depoption{filehooks}
\else
\def\svn@temp{false}
\ifx\@svnmulti@autoload\svn@temp
\if@svnmulti@autoload
\PackageWarning{svn-multi}{Option 'autoload' disabled.}
\fi
\@svnmulti@autoloadfalse
\else
\PackageError{svn-multi}%
{Invalid value for 'autoload' option: '\@svnmulti@autoload'^^J%
! Only 'true','false' or empty (='true') are allowed!}
\fi\fi\fi\fi
\def\svn@temp{true}
\ifx\@svnmulti@autokw\svn@temp
\@svnmulti@autokwtrue
\@svnmulti@autokwalltrue
\svn@depoption{filehooks}
\fi
\def\svn@temp{all}
\ifx\@svnmulti@autokw\svn@temp
\@svnmulti@autokwtrue
\@svnmulti@autokwalltrue
\svn@depoption{filehooks}
\fi
\def\svn@temp{ext}
\ifx\@svnmulti@autokw\svn@temp
\@svnmulti@autokwtrue
\@svnmulti@autokwallfalse
\fi
\def\svn@temp{false}
\ifx\@svnmulti@autokw\svn@temp
\@svnmulti@autokwfalse
\@svnmulti@autokwallfalse
\fi
\if@svnmulti@graphics
\@svnmulti@anygraphictrue
\fi
\if@svnmulti@pgfimages
\@svnmulti@anygraphictrue
\fi
\def\svn@ifempty#1{%
\begingroup
\edef\svn@temp{#1}%
\ifx\svn@temp\empty
\endgroup
\expandafter
\@firstoftwo
\else
\endgroup
\expandafter
\@secondoftwo
\fi
}
\def\svn@ifequal#1#2{%
\begingroup
\edef\svn@stringa{#1}%
\edef\svn@stringb{#2}%
\ifx\svn@stringa\svn@stringb
\endgroup
\expandafter
\@firstoftwo
\else
\endgroup
\expandafter
\@secondoftwo
\fi
}
\def\svn@ifvalidrev#1{%
\begingroup
\@ifundefined{#1}%
{\let\svn@temp\svn@revinit}%
{\expandafter\edef
\expandafter\svn@temp\expandafter{\csname #1\endcsname}}%
\ifnum\svn@temp=\svn@revinit\relax
\endgroup
\expandafter
\@secondoftwo
\else
\endgroup
\expandafter
\@firstoftwo
\fi
}
\def\svn@ifeof#1{%
\ifeof#1%
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\def\svn@ifonlyone#1{%
\expandafter\expandafter\expandafter
\svn@@ifonlyone\csname @svng@#1@files\endcsname,\relax
}
\def\svn@@ifonlyone#1,#2\relax{%
\svn@ifempty{#2}
}
\def\svn@input#1{%
\begingroup
\let\svn@rg\svn@g
\IfFileExists{#1}{\@@input #1\relax}{}%
\global\let\svn@g\svn@rg
\endgroup
}
\def\svn@inputsvx#1{%
\svn@pushfilestack
\begingroup
\svn@normalcatcodes
\svn@input{#1.svx}%
\endgroup
\svn@popfilestack
}
\def\svn@normalcatcodes{%
\catcode`\\=0\relax
\catcode`\{=1\relax
\catcode`\}=2\relax
\catcode`\$=3\relax
\catcode`\&=4\relax
\catcode`\^^M=5\relax
\catcode`\#=6\relax
\catcode`\^=7\relax
\catcode`\_=8\relax
\catcode`\ =10\relax
\catcode`\@=12\relax
\catcode`\~=13\relax
\catcode`\%=14\relax
}
\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}
\def\svnmonth{00} \def\@svn@month{00}
\def\svnday{00} \def\@svn@day{00}
\def\svnhour{00} \def\@svn@hour{00}
\def\svnminute{00} \def\@svn@minute{00}
\def\svnsecond{00} \def\@svn@second{00}
\def\svntimezonehour{+00} \def\@svn@timezonehour{+00}
\def\svntimezoneminute{00} \def\@svn@timezoneminute{00}
\def\svnmainurl{NOT SET} \def\svnmainfilename{NOT SET}
\def\svnurl{} \def\svnfname{}
\def\svn@temp{}
\def\svn@pg{} \def\svn@g{} \def\svn@cg{\svn@g} \def\svn@rg{\svn@pg}
\let\@svng@@files\relax
\def\svn@initfile{%
\global\let\svnfilerev\svn@revinit
\global\let\ifsvnfilemodified\@secondoftwo
\gdef\svnfiledate{}%
\gdef\svnfileauthor{}%
\gdef\svnfileyear{0000}%
\gdef\svnfilemonth{00}%
\gdef\svnfileday{00}%
\gdef\svnfilehour{00}%
\gdef\svnfileminute{00}%
\gdef\svnfilesecond{00}%
\gdef\svnfiletimezonehour{+00}%
\gdef\svnfiletimezoneminute{00}%
\gdef\svnfileurl{}%
\gdef\svnfilefname{}%
\gdef\svnfiledir{}%
}
\svn@initfile
\newif\ifsvn@modified
\begingroup
\@makeother\^^L
\if@svnmulti@autokw
\gdef\svne@ff{^^L}
\fi
\endgroup
\if@svnmulti@autokw
\newread\svne@read
\newcommand*{\svne@catcodes}{%
\let\do\@makeother
\endlinechar=-1%
\dospecials
\do\-\do\:\do\.\do\^^L%
}
\def\svne@readline#1{%
\ifeof\svne@read
\def#1{}%
\else
\read\svne@read to #1\relax
\fi
}
\def\svne@gobblerest{%
\ifeof\svne@read
\let\next\relax
\else
\read\svne@read to \svn@temp
\ifx\svn@temp\svne@ff
\let\next\relax
\else
\let\next\svne@gobblerest
\fi
\fi
\next
}
\def\svne@endread{%
\closein\svne@read
}
\newcommand*{\svne@parseentriesfile}[1]{%
\begingroup
\let\next\relax
\def\svne@version{8}%
\openin\svne@read=#1format\relax
\ifeof\svne@read\else
\svne@readline\svne@version
\closein\svne@read
\fi
\ifnum\svne@version>7\relax
\openin\svne@read=#1entries\relax
\ifeof\svne@read\else
\svne@catcodes
\svne@readline\svne@version
\ifnum\svne@version>7\relax
\def\next{\svne@parsedirentry
\svne@parseentries}%
\else
\closein\svne@read
\fi
\fi
\fi
\next
\endgroup
}
\newcommand*{\svne@parsedirentry}{%
\svne@readline\svne@name
\svne@readline\svne@kind
\svn@ifempty{\svne@name}%
{\svn@ifequal{\svne@kind}{dir}%
{%
{\svne@readline\svn@temp}%
\svne@readline\svne@baseurl
\svne@gobblerest
}{}%
}{}%
}
\begingroup
\@makeother\-
\@makeother\:
\@makeother\.
\gdef\svne@scandate#1{%
\expandafter\svne@scandate@#1\empty
0000-00-00T00:00:00.00000Z\empty\empty
}
\gdef\svne@scandate@#1-#2-#3T#4:#5:#6.#7\empty#8\empty{%
\xdef\svnfileyear{#1}%
\gdef\svnfilemonth{#2}%
\gdef\svnfileday{#3}%
\gdef\svnfilehour{#4}%
\gdef\svnfileminute{#5}%
\gdef\svnfilesecond{#6}%
\gdef\svnfiletimezonehour{+00}%
\gdef\svnfiletimezoneminute{00}%
\gdef\svnfiledate{#1-#2-#3 #4:#5:#6Z}%
\def\svne@date{#1-#2-#3 #4:#5:#6Z}%
}
\endgroup
\newcommand*{\svne@parseentries}{%
\svn@ifeof{\svne@read}%
{}%
{%
\svne@readline\svne@name
\@onelevel@sanitize\svne@name
\svn@ifeof{\svne@read}%
{}%
{%
\svne@readline\svne@kind
\svn@ifequal{\svne@kind}{file}%
{%
\svne@readline\svn@temp
\svne@readline\svn@temp
\svne@readline\svn@temp
\svne@readline\svn@temp
\svne@readline\svn@temp
\svne@readline\svn@temp
\svne@readline\svne@date
\svne@readline\svne@rev
\svne@readline\svne@author
%\@onelevel@sanitize\svne@date
\svne@scandate{\svne@date}%
\edef\svne@url{\svne@baseurl/\svne@name}%
\svne@handleentry
}{}%
\svne@gobblerest
\svne@parseentries
}%
}%
}
\def\svne@handleentry{%
\ifx\svne@rev\empty
\let\svne@rev\svn@revinit
\fi
\svn@ifequal{\svne@name}{\svnfilefname}%
{%
\message{^^J%
Read from '.svn/entries' file:^^J%
Filename: \svne@name^^J%
Date: \svne@date^^J%
Revision: \svne@rev^^J%
Author: \svne@author^^J%
HeadURL: \svne@url^^J%
^^J%
}%
\svnkwdef{Filename}{\svne@name}%
\svnkwdef{Date}{\svne@date}%
\svnkwdef{Revision}{\svne@rev}%
\svnkwdef{Author}{\svne@author}%
\svnkwdef{HeadURL}{\svne@url}%
\@svn@updateid{\svne@rev}{\svne@date}{\svne@author}{\svne@url}%
\svne@endread
}{}%
}%
\def\svnegetfile#1{%
\begingroup
\svn@getfilename{#1}%
\edef\svnfilefname{\svnfilefname}%
\@onelevel@sanitize\svnfilefname
\svne@parseentriesfile{\svnfiledir .svn/}%
\svne@parseentriesfile{\svnfiledir _svn/}%
\endgroup
}
\if@svnmulti@autokwall
\AtBeginDocument{%
\svnegetfile{\jobname.\svn@mainext}%
}
\fi
\fi
\def\svntimezone{\svntimezonehour\svntimezoneminute\svn@gobblezeros}
\def\svnfiletimezone{\svnfiletimezonehour\svnfiletimezoneminute\svn@gobblezeros}
\def\svncgtimezone{\svncgtimezonehour\svncgtimezoneminute}
\def\svn@gobblezeros{%
\futurelet\svn@nextchar\svn@gobblezeros@
}
\def\svn@gobblezeros@{%
\let\@tempa=\relax
\def\@tempb{0}%
\ifx0\svn@nextchar
\let\@tempa=\@gobbletwo
\fi
\@tempa
}
\def\svntime{\svnhour:\svnminute:\svnsecond}
\def\svnfiletime{\svnfilehour:\svnfileminute:\svnfilesecond}
\def\svncgtime{\svncghour:\svncgminute:\svncgsecond}
\newcommand*{\svntoday}{%
\begingroup
\year\svnyear \month\svnmonth \day\svnday
\relax \today
\endgroup
}
\newcommand*{\svnfiletoday}{%
\begingroup
\year\svnfileyear \month\svnfilemonth \day\svnfileday
\relax \today
\endgroup
}
\newcommand*{\svncgtoday}{%
\@ifundefined{svng@\svn@cg @year}{??}{%
\begingroup
\year\svncgyear \month\svncgmonth \day\svncgday
\relax \today
\endgroup
}%
}%
\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}{#1}%
\svnkwdef{Filename}{#1}%
\svnkwdef{Date}{#3 #4}%
\svnkwdef{Revision}{#2}%
\svnkwdef{Author}{#5}%
}
\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}%
\svn@getfilename\svnfileurl%
\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}%
\xdef\@svn@month{\svnfilemonth}%
\xdef\@svn@day{\svnfileday}%
\xdef\@svn@hour{\svnfilehour}%
\xdef\@svn@minute{\svnfileminute}%
\xdef\@svn@second{\svnfilesecond}%
\xdef\@svn@timezonehour{\svnfiletimezonehour}%
\xdef\@svn@timezoneminute{\svnfiletimezoneminute}%
\xdef\@svn@url{\svnfileurl}%
\xdef\@svn@fname{\svnfilefname}%
\fi
\if@svnmulti@groups
\ifx\svn@g\empty\else
\svn@updategroup{\svn@g}%
\fi
\if@svnmulti@subgroups
\ifsvnsubgroups
\svn@updategroup{\svn@filedir\svn@filebase}%
\fi
\fi
\fi
\fi
}
\def\@svncg@save#1#2{%
\expandafter\xdef\csname @svng@\svn@g @#1\endcsname{#2}%
}
\newcommand{\svnidlong}{%
\svnkwdef{URL}{}%
\svnkwdef{Date}{}%
\svnkwdef{Revision}{0}%
\svnkwdef{Author}{}%
\if@svnmulti@verbatim
\expandafter\svnidlong@readverb
\else
\expandafter\svnidlong@readargs
\fi
}
\def\svnidlong@readverb{%
\@ifnextchar\bgroup
{\svnidlong@readverb@\svnidlong@readverb@a}%
{\PackageError{svn-multi}{Wrong syntax for \string\svnidlong}{}}%
}
\def\svnidlong@readverb@#1{%
\begingroup
\svn@catcodes
\catcode`\{=1\relax
\catcode`\}=2\relax
#1%
}
\def\svnidlong@readverb@a#1{%
\endgroup
\svnkwsave@read #1\relax
\@ifnextchar\bgroup
{\svnidlong@readverb@\svnidlong@readverb@b}%
{\PackageError{svn-multi}{Wrong syntax for \string\svnidlong}{}}%
}
\def\svnidlong@readverb@b#1{%
\endgroup
\svnkwsave@read #1\relax
\@ifnextchar\bgroup
{\svnidlong@readverb@\svnidlong@readverb@c}%
{\PackageError{svn-multi}{Wrong syntax for \string\svnidlong}{}}%
}
\def\svnidlong@readverb@c#1{%
\endgroup
\svnkwsave@read #1\relax
\@ifnextchar\bgroup
{\svnidlong@readverb@\svnidlong@readverb@d}%
{\PackageError{svn-multi}{Wrong syntax for \string\svnidlong}{}}%
}
\def\svnidlong@readverb@d#1{%
\endgroup
\svnkwsave@read #1\relax
\ifx\svnkwDate\empty\else
\@svn@scanlongdate{\svnkwDate}%
\fi
\@svn@updateid{\svnkw{Revision}}{\svnkw{Date}}%
{\svnkw{Author}}{\svnkw{URL}}%
\ignorespaces
}
\if@svnmulti@verbatim
\def\svn@catcodes{%
\let\do\@makeother
\dospecials
\catcode`\^^M9
\catcode`\ 10
\catcode`\{1
\catcode`\}2
}
\else
\def\svn@catcodes{}
\fi
\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\svnkwDate\empty\else
\@svn@scanlongdate{\svnkwDate}%
\fi
\@svn@updateid{\svnkw{Revision}}{\svnkw{Date}}%
{\svnkw{Author}}{\svnkw{URL}}%
\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
\if@svnmulti@verbatim
\catcode`\$=12
\fi
\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{%
\svn@ifempty{#1}%
{\svnkwdef@{Rev}{0}}%
{%
\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}}
\def\svnkwdef@URL#1{\svnkwdef@{HeadURL}{#1}}
\let\svnkwdef@Revision=\svnkwdef@Rev
\let\svnkwdef@LastChangedRevision=\svnkwdef@Rev
\let\svnkwdef@LastChangedBy=\svnkwdef@Author
\let\svnkwdef@LastChangedDate=\svnkwdef@Date
\def\svnkwRevision{\svnkwRev}
\def\svnkwLastChangedRevision{\svnkwRev}
\def\svnkwLastChangedBy{\svnkwAuthor}
\def\svnkwLastChangedDate{\svnkwDate}
\def\svnkwURL{\svnkwHeadURL}
\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{%
\svn@ifempty{#2}%
{\svnkwdef{#1}{}}%
{\svn@stripcolon#2\relax\svnkwdef{#1}{\svn@value}}%
}
\def\svn@stripcolon#1:\relax{%
\svn@ifempty{#1}%
{\gdef\svn@value{}}%
{\svn@ifequal{#1}{ }%
{\gdef\svn@value{}}%
{\svn@stripspace#1\relax\relax}%
}%
}
\def\svn@stripspace#1#2\relax{%
\svn@ifequal{#1}{ }%
{\gdef\svn@value{#2}}%
{\svn@striptrailingspace#1#2\relax}%
}
\def\svn@striptrailingspace#1 \relax{%
\gdef\svn@value{#1}%
}
\def\svn@gdefverb#1{%
\begingroup
\def\svn@temp{#1}%
\begingroup
\if@svnmulti@verbatim
\svn@catcodes
\fi
\svn@gdefverb@
}
\def\svn@gdefverb@#1{%
\endgroup
\expandafter\gdef\svn@temp{#1}%
\endgroup
}
\def\svn@namegdefverb#1{%
\begingroup
\expandafter\def
\expandafter\svn@temp
\expandafter{\csname #1\endcsname}%
\begingroup
\if@svnmulti@verbatim
\svn@catcodes
\fi
\svn@gdefverb@
}
\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\svnfiletimezonehour{+00}%
\gdef\svnfiletimezoneminute{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 #7 #8\relax{%
\gdef\svnfileyear{#1}%
\gdef\svnfilemonth{#2}%
\gdef\svnfileday{#3}%
\gdef\svnfilehour{#4}%
\gdef\svnfileminute{#5}%
\gdef\svnfilesecond{#6}%
\@svn@parsetimezone#7\relax%
}
\def\@svn@parsetimezone#1#2#3#4#5\relax{%
\gdef\svnfiletimezonehour{#1#2#3}%
\gdef\svnfiletimezoneminute{#4#5}%
}
\def\svnpdfdate{%
\svnyear\svnmonth\svnday
\svnhour\svnminute\svnsecond\svntimezonehour'\svntimezoneminute'%
}
\newcommand{\svnsetmainfile}{%
\xdef\svnmainurl{\svnfileurl}%
\xdef\svnmainfilename{\svnfilefname}%
}
\AtBeginDocument{\svnsetmainfile}
\newcommand{\svnRegisterAuthor}[2]{%
\expandafter\def\csname svn@author@#1\endcsname{#2}%
}
\newcommand{\svnFullAuthor}{%
\@ifnextchar{*}%
{\svnFullAuthor@star}%
{\svnFullAuthor@normal}%
}%
\def\svnFullAuthor@star*#1{%
\edef\svn@temp{#1}%
\svnFullAuthor@{\svn@temp}{~(\svn@temp)}%
}%
\def\svnFullAuthor@normal#1{%
\edef\svn@temp{#1}%
\svnFullAuthor@{\svn@temp}{}%
}%
\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{%
\edef\svn@temp{#1}%
\svnFullRevision@{\svn@temp}{~(r\svn@temp)}%
}
\def\svnFullRevision@normal#1{%
\edef\svn@temp{#1}%
\svnFullRevision@{\svn@temp}{}%
}
\def\svnFullRevision@#1#2{%
\@ifundefined{svn@revision@#1}%
{Revision #1}%
{\csname svn@revision@#1\endcsname #2}%
}
\if@svnmulti@filehooks
\RequirePackage{fink}[2008/02/27]
\begingroup
\def\svn@finkerror{%
\PackageError{svn-multi}{Your installed version of the 'fink' package does not
provide the needed macros. It is either too old or too new.
Try a different version, e.g. v2.1.1 from 2008/02/27}{}%
\let\svn@finkerror\relax
}
\@ifundefined{finkpath}{\svn@finkerror}{}%
\@ifundefined{finkdir}{\svn@finkerror}{}%
\@ifundefined{finkbase}{\svn@finkerror}{}%
\@ifundefined{fink@prepare}{\svn@finkerror}{}%
\@ifundefined{fink@restore}{\svn@finkerror}{}%
\@ifundefined{fnk@maindir}{\svn@finkerror}{}%
\@ifundefined{fnk@mainext}{\svn@finkerror}{}%
\endgroup
\def\svn@removedotslash#1{%
\def\svn@removedotslash@##1##2##3\relax{%
\svn@ifequal{./}{##1##2}%
{\def\next{\svn@removedotslash@##3\empty\empty\empty\relax}}%
{\xdef#1{##1##2##3}\let\next\relax}%
\next
}%
\expandafter\svn@removedotslash@#1\empty\empty\empty\relax
}
\let\svn@mainext\fnk@mainext
\let\svn@maindir\fnk@maindir
\svn@removedotslash\svn@maindir
\edef\svn@filebase{\jobname}%
\edef\svn@fileext{\svn@mainext}%
\edef\svn@filedir{\svn@maindir}%
\def\svn@filename{\fink@file\svn@filebase\svn@fileext}%
\def\svn@filepath{\svn@filedir\svn@filename}%
\def\svnmulti@begininputfilehook{}
\message{Package svn-multi: patching macro '\string\fink@prepare' from the
'fink' package!}%
\let\svnmulti@fink@prepare\fink@prepare
\renewcommand*{\fink@prepare}[1]{%
\svnmulti@fink@prepare{#1}%
\svn@pushfilestack
\if@svnmulti@groups
\svn@ifequal{\svn@filepath}{\jobname.\svn@mainext}%
{\xdef\svn@pg{\svn@g}}%
{\xdef\svn@pg{\svn@filedir\svn@filebase}}%
\fi
\xdef\svn@filebase{\fink@nextbase}%
\xdef\svn@fileext{\fink@nextext}%
\xdef\svn@filedir{\fink@nextdir}%
\svn@removedotslash\svn@filedir
\svnmulti@begininputfilehook
}%
\def\svnmulti@endinputfilehook{}
\message{Package svn-multi: patching macro '\string\fink@restore' from the
'fink' package!}%
\let\svnmulti@fink@restore\fink@restore
\def\fink@restore#1{%
\svnmulti@endinputfilehook
\svnmulti@fink@restore{#1}%
\svn@popfilestack
\xdef\svn@filebase{\finkbase}%
\xdef\svn@fileext{\finkext}%
\xdef\svn@filedir{\finkdir}%
\svn@removedotslash\svn@filedir
}%
\def\svnmulti@atbegininputfile{%
\g@addto@macro\svnmulti@begininputfilehook
}
\long\def\svnmulti@atendinputfile#1{%
\begingroup
\@temptokena\expandafter{\svnmulti@endinputfilehook}%
\toks@{#1}%
\xdef\svnmulti@endinputfilehook{\the\toks@\the\@temptokena}%
\endgroup
}
\def\svn@filestack{{}}
\def\svn@pushfilestack{%
\xdef\svn@filestack{{%
{\svnfilerev}%
{\svnfiledate}%
{\svnfileauthor}%
{\svnfileyear}%
{\svnfilemonth}%
{\svnfileday}%
{\svnfilehour}%
{\svnfileminute}%
{\svnfilesecond}%
{\svnfiletimezonehour}%
{\svnfiletimezoneminute}%
{\svnfileurl}%
{\svnfilefname}%
{\svn@g}%
{\svn@pg}%
{\ifsvnfilemodified{@firstoftwo}{@secondoftwo}}%
}\svn@filestack}%
}
\def\svn@restorefilekws#1#2\relax{%
\svn@restorefilekws@#1\empty
\empty \empty \empty \empty
\empty \empty \empty \empty
\empty \empty \empty \empty \empty
\svn@ifempty{#2}%
{\gdef\svn@filestack{{}}}%
{\gdef\svn@filestack{#2}}%
}
\def\svn@restorefilekws@#1#2#3#4#5#6#7#8#9{%
\gdef\svnfilerev{#1}%
\gdef\svnfiledate{#2}%
\gdef\svnfileauthor{#3}%
\gdef\svnfileyear{#4}%
\gdef\svnfilemonth{#5}%
\gdef\svnfileday{#6}%
\gdef\svnfilehour{#7}%
\gdef\svnfileminute{#8}%
\gdef\svnfilesecond{#9}%
\svn@restorefilekws@@
}
\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{%
\ifx\svn@filestack\empty
\PackageWarning{svn-multi}{Underflow of file keyword stack!}%
\else
\svn@ifequal{\svn@filestack}{{}}%
{\PackageWarning{svn-multi}{Underflow of file keyword stack!}}%
{\expandafter\svn@restorefilekws\svn@filestack\relax}%
\fi
}
\fi
\if@svnmulti@groups
\let\svn@glist=\empty
\def\svngroup#1{%
\svn@ifequal{#1}{*}%
{\PackageError{svn-multi}%
{The group name '*' is invalid for '\string\svngroup'}{}{}%
}{}%
\xdef\svn@g{#1}%
\let\svn@pg\svn@g
\ifx\svn@g\empty\else%
\expandafter
\ifx\csname @svng@\svn@g @rev\endcsname\relax%
\svn@initgroup{\svn@g}%
\ifx\svn@glist\empty
\xdef\svn@glist{#1}%
\else
\xdef\svn@glist{\svn@glist,#1}%
\fi
\fi
\fi
}
\def\thesvngroup{\svn@g}
\def\svnsetcg#1{%
\svn@ifequal{#1}{*}%
{\def\svn@cg{\svn@g}}%
{\def\svn@cg{#1}}%
}
\def\svncg@def#1{%
\expandafter
\def\csname svncg#1\endcsname{%
\@ifundefined{svng@\svn@cg @#1}{??}{%
\csname svng@\svn@cg @#1\endcsname}%
}%
}
\@for\@tempa:=%
rev,author,date,year,month,day,hour,minute,second,%
timezonehour,timezoneminute,url,fname%
\do{%
\expandafter\svncg@def\expandafter{\@tempa}%
}
\def\thesvncg{\svn@cg}
\def\svng#1#2{%
\@ifundefined{svng@\svn@temp @#2}%
{??}%
{\csname svng@\svn@temp @#2\endcsname}%
}
\def\svn@addfiletogroup#1#2{%
\expandafter
\ifx\csname @svng@#2@files@#1\endcsname\relax%
\expandafter\gdef\csname @svng@#2@files@#1\endcsname{1}%
%
\@ifundefined{@svng@#2@files}%
{\expandafter\xdef\csname @svng@#2@files\endcsname{#1}}%
{\expandafter\xdef\csname @svng@#2@files\endcsname{%
\csname @svng@#2@files\endcsname,#1%
}%
}%
\fi
}
\svnmulti@atbegininputfile{%
\svn@ifequal{\svn@filepath}{\svn@maindir\jobname.\svn@mainext}%
{}%
{\svn@initfile}%
\svn@ifequal{\svn@fileext}{\svn@mainext}%
{\svn@addfiletogroup{\svn@filedir\svn@filebase}{\svn@pg}}{}%
\svn@ifequal{\svn@fileext}{sty}%
{\svn@addfiletogroup{\svn@filedir\svn@filebase}{\svn@pg}}{}%
\svn@ifequal{\svn@fileext}{cls}%
{\svn@addfiletogroup{\svn@filedir\svn@filebase}{\svn@pg}}{}%
\svn@addfiletogroup{\svn@filepath}{\svn@filedir\svn@filebase}%
}
\def\svn@writegroup#1{%
\def\svn@writekw##1{%
\immediate\write\svn@write{%
\noexpand\@namedef{svng@#1@##1}{\csname @svng@#1@##1\endcsname}%
}%
}%
\svn@writekw{rev}%
\svn@writekw{date}%
\svn@writekw{author}%
\svn@writekw{year}%
\svn@writekw{month}%
\svn@writekw{day}%
\svn@writekw{hour}%
\svn@writekw{minute}%
\svn@writekw{second}%
\svn@writekw{timezonehour}%
\svn@writekw{timezoneminute}%
\@ifundefined{@svng@#1@files}{}{%
\immediate\write\svn@write{%
\noexpand
\svn@namegdefverb{svng@#1@files}{\csname @svng@#1@files\endcsname}%
}%
}%
\immediate\write\svn@write{%
\noexpand
\svn@namegdefverb{svng@#1@url}{\csname @svng@#1@url\endcsname}^^J%
\noexpand
\svn@namegdefverb{svng@#1@fname}{\csname @svng@#1@fname\endcsname}^^J%
}%
}
\def\svn@writeallgroups#1{%
\begingroup
\ifx\relax#1\relax\else
\@for\svn@temp:=#1\do{%
\svn@ifvalidrev{@svng@\svn@temp @rev}%
{%
\expandafter
\svn@cleanfilelist\csname @svng@\svn@temp @files\endcsname
\svn@writegroup{\svn@temp}%
\@ifundefined{@svng@\svn@temp @files}{}%
{\expandafter\svn@writeallgroups
\csname @svng@\svn@temp @files\endcsname
}%
}{}%
}%
\fi
\endgroup
}
\def\svn@updategroup#1{%
\@ifundefined{@svng@#1@rev}%
{\svn@initgroup{#1}}%
{}%
\expandafter
\ifnum\csname @svng@#1@rev\endcsname<\svnfilerev
\svn@gkwset{#1}{rev}{\svnfilerev}%
\svn@gkwset{#1}{date}{\svnfiledate}%
\svn@gkwset{#1}{author}{\svnfileauthor}%
\svn@gkwset{#1}{year}{\svnfileyear}%
\svn@gkwset{#1}{month}{\svnfilemonth}%
\svn@gkwset{#1}{day}{\svnfileday}%
\svn@gkwset{#1}{hour}{\svnfilehour}%
\svn@gkwset{#1}{minute}{\svnfileminute}%
\svn@gkwset{#1}{second}{\svnfilesecond}%
\svn@gkwset{#1}{timezonehour}{\svnfiletimezonehour}%
\svn@gkwset{#1}{timezoneminute}{\svnfiletimezoneminute}%
\svn@gkwset{#1}{url}{\svnfileurl}%
\svn@gkwset{#1}{fname}{\svnfilefname}%
\fi
}
\def\svn@definegroup#1{%
\svn@gkwdef{#1}{rev}%
\svn@gkwdef{#1}{date}%
\svn@gkwdef{#1}{author}%
\svn@gkwdef{#1}{year}%
\svn@gkwdef{#1}{month}%
\svn@gkwdef{#1}{day}%
\svn@gkwdef{#1}{hour}%
\svn@gkwdef{#1}{minute}%
\svn@gkwdef{#1}{second}%
\svn@gkwdef{#1}{timezonehour}%
\svn@gkwdef{#1}{timezoneminute}%
\svn@gkwdef{#1}{url}%
\svn@gkwdef{#1}{fname}%
}
\def\svn@initgroup#1{%
\svn@gkwset{#1}{rev}{\svn@revinit}%
\svn@gkwset{#1}{date}{}%
\svn@gkwset{#1}{author}{}%
\svn@gkwset{#1}{year}{0000}%
\svn@gkwset{#1}{month}{00}%
\svn@gkwset{#1}{day}{00}%
\svn@gkwset{#1}{hour}{00}%
\svn@gkwset{#1}{minute}{00}%
\svn@gkwset{#1}{second}{00}%
\svn@gkwset{#1}{timezonehour}{+00}%
\svn@gkwset{#1}{timezoneminute}{00}%
\svn@gkwset{#1}{url}{}%
\svn@gkwset{#1}{fname}{}%
}
\def\svn@gkwset#1#2#3{%
\expandafter
\xdef\csname @svng@#1@#2\endcsname{#3}%
}
\def\svn@gkwdef#1#2{%
\expandafter
\xdef\csname svng@#1@#2\endcsname{\csname @svng@#1@#2\endcsname}%
}
\def\svn@cleanfilelist#1{
\begingroup
\def\svn@tmplist{}%
\ifx\relax#1\relax\else
\@for\svn@temp:=#1\do{%
\expandafter\svn@ifvalidrev
\expandafter{@svng@\svn@temp @rev}%
{\edef\svn@tmplist{\svn@tmplist,\svn@temp}}%
{}%
}%
\xdef#1{\expandafter\@gobble\svn@tmplist\empty}%
\fi
\endgroup
}
\fi
\newif\ifsvnsubgroups
\svnsubgroupsfalse
\if@svnmulti@subgroups
\svnsubgroupstrue
\def\svnsubgroup{%
\begingroup
\svn@removedotslash\svn@filedir
\svn@subgroup{\svn@filedir\svn@filebase}%
\svn@subgroup{\svn@filepath}%
\endgroup
}
\def\svn@subgroup#1{%
\ifnum\svnfilerev=\svn@revinit\else
\expandafter\ifx\csname svn@g@#1\endcsname\relax%
\expandafter\gdef\csname svn@g@#1\endcsname{1}%
\svn@updategroup{#1}%
\fi
\fi
}
\def\svnignoreextensions#1{%
\@for\svn@temp:=#1\do{%
\expandafter\def\csname svn@ignore@ext@\svn@temp\endcsname{}%
}%
}
\def\svnconsiderextensions#1{%
\@for\svn@temp:=#1\do{%
\expandafter\let\csname svn@ignore@ext@\svn@temp\endcsname\relax%
}%
}
\svnignoreextensions{aux,bbl,fd,enc,fls,glo,idx,ilg,ind,ist,%
lof,log,lot,out,svn,svt,svx,toc}
\svnmulti@atendinputfile{%
\if@svnmulti@subgroups
\ifsvnsubgroups
\expandafter\ifx\csname svn@ignore@ext@\svn@fileext\endcsname\relax
\svnsubgroup
\fi
\fi
\fi
}
\if@svnmulti@subgroups
\ifsvnsubgroups
\svn@addfiletogroup{\jobname .\svn@mainext}{\jobname}%
\svnsubgroup
\fi
\fi
\AtBeginDocument{%
\if@svnmulti@subgroups
\ifsvnsubgroups
\@ifundefined{@svng@\svn@g @files@\jobname}%
{%
\@namedef{@svng@\svn@g @files@\jobname}{1}%
\@ifundefined{@svng@\svn@g @files}%
{%
\expandafter
\xdef\csname @svng@\svn@g @files\endcsname{\jobname}%
}%
{%
\expandafter
\xdef\csname @svng@\svn@g @files\endcsname
{\jobname,\csname @svng@\svn@g @files\endcsname}%
}%
}{}%
\svnsubgroup
\fi
\fi
}
\fi
\if@svnmulti@external
\if@svnmulti@groups
\def\svnexternalgroup#1{%
\svn@ifequal{#1}{*}%
{\def\svn@externalgroup{\svn@pg}}%
{\def\svn@externalgroup{#1}}%
}
\def\svn@externalgroup{\svn@pg}
\else
\def\svn@externalgroup{}
\fi
\if@svnmulti@autokw
\newcommand*\svnexternal[2][]{%
\svn@pushfilestack
\svn@ifequal{#1}{*}%
{\edef\svn@eg{\svn@pg}}%
{\svn@ifempty{#1}%
{\edef\svn@eg{\svn@externalgroup}}%
{\edef\svn@eg{#1}}%
}%
\svne@@external#2\relax
\svn@popfilestack
}
\def\svne@@external#1{%
\ifx\relax#1\empty\else
\svnegetfile{#1}%
\begingroup\svn@externalfile{\svn@eg}{#1}%
\expandafter\svne@@external
\fi
}
\else
\newcommand*\svnexternal[2][]{%
\if@filesw
\svn@checkwrite
\begingroup
\svn@ifequal{#1}{*}%
{\def\svn@temp{\svn@pg}}%
{\svn@ifempty{#1}%
{\def\svn@temp{\svn@externalgroup}}%
{\def\svn@temp{#1}}%
}%
\immediate\write\svn@write{%
\noexpand\@svnexternal[\svn@temp]{\svn@filepath}{#2}%
}%
\endgroup
\fi
\svn@inputsvx{\svn@filedir\svn@filebase}%
}
\fi
\def\svnexternalpath#1{%
\if@filesw
\svn@checkwrite
\immediate\write\svn@write{%
\noexpand\@svnexternalpath{#1}%
}%
\fi
}
\newcommand*\@svnexternal[3][]{}
\def\@svnexternalpath#1{}
\newcommand*\svnexternalfile[1][\svn@filedir\svn@filebase]{%
\begingroup % TODO: maybe use \svn@catcodes
\catcode`\_=12
\catcode`\&=12
\catcode`\^=12
\catcode`\$=12
\catcode`\#=12
\svn@externalfile{#1}%
}
\def\svn@externalfile#1#2{%
\endgroup
\if@svnmulti@subgroups
\ifsvnsubgroups
\svn@ifequal{#1}{\svn@rg}%
{\svn@addfiletogroup{#2}{\svn@filedir\svn@filebase}}%
{\svn@addfiletogroup{#2}{#1}}%
\svn@subgroup{#2}%
\fi
\fi
}
\else
\def\svnexternalfile#1{}%
\fi
\if@svnmulti@autoload
\svnmulti@atbegininputfile{%
\svn@ifequal{\svn@fileext}{tex}%
{\svn@inputsvx{\svn@filedir\svn@filebase}}%
{}%
}
%%\AtEndOfPackage{%
\AtBeginDocument{%
\svn@inputsvx{\jobname}%
}
\fi
\if@svnmulti@anygraphic
\def\svngraphicsgroup#1{%
\svn@ifequal{#1}{*}%
{\def\svn@graphicsgroup{\svn@pg}}%
{\def\svn@graphicsgroup{#1}}%
}
\def\svn@graphicsgroup{\svn@externalgroup}
\def\svnignoregraphic#1{%
\expandafter\def\csname svn@ignoregraphic@#1\endcsname{}%
}
\def\svnconsidergraphic#1{%
\expandafter\let\csname svn@ignoregraphic@#1\endcsname\relax%
}
\fi
\if@svnmulti@graphics
\RequirePackage{graphics}[2006/02/20]
\message{Package svn-multi: patching macro '\string\Gin@setfile' from the
'graphics' package!}%
\let\svnmulti@Gin@setfile\Gin@setfile
\renewcommand*{\Gin@setfile}[3]{%
\expandafter\ifx\csname svn@ignoregraphic@#3\endcsname\relax%
\svnexternal[\svn@graphicsgroup]{{#3}}%
\fi
\svnmulti@Gin@setfile{#1}{#2}{#3}%
}
\fi
\if@svnmulti@pgfimages
\RequirePackage{pgf}[2008/01/15]
\message{Package svn-multi: patching macro '\string\pgf@declareimage' and will
patch generated macros '\string\pgf@image@<name>!' from the 'pgf' package!}%
\let\svnmulti@pgf@declareimage\pgf@declareimage
\renewcommand*{\pgf@declareimage}[3][]{%
\svnmulti@pgf@declareimage[#1]{#2}{#3}%
\ifx\pgf@filename\empty\else
\expandafter\ifx\csname svn@ignoregraphic@\pgf@filename\endcsname\relax%
\expandafter\global\expandafter%
\let\csname svnmulti@pgf@image@#2!\endcsname=\pgf@image%
\expandafter\xdef\csname pgf@image@#2!\endcsname{%
\noexpand\svnexternal[\noexpand\svn@graphicsgroup]{{\pgf@filename}}%
\csname svnmulti@pgf@image@#2!\endcsname
}%
\fi
\fi
}
\fi
\if@svnmulti@table
\ifx\tableofcontents\relax\else
\def\svnrevisionsname{Table of Revisions}%
\def\svn@svt{svt}
\AtBeginDocument{%
\ifx\chapter\relax
\let\chapter\@undefined
\fi
\ifx\chapter\@undefined
%% Adapted from the \tableofcontents macro, LaTeX `article' class [2005/09/16]
\newcommand\tableofrevisions{%
\section*{\svnrevisionsname
\@mkboth{\MakeUppercase\svnrevisionsname}{\MakeUppercase\svnrevisionsname}}%
\svn@input{\jobname .\svn@svt}%
}
\else
%% Adapted from the \tableofcontents macro, LaTeX `book' class [2005/09/16]
\newcommand\tableofrevisions{%
\expandafter\ifx
\csname if@twocolumn\expandafter\endcsname
\csname iftrue\endcsname
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\svnrevisionsname
\@mkboth{\MakeUppercase\svnrevisionsname}{\MakeUppercase\svnrevisionsname}}%
\svn@input{\jobname .\svn@svt}%
\expandafter\ifx
\csname if@restonecol\expandafter\endcsname
\csname iftrue\endcsname
\twocolumn
\fi
}
\fi
}
\fi % defined \tableofcontents
\def\svn@writerow#1#2#3{%
\immediate\write\svn@svtwrite{%
\expandafter\noexpand\csname svn#1row\endcsname
\expandafter\noexpand\csname svntab#1\endcsname{#2}{#3}\space
\@ampersamchar\space
\svn@tabcell{rev}\space\@ampersamchar\space
\svn@tabcell{author}\space\@ampersamchar\space
\noexpand\svntabdate%
\svn@tabcellarg{year}%
\svn@tabcellarg{month}%
\svn@tabcellarg{day}%
\svn@tabcellarg{hour}%
\svn@tabcellarg{minute}%
\svn@tabcellarg{second}%
\svn@tabcellarg{timezonehour}%
\svn@tabcellarg{timezoneminute}%
\space\@backslashchar\@backslashchar
\expandafter\noexpand\csname endsvn#1row\endcsname
}%
}
\def\svn@writegrouprow#1{%
\begingroup
\def\svn@tabcellarg##1{{\csname @svng@#1@##1\endcsname}}%
\def\svn@tabcell##1{\expandafter\noexpand\csname svntab##1\endcsname%
\svn@tabcellarg{##1}%
}%
\svn@writerow{group}{#1}{}%
\endgroup
}
\def\svn@writesubgrouprow#1#2{%
\begingroup
\def\svn@tabcellarg##1{{\csname @svng@#2@##1\endcsname}}%
\def\svn@tabcell##1{\expandafter\noexpand\csname svntab##1\endcsname%
\svn@tabcellarg{##1}%
}%
\svn@writerow{subgroup}{#1}{#2}%
\endgroup
}
\def\svn@writefilerow#1#2{%
\begingroup
\def\svn@tabcellarg##1{{\csname @svng@#2@##1\endcsname}}%
\def\svn@tabcell##1{\expandafter\noexpand\csname svntab##1\endcsname%
\svn@tabcellarg{##1}%
}%
\svn@writerow{file}{#1}{#2}%
\endgroup
}
\def\svn@writeglobalrow{%
\begingroup
\def\svn@tabcellarg##1{{\csname @svn@##1\endcsname}}%
\def\svn@tabcell##1{\expandafter\noexpand\csname svntab##1\endcsname%
\svn@tabcellarg{##1}%
}%
\svn@writerow{global}{}{}%
\endgroup
}
\def\svntable{%
\begin{tabular}{p{0.425\textwidth}rll}%
\hline
}
\def\endsvntable{\hline\end{tabular}}
\def\svntablehead{%
Name & Rev & Last Author & Last Changed At \\\hline
}
\def\svntablefoot{}
\def\svnbeforetable{}
\def\svnaftertable{\clearpage}
\def\svnglobalrow{}
\def\endsvnglobalrow{}
\def\svngrouprow{}
\def\endsvngrouprow{}
\def\svnsubgrouprow{}
\def\endsvnsubgrouprow{}
\def\svnfilerow{}
\def\endsvnfilerow{}
\def\svntabglobal{Document}
\def\svntabgroup#1{Group `#1'}
\def\svntabsubgroup#1{%
\raggedright
\addtolength{\leftskip}{#1\medskipamount}%
\begingroup
\catcode`\_=12
\catcode`\&=12
\catcode`\^=12
\catcode`\$=12
\catcode`\#=12
\svn@tabsubgroup
}
\def\svn@tabsubgroup#1{\endgroup Subgroup `\texttt{\small #1}'}
\def\svntabfile#1{%
\raggedright
\addtolength{\leftskip}{#1\medskipamount}%
\begingroup
\catcode`\_=12
\catcode`\&=12
\catcode`\^=12
\catcode`\$=12
\catcode`\#=12
\svn@tabfile
}
\def\svn@tabfile#1{\endgroup File `\texttt{\small #1}'}
\def\svntabrev{}
\def\svntabauthor#1{\svnFullAuthor{#1}}
\def\svntabdate#1#2#3#4#5#6#7#8{%
#1-#2-#3 #4:#5:#6% #7#8%
}
\fi
\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}
%% Adapted from the \url macro of the `hyperref` package.
\DeclareRobustCommand*{\svnnolinkurl}{%
\@ifundefined{hyper@normalise}%
{\PackageWarning{svn-multi}{Package hyperref is needed for \noexpand
\svnnolinkurl.}}%
{\hyper@normalise\svnnolinkurl@}%
}%
\def\svnnolinkurl@#1{\Hurl{#1}}%
\def\svn@getfilename#1{%
\begingroup
\gdef\svnfiledir{}%
\edef\svn@temp{#1}%
\expandafter\@svn@getfilename\svn@temp/{}\relax
}%
\def\@svn@getfilename#1/#2\relax{%
\svn@ifempty{#2}%
{%
\endgroup
\gdef\svnfilefname{#1}%
}%
{%
\xdef\svnfiledir{\svnfiledir#1/}%
\@svn@getfilename#2\relax
}%
}%
\@input{\jobname .svn}
\def\svn@checkwrite{%
\@ifundefined{svn@write}{%
\newwrite\svn@write
\immediate\openout\svn@write=\jobname.svn\relax%
\immediate\write\svn@write{\@percentchar\space SVN Keyword cache}%
%\immediate\write\svn@write{\noexpand\makeatletter}%
}{}%
\let\svn@checkwrite=\relax
}
{\catcode`\&=12
\gdef\@ampersamchar{&}
}
\def\svn@writesvn{%
\if@svnmulti@groups
\fi
\svn@checkwrite
\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%
\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\svntimezonehour{\@svn@timezonehour}^^J%
\noexpand\def\noexpand\svntimezoneminute{\@svn@timezoneminute}^^J%
\noexpand\svn@gdefverb\noexpand\svnurl{\@svn@url}^^J%
\noexpand\svn@gdefverb\noexpand\svnfname{\@svn@fname}^^J%
}%
\if@svnmulti@groups
\svn@cleanfilelist\@svng@@files
\immediate\write\svn@write{%
\noexpand\def\noexpand\svng@@files{\@svng@@files}^^J%
}%
\svn@writeallgroups\@svng@@files
\ifx\svn@glist\empty\else
\begingroup
\immediate\write\svn@write{^^J%
\@percentchar\space SVN File Groups: \svn@glist
}%
\svn@writeallgroups\svn@glist
\endgroup
\fi
\else
\immediate\write\svn@write{^^J}%
\fi
\immediate\closeout\svn@write%
}
\def\svn@writegroupfiles#1{%
\begingroup
\advance\svn@grouplevel by 1\relax
\expandafter\let
\expandafter\svn@files\csname @svng@#1@files\endcsname
\ifx\svn@files\relax\else
\svn@cleanfilelist\svn@files
\@for\svn@file:=\svn@files\do{%
\svn@ifvalidrev{@svng@\svn@file @rev}%
{%
\@ifundefined{@svng@\svn@file @files}%
{\svn@writefilerow{\the\svn@grouplevel}{\svn@file}}%
{\svn@ifonlyone{\svn@file}%
{\svn@writefilerow{\the\svn@grouplevel}%
{\csname @svng@\svn@file @files\endcsname}}%
{\svn@ifempty{\csname @svng@\svn@file @files\endcsname}%
{}%
{%
\svn@writesubgrouprow{\the\svn@grouplevel}{\svn@file}%
\svn@writegroupfiles{\svn@file}%
}%
}%
}%
}{}%
}%
\fi
\endgroup
}%
\def\svn@writesvt{%
\if@svnmulti@table
\newwrite\svn@svtwrite
\immediate\openout\svn@svtwrite=\jobname.\svn@svt\relax
\@onelevel@sanitize\svntable%
\immediate\write\svn@svtwrite{%
\noexpand\svnbeforetable^^J%
\svntable
\noexpand\svntablehead^^J%
}%
\let\svn@grouplevel\@tempcnta
\svn@grouplevel=0\relax
\svn@writeglobalrow{}%
\svn@writegroupfiles{}%
\@for\svn@g:=\svn@glist\do{%
\@ifundefined{@svng@\svn@g @rev}{}%
{%
\expandafter
\ifnum\csname @svng@\svn@g @rev\endcsname>0\relax
\svn@writegrouprow{\svn@g}%
\svn@writegroupfiles{\svn@g}%
\fi
}%
}%
\@onelevel@sanitize\endsvntable%
\immediate\write\svn@svtwrite{%
\noexpand\svntablefoot^^J%
\endsvntable^^J%
\noexpand\svnaftertable
}%
\immediate\closeout\svn@svtwrite%
\fi
}
\if@svnmulti@autokwall
\svnmulti@atbegininputfile{%
\expandafter
\ifx\csname svn@ignore@ext@\svn@fileext\endcsname\relax
\svnegetfile{\svn@filepath}%
\fi
}
\fi
\AtEndDocument{%
\if@filesw
\ifx\@svn@rev\empty\else
\ifnum\@svn@rev<1\else
\svn@writesvn
\svn@writesvt
\fi
\fi
\fi
}
\endinput
%%
%% End of file `svn-multi.sty'.