diff options
Diffstat (limited to 'macros/latex/contrib/gmutils/gmurl.sty')
-rw-r--r-- | macros/latex/contrib/gmutils/gmurl.sty | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/macros/latex/contrib/gmutils/gmurl.sty b/macros/latex/contrib/gmutils/gmurl.sty new file mode 100644 index 0000000000..646585eea1 --- /dev/null +++ b/macros/latex/contrib/gmutils/gmurl.sty @@ -0,0 +1,301 @@ +%% +%% \iffalse ^^A we skip the debug setting +\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{} +%% \fi +%% ^^A $Id: TheUltimateMaster.gmd,v 0.352 2011/10/12 15:19:42 natror Exp natror $ +%% This is file “gmurl.sty” generated with the DocStrip utility. +%% +%% +%% The original source files were: +%% +%% gmutils/gmutils.gmd (with options: `url') +%% +%% +%% Copyright © +%% by Grzegorz ‘Natror’ Murzynowski +%% natror (at) gmail (dot) com +%% +%% This program is subject to the LaTeX Project Public License. +%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html +%% for the details of that license. +%% +%% LPPL status: "author-maintained". +%% +%% +%% +%% For documentation please refer to the file(s) +%% gmutils.{gmd,pdf}. +%% +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{gmurl} + [2011/10/12 v0.996 modifications to the url package (GM)] + + +%% +%% +%% ^^A\typeout{\unexpanded{#4}}%% + + +\RequirePackage{gmcommand} + + +\def\urladdstar{% + \AtBeginDocument{% + \@ifpackageloaded{hyperref}{% + \Store@Macro\url + \pdef\url{\gmu@ifstar{\nolinkurl}{\storedcsname{url}}}% + }{}}} + +\@onlypreamble\urladdstar + +\@ifXeTeX{% + \pdef\UrlFix{\AtBeginDocument{% + \@ifpackageloaded{url}{\gmu@UrlFix}{}}% + \relaxen\UrlFix}% + % + \AtBeginDocument{% + \pdef\UrlFix{% + \@ifpackageloaded{url}{\gmu@UrlFix}{}% + \relaxen\UrlFix}}% +} +{% + \pdef\UrlFix{\PackageWarning{gmutils}{!!! The \string\UrlFix\space + declaration works only with XeTeX}}% +} + +\@ifXeTeX{}{% + \edef\gmu@restoreUpUpUp{\catcode`\@nx\^^^=\the\catcode`\^^^}% + \AtEndOfPackage\gmu@restoreUpUpUp + \catcode`\^^^=9 } + +\def\gmu@UrlFix{% + % \stanza + % default style assignments + \def\UrlBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\]% + \do\)\do\,\do\?\do\'\do\"\do\+\do\=\do\#\do\%\do\~\do\_\do\|% + \do\{\do\}\do\$}% + \def\UrlBigBreaks{\do\:}% + \def\UrlNoBreaks{\do\(\do\[\do\{}% + \def\UrlSpecials{% + \do\ {\hbox{\visiblespace}}\do\^^M{\hbox{\visiblespace}}}% + % \stanza + % + % \stanza + \def\Url@Format##1{% + \UrlFont + \ifdefined\verbatim@specials + \catcode`\>\active + \verbatim@specials + \verbatim@mathhack + \fi % setting of + % the escape char, begin and end group and optionally math shift, + % defined in \pk{gmverb}. + \gmu@UrlSetup + \UrlLeft + \edef\gmu@theendlinechar{\the\endlinechar}% + \endlinechar\m@ne + \kern\z@% to forbid hyphenating the first word if the \ac{URL} + % begins with a~word + \hyphenchar\font=\UrlHyphenchar\relax + \let\-\gmu@discretionaryhyphen + \scantokens{##1}% + \endlinechar\gmu@theendlinechar\relax + \UrlRight + }% of |\Url@Format|. + % \stanza + \edef\UrlHyphenchar{% + \ifdefined\gmv@hyphenchar\gmv@hyphenchar + \else"A6 \fi}% \label{UrlHyphenchar} broken bar, |¦| or the same as + % provided in \pk{gmverb} for verbatims. You + % can redefine it as you please. This char is used as the + % hyphenation char in \ac{URL}s and therefore should be different + % from |-| (hyphen), which is often a part of an \ac{URL}. The + % broken bar seems to be quite unlikely in \ac{URL}s and/or file + % names. + % \stanza + \def\verbatim@mathhack{% + \ifdefined\verbatim@specials@list + \@xa\verbatim@mathhack@\verbatim@specials@list + \fi + }% + % \stanza + \def\verbatim@mathhack@##1##2##3##4##5##6{% + \gmuIfValueT{##4}{% + \edef\gmu@thinmuskip{\the\thinmuskip}% + \edef\gmu@medmuskip{\the\medmuskip}% + \edef\gmu@thickmuskip{\the\thickmuskip}% + \begingroup + \lccode`\~=`##4\lowercase{% + \endgroup\def~####1~}% + {$\thinmuskip\gmu@thinmuskip\relax + \medmuskip\gmu@medmuskip\relax + \thickmuskip\gmu@thickmuskip\relax + ####1% + $}% + \catcode`##4\active + }% + }% + %\stanza + \def\gmu@UrlSetup{% + \medmuskip\Urlmuskip \thickmuskip\medmuskip \thinmuskip0mu% + \relpenalty\UrlBigBreakPenalty \binoppenalty\UrlBreakPenalty + \def\do{\gmu@doUrlMath\UrlBreakPenalty}\UrlBreaks % bin + % (\incs{hyphenpenalty} anyway) + \def\do{\gmu@doUrlMath\UrlBigBreakPenalty}\UrlBigBreaks % rel + % (\incs{hyphenpenalty} anyway) + \def\do{\gmu@doUrlMath\@M}\UrlNoBreaks % open (no break) + \def\do{\gmu@doUrlMathAc\UrlBreakPenalty}% (\incs{hyphenpenalty}) + \UrlSpecials + \if \iffontchar\font"2329 1\else0\fi\iffontchar\font"232A 1\else2\fi + % \nostanza we check whether the font provides both left and right + % angle brackets. \nostanza + \gmu@measurewd{^^^^2329}% + \edef\gmu@tempa{% + \@nx\gmu@doUrlMathAc\@M\@nx\<{% + \hbox to\gmu@tempb{\unexpanded{\hss\char"2329 \hss}}}% + }\gmu@tempa + \gmu@measurewd{^^^^232a}% + \edef\gmu@tempa{% + \@nx\do\@nx\>{% + \hbox to\gmu@tempb{\unexpanded{\hss\char"232A \hss}}}% + }\gmu@tempa + \else + \gmu@doUrlMathAc\@M\<{\langle}\do\>{\rangle}% + \fi + \iffontchar\font"22C6 % low star + \do\*{\hbox{\char"22C6 }}% + \else \do\**% + \fi + \ifx\do@url@hyp\@empty + \gmu@measurewd{-}% this macro is defined in line \ref{@measurewd}. + \edef\gmu@tempa{% + \unexpanded{\gmu@doUrlMathAc\@M\-}% + {\hbox to \gmu@tempb{\unexpanded{\hss-\hss}}% + \@nx\-}% hyphen is a + % good point for hyphenation, but the hyphenation char should + % be sth. else, and it is indeed: |¦| (broken bar, + % |\char"A6|). See also line \ref{UrlHyphenchar} + }\gmu@tempa + \fi + \addfontfeature{Ligatures=NoCommon, Mapping=none}% instead of + % ‘doing’ \incs{ver\+bat\+im\+@\+no\+lig\+@\+list}. + }% of |\gmu@UrlSetup|. + % \stanza + % + % \stanza + \def\gmu@doUrlMath##1##2{%\ + % \begin{enumargs} + % \item value of the penalty (used as a~Boolean: if $<$ + % \thous 10000, \nlperc\cs{hyphenpenalty} will be used anyway, if $\ge$ + % \thous10000, there will be no \incs{discretionary}), + % \item the char, given as |\⁄<char>|. + % \end{enumargs} + \begingroup + \lccode`\~=`##2\lowercase{% + \endgroup\def~{\@ifnextchar~}% + \@xa\addtomacro\@xa~}% of |\lowercase|. + \ifnum##1<\@M + {% + {\char`##2\csname gmu@dbl\string##2kern\endcsname}% if next is the same char + {\ifmmode\char`##2% else + \else\gmu@urlbreakable{##1}{##2}% + \fi}% + }% of |\addtomacro|'s argument |\ifnum| true. + \else + {% + {\char`##2\csname gmu@dbl\string##2kern\endcsname}{\char`##2}% + }% of |\addtomacro|'s argument |\ifnum| false. + \fi + \catcode`##2=\active + }% of |\gmu@doUrlMath|. + % \stanza + \def\gmu@doUrlMathAc##1##2##3{%\ + % \begin{enumargs} + % \item (value of) a~penalty (see the remark to \inverb|##1| of + % the previous macro), + % \item the char (as |\⁄<char>|), + % \item the definition. + % \end{enumargs} + \begingroup + \lccode`\~=`##2\lowercase{% + \endgroup\def~{\@ifnextchar~}% + \@xa\addtomacro\@xa~}% of |\lowercase|. + \ifnum ##1<\@M + {% + {\ifmmode\char`##2\else$##3\m@th$\fi}% + {\ifmmode\char`##2% + \else\discretionary{\hbox{$##3\m@th$}}{}{\hbox{$##3\m@th$}}% + \fi}% + }% of |\addtomacro|'s argument if num true. + \else + {% + {\ifmmode\char`##2\else$##3\m@th$\fi}{\ifmmode\char`##2\else$##3\m@th$\fi}% + }% of |\addtomacro|'s argument if num false. + \fi + \catcode`##2=\active + }% of |\gmu@doUrlMathAc|. + % \stanza + \pdef\gmu@url@rigidbreak##1##2{\discretionary{\char`##2}{}{\char`##2}}% + % \stanza + \pdef\gmu@url@flexbreak##1##2{\penalty\@M \hskip\z@ plus0,03em + \char`##2\penalty##1\hskip\z@ plus0,03em\relax}% + % \stanza + \let\gmu@urlbreakable\gmu@url@flexbreak + % \stanza + \def\Url@z##1{% + % Do any hyper referencing due to hyperref (or perform a url-def) + \Url@HyperHook + % Now do the formatting in a group (can also have \incs{Url@HyperHook} take + % this as an argument). \nostanza + {\Url@Format{##1}}% + \endgroup}% + % \stanza + \DeclareUrlCommand\file{\urlstyle{sf}}% + % \stanza + \emptify\Url@moving% with our settings |\url| is pretty allowed in + % moving arguments, I~hope. +}% of |\gmu@UrlFix|. + +\DeclareCommand\UrlSlashKern{O{tt}m}% +{\AtBeginDocument{% + \@nameedef{url@#1style}{\def\@nx\UrlFont{% + \@xanxcs{#1family}% + \def\@xanxcs{gmu@dbl\string\/kern}% + {\kern#2\relax}% + }% of |\UrlFont| + }% of |\url#1style| + \urlstyle{#1}% + }% of |\AtBeginDocument| +}% of |\UrlSlashKern| + +\def\DeclareUrlCommand#1#2{\pdef#1{\leavevmode\begingroup #2\Url}} + +\foolc ~ : {% + \@ifXeTeX{% + \def\metaat~{% + \penalty\@M \hskip\z@skip + \meta{аt}% it's a Cyrillic »a«! + \penalty\exhyphenpenalty + \hskip\z@skip + }% + % + \def\metadot~{% + \penalty\@M \hskip\z@skip + \meta{dоt}% it's a Cyrillic »o«! + \penalty\exhyphenpenalty + \hskip\z@skip + }% + }% of if \XeTeX + {% + \def\metaat~{\PackageError{gmurl}{Command \bslash metaat + works only in XeTeX}@}% + % + \def\metadot~{\PackageError{gmurl}{Command \bslash metaat + works only in XeTeX}.}% + }% of if not XeTeX +}% of |\foolc| + +\endinput +%% +%% End of file `gmurl.sty'. |