|
%% |
|
%% This is file 'bxjaurl.sty'. |
|
%% |
|
%% Copyright (c) 2025 Takayuki YATO (aka. "ZR") |
|
%% GitHub: https://github.com/zr-tex8r |
|
%% Twitter: @zr_tex8r |
|
%% |
|
%% This package is distributed under the MIT License. |
|
%% |
|
|
|
%% package declaration |
|
\NeedsTeXFormat{LaTeX2e} |
|
\ProvidesPackage{bxjaurl}[2025/06/18 v0.2] |
|
\def\bxur@pkgname{bxjaurl} |
|
\providecommand\bxDebug[1]{} |
|
|
|
%--------------------------------------- general |
|
|
|
%% unique tokens |
|
\def\bxur@end{\bxur@end@} |
|
|
|
%% variables |
|
\@onlypreamble\bxur@do |
|
\let\bxur@do\relax |
|
\newif\ifbxur@styles |
|
|
|
%% \ifbxur@defined |
|
\let\ifbxur@defined\iffalse |
|
\def\bxur@do{\let\ifbxur@defined\ifdefined} |
|
\ifx\ifdefined\@undefined\else \bxur@do \fi |
|
|
|
%% \bxur@debug{<message>} |
|
\def\bxur@debug#1{% |
|
\bxDebug{\bxur@pkgname: #1}% |
|
} |
|
|
|
%--------------------------------------- handle options |
|
|
|
%% \bxur@url@opts |
|
\@onlypreamble\bxur@url@opts |
|
\let\bxur@url@opts\@empty |
|
|
|
%% '(no)styles' |
|
\DeclareOption{styles}{% |
|
\bxur@stylestrue |
|
} |
|
\DeclareOption{nostyles}{% |
|
\bxur@stylesfalse |
|
} |
|
%% other options are passed to 'utl' |
|
\DeclareOption*{% |
|
\edef\bxur@url@opts{\bxur@url@opts,\CurrentOption}% |
|
} |
|
\ExecuteOptions{styles} |
|
\ProcessOptions* |
|
\edef\bxur@do{% |
|
\noexpand\RequirePackage[\bxur@url@opts]{url}[]% |
|
}\bxur@do |
|
\@gobble{% for shallow parsers |
|
\RequirePackage{url}[]% |
|
} |
|
|
|
%--------------------------------------- environment check |
|
|
|
%% check version of 'url' |
|
\ifx\UrlLeft\@undefined |
|
\PackageWarningNoLine\bxur@pkgname |
|
{Package 'url' is too old} |
|
\expandafter\endinput\fi\relax |
|
|
|
%% \bxur@engine |
|
\let\bxur@engine=0 |
|
\def\bxur@do#1#2{% |
|
\edef\bxur@tmpa{\string#1}\edef\bxur@tmpb{\meaning#1}% |
|
\ifx\bxur@tmpa\bxur@tmpb #2\fi |
|
} |
|
\bxur@do\jfam{\let\bxur@engine=j} |
|
\bxur@do\luatexversion{\let\bxur@engine=l} |
|
\bxur@debug{engine = \meaning\bxur@engine} |
|
|
|
%% check engine |
|
\if 0\bxur@engine |
|
\PackageInfo\bxur@pkgname |
|
{Unsupported engine\@gobble} |
|
\expandafter\endinput\fi\relax |
|
|
|
%--------------------------------------- the hook |
|
|
|
%% \bxur@curjfnt |
|
\if l\bxur@engine |
|
\newcount\bxur@curjfnt |
|
\fi |
|
|
|
%% \bxur@hook |
|
% The hook. |
|
\let\bxur@hook\@empty |
|
\expandafter\def\expandafter\UrlLeft\expandafter{% |
|
\expandafter\bxur@hook\UrlLeft |
|
} |
|
|
|
\if j\bxur@engine % pTeX-ish |
|
\chardef\bxur@tmp@fam=15 |
|
\g@addto@macro\bxur@hook{% |
|
\ifnum\jfam>\thr@@\else |
|
\jfam\bxur@tmp@fam |
|
\fi |
|
\bxur@debug{\number\jfam}% |
|
\textfont\jfam\jfont |
|
} |
|
\else\if l\bxur@engine % LuaTeX |
|
\g@addto@macro\bxur@hook{% |
|
\ifbxur@defined\jfam \ifbxur@defined\ltjsetparameter |
|
\ifnum\jfam<\z@ |
|
\jfam\z@ |
|
\fi |
|
\bxur@debug{\number\jfam}% |
|
\bxur@curjfnt\ltj@curjfnt |
|
\ltjsetparameter{jatextfont={\jfam,\bxur@ltj@jfont}}% |
|
\fi\fi |
|
} |
|
\protected\def\bxur@ltj@jfont{% |
|
\ltj@curjfnt\bxur@curjfnt\relax |
|
} |
|
\fi\fi |
|
|
|
%--------------------------------------- patch url styles |
|
\ifbxur@styles %<*styles> |
|
|
|
%% \bxur@addto@urlfont{<code>} |
|
% Adds (locally) <code> to the content of \UrlFont. |
|
\def\bxur@addto@urlfont#1{% |
|
\expandafter\bxur@addto@urlfont@a\UrlFont#1\bxur@end |
|
} |
|
\def\bxur@addto@urlfont@a#1\bxur@end{% |
|
\def\UrlFont{#1}% |
|
} |
|
|
|
%% the process |
|
\def\bxur@do#1{% |
|
\expandafter\bxur@do@style\csname url@#1style\endcsname{#1}% |
|
} |
|
\@onlypreamble\bxur@do@style |
|
\def\bxur@do@style#1#2#3#4#5{% |
|
% \url@XXstyle{XX}{CHECK-URLFONT}{ADDED}{CHECK-STYLE} |
|
\def\bxur@tmpa{#5}% |
|
\def\bxur@tmpb{#3}% |
|
\ifx#1\bxur@tmpa % unmodified |
|
\g@addto@macro#1{\bxur@addto@urlfont{#4}}% |
|
\ifx\UrlFont\bxur@tmpb % current style is XX |
|
\bxur@debug{current style is #2}% |
|
#1% do patched version |
|
\fi |
|
\else |
|
\PackageInfo\bxur@pkgname |
|
{Skipped patch to style '#2',\MessageBreak |
|
because it has unexpected definition\@gobble} |
|
\fi |
|
} |
|
|
|
%% apply to existing styles |
|
\bxur@do{tt}{\ttfamily}{\gtfamily}{% |
|
\@ifundefined{selectfont}{\def\UrlFont{\tt}}{\def\UrlFont{\ttfamily}}% |
|
} |
|
\bxur@do{rm}{\rmfamily}{\mcfamily}{% |
|
\@ifundefined{selectfont}{\def\UrlFont{\rm}}{\def\UrlFont{\rmfamily}}% |
|
} |
|
\bxur@do{sf}{\sffamily}{\gtfamily}{% |
|
\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\sffamily}}% |
|
} |
|
\bxur@do{same}{}{}{% |
|
\def\UrlFont{}% |
|
} |
|
|
|
\fi %</styles> |
|
%--------------------------------------- all done |
|
\endinput |
|
%% EOF |