315 lines
8.3 KiB
TeX
315 lines
8.3 KiB
TeX
%%
|
|
%% This is file `breakurl.sty',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% breakurl.dtx (with options: `package')
|
|
%%
|
|
%% This is a generated file.
|
|
%%
|
|
%% Copyright (C) 2005 by Vilar Camara Neto.
|
|
%%
|
|
%% This file may be distributed and/or modified under the
|
|
%% conditions of the LaTeX Project Public License, either
|
|
%% version 1.2 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.2 or later is part of all distributions of
|
|
%% LaTeX version 1999/12/01 or later.
|
|
%%
|
|
%% Currently this work has the LPPL maintenance status "maintained".
|
|
%%
|
|
%% The Current Maintainer of this work is Vilar Camara Neto.
|
|
%%
|
|
%% This work consists of the files breakurl.dtx and
|
|
%% breakurl.ins and the derived file breakurl.sty.
|
|
%%
|
|
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
|
|
\ProvidesPackage{breakurl}
|
|
[2013/04/10 v1.40 Breakable hyperref URLs]
|
|
|
|
|
|
\RequirePackage{xkeyval}
|
|
\RequirePackage{ifpdf}
|
|
|
|
\ifpdf
|
|
% Dummy package options
|
|
\DeclareOptionX{preserveurlmacro}{}
|
|
\DeclareOptionX{hyphenbreaks}{}
|
|
\DeclareOptionX{anythingbreaks}{}
|
|
\DeclareOptionX{vertfit}{}
|
|
\ProcessOptionsX\relax
|
|
|
|
\PackageWarning{breakurl}{%
|
|
You are using breakurl while processing via pdflatex.\MessageBreak
|
|
\string\burl\space will be just a synonym of \string\url.\MessageBreak}
|
|
\DeclareRobustCommand{\burl}{\url}
|
|
\DeclareRobustCommand*{\burlalt}{\hyper@normalise\burl@alt}
|
|
\def\burl@alt#1#2{\hyper@linkurl{\Hurl{#1}}{#2}}
|
|
\expandafter\endinput
|
|
\fi
|
|
|
|
\@ifpackageloaded{hyperref}{}{%
|
|
\PackageError{breakurl}{The breakurl depends on hyperref package}%
|
|
{I can't do anything. Please type X <return>, edit the source file%
|
|
\MessageBreak
|
|
and add \string\usepackage\string{hyperref\string} before
|
|
\string\usepackage\string{breakurl\string}.}
|
|
\endinput
|
|
}
|
|
|
|
\newif\if@preserveurlmacro\@preserveurlmacrofalse
|
|
\newif\if@burl@fitstrut\@burl@fitstrutfalse
|
|
\newif\if@burl@fitglobal\@burl@fitglobalfalse
|
|
\newif\if@burl@anythingbreaks\@burl@anythingbreaksfalse
|
|
|
|
\newtoks\burl@toks
|
|
|
|
\let\burl@charlistbefore\empty
|
|
\let\burl@charlistafter\empty
|
|
|
|
\def\burl@addtocharlistbefore{\g@addto@macro\burl@charlistbefore}
|
|
\def\burl@addtocharlistafter{\g@addto@macro\burl@charlistafter}
|
|
|
|
\bgroup
|
|
\catcode`\&=12\relax
|
|
\hyper@normalise\burl@addtocharlistbefore{%}
|
|
\hyper@normalise\burl@addtocharlistafter{:/.?#&_,;!}
|
|
\egroup
|
|
|
|
\def\burl@growmif#1#2{%
|
|
\g@addto@macro\burl@mif{\def\burl@ttt{#1}\ifx\burl@ttt\@nextchar#2\else}%
|
|
}
|
|
\def\burl@growmfi{%
|
|
\g@addto@macro\burl@mfi{\fi}%
|
|
}
|
|
\def\burl@defifstructure{%
|
|
\let\burl@mif\empty
|
|
\let\burl@mfi\empty
|
|
\expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=%
|
|
\burl@charlistbefore\do{%
|
|
\expandafter\burl@growmif\@nextchar\@burl@breakbeforetrue
|
|
\burl@growmfi
|
|
}%
|
|
\expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=%
|
|
\burl@charlistafter\do{%
|
|
\expandafter\burl@growmif\@nextchar\@burl@breakaftertrue
|
|
\burl@growmfi
|
|
}%
|
|
}
|
|
|
|
\AtEndOfPackage{\burl@defifstructure}
|
|
|
|
\def\burl@setvertfit#1{%
|
|
\lowercase{\def\burl@temp{#1}}%
|
|
\def\burl@opt{local}\ifx\burl@temp\burl@opt
|
|
\@burl@fitstrutfalse\@burl@fitglobalfalse
|
|
\else\def\burl@opt{strut}\ifx\burl@temp\burl@opt
|
|
\@burl@fitstruttrue\@burl@fitglobalfalse
|
|
\else\def\burl@opt{global}\ifx\burl@temp\burl@opt
|
|
\@burl@fitstrutfalse\@burl@fitglobaltrue
|
|
\else
|
|
\PackageWarning{breakurl}{Unrecognized vertfit option `\burl@temp'.%
|
|
\MessageBreak
|
|
Adopting default `local'}
|
|
\@burl@fitstrutfalse\@burl@fitglobalfalse
|
|
\fi\fi\fi
|
|
}
|
|
|
|
\DeclareOptionX{preserveurlmacro}{\@preserveurlmacrotrue}
|
|
\DeclareOptionX{hyphenbreaks}{%
|
|
\bgroup
|
|
\catcode`\&=12\relax
|
|
\hyper@normalise\burl@addtocharlistafter{-}%
|
|
\egroup
|
|
}
|
|
\DeclareOptionX{anythingbreaks}{%
|
|
\@burl@anythingbreakstrue
|
|
}
|
|
\DeclareOptionX{vertfit}[local]{\burl@setvertfit{#1}}
|
|
|
|
\ProcessOptionsX\relax
|
|
|
|
\def\burl@hyper@linkurl#1#2{%
|
|
\begingroup
|
|
\hyper@chars
|
|
\burl@condpdflink{#1}%
|
|
\endgroup
|
|
}
|
|
|
|
\def\burl@condpdflink#1{%
|
|
\literalps@out{
|
|
/burl@bordercolor {\@urlbordercolor} def
|
|
/burl@border {\@pdfborder} def
|
|
}%
|
|
\if@burl@fitstrut
|
|
\sbox\pdf@box{#1\strut}%
|
|
\else\if@burl@fitglobal
|
|
\sbox\pdf@box{\burl@url}%
|
|
\else
|
|
\sbox\pdf@box{#1}%
|
|
\fi\fi
|
|
\dimen@\ht\pdf@box\dimen@ii\dp\pdf@box
|
|
\sbox\pdf@box{#1}%
|
|
\ifdim\dimen@ii=\z@
|
|
\literalps@out{BU.SS}%
|
|
\else
|
|
\lower\dimen@ii\hbox{\literalps@out{BU.SS}}%
|
|
\fi
|
|
\ifHy@breaklinks\unhbox\else\box\fi\pdf@box
|
|
\ifdim\dimen@=\z@
|
|
\literalps@out{BU.SE}%
|
|
\else
|
|
\raise\dimen@\hbox{\literalps@out{BU.SE}}%
|
|
\fi
|
|
\pdf@addtoksx{H.B}%
|
|
}
|
|
|
|
\DeclareRobustCommand*{\burl}{%
|
|
\leavevmode
|
|
\begingroup
|
|
\let\hyper@linkurl=\burl@hyper@linkurl
|
|
\catcode`\&=12\relax
|
|
\hyper@normalise\burl@
|
|
}
|
|
|
|
\DeclareRobustCommand*{\burlalt}{%
|
|
\begingroup
|
|
\let\hyper@linkurl=\burl@hyper@linkurl
|
|
\catcode`\&=12\relax
|
|
\hyper@normalise\burl@alt
|
|
}
|
|
|
|
\newif\if@burl@breakbefore
|
|
\newif\if@burl@breakafter
|
|
\newif\if@burl@prevbreakafter
|
|
|
|
\bgroup
|
|
\catcode`\&=12\relax
|
|
\gdef\burl@#1{%
|
|
\def\burl@url{#1}%
|
|
\def\burl@urltext{#1}%
|
|
\burl@doit
|
|
}
|
|
|
|
\gdef\burl@alt#1{%
|
|
\def\burl@url{#1}%
|
|
\hyper@normalise\burl@@alt
|
|
}
|
|
\gdef\burl@@alt#1{%
|
|
\def\burl@urltext{#1}%
|
|
\burl@doit
|
|
}
|
|
|
|
\gdef\burl@doit{%
|
|
\burl@toks{}%
|
|
\let\burl@UrlRight\UrlRight
|
|
\let\UrlRight\empty
|
|
\@burl@prevbreakafterfalse
|
|
\@ifundefined{@urlcolor}{\Hy@colorlink\@linkcolor}{\Hy@colorlink\@urlcolor}%
|
|
\expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=%
|
|
\burl@urltext\do{%
|
|
\if@burl@breakafter\@burl@prevbreakaftertrue
|
|
\else\@burl@prevbreakafterfalse\fi
|
|
\if@burl@anythingbreaks\@burl@breakbeforetrue\else\@burl@breakbeforefalse\fi
|
|
\@burl@breakafterfalse
|
|
\expandafter\burl@mif\burl@mfi
|
|
\if@burl@breakbefore
|
|
% Breakable if the current char is in the `can break before' list
|
|
\burl@flush\linebreak[0]%
|
|
\else
|
|
\if@burl@prevbreakafter
|
|
\if@burl@breakafter\else
|
|
% Breakable if the current char is not in any of the `can break'
|
|
% lists, but the previous is in the `can break after' list.
|
|
% This mechanism accounts for sequences of `break after' characters,
|
|
% where a break is allowed only after the last one
|
|
\burl@flush\linebreak[0]%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\expandafter\expandafter\expandafter\burl@toks
|
|
\expandafter\expandafter\expandafter{%
|
|
\expandafter\the\expandafter\burl@toks\@nextchar}%
|
|
}%
|
|
\let\UrlRight\burl@UrlRight
|
|
\burl@flush
|
|
\literalps@out{BU.E}%
|
|
\Hy@endcolorlink
|
|
\endgroup
|
|
}
|
|
\egroup
|
|
|
|
\def\the@burl@toks{\the\burl@toks}
|
|
|
|
\def\burl@flush{%
|
|
\expandafter\def\expandafter\burl@toks@def\expandafter{\the\burl@toks}%
|
|
\literalps@out{/BU.L (\burl@url) def}%
|
|
\hyper@linkurl{\expandafter\Hurl\expandafter{\burl@toks@def}}{\burl@url}%
|
|
\global\burl@toks{}%
|
|
\let\UrlLeft\empty
|
|
}%
|
|
|
|
\if@preserveurlmacro\else\let\url\burl\let\urlalt\burlalt\fi
|
|
|
|
\AtBeginDvi{%
|
|
\headerps@out{%
|
|
/burl@stx null def
|
|
/BU.S {
|
|
/burl@stx null def
|
|
} def
|
|
/BU.SS {
|
|
currentpoint
|
|
/burl@lly exch def
|
|
/burl@llx exch def
|
|
burl@stx null ne {burl@endx burl@llx ne {BU.FL BU.S} if} if
|
|
burl@stx null eq {
|
|
burl@llx dup /burl@stx exch def /burl@endx exch def
|
|
burl@lly dup /burl@boty exch def /burl@topy exch def
|
|
} if
|
|
burl@lly burl@boty gt {/burl@boty burl@lly def} if
|
|
} def
|
|
/BU.SE {
|
|
currentpoint
|
|
/burl@ury exch def
|
|
dup /burl@urx exch def /burl@endx exch def
|
|
burl@ury burl@topy lt {/burl@topy burl@ury def} if
|
|
} def
|
|
/BU.E {
|
|
BU.FL
|
|
} def
|
|
/BU.FL {
|
|
burl@stx null ne {BU.DF} if
|
|
} def
|
|
/BU.DF {
|
|
BU.BB
|
|
[ /H /I /Border [burl@border] /Color [burl@bordercolor]
|
|
/Action << /Subtype /URI /URI BU.L >> /Subtype /Link BU.B /ANN pdfmark
|
|
/burl@stx null def
|
|
} def
|
|
/BU.BB {
|
|
burl@stx HyperBorder sub /burl@stx exch def
|
|
burl@endx HyperBorder add /burl@endx exch def
|
|
burl@boty HyperBorder add /burl@boty exch def
|
|
burl@topy HyperBorder sub /burl@topy exch def
|
|
} def
|
|
/BU.B {
|
|
/Rect[burl@stx burl@boty burl@endx burl@topy]
|
|
} def
|
|
/eop where {
|
|
begin
|
|
/@ldeopburl /eop load def
|
|
/eop { SDict begin BU.FL end @ldeopburl } def
|
|
end
|
|
} {
|
|
/eop { SDict begin BU.FL end } def
|
|
} ifelse
|
|
}%
|
|
}
|
|
\endinput
|
|
%%
|
|
%% End of file `breakurl.sty'.
|