summaryrefslogtreecommitdiff
path: root/language/japanese/platex-tools/pxeverysel.sty
diff options
context:
space:
mode:
Diffstat (limited to 'language/japanese/platex-tools/pxeverysel.sty')
-rw-r--r--language/japanese/platex-tools/pxeverysel.sty169
1 files changed, 169 insertions, 0 deletions
diff --git a/language/japanese/platex-tools/pxeverysel.sty b/language/japanese/platex-tools/pxeverysel.sty
new file mode 100644
index 0000000000..5c00f1830f
--- /dev/null
+++ b/language/japanese/platex-tools/pxeverysel.sty
@@ -0,0 +1,169 @@
+%
+% pxeverysel.sty
+% originally written by Takayuki Yato (ZR)
+% and modified by Hironobu Yamashita
+%
+% This package is distributed as part of the platex-tools bundle
+% maintained by Hironobu Yamashita
+% by courtesy of the original author.
+% https://github.com/aminophen/platex-tools
+%
+
+%% package declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pxeverysel}
+ [2018/10/28 v0.9 Patch to everysel for (u)pLaTeX]
+
+%% previous code for ctex support has been removed in v0.5,
+%% as ctex has depended on pxeverysel since 2016/12/27 v2.4.7
+
+%% in case it's too late ...
+\@ifpackageloaded{everysel}{%
+ % everysel.sty removes \@EverySelectfont@Init once it is used
+ \ifx\@EverySelectfont@Init\undefined
+ \PackageError{pxeverysel}{%
+ Patch too late!\MessageBreak
+ Load pxeverysel earlier}\@ehc
+ \expandafter\endinput
+ \fi
+}{}
+
+%% load it, but ensure that \@EverySelectfont@Init is not executed
+% [Note] everysel.sty contains
+% \AtBeginDocument{\@EverySelectfont@Init}
+% at the end. In most cases, the execution is actually delayed;
+% however,
+% \AtBeginDocument{\RequirePackage{everysel}}
+% can execute it immediately (e.g. found in sidecap.sty).
+% In this case, delay it until the end of pxeverysel.sty.
+\ifx\AtBeginDocument\@firstofone
+ \def\pxys@begindocumenthook{\let\AtBeginDocument\@firstofone}
+ \def\AtBeginDocument{\g@addto@macro\pxys@begindocumenthook}
+ \AtEndOfPackage{\pxys@begindocumenthook}
+\fi
+\RequirePackage{everysel}
+
+%% support for (u)pLaTeX font tracing
+\@ifpackageloaded{tracefnt}{%
+ \ifx\kanjiskip\@undefined\else\ifx\ucs\@undefined
+ \RequirePackage{ptrace}\else\RequirePackage{uptrace}\fi\fi}{}
+
+%--------------------------------------- helpers
+
+%% preparations
+\def\pxys@pkgname{pxeverysel}
+\def\pxys@warn{\PackageWarningNoLine\pxys@pkgname}
+
+%% unique tokens
+\def\pxys@mark{\pxys@mark@}
+\def\pxys@fin{\pxys@fin@}
+
+%% \pxys@patch@cmd\CMD{<pre>}{<post>}{<new>}
+\@onlypreamble\pxys@patch@cmd
+\def\pxys@patch@cmd#1#2#3#4{%
+ \def\pxys@next##1#2##2#3##3\pxys@mark##4\pxys@fin{%
+ \ifx\pxys@mark##4\pxys@mark
+ \let\pxys@fragment\relax
+ \else
+ \def\pxys@fragment{##2}%
+ \def#1{##1#4##3}%
+ \fi}%
+ \expandafter\pxys@next#1\pxys@mark#2#3\pxys@mark\pxys@fin}
+
+%% \pxys@append@to\CSa\CSb
+\@onlypreamble\pxys@append@to
+\def\pxys@append@to#1#2{%
+ \expandafter\g@addto@macro\expandafter#1\expandafter{#2}}
+
+%% \pxys@term
+\let\pxys@term\relax
+
+%---------------------------------------
+
+%% variables
+\let\pxys@self@hook\@empty
+\let\pxys@everysel@hook\@empty
+\@onlypreamble\pxys@selectfont
+\let\pxys@selectfont\relax
+\@onlypreamble\pxys@org@selectfont
+\let\pxys@org@selectfont\relax
+\@onlypreamble\pxys@new@selectfont
+\let\pxys@new@selectfont\relax
+
+%% \@EverySelectfont@Init redefined
+\@onlypreamble\pxys@EverySelectfont@Init
+\let\pxys@EverySelectfont@Init\@EverySelectfont@Init
+\def\@EverySelectfont@Init{%
+ \pxys@preproc
+ \pxys@EverySelectfont@Init
+ \pxys@postproc}
+
+%% \pxys@preproc
+\@onlypreamble\pxys@preproc
+\def\pxys@preproc{%
+ % prepare
+ \expandafter\let\expandafter\pxys@selectfont
+ \csname selectfont \endcsname
+ \let\pxys@org@selectfont\pxys@selectfont
+ % extract "pre-\size@update" insertion
+ \pxys@append@to\pxys@selectfont\pxys@term
+ \pxys@patch@cmd\pxys@selectfont
+ {\pickup@font\font@name}{\size@update\pxys@term}% % plfonts/ptrace
+ {\pickup@font\font@name\pxys@self@hook\pxys@everysel@hook
+ \size@update}%
+ \ifx\pxys@fragment\relax
+ \let\pxys@selectfont\pxys@org@selectfont
+ % extract "pre-\enc@update" insertion
+ \pxys@patch@cmd\pxys@selectfont
+ {\pickup@font\font@name}{\size@update\enc@update}% % ltfsstrc/tracefnt
+ {\pickup@font\font@name\pxys@self@hook\pxys@everysel@hook
+ \size@update\enc@update}%
+ \ifx\pxys@fragment\relax % failure
+ \let\pxys@selectfont\relax
+ \else
+ \pxys@append@to\pxys@self@hook\pxys@fragment
+ \fi
+ \else
+ \pxys@append@to\pxys@self@hook\pxys@fragment
+ \fi
+ \let\pxys@new@selectfont\pxys@selectfont
+ % prepare for everysel routine
+ \let\pxys@CheckCommand\CheckCommand
+ \let\CheckCommand\@gobble
+ % hack for disabling duplicate font info
+ \expandafter\let\expandafter\pxys@ver@tracefnt
+ \csname ver@tracefnt.sty\endcsname
+ \expandafter\let\csname ver@tracefnt.sty\endcsname\@undefined}
+
+%% \pxys@postproc
+\@onlypreamble\pxys@postproc
+\def\pxys@postproc{%
+ % revert the hack for disabling duplicate font info
+ \expandafter\let\csname ver@tracefnt.sty\endcsname\pxys@ver@tracefnt
+ \let\pxys@ver@tracefnt\@undefined
+ % post handling of everysel routine
+ \let\CheckCommand\pxys@CheckCommand
+ \let\pxys@CheckCommand\@undefined
+ \expandafter\let\expandafter\pxys@selectfont
+ \csname selectfont \endcsname
+ % extract the code insertion by everysel
+ \pxys@patch@cmd\pxys@selectfont
+ {\pickup@font\font@name}{\size@update\enc@update}{}%
+ \ifx\pxys@fragment\relax % failure
+ \let\pxys@new@selectfont\relax
+ \else % success
+ \pxys@append@to\pxys@everysel@hook\pxys@fragment
+ \fi
+ % commit the change
+ \ifx\pxys@new@selectfont\relax % failure
+ \let\pxys@selectfont\pxys@org@selectfont % revert
+ \pxys@warn{Failed in patching \string\selectfont}%
+ \else % success
+ \let\pxys@selectfont\pxys@new@selectfont
+ \fi
+ \expandafter\let\csname selectfont \endcsname\pxys@selectfont}
+
+%--------------------------------------- done
+
+\endinput
+%% EOF