\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{dtk-url}[2011/10/23 v1.0 Urls for DTK (HO)]
\RequirePackage{url}[2006/04/12]
% Konfiguration:
\newcommand*{\DTK@UrlSetup}{\urlstyle{tt}}
\newcommand*{\DTK@UrlCtanSetup}{}
\newcommand*{\DTK@UrlEmailSetup}{}
\newcommand*{\DTK@UrlCtanPrefix}{CTAN:}
\newcommand*{\DTK@UrlCtanServerPrefix}{
http://mirror.ctan.org/}
\newcommand*{\DTK@UrlFile}{\jobname.urls}
% Schalter \ifDTK@Url@ legt fest, wann die URLs aktiv sein sollen
\newif\ifDTK@Url@
\ifDTK@Draft@
\DTK@Url@true
\fi
\ifDTK@lineno@
\DTK@Url@true
\fi
% Markup-Befehle:
\DeclareRobustCommand*{\url}{\DTK@Url}
\DeclareRobustCommand*{\ctanurl}{\DTK@CtanUrl}
\DeclareRobustCommand*{\Email}{\DTK@Email}
\let\URL\url
\let\CTANurl\ctanurl
\DeclareUrlCommand\DTK@Url{%
\DTK@UrlSetup
\def\UrlLeft{}%
\def\UrlRight{}%
\def\DTK@UrlType{url}%
}
\DeclareUrlCommand\DTK@CtanUrl{%
\DTK@UrlSetup
\DTK@UrlCtanSetup
\let\UrlLeft\DTK@UrlCtanPrefix
\def\UrlRight{}%
\let\DTK@UrlLinkPrefix\DTK@UrlCtanServerPrefix
\def\DTK@UrlType{ctanurl}%
}
\DeclareUrlCommand\DTK@Email{%
\DTK@UrlSetup
\DTK@UrlEmailSetup
\def\UrlLeft{}%
\def\UrlRight{}%
\def\DTK@UrlLinkPrefix{mailto:}%
\def\DTK@UrlType{email}%
}
\def\DTK@UrlType{unknown}
% Implementierung
\RequirePackage{pdfescape}
% Currently only pdfTeX/LuaTeX in PDF mode are supported
\RequirePackage{ifpdf}
\ifpdf
\else
% Other engines then pdfTeX and LuaTeX in PDF mode
% are not supported
\DTK@Url@false
\fi
% Ensure that the needed primitives are enabled in LuaTeX
\RequirePackage{ifluatex}
\ifluatex
\directlua{tex.enableprimitives('',{'pdfstartlink','pdfendlink'})}%
\fi
\let\DTK@UrlLinkPrefix\@empty
\ifDTK@Url@
\def\Url@HyperHook#1{%
\begingroup
\DTK@UrlPercent
\edef\#{\string##}%
\edef\DTK@Temp{\DTK@UrlLinkPrefix\Url@String\@empty}%
\@onelevel@sanitize\DTK@Temp
\edef\DTK@UrlRaw{\Url@String\@empty}%
\@onelevel@sanitize\DTK@UrlRaw
\edef\x{\endgroup
\noexpand\EdefEscapeString\noexpand\DTK@Temp{\DTK@Temp}%
\def\noexpand\DTK@Raw{\DTK@UrlRaw}%
}%
\x
\DTK@UrlWrite{\DTK@UrlType}{\DTK@Raw}%
\pdfstartlink attr{%
/H/I%
/C[1 0 0]% red
/Border[1 0 0]%
/BS<</S/U/W 1>>%
}%
user{%
/Subtype/Link
/A<<%
/Type/Action%
/S/URI%
/URI(\DTK@Temp)%
>>%
}%
#1%
\pdfendlink
}%
% Implement writing of file \DTK@UrlFile
\if@filesw
\RequirePackage{atveryend}%
\RequirePackage{embedfile}%
\newwrite\DTK@UrlHandle
\openout\DTK@UrlHandle=\DTK@UrlFile\relax
\begingroup
\count@\time
\divide\count@ by 60 %
\count2=-\count@
\multiply\count2 by 60 %
\advance\count2 \time
\edef\x{\endgroup
\write\DTK@UrlHandle{%
\@percentchar\space
\the\year-\two@digits\month-\two@digits\day
\space\two@digits\count@:\two@digits{\count2 }, %
format: <page> <type> <data>%
}%
}%
\x
\def\DTK@UrlWrite#1#2{%
\protected@write\DTK@UrlHandle{}{%
\thepage\space#1 #2%
}%
}%
\let\DTK@embedfilefinish\embedfilefinish
\let\embedfilefinish\relax
\AfterLastShipout{%
\immediate\closeout\DTK@UrlHandle
\embedfile[%
mimetype=text/plain,%
stringmethod=escape,%
desc={%
List of URLs found in %
\@backslashchar url and \@backslashchar ctanurl%
},%
]{\DTK@UrlFile}%
\DTK@embedfilefinish
}%
\else
\let\DTK@UrlWrite\@gobbletwo
\fi
\fi
\begingroup
\lccode`\~=`\%
\lowercase{\endgroup
\def\DTK@UrlPercent{\let~\DTK@UrlPercentCR}%
}
\begingroup
\lccode`\0=`\^^M
\lowercase{\endgroup
\def\DTK@UrlPercentCR#1{%
\ifx0#1\@empty
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{\@percentchar#1}%
}%
}
\endinput