summaryrefslogtreecommitdiff
path: root/language/japanese/pxjodel/pxjodel.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/japanese/pxjodel/pxjodel.sty
Initial commit
Diffstat (limited to 'language/japanese/pxjodel/pxjodel.sty')
-rw-r--r--language/japanese/pxjodel/pxjodel.sty188
1 files changed, 188 insertions, 0 deletions
diff --git a/language/japanese/pxjodel/pxjodel.sty b/language/japanese/pxjodel/pxjodel.sty
new file mode 100644
index 0000000000..b5ba40b71f
--- /dev/null
+++ b/language/japanese/pxjodel/pxjodel.sty
@@ -0,0 +1,188 @@
+%%
+%% This is file 'pxjodel.sty'.
+%%
+%% Copyright (c) 2019 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{pxjodel}[2019/02/12 v0.2a]
+\def\pxjo@pkgname{pxjodel}
+%
+\providecommand\bxDebug[1]{}
+
+%--------------------------------------- general
+
+%% packages
+\RequirePackage{xkeyval}
+\RequirePackage{ifuptex}
+
+%% unique tokens
+\def\pxjo@end{\pxjo@end@}
+\def\pxjo@mt{\pxjo@mt@}
+
+%--------------------------------------- options
+
+%% variables
+\let\pxjo@prefix\@empty
+\@onlypreamble\pxjo@thru
+\let\pxjo@thru\@empty
+
+%% prefix=...
+\define@cmdkey{pxjo}[pxjo@]{prefix}{}
+%% dispatch
+\edef\next{%
+ \noexpand\setkeys*{pxjo}{\@nameuse{opt@\@currname.\@currext}}%
+}\next
+\AtEndOfPackage{\let\@unprocessedoptions\relax}%
+% other options are passed to otf
+\let\pxjo@thru\XKV@rm
+
+%% check
+\ifx\pxjo@prefix\@empty
+ \PackageError\pxjo@pkgname
+ {Option 'prefix' is not given}%
+ {\@ehc}
+\expandafter\endinput\fi\relax
+
+%% load 'otf' package
+\@ifpackageloaded{otf}{%
+ \ifx\pxjo@thru\@empty\else
+ \PackageError\pxjo@pkgname
+ {Package 'otf' is already loaded; the extra options\MessageBreak
+ (\pxjo@thru)\MessageBreak
+ cannot be passed}
+ {\@ehc}
+ \fi
+}{%else
+ \edef\next{%
+ \noexpand\RequirePackage[\pxjo@thru]{otf}%
+ }\next
+}
+
+%=======================================
+% All the code below is executed in a big group.
+\begingroup
+%--------------------------------------- helpers
+
+%% variables
+\let\pxjo@pre\relax
+\let\pxjo@post\relax
+
+%% \pxjo@split{<at>}{<target>}
+\def\pxjo@split#1#2{%
+ \edef\pxjo@tmpx{{#1}{#2}}%
+ \expandafter\pxjo@split@a\pxjo@tmpx}
+\def\pxjo@split@a#1#2{%
+ \def\pxjo@tmpx##1#1##2\pxjo@end{\pxjo@split@b{##1}{##2}}%
+ \pxjo@tmpx#2\pxjo@mt#1\pxjo@end}
+\def\pxjo@split@b#1#2{%
+ \let\pxjo@pre\relax \let\pxjo@post\relax
+ \ifx\pxjo@end#2\pxjo@end\else
+ \pxjo@split@c#2\pxjo@end{#1}%
+ \fi}
+\def\pxjo@split@c#1\pxjo@mt#2\pxjo@end#3{%
+ \def\pxjo@pre{#3}\def\pxjo@post{#1}}
+
+%% \pxjo@JY/\pxjo@JT
+\ifNativeupTeX
+\def\pxjo@JY{JY2}\def\pxjo@JT{JT2}
+\else
+\def\pxjo@JY{JY1}\def\pxjo@JT{JT1}
+\fi
+
+%% \pxjo@reset@size
+\def\pxjo@reset@size{10}
+\ifdim\f@size\p@=10\p@\else
+ \edef\pxjo@reset@size{\pxjo@reset@size,\f@size}
+\fi
+\ifx\jsc@JYn\@undefined\else %jsclasses
+ \begingroup
+ \footnotesize \xdef\@gtempa{\f@size}
+ \endgroup
+ \edef\pxjo@reset@size{\pxjo@reset@size,\@gtempa}
+\fi
+\bxDebug{jodel:reset@size=\pxjo@reset@size}
+
+%--------------------------------------- main process
+
+%% variables
+\let\pxjo@scale\relax
+\let\pxjo@tfm\relax
+\let\pxjo@newtfm\relax
+
+%% \pxjo@parse@spec{E/F/S/S}
+% Sets \pxjo@scale and \pxjo@tfm.
+\edef\pxjo@tmpb{%
+ {\expandafter\string\csname<->s\endcsname*[}{]}{$}}
+\def\pxjo@tmpa#1#2#3{%
+ \def\pxjo@parse@spec##1{%
+ \let\pxjo@scale\relax\let\pxjo@tfm\relax
+ \expandafter\expandafter\expandafter\pxjo@parse@spec@a
+ \csname##1\endcsname}%
+ \def\pxjo@parse@spec@a##1{%
+ \expandafter\pxjo@parse@spec@b\string##1#3#1#2#3\pxjo@end}
+ \def\pxjo@parse@spec@b##1#1##2#2##3#3##4\pxjo@end{%
+ \ifx\pxjo@mt##4\pxjo@mt\else
+ \def\pxjo@scale{##2}\def\pxjo@tfm{##3}%
+ \ifx\pxjodelReplaceExpertTfm\@undefined\else
+ \pxjo@change@tfm
+ \fi
+ \fi}%
+}\expandafter\pxjo@tmpa\pxjo@tmpb
+
+%% \pxjo@change@tfm
+\def\pxjo@tmpb#1/#2/#3/#4\pxjo@end{%
+ \def\pxjo@change@tfm{%
+ \pxjo@change@tfm@a{#2}{#4}%
+ \pxjo@change@tfm@a{#3}{#4}}
+}\def\pxjo@tmpa{/exp/ruby/nml}
+\expandafter\pxjo@tmpb\meaning\pxjo@tmpa\pxjo@end
+\def\pxjo@change@tfm@a#1#2{%
+ \pxjo@split{#1}\pxjo@tfm\ifx\pxjo@pre\relax\else
+ \edef\pxjo@tfm{\pxjo@pre#2\pxjo@post}%
+ \fi}
+
+%% \pxjo@@zu
+\def\pxjo@tmpb#1/#2\pxjo@end{%
+ \def\pxjo@@zu{#2}%
+}\def\pxjo@tmpa{/zu-}
+\expandafter\pxjo@tmpb\meaning\pxjo@tmpa\pxjo@end
+
+%% \pxjo@process@one
+\def\pxjo@process@one#1#2#3#4#5{%
+\bxDebug{jodel:process(#1;#2/#3/#4/#5)}%
+ \pxjo@parse@spec{#2/#3/#4/#5}%
+ \ifx\pxjo@tfm\relax\else
+ \pxjo@split{\pxjo@@zu}{\pxjo@tfm}%
+ \ifx\pxjo@pre\@empty
+ \edef\pxjo@newtfm{\pxjo@@zu\pxjo@prefix--\pxjo@post}%
+ \else
+ \edef\pxjo@newtfm{\pxjo@prefix--\pxjo@tfm}%
+ \fi
+\bxDebug{spec=\pxjo@scale:\pxjo@tfm:\pxjo@newtfm}%
+ \DeclareFontShape{#2}{#3}{#4}{#5}{<->s*[\pxjo@scale]\pxjo@newtfm}{}%
+ \if t#1%
+ \@for\pxjo@tmpa:=\pxjo@reset@size\do{%
+ \global\expandafter\let\csname#2/#3/#4/#5/\pxjo@tmpa
+ \endcsname\relax}%
+ \fi
+ \fi}
+
+%% process
+\@for\pxjo@w:={\pxjo@JY,\pxjo@JT}\do{%
+ \@for\pxjo@x:={hmc,hgt,mg,ruby,rubyg,rubymg}\do{%
+ \@for\pxjo@y:={l,m,bx,eb}\do{%
+ \expandafter\ifx\csname\pxjo@w/\pxjo@x/\pxjo@y/n\endcsname\relax\else
+ \expandafter\let\csname pxjo@DF/\pxjo@x\endcsname=t%
+ \pxjo@process@one{t}\pxjo@w\pxjo@x\pxjo@y{n}%
+ \fi}}}
+
+%--------------------------------------- all done
+\endgroup
+\endinput
+%% EOF