%% %% This is file 'pxjahyper.sty'. %% %% Copyright (c) 2012-2024 Takayuki YATO (aka. "ZR") %% GitHub: https://github.com/zr-tex8r %% Twitter: @zr_tex8r %% %% This package is distributed under the MIT License. %% %% package declaration \NeedsTeXFormat{pLaTeX2e} \ProvidesPackage{pxjahyper}[2024/08/14 v1.4] \def\pxhy@pkgname{pxjahyper} \providecommand{\bxDebug}[1]{} %--------------------------------------- Preparations %% error messages \def\pxhy@error{\PackageError\pxhy@pkgname} \@onlypreamble\pxhy@eh@fatal \def\pxhy@eh@fatal{% Package loading is aborted right now.\MessageBreak\@ehc } %% packages \RequirePackage{keyval}\relax \RequirePackage{ltxcmds}[2011/08/22]% v1.21 %% variables \newif\ifpxhy@ptex \newif\ifpxhy@uptex \newif\ifpxhy@etex \newif\ifpxhy@etoolbox \chardef\pxhy@hook@system=0 \newif\ifpxhy@tounicode \newif\ifpxhy@uniescape \newif\ifpxhy@bigcode \let\pxhy@bigcode@given\relax \newif\ifpxhy@papersize \newif\ifpxhy@charcmds \chardef\pxhy@driver@none=0 \chardef\pxhy@driver@dvipdfmx=1 \chardef\pxhy@driver@dvips=2 \let\pxhy@driver\@undefined \newif\ifpxhy@hy@unicode \newif\ifpxhy@jacommentline \newif\ifpxhy@disablecmds \newif\ifpxhy@otfutf \newif\ifpxhy@otfcid \newif\ifpxhy@otfmacros \newif\ifpxhy@Uchar@avail \newif\ifpxhy@ucs@avail \newif\ifpxhy@toucs@avail \let\pxhy@jsclasses@name\relax \newif\ifpxhy@jlreq@cls \newif\ifpxhy@fallback@geta \newif\ifpxhy@fallback@warn \newif\ifpxhy@fallback@cidm \newif\ifpxhy@extjis@map \newif\ifpxhy@extjis@use \newif\ifpxhy@ajhankaku@chars %%<*> \pxjahypersetup{=,...} \newcommand*\pxjahypersetup{% \setkeys{\pxhy@pkgname}% } %% \pxhy@handle@key{}{}{} \def\pxhy@handle@key#1#2#3{% \expandafter\let\expandafter\pxhy@tmpa\csname pxhy@#3\endcsname \ifx\pxhy@tmpa\relax \PackageError\pxhy@pkgname {Invalid value for key '#1':\MessageBreak\@spaces#2}% {\@eha}% \else \pxhy@tmpa \fi } %--------------------------------------- Package options %% DVI drivers \DeclareOption{dvipdfmx}{% \let\pxhy@driver\pxhy@driver@dvipdfmx } \DeclareOption{dvipdfm}{% \let\pxhy@driver\pxhy@driver@dvipdfmx } \DeclareOption{dvips}{% \let\pxhy@driver\pxhy@driver@dvips } \DeclareOption{nodvidriver}{% \let\pxhy@driver\pxhy@driver@none } \DeclareOption{resetdvidriver}{% \let\pxhy@driver\@undefined } \DeclareOption{autodvidriver}{% DEPRECATED \let\pxhy@driver\@undefined } \DeclareOption{auto}{% DEPRECATED \let\pxhy@driver\@undefined } %% operation modes \DeclareOption{tounicode}{% \pxhy@tounicodetrue } \DeclareOption{notounicode}{% \pxhy@tounicodefalse } \DeclareOption{out2uni}{% \pxhy@uniescapetrue } \DeclareOption{noout2uni}{% \pxhy@uniescapefalse \let\pxhy@nouniescape@given=t } \DeclareOption{convbkmk}{% \pxhy@uniescapetrue } \DeclareOption{noconvbkmk}{% \pxhy@uniescapefalse \let\pxhy@nouniescape@given=t } %% others \DeclareOption{papersize}{% \pxhy@papersizetrue } \DeclareOption{nopapersize}{% \pxhy@papersizefalse } \DeclareOption{charcmds}{% \pxhy@charcmdstrue } \DeclareOption{nocharcmds}{% \pxhy@charcmdsfalse } \pxhy@bigcodetrue \DeclareOption{bigcode}{% \pxhy@bigcodetrue \let\pxhy@bigcode@given=t } \DeclareOption{nobigcode}{% \pxhy@bigcodefalse } \DeclareOption{jacommentline}{% \pxhy@jacommentlinetrue } \DeclareOption{nojacommentline}{% \pxhy@jacommentlinefalse } \DeclareOption{disablecmds}{% \pxhy@disablecmdstrue } \DeclareOption{nodisablecmds}{% \pxhy@disablecmdsfalse } \DeclareOption{otfutf}{% \pxhy@otfutftrue } \DeclareOption{nootfutf}{% \pxhy@otfutffalse } \DeclareOption{otfcid}{% \pxhy@otfcidtrue } \DeclareOption{nootfcid}{% \pxhy@otfcidfalse } \pxhy@otfmacrostrue \DeclareOption{otfmacros}{% \pxhy@otfmacrostrue \let\pxhy@otfmacros@given=t } \DeclareOption{nootfmacros}{% \pxhy@otfmacrosfalse } \DeclareOption{fallback-geta}{% DEPRECATED \pxjahypersetup{fallback=geta}% } \DeclareOption{fallback-delete}{% DEPRECATED \pxjahypersetup{fallback=delete}% } \DeclareOption{force-unicode}{% DEPRECATED \PackageWarningNoLine\pxhy@pkgname {'force-unicode' is DEPRECATED and ignored}% } \DeclareOption{disable-Ux}{% for debug \let\pxhy@disable@Ux=t } %% key-value options \DeclareOption*{% \expandafter\pxjahypersetup\expandafter{\CurrentOption}% } % 'fallback=geta|delete' \pxhy@fallback@getatrue \define@key{\pxhy@pkgname}{fallback}{% \pxhy@handle@key{fallback}{#1}{kv@fallback@@#1}% } \let\pxhy@kv@fallback@@geta\pxhy@fallback@getatrue \let\pxhy@kv@fallback@@delete\pxhy@fallback@getafalse % 'fallback-warn=' \pxhy@fallback@warntrue \define@key{\pxhy@pkgname}{fallback-warn}[true]{% \pxhy@handle@key{fallback-warn}{#1}{fallback@warn#1}% } % 'fallback-cidm=' \pxhy@fallback@cidmtrue \define@key{\pxhy@pkgname}{fallback-cidm}[true]{% \pxhy@handle@key{fallback-cidm}{#1}{fallback@cidm#1}% } % 'extjis=' \pxhy@extjis@usetrue \define@key{\pxhy@pkgname}{extjis}[true]{% \pxhy@handle@key{extjis}{#1}{extjis@use#1}% } % 'ajhankaku-chars=' \define@key{\pxhy@pkgname}{ajhankaku-chars}[true]{% \pxhy@handle@key{ajhankaku-chars}{#1}{ajhankaku@chars#1}% } %% dispatch \ExecuteOptions{% resetdvidriver,tounicode,papersize,charcmds,jacommentline,% disablecmds,otfutf,otfcid% } \ProcessOptions* %--------------------------------------- Environment check %% The hyperref package must be loaded in advance. \@ifpackageloaded{hyperref}{}{%else \pxhy@error{Package 'hyperref' is not yet loaded} {\pxhy@eh@fatal}% \endinput } %% Check for the hyperref option 'unicode'. \expandafter\ifx\csname ifHy@unicode\expandafter\endcsname \csname iftrue\endcsname \pxhy@hy@unicodetrue \fi \AtBeginDocument{% \@tempswafalse \expandafter\ifx\csname ifHy@unicode\expandafter\endcsname \csname iftrue\endcsname \@tempswatrue \fi \ifnum0\ifpxhy@hy@unicode1\fi\if@tempswa1\fi=1 \PackageError\pxhy@pkgname {You must not change the encoding setting of hyperref\MessageBreak (e.g. 'unicode') after pxjahyper is loaded}% {\@ehc}% \fi } %% Check hyperref driver. \ifx\pxhy@driver\@undefined \let\pxhy@driver\pxhy@driver@none \def\pxhy@tmpa{hdvipdfm} \ifx\Hy@driver\pxhy@tmpa \let\pxhy@driver\pxhy@driver@dvipdfmx \fi \def\pxhy@tmpa{hdvips} \ifx\Hy@driver\pxhy@tmpa \let\pxhy@driver\pxhy@driver@dvips \fi \ifnum\pxhy@driver=\pxhy@driver@none \ifx\Hy@driver\@undefined\else \PackageWarningNoLine\pxhy@pkgname {Unknown hyperref driver: \Hy@driver} \fi\fi \fi %% Check the engine. \@onlypreamble\pxhy@check \def\pxhy@check#1#2{% \edef\pxhy@tmpa{\string#1}% \edef\pxhy@tmpb{\meaning#1}% \ifx\pxhy@tmpa\pxhy@tmpb #2\fi } \pxhy@check\eTeXversion{% \pxhy@etextrue \IfFileExists{etoolbox.sty}{\pxhy@etoolboxtrue}{}% } \pxhy@check\kanjiskip{% \pxhy@ptextrue \pxhy@check\ucs{% \pxhy@check\ptexversion{\pxhy@uptextrue} \pxhy@check\kchardef{\pxhy@uptextrue} \ifpxhy@uptex\else % upTeX v<0.10 \pxhy@error{This upTeX engine is too old} {\pxhy@eh@fatal} \endinput \fi % only upTeX in Unicode is seen as upTeX \ifnum\ucs"3000="3000 \else \pxhy@uptexfalse \fi } } \ifpxhy@ptex\else \pxhy@error{Unknown engine used}% {\pxhy@eh@fatal} \expandafter\endinput \fi %% pxhy@Uchar@avail switch \pxhy@check\Uchar{\pxhy@Uchar@availtrue} %% pxhy@ucs@avail switch \pxhy@check\ucs{\pxhy@ucs@availtrue} %% pxhy@toucs@avail switch \pxhy@check\toucs{\pxhy@toucs@availtrue} %% pxhy@extjis@map switch % Note that 'tounicode' is necessary. \ifpxhy@etex \ifpxhy@uptex\else \ifpxhy@tounicode \pxhy@extjis@maptrue \fi\fi\fi %% Check the document class. % jlreq \ifpxhy@etex \ifx\jlreqsetup\@undefined\else \pxhy@jlreq@clstrue \fi \fi % jsclasses \@ifclassloaded{jsarticle}{\def\pxhy@jsclasses@name{jsarticle}}{} \@ifclassloaded{jsbook}{\def\pxhy@jsclasses@name{jsbook}}{} \ifx\bxjs@clsname\@undefined\else \let\pxhy@jsclasses@name\relax \fi \ifx\jsc@clsname\@undefined\else \let\pxhy@jsclasses@name\jsc@clsname \fi %% Check for the new hook system. \@ifl@t@r\fmtversion{2021/11/15}{% \chardef\pxhy@hook@system=2 }{\@ifl@t@r\fmtversion{2020/02/02}{% % NB. We need to support this intermediate version, because % the hook order matters here. \chardef\pxhy@hook@system=1 }{}} %% adjustment % bigcode cannot be used without upTeX. \ifpxhy@bigcode \ifpxhy@uptex\else \pxhy@bigcodefalse \ifx t\pxhy@bigcode@given \PackageWarningNoLine\pxhy@pkgname {bigcode is invalid without upTeX} \fi \fi\fi %% pxhy@uniescape switch \ifnum\pxhy@driver=\pxhy@driver@dvips \ifx t\pxhy@nouniescape@given\else \pxhy@uniescapetrue \fi\fi % hyperref 'unicode' mode \ifpxhy@hy@unicode \pxhy@uniescapefalse %\pxhy@otfutftrue \fi % otfcid requrires otfutf. \ifpxhy@otfutf \else \ifpxhy@otfcid \PackageInfo\pxhy@pkgname {Option 'nootfcid' is assumed\MessageBreak because 'nootfutf' is effective\@gobble} \pxhy@otfcidfalse \fi\fi % otfmacros requrires otfcid. \ifpxhy@otfcid \else \ifpxhy@otfmacros \PackageInfo\pxhy@pkgname {Option 'nootfmacros' is assumed\MessageBreak because 'nootfcid' is effective\@gobble} \pxhy@otfmacrosfalse \fi\fi %% in nodvidriver mode \ifnum\pxhy@driver=\pxhy@driver@none \pxhy@papersizefalse \pxhy@charcmdsfalse \fi \bxDebug{****pxjahyper env^^J% pxhy@ptex = \ifpxhy@ptex true\else false\fi^^J% pxhy@uptex = \ifpxhy@uptex true\else false\fi^^J% pxhy@etex = \ifpxhy@etex true\else false\fi^^J% pxhy@etoolbox = \ifpxhy@etoolbox true\else false\fi^^J% pxhy@hook@system = \the\pxhy@hook@system^^J% pxhy@tounicode = \ifpxhy@tounicode true\else false\fi^^J% pxhy@uniescape = \ifpxhy@uniescape true\else false\fi^^J% pxhy@bigcode = \ifpxhy@bigcode true\else false\fi^^J% pxhy@papersize = \ifpxhy@papersize true\else false\fi^^J% pxhy@charcmds = \ifpxhy@charcmds true\else false\fi^^J% pxhy@driver = \the\pxhy@driver^^J% ifpxhy@hy@unicode = \ifpxhy@hy@unicode true\else false\fi^^J% pxhy@jacommentline = \ifpxhy@jacommentline true\else false\fi^^J% pxhy@disablecmds = \ifpxhy@disablecmds true\else false\fi^^J% pxhy@otfutf = \ifpxhy@otfutf true\else false\fi^^J% pxhy@otfcid = \ifpxhy@otfcid true\else false\fi^^J% pxhy@otfmacros = \ifpxhy@otfmacros true\else false\fi^^J% pxhy@fallback@geta = \ifpxhy@fallback@geta true\else false\fi^^J% } %--------------------------------------- Helpers %% unique tokens \def\pxhy@end{\pxhy@end@} \def\pxhy@mt{\pxhy@mt@} \let\pxhy@mk\indent % unexpandable %% \pxhy@begin@dvi@hook{} \ifnum\pxhy@hook@system>0 \def\pxhy@begin@dvi@hook#1{% \AddToHook{shipout/firstpage}{#1}% } \DeclareHookRule{shipout/firstpage}{.}{>}{hyperref} \else \RequirePackage{atbegshi}[2011/10/05]% v1.16 \def\pxhy@begin@dvi@hook#1{% \AtBeginShipoutFirst{#1}% } \fi %% \pxhy@get@jchar{} % Let \pxhy@jchar a macro expanding to a single jchar token % of the char code . \def\pxhy@get@jchar#1{% \begingroup \pxhy@forcecjktoken{#1}% \kansujichar\@ne=#1\relax \xdef\pxhy@jchar{\kansuji\@ne}% \endgroup } %% \pxhy@let@jchar@jc\CS{} \def\pxhy@let@jchar@jc#1#2{% \pxhy@get@jchar{\jis"#2}% \let#1\pxhy@jchar } %% \pxhy@forcecjktoken{} \ifpxhy@uptex \ifx\forcecjktoken\@undefined \def\pxhy@forcecjktoken#1{\kcatcode#1=18 } \else \def\pxhy@forcecjktoken#1{\forcecjktoken} \fi \else \def\pxhy@forcecjktoken#1{\relax} \fi %% \pxhy@geta : GETA MARK \pxhy@let@jchar@jc\pxhy@geta{222E} %% \pxhy@print@geta \def\pxhy@print@geta{% \ifpxhy@fallback@geta \pxhy@geta \fi } %% \pxhy@hook@after@package{}{} \@onlypreamble\pxhy@hook@after@package \def\pxhy@hook@after@package#1#2{% \ifcase\pxhy@hook@system \AtBeginDocument{% \@ifpackageloaded{#1}{#2}{}% }% \or \@ifpackageloaded{#1}{#2}{% \AddToHook{package/after/#1}{#2}% }% \or \@ifpackageloaded{#1}{#2}{% \AddToHook{package/#1/after}{#2}% }% \fi } %% \pxhy@triexpandafter \def\pxhy@triexpandafter{% \expandafter\expandafter\expandafter } %% \pxhy@csletcs{}{} \def\pxhy@csletcs#1#2{% \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname } %% \pxhy@cond\ifXXX\fi{}{} % Does the test "\ifXXX", with immediate exit from the % induced if-level. \@gobbletwo\if\if \def\pxhy@cond#1\fi{% #1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi } %% \pxhy@ifempty{}{}{} \def\pxhy@ifempty#1{% \pxhy@cond\ifx\pxhy@mt#1\pxhy@mt\fi } %% \pxhy@read@num{}\CScont \def\pxhy@read@num#1{% \expandafter\pxhy@read@num@a\number#1\pxhy@mk#1\pxhy@mk#1\pxhy@mk } \def\pxhy@read@num@a#1#2\pxhy@mk{% \expandafter\pxhy@read@num@b\romannumeral\if-#1\else-\fi } \def\pxhy@read@num@b#1\pxhy@mk#2\pxhy@mk{% \expandafter\pxhy@read@num@c\number\pxhy@ifempty{#1}{#2}{}\pxhy@mk } \def\pxhy@read@num@c#1\pxhy@mk#2{% \pxhy@cond\ifnum#1<\z@\fi{#2{0}}{#2{#1}}% } %--------------------------------------- Helpers (e-TeX) \ifpxhy@etex %% packages \ifpxhy@etoolbox \RequirePackage{etoolbox}[2011/01/03]%v2.1 \fi %% \pxhy@if@star{}{} % Expands to if followed by *, otherwise to . \def\pxhy@if@star#1#2#3{% #3=next-arg \expandafter\pxhy@if@star@a\expandafter @\detokenize{#3}@% {#1}@*@{#2{#3}}\pxhy@mk } \def\pxhy@if@star@a#1@*@#2#3\pxhy@mk{#2} %% \pxhy@if@opt{}{} % Expands to {} if followed by [], otherwise to . \def\pxhy@if@opt#1#2#3{% #3=next-arg \expandafter\pxhy@if@opt@a\expandafter @\detokenize{#3}@% {\pxhy@if@opt@b{#1}}@[@{#2{#3}}\pxhy@mk%] } \def\pxhy@if@opt@a#1@[@#2#3\pxhy@mk{#2} \def\pxhy@if@opt@b#1#2]{#1{#2}} %% \pxhy@xdetokenize{} \let\pxhy@xdetokenize\detokenize \pxhy@check\expanded{% \def\pxhy@xdetokenize#1{\detokenize\expandafter{\expanded{#1}}}% } \fi %--------------------------------------- Load bxjatoucs %% \pxhy@bxjatoucs@failure % Holds the reason message if bxjatoucs is unavailable; % otherwise equals to \relax. \@onlypreamble\pxhy@bxjatoucs@failure \let\pxhy@bxjatoucs@failure\relax %% \pxhy@try@load@bxjatoucs % Tries to load bxjatoucs. If that fails, then it sets the reason % message to \pxhy@bxjatoucs@failure. \@onlypreamble\pxhy@try@load@bxjatoucs \def\pxhy@try@load@bxjatoucs{% \global\let\pxhy@try@load@bxjatoucs\relax \ifpxhy@etoolbox % load bxjatoucs in "check mode" \IfFileExists{bxjatoucs.sty}{% \let\bxjatoucsCheckAvail=t \RequirePackage{bxjatoucs}[] \undef\bxjatoucsCheckAvail }{} % and judge availability \ifundef\bxjaCidToUcs{% \def\pxhy@bxjatoucs@failure{% package 'bxjatoucs' is unavailable% }% }{} \else\ifpxhy@etex \def\pxhy@bxjatoucs@failure{% package 'etoolbox' is unavailable% } \else \def\pxhy@bxjatoucs@failure{% e-TeX extension is unavailable% } \fi\fi } \@tempswafalse \ifpxhy@uptex\else\ifpxhy@hy@unicode \pxhy@try@load@bxjatoucs \ifx\pxhy@bxjatoucs@failure\relax\else \@tempswatrue \fi \fi\fi \if@tempswa \PackageError\pxhy@pkgname {The hyperref 'unicode' mode is not supported\MessageBreak because \pxhy@bxjatoucs@failure}% {\pxhy@eh@fatal}% \expandafter\endinput \fi %--------------------------------------- Output 'tounicode' special \ifpxhy@tounicode \ifnum\pxhy@driver=\pxhy@driver@dvipdfmx %<*dvipdfmx> %% dvipdfmx \RequirePackage{pxjahyper-enc}[]% \ifpxhy@bigcode\else \suppressbigcode \fi \fi % \fi %--------------------------------------- Papersize special adjustment \ifpxhy@papersize %<*papersize> % When the magnification is in effect (i.e. \mag<>1000), hyperref % emits a papersize special with wrong value. (dvipdfmx interprets % the lengths in the special as 'true' lengths.) So here a papersize % special with adjusted values will be output. \ifnum\mag=1000 \else \expandafter\ifx\csname ifHy@setpagesize\expandafter\endcsname \csname iftrue\endcsname % hyperref setpagesize is on \ifnum0<\mag \ifnum32768>\mag % \mag is in valid range \begingroup \@ifundefined{stockwidth}{}{%else \ifdim\stockwidth>\z@ \ifdim\stockheight>\z@ \paperwidth=\stockwidth \paperheight=\stockheight \fi\fi }% \@tempcnta=\mag \advance\@tempcnta100000 \def\pxhy@next1#1#2#3#4#5\relax{% \def\pxhy@tmpa{#1#2.#3#4#5}% }% \expandafter\pxhy@next\the\@tempcnta\relax \paperwidth=\pxhy@tmpa\paperwidth \paperheight=\pxhy@tmpa\paperheight \ifdim\paperwidth>\z@ \ifdim\paperheight>\z@ \edef\pxhy@tmpa{% \noexpand\pxhy@begin@dvi@hook{% \special{papersize=\the\paperwidth,\the\paperheight}}% }\pxhy@tmpa \fi\fi \endgroup \fi\fi \fi \fi \fi % %--------------------------------------- Code input processor %% constants \def\pxhy@uc@REPL{FFFD} \def\pxhy@uc@XNAC{FDD1} % not-a-char codepoint used as marker %% switch 'pxhy@utfXVI' % Whether or not to convert to UTF-16. \newif\ifpxhy@utfXVI %% Generate tables % - \pxhy@qh/XY -> Z ; \pxhy@hq/Z -> XY % means XY (base-4) = Z (base-16) % - \pxhy@lhq/ZW -> XY % ZW (base-16) - 1 = XY (base-4) % - \pxhy@hd/X % uppercase of X if X is a (lower/uppercase) hexadecimal % digit; otherwise undefined \def\pxhy@next#1#2#3#4#5{% \@namedef{pxhy@qh/#1#2}{#3}% \@namedef{pxhy@hq/#3}{#1#2}% \@namedef{pxhy@lhq/#4#5}{#1#2}% } \@for\pxhy@tmpa:={% 00001,01102,02203,03304,10405,11506,12607,13708,% 20809,2190A,22A0B,23B0C,30C0D,31D0E,32E0F,33F10}\do{% \expandafter\pxhy@next\pxhy@tmpa } \def\pxhy@next#1{% \lowercase{\def\pxhy@tmpb{#1}}% \@namedef{pxhy@hd/#1}{#1}% \@namedef{pxhy@hd/\pxhy@tmpb}{#1}% } \@tfor\pxhy@tmpa:=0123456789ABCDEF\do{% \expandafter\pxhy@next\pxhy@tmpa } %% \pxhy@burst-`>... \let\pxhy@burst\romannumeral %% \pxhy@uchex{} % "Distills" the code-value input. If the input is a hex notation of % a valid code point of Unicode, then it passes the value to % \pxhy@uchex@out in zero-padded 4-6 digits; otherwise passes FFFD % to \pxhy@uchex@out. % Moreover, when the switch pxhy@utfXVI is true, then conversion into % UTF-16 is performed and each unit is passed to \pxhy@uchex@out % in zero-padded 4 digits. \def\pxhy@uchex#1{% \pxhy@uchex@pre@a#1\relax{}\pxhy@mk\pxhy@end } \def\pxhy@uchex@pre@a{% \expandafter\pxhy@uchex@pre@b\pxhy@burst-`>% } \def\pxhy@uchex@pre@b#1#{% \pxhy@cond \ifx\pxhy@mt#1\pxhy@mt \fi{% \pxhy@uchex@bombout }{%else \pxhy@uchex@pre@c#1% }% } \def\pxhy@uchex@pre@c#1{% \pxhy@cond \ifx#1\relax \fi{% \pxhy@uchex@pre@end }{%else \pxhy@triexpandafter\pxhy@uchex@pre@d \csname pxhy@hd/\string#1\endcsname }% } \def\pxhy@uchex@pre@d#1{% \pxhy@cond \ifx#1\relax \fi{% \pxhy@uchex@bombout }{%else \pxhy@uchex@pre@e#1% }% } \def\pxhy@uchex@pre@e#1#2\pxhy@mk#3\pxhy@end{% \pxhy@cond \if 0#1\fi{% \pxhy@cond \ifx\pxhy@mt#3\pxhy@mt \fi{% \pxhy@uchex@pre@a#2\pxhy@mk#3\pxhy@end }{%else \pxhy@uchex@pre@a#2\pxhy@mk#3#1\pxhy@end }% }{%else \pxhy@uchex@pre@a#2\pxhy@mk#3#1\pxhy@end }% } \def\pxhy@uchex@pre@end#1\pxhy@mk#2\pxhy@end{% \pxhy@cond \ifx\pxhy@mt#1\pxhy@mt \fi{% \pxhy@uchex@sw{#2}% }{%else \pxhy@uchex@error }% } \def\pxhy@uchex@bombout#1\pxhy@end{% \pxhy@uchex@error } \def\pxhy@uchex@sw#1{% \pxhy@cond \ifnum"0#1>"10FFFF \fi{% \pxhy@uchex@error }{\pxhy@cond \ifnum"0#1>"FFFF \fi{% \pxhy@cond \ifpxhy@utfXVI \fi{% \pxhy@uchex@big#1"000000\pxhy@end }{%else \pxhy@uchex@out{#1}% }% }{%else \pxhy@uchex@small#1"0000\pxhy@end }}% } \def\pxhy@uchex@small#1#2#3#4#5#6\pxhy@end{% \pxhy@uchex@small@a#1#2#3#4#5\pxhy@end } \def\pxhy@uchex@small@a#1"#2\pxhy@end{% \pxhy@uchex@out{#2#1}% } \def\pxhy@uchex@big#1#2#3#4#5#6#7#8\pxhy@end{% \pxhy@uchex@big@a#1#2#3#4#5#6#7\pxhy@end } \def\pxhy@uchex@big@a#1"#2\pxhy@end{% \pxhy@uchex@big@b#2#1\pxhy@end } \def\pxhy@uchex@big@b#1#2#3#4{% \pxhy@triexpandafter\pxhy@uchex@big@c \csname pxhy@lhq/#1#2\pxhy@triexpandafter\endcsname \csname pxhy@hq/#3\pxhy@triexpandafter\endcsname \csname pxhy@hq/#4\endcsname } \def\pxhy@uchex@big@c#1#2#3#4#5#6{% \pxhy@triexpandafter\pxhy@uchex@big@d \csname pxhy@qh/2#1\pxhy@triexpandafter\endcsname \csname pxhy@qh/#2#3\pxhy@triexpandafter\endcsname \csname pxhy@qh/#4#5\pxhy@triexpandafter\endcsname \csname pxhy@qh/3#6\endcsname } \def\pxhy@uchex@big@d#1#2#3#4#5\pxhy@end{% \pxhy@uchex@out{D#1#2#3}% \pxhy@uchex@out{D#4#5}% } \edef\pxhy@uchex@error{% \noexpand\pxhy@uchex@out{\pxhy@uc@REPL}% } %--------------------------------------- Unavailable characters %%<+> \pxjahyperBadCharacter{