%% This is file `dtk-url.sty',
%%
%% LaTeX Class for ``Die TeXnische Komoedie''.
%%
%% Copyright (C) 2015-2024
%% Rolf Niepraschk, Herbert Voss
%%
%% It 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 2005/12/01 or later.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{dtk-url}[2024/06/26 v1.9 Urls (qrcode) for DTK (HO,hv,rn)]
\RequirePackage{url}[2006/04/12]
\RequirePackage{xcolor}
\RequirePackage{xkeyval}
%\RequirePackage{hvqrurl}
% Konfiguration:
\newcommand*{\DTK@UrlSetup}{\urlstyle{tt}}
\newcommand*{\DTK@UrlCtanSetup}{}
\newcommand*{\DTK@UrlEmailSetup}{}
\newcommand*{\DTK@UrlCtanPrefix}{CTAN:}
\newcommand*{\DTK@UrlCtanServerPrefix}{
https://mirror.ctan.org/}
\newcommand*{\DTK@UrlFile}{\jobname.urls}
% Schalter \ifDTK@Url@ legt fest, wann die URLs aktiv sein sollen
\newif\ifDTK@Url@
\ifDTK@korr@\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\File{\urlstyle{tt}}
\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
%% No more needed, we use the new macros hv 2016-04-23
%\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}%
\pdfextension startlink 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%
\pdfextension endlink%
}%
% 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
\IfFileExists{\DTK@UrlFile}{%
\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