summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gmutils/gmurl.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/gmutils/gmurl.sty')
-rw-r--r--macros/latex/contrib/gmutils/gmurl.sty301
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'.