summaryrefslogtreecommitdiff
path: root/language/japanese/BX/bxbase/bxbase.def
diff options
context:
space:
mode:
Diffstat (limited to 'language/japanese/BX/bxbase/bxbase.def')
-rw-r--r--language/japanese/BX/bxbase/bxbase.def673
1 files changed, 673 insertions, 0 deletions
diff --git a/language/japanese/BX/bxbase/bxbase.def b/language/japanese/BX/bxbase/bxbase.def
new file mode 100644
index 0000000000..614ac5dcc8
--- /dev/null
+++ b/language/japanese/BX/bxbase/bxbase.def
@@ -0,0 +1,673 @@
+%%
+%% This is file 'bxbase.def'.
+%%
+
+%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{bxbase.def}[2017/05/29 v1.1 BX base library]
+\def\bx@pkgname{BXbase} % bundle name
+
+%% check intergrity
+\edef\bxbz@tmpa{\@currname.\@currext}\def\bxbz@tmpb{bxbase.def}
+\ifx\bxbz@tmpa\bxbz@tmpb\else
+ \PackageError\bx@pkgname{Illegal load sequence}\@eha
+\expandafter\endinput\fi\relax
+
+%% code guards
+\edef\bxbz@restore@codes{%
+ \catcode33=\the\catcode33%
+ \catcode34=\the\catcode34%
+ \catcode39=\the\catcode39%
+ \catcode43=\the\catcode43%
+ \catcode45=\the\catcode45%
+ \catcode46=\the\catcode46%
+ \catcode47=\the\catcode47%
+ \catcode58=\the\catcode58%
+ \catcode60=\the\catcode60%
+ \catcode62=\the\catcode62%
+ \catcode94=\the\catcode94%
+ \catcode96=\the\catcode96%
+\relax}
+\catcode33=12 % <!>
+\catcode34=12 % <">
+\catcode39=12 % <'>
+\catcode43=12 % <+>
+\catcode45=12 % <->
+\catcode46=12 % <.>
+\catcode47=12 % </>
+\catcode58=12 % <:>
+\catcode60=12 % <<>
+\catcode62=12 % <>>
+\catcode94=7 % <^>
+\catcode96=12 % <`>
+\AtEndOfPackage{%
+ \bxbz@restore@codes
+ \let\bxbz@restore@codes\@undefined}
+
+%--------------------------------------- general
+
+%% packages
+\RequirePackage{bxtoolbox}[2017/05/29]
+
+%% variables
+\let\bxHex\relax % result of \bxToHex...
+\let\bxRes\relax % result of \bxToLower
+\ifundef\bxUcv{\newcount\bxUcv}{} % argument of \bx@Ux
+
+%% unique tokens
+\def\bxbz@uniq{\bxbz@uniq@}
+
+%% error messages
+\def\bx@error{\PackageError\bx@pkgname}
+\def\bx@warn{\PackageWarningNoLine\bx@pkgname}
+\def\bx@err@nobbl{\bx@error{babel not yet loaded}\@eha}
+\def\bx@err@nanbc{\bx@error{Non-BMP characters not supported}\@eha}
+\def\bx@err@ilnfm{\bx@error{Illegal number format}\@eha}
+\def\bx@err@uddrv#1{\bx@error{\string#1 is undefined}\@eha}
+\def\bxbz@warn@depre#1#2{%
+ \PackageWarning\bx@pkgname
+ {The command '\string#1' is obsolete and\MessageBreak
+ its use is deprecated%
+ \ifx\relax#2\relax, \else
+ \MessageBreak (use #2 instead),\MessageBreak
+ \fi detected}}
+
+%--------------------------------------- programming tools
+
+%%<+> \bxCheckMA\CS <text> \bxEndCheckMA
+% If this construct appears in moving arguments, it expands to
+% an error message command.
+\def\bxCheckMA{\let\bx@chkma@a\bx@chkma@a\noexpand}
+\let\bxEndCheckMA\@empty \let\bx@chkma@z\relax
+\def\bx@chkma@a#1{\bx@chkma@z\relax\bx@chkma@b}
+\def\bx@chkma@b#1#2#3\bxEncCheckMA{\noexpand\bx@err@ivfrg#1#2}
+\def\bx@err@ivfrg#1{\bx@error{Cannot use \string#1 here}\@eha}
+
+%%<+D> \bxCheckCounterpart{<base_name>}
+% Compares the version between the current file and <base_name>
+% with the extension of current file, and if the latter file is
+% already loaded and moreover turns out to be newer than the
+% system aborts loading the current file.
+\bxPreamble\newcommand*\bxCheckCounterpart[1]{%
+ \PackageWarning\bx@pkgname
+ {'\string\bxCheckCounterpart' is no more supported,%
+ \MessageBreak detected}}
+
+%--------------------------------------- TeX engine distinction
+
+%%<+> \bxEngineTypeX / \bxEngineTypeY
+% Numbers that signify what I am.
+ % \bxEngineTypeX values
+\chardef\bxETTeX=0 % none of those
+\chardef\bxETpTeX=1 % pTeX-extended
+\chardef\bxETXeTeX=2 % XeTeX-extended
+\chardef\bxETOmega=3 % Omega-extended
+ % \bxEngineTypeY values (plus \bxETTeX)
+\chardef\bxETeTeX=1 % e-TeX-extended
+\chardef\bxETpdfTeX=3 % pdfTeX-extended
+\chardef\bxETLuaTeX=5 % LuaTeX-extended
+ % (here old pdfTeX without e-TeX is ignored)
+ %
+ % Note:
+ % Originally LuaTeX was supposed to be 'both pdfTeX- and Omega-
+ % extended' (\bxEngineTypeX/Y = 3/3); however, It seems that
+ % in today's LaTeX world LuaTeX is no longer seen as Omega-
+ % extended (indeed, current LuaTeX drops many of the Omega-
+ % specific features). So LuaTeX got relocated at \bxEngineTypeX/Y
+ % = 0/5.
+\ifbxinpTeX \let\bxEngineTypeX\bxETpTeX
+\else\ifbxinXeTeX \let\bxEngineTypeX\bxETXeTeX
+\else\ifbxinOmega \let\bxEngineTypeX\bxETOmega
+\else \let\bxEngineTypeX\bxETTeX
+\fi\fi\fi
+\ifbxineTeX \let\bxEngineTypeY\bxETeTeX
+\else\ifbxinpdfTeX \let\bxEngineTypeY\bxETpdfTeX
+\else\ifbxinLuaTeX \let\bxEngineTypeY\bxETLuaTeX
+\else \let\bxEngineTypeY\bxETTeX
+\fi\fi\fi
+\bxDebug{engine type = \the\bxEngineTypeX/\the\bxEngineTypeY}
+
+%--------------------------------------- Babel something
+
+%%<+> \bxBDHookBabel
+% A begindocument-hook about Babel.
+\newbool{bx@bbl@inuse}
+\bxPreamble\def\bx@bbl@bdhook{}
+\bxPreamble\newcommand*\bxBDHookBabel{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{babel}{%
+ \bx@bbl@inusetrue
+ \ifx\bx@bbl@captlang\@undefined\else \bx@bbl@do@captlang \fi
+ \bx@bbl@bdhook
+ }{}}%
+ \bxNullify\bxBDHookBabel}
+
+%%<+> \bxAtBeginDocumentBabel{<text>}
+% Register a begin-document hook that will be invoked only when babel
+% is loaded.
+\bxPreamble\newcommand\bxAtBeginDocumentBabel{%
+ \g@addto@macro\bx@bbl@bdhook}
+
+%% \bx@bbl@patch@sel@lang
+% A patch to \select@language that disables automatic switching of
+% caption language.
+\bxPreamble\def\bx@bbl@patch@sel@lang{%
+ \global\let\bx@bbl@patch@sel@lang\relax
+ \global\let\bx@bbl@org@select@language\select@language
+ \gdef\select@language##1{%
+ \bx@bbl@copy{**C}{##1}\bx@bbl@copy{##1}{**Z}%
+ \bx@bbl@org@select@language{##1}\bx@bbl@copy{##1}{**C}}}
+
+%% \bx@bbl@do@captlang
+% Sets the caption language of Babel according to the value of
+% \bx@bbl@captlang.
+\bxPreamble\def\bx@bbl@do@captlang{%
+ \bxIfExpToEqual{\bx@bbl@captlang}{main}%
+ {\let\bx@bbl@captlang\bbl@main@language}{}%
+ \bxIfExpToEqual{\bx@bbl@captlang}{default}{}%else
+ {\bxIfcsundef{l@\bx@bbl@captlang}{\@nolanerr\bx@bbl@captlang}%
+ {\@nameuse{date\bx@bbl@captlang}%
+ \@nameuse{captions\bx@bbl@captlang}}}}
+
+%% \bx@bbl@copy{<lang1>}{<lang2>}
+% Copies \captions... and \date... for save.
+\def\bx@bbl@copy#1#2{%
+ \csletcs{captions#1}{captions#2}%
+ \csletcs{date#1}{date#2}}
+\csdef{captions**Z}{\@empty}
+\csdef{date**Z}{\@empty}
+
+%%<*D> \fixcaptionlanguage{<lang>}
+%%<+> \bxFixCaptionLanguage{<lang>}
+% Change the caption language manually, with disabling automatic
+% switching on it.
+\bxPreamble\newcommand*\fixcaptionlanguage[1]{%
+ \bxbz@warn@depre\fixcaptionlanguage{}%
+ \bxFixCaptionLanguage{#1}}
+\bxPreamble\newcommand*\bxFixCaptionLanguage[1]{%
+ \@ifpackageloaded{babel}%
+ {\bx@bbl@patch@sel@lang
+ \xdef\bx@bbl@captlang{#1}}%
+ {\bx@err@nobbl}}
+
+%%<+> \bxProvideCaptionLanguage{<lang>}
+\bxPreamble\newcommand*\bxProvideCaptionLanguage[1]{%
+ \ifundef\bx@bbl@captlang
+ {\bxFixCaptionLanguage{#1}}{}}
+
+%%<*> \setmainlanguage{<lang>}
+% Changes the 'main' language (one that is effective at beginning).
+\bxPreamble\newcommand*\setmainlanguage[1]{%
+ \bxIfcsundef{date#1}{\@nolanerr{#1}}{}%
+ \xdef\bbl@main@language{#1}}
+
+%%<+> \bxTrivLangDef{<lang>}
+% Makes a fake language option.
+\bxPreamble\newcommand*\bxTrivLangDef[1]{%
+ \bxIfcsundefX{date#1}{%
+ \bxIfcsundefX{l@#1}%
+ {\expandafter\chardef\csname l@#1\endcsname\z@}{}%
+ \csdef{date#1}{\relax}%
+ \csdef{captions#1}{\relax}%
+ \csdef{extras#1}{\relax}%
+ \csdef{noextras#1}{\relax}%
+ \csdef{date#1}{\relax}%
+ }{}}
+
+%--------------------------------------- input through code values
+
+%%<+> \bxBDHookUnicode
+% A begindocument-hook about Unicode (& CID) input.
+\bxPreamble\newcommand*\bxBDHookUnicode{%
+ \AtBeginDocument{\bx@assign@Ux}%
+ \bxNullify\bxBDHookUnicode}
+
+%%<+> \bxBDHookJisInput
+% A begindocument-hook about JIS-code input.
+\bxPreamble\newcommand*\bxBDHookJisInput{%
+ \AtBeginDocument{\bx@assign@JI}%
+ \bxNullify\bxBDHookJisInput}
+
+%%<+> \bxFallbackSym{<code>}
+\newcommand*\bxFallbackSym[1]{%
+ \leavevmode\bx@fbs@fnt{\dimen@=\bx@junit\relax
+ \hb@xt@\dimen@{\hss\vrule\@width\z@\@height.88\dimen@\@depth.12\dimen@
+ \frame{\lower.04\dimen@\hb@xt@.84\dimen@{\hss\vbox to.84\dimen@{\vss
+ \hsize=.84\dimen@\baselineskip\z@\lineskip.01\dimen@\parskip\z@skip
+ \leftskip\@flushglue\rightskip\@flushglue\parfillskip\z@skip
+ \parindent\z@\let\\\bx@fbs@c\leavevmode\let\sml=\bx@fbs@fs\bx@fbs@f
+ #1\unskip\par\vss}\hss}}\hss}}}
+\edef\bx@junit{\ifnum\bxEngineTypeX=\@ne 1zw\else 1em\fi}
+\def\bx@fbs@c{\unskip\par\ignorespaces}
+\def\bx@fbs@fnt{\global\let\bx@fbs@fnt\relax
+ \global\font\bx@fbs@fs=phvr at 2.4pt
+ \global\font\bx@fbs@f=phvr at 3.6pt}
+
+%%<+> \bxCodeValueSeq\CS{<text>}
+% Dispatcher for code value sequences.
+\newcommand*\bxCodeValueSeq{%
+ \let\bx@cvseq@branch\bx@cvseq@branch@hex
+ \bx@cvseq@a}
+\def\bx@cvseq@a#1#2{%
+ {\catcode33=12%
+ \xdef\bx@gtmpa{\uppercase{\def\noexpand\bx@tmpa{#2}}}}%
+ \let\bx@cvseq@do=#1\bx@gtmpa\relax
+ \expandafter\bx@cvseq@b\bx@tmpa,!\@nil}
+\def\bx@cvseq@b{\futurelet\bx@toka\bx@cvseq@branch}
+\def\bx@cvseq@branch@hex{%
+ \if !\bx@toka \let\bx@nxt\bx@cvseq@fin
+ \else\if "\bx@toka \let\bx@nxt\bx@cvseq@pfx
+ \else\if '\bx@toka \let\bx@nxt\bx@cvseq@pfx
+ \else\if +\bx@toka \let\bx@nxt\bx@cvseq@pfx
+ \else \let\bx@nxt\bx@cvseq@hex \fi\fi\fi\fi
+ \bx@nxt}
+\def\bx@cvseq@pfx{%
+ \afterassignment\bx@cvseq@post \bxUcv=}
+\def\bx@cvseq@hex{%
+ \afterassignment\bx@cvseq@post \bxUcv="0}
+\def\bx@cvseq@post#1{%
+ \if ,#1\expandafter\bx@cvseq@post@a
+ \else \bx@err@ilnfm \expandafter\bx@cvseq@fin \fi}
+\def\bx@cvseq@post@a{%
+ \bx@cvseq@do \bx@cvseq@b}
+\def\bx@cvseq@fin#1\@nil{}
+
+%%<+> \bxCodeValueSeqD\CS{<text>}
+% Same as \bxCodeValueSeq, except that it defaults to decimal.
+\newcommand*\bxCodeValueSeqD{%
+ \let\bx@cvseq@branch\bx@cvseq@branch@dec \bx@cvseq@a}
+\def\bx@cvseq@branch@dec{%
+ \if !\bx@toka \let\bx@nxt\bx@cvseq@fin
+ \else \let\bx@nxt\bx@cvseq@pfx \fi
+ \bx@nxt}
+
+%%<*> \bxUx, \bxUI, \bxAJ, \bxJI, \bxKI
+% The prefixed names for \Ux, etc. They are (more likely to be)
+% collision-safe.
+\bxNewrobustcmd*\bxUx{\bxCodeValueSeq\bx@Ux}
+\bxNewrobustcmd*\bxUI{\bxCodeValueSeq\bx@UI}
+\bxNewrobustcmd*\bxAJ{\bxCodeValueSeqD\bx@AJ}
+\bxNewrobustcmd*\bxJI{\bxCodeValueSeq\bx@JI}
+\bxNewrobustcmd*\bxKI{\bxCodeValueSeqD\bx@KI}
+
+%%<+> \bxUHex{<value>}, \bxUInt{<value>}
+% Alternative entry points for \Ux. The code value is specified in
+% hexadecimal (\bxUHex) / decimal (\bxUInt) numerals.
+\def\bxbz@tmpa{\bxUIntDummyBxutfx}
+\bxIfx{\bxUInt\bxbz@tmpa}{\undef\bxUInt}{}
+\def\bxbz@tmpa{\bxUHexDummyBxutf}
+\bxIfx{\bxUHex\bxbz@tmpa}{\undef\bxUHex}{}
+\newcommand*\bxUHex{\protect\bx@Uxh}
+\newcommand*\bxUInt{\protect\bx@UInt}
+\def\bx@UInt#1{\bxUcv=#1\relax\bx@Ux}
+
+%% \bx@UIh@fb, \bx@AJ@fb
+\def\bx@UIh@fb#1{\bxUcv="#1\relax\bxToHexFive\bxUcv
+ \expandafter\bx@b@fb@five\bxHex[Ux]}
+\def\bx@AJ@fb{\bxToDecFive\bxUcv
+ \expandafter\bx@b@fb@five\bxHex[AJ]}
+\def\bx@JI@fb{\bxToHexFour\bxUcv
+ \expandafter\bx@b@fb@four\bxHex[JI]}
+\def\bx@KI@fb{\bxToDecFive\bxUcv
+ \expandafter\bx@b@fb@five\bxHex[KI]}
+\def\bx@b@fb@five#1#2#3#4#5#6[#7]{%
+ \bxFallbackSym{{\sml#7}\\\bx@hx@supzero#1#2#3\\#4#5}}
+\def\bx@b@fb@four#1#2#3#4#5[#6]{%
+ \bxFallbackSym{{\sml#6}\\#1#2\\#3#4}}
+\def\bx@hx@supzero#1{\ifx0#1\else\expandafter#1\fi}
+
+%% \bx@assign@Ux
+% Picks up appropriate drivers \bx@Ux etc. according to current
+% load-states of packages.
+% [driver] [purpose] [argument] [default]
+% \bx@Ux Unicode \bxUcv go to \bx@UI
+% \bx@Uxh Unicode #1(hex) go to \bx@UIh
+% \bx@UI Unicode-ideo. \bxUcv go to \bx@UIh
+% \bx@UIh Unicode-ideo. #1(hex) fallback
+% \bx@AJ Adobe-Japan1 \bxUcv fallback
+% From the default value it can be said:
+% - Implemetations for \bx@Ux(h) must fallback on \bx@UI(h) when
+% they cannot be handle the given character, unless such fallback
+% is known to be useless.
+% - When you implement one of \bx@Ux or \bx@Uxh, then you must also
+% implement the other.
+% - When you implement \bx@UI, then you must also implement \bx@UIh.
+% (But you can implement only \bx@UIh.)
+ % Initial values
+\def\bx@Ux{\bx@UI} % pass to \bx@UI
+\def\bx@Uxh{\bx@UIh} % pass to \bx@UIh
+\def\bx@UI{\bxToHexUC\bxUcv\bx@UIh\bxHex} % pass to \bx@UIh
+\let\bx@UIh\bx@UIh@fb % 'fallback' driver
+\let\bx@AJ\bx@AJ@fb % 'fallback' driver
+ % some helpers
+ % one more step put so that \UTF could be redefined
+\def\bx@UIh@otf{\UTF}
+ % \UMS with the argument expanded
+\def\bx@UIh@ums#1{\expandafter\UMS\expandafter{#1}}
+ % \CID with \bxUcv
+\def\bx@AJ@otf{\CID\bxUcv}
+\bxPreamble\def\bx@assign@Ux{%
+ % If I have bxucs, then set \bx@Ux to \bx@Ux@ucs
+ % (which fallbacks on \bx@UI in failure).
+ \@ifpackageloaded{bxucs}{%
+ \let\bx@Ux\bx@Ux@ucs\let\bx@Uxh\bx@Uxh@ucs}{}%
+ % If I have ums or bxsuika then I use \UMS as \bx@UIh driver.
+ \@ifpackageloaded{ums}{\bxOktrue}{\bxOkfalse}
+ \@ifpackageloaded{bxsuika}{\bxOktrue}{}
+ \ifbxOk \let\bx@UIh\bx@UIh@UMS \fi
+ % If I have utf or otf then I use \UTF as \bx@UIh driver.
+ \@ifpackageloaded{utf}{\bxOktrue}{\bxOkfalse}
+ \@ifpackageloaded{otf}{\bxOktrue}{}
+ \ifbxOk \let\bx@UIh\bx@UIh@otf \let\bx@AJ\bx@AJ@otf \fi
+ % pxotf is same as otf, except that it also provides a direct
+ % way to \bx@UI and \bx@AJ.
+ \@ifpackageloaded{pxotf}{%
+ \let\bx@UIh\bxUIh@otf \let\bx@UI\pxUcvUTF \let\bx@AJ\pxUcvCID}{}%
+ % If I am upTeX I use \kchar.
+ \ifbxinupTeX
+ \def\bx@UI{\kchar\bxUcv}\def\bx@UIh##1{\kchar"##1\relax}%
+ % If I am a Unicode-aware engine, then...
+ \else\ifnum\bxEngineTypeX>\@ne %
+ \def\bx@UI{\char\bxUcv}\def\bx@UIh##1{\char"##1\relax}%
+ \let\bx@Ux\bx@UI \let\bx@Uxh\bx@UIh
+ % zxjatype provides better handling of \UI & \Ux.
+ \@ifpackageloaded{zxjatype}{%
+ \let\bx@UI\zxjt@UI \let\bx@UIh\zxjt@UIh
+ \let\bx@Ux\zxjt@Ux \let\bx@Uxh\zxjt@Uxh}{}%
+ % zxotf provides \CID comamnd.
+ \@ifpackageloaded{zxotf}{%
+ \def\bx@AJ{\CID\bxUcv}}{}%
+ \fi\fi
+ % If \bx@UIh@usr is known I use it.
+ \ifx\bx@UIh@usr\@undefined\else \let\bx@UIh\bx@UIh@usr \fi
+ \let\bx@setuidriver@a\bx@setuidriver@b
+ \ifx\bx@AJ@usr\@undefined\else \let\bx@AJ\bx@AJ@usr \fi
+ \let\bx@setajdriver@a\bx@setajdriver@b
+}
+
+%%<*> \setUIdriver\CS
+\newcommand*\setUIdriver[1]{%
+ \ifx#1\@undefined \bx@err@uddrv#1%
+ \else \bx@setuidriver@a#1\fi}
+\def\bx@setuidriver@a#1{\let\bx@UIh@usr#1}
+\def\bx@setuidriver@b#1{\let\bx@UIh#1}
+
+%%<*> \setAJdriver\CS
+\newcommand*\setAJdriver[1]{%
+ \ifx#1\@undefined \bx@err@uddrv#1%
+ \else \bx@setajdriver@a#1\fi}
+\def\bx@setajdriver@a#1{\let\bx@AJ@usr#1}
+\def\bx@setajdriver@b#1{\let\bx@AJ#1}
+
+%%%% \bx@assign@JI
+% Picks up appropriate drivers \bx@JI etc.
+% [driver] [purpose] [argument] [default]
+% \bx@JI JIS-code \bxUcv fallback
+% \bx@KI Kuten-code \bxUcv fallback
+\def\bx@JI{\bx@JI@fb}
+\def\bx@KI{\bx@KI@fb}
+\bxPreamble\def\bx@assign@JI{%
+ % \JI & \KI are available only in (u)pTeX
+ \ifnum\bxEngineTypeX=\@ne
+ \def\bx@JI{\char\jis\bxUcv\relax}\let\bx@KI\bx@KI@pTeX
+ \fi
+}
+\ifnum\bxEngineTypeX=\@ne %----<*pTeX>
+%% \bx@KI@pTeX
+ % \KI{2????} (0213 plane 2) works only when kanji-internal=sjis
+\mathchardef\bx@ki@max=\ifnum\jis"2121="8140 30000\else 20000\fi\relax
+\mathchardef\bx@ki@myr=10000
+\mathchardef\bx@ki@bas="2020
+\let\bx@ki@char=\char
+\ifx\kchar\@undefined\else \let\bx@ki@char=\kchar \fi
+\def\bx@KI@pTeX{%
+ \ifnum\bxUcv<\bx@ki@max\else \bxUcv=\z@ \fi
+ \ifnum\bxUcv<\bx@ki@myr \advance\bxUcv\bx@ki@myr \fi
+ \expandafter\bx@ki@ptex@a\the\bxUcv\@nil
+ \bx@ki@char\jis\bxUcv\relax}
+\begingroup \@tempcnta=94
+ \@for\bx@tmpa:=01,08,03,04,05,12,13,14,15\do{\advance\@tempcnta\@ne
+ \expandafter\xdef\csname bx@JSH/\bx@tmpa\endcsname{\the\@tempcnta}}
+ \@tempcntb=77 \loop
+ \advance\@tempcnta\@ne \advance\@tempcntb\@ne
+ \expandafter\xdef\csname bx@JSH/\the\@tempcntb\endcsname
+ {\the\@tempcnta}%
+ \ifnum\@tempcntb<94 \repeat
+\endgroup
+\def\bx@ki@ptex@a#1#2#3#4#5#6\@nil{%
+ \ifnum#1=\@ne \bxUcv=#2#3\relax
+ \else \bxUcv=0\csname bx@JSH/#2#3\endcsname\relax \fi
+ \multiply\bxUcv\@cclvi \advance\bxUcv#4#5\relax
+ \advance\bxUcv\bx@ki@bas}
+\fi %----</pTeX>
+
+%--------------------------------------- "safe-caret" module
+
+%% variables
+\newbool{bx@acr@ok}
+\newbool{bx@acr@needed}
+\newbool{bx@safecaret}
+
+\catcode`\^=13 %---- make caret active
+
+%%<*> \safecaret
+\bxPreamble\newcommand*\safecaret{%
+ \bx@safecarettrue}
+
+%%<+> \bxEnableSafeCaret
+\bxPreamble\newcommand*\bxEnableSafeCaret{%
+ \bx@acr@neededtrue}
+
+%% \bx@acr@defbytes
+\bxPreamble\def\bx@acr@defbytes{%
+ \bgroup\@tempcnta128\lccode`\Z=`\B\catcode`\^\active
+ \@whilenum\@tempcnta<256 \do{%
+ \lccode`\^\@tempcnta \chardef\bx@acr@tok\@tempcnta
+ \expandafter\bx@acr@defbytes@do@a\meaning\bx@acr@tok\@nil
+ \advance\@tempcnta\@ne}\egroup}
+\bxPreamble\def\bx@acr@defbytes@do@a#1"#2\@nil{% name is bx@acr@B/ab etc.
+ \lowercase{\expandafter\gdef\csname bx@acr@Z/#2\endcsname{^}}}
+\@onlypreamble\bx@acr@defbytes
+\@onlypreamble\bx@acr@defbytes@do@a
+
+%% \bx@acr@caret
+% This command should be \let'd to active <^>.
+\def\bx@acr@caret{%
+ \let\bx@acr@out\@empty \bx@acr@caret@a}
+\def\bx@acr@caret@a{%
+ \bx@acr@nextcaret{\bx@acr@caret@b}{\bx@acr@finish{\bx@acr@nxc}}}
+\def\bx@acr@caret@b#1{%
+ \let\bx@acr@hex\@empty
+ \bx@acr@nexthexdgt{\bx@acr@caret@c}{\bx@acr@finish{\bx@acr@nxdc}}}
+\def\bx@acr@caret@c#1{%
+ \edef\bx@acr@hex{#1}%
+ \bx@acr@nexthexdgt{\bx@acr@caret@d}{\bx@acr@finish{\bx@acr@nxdc\bx@acr@hex}}}
+\def\bx@acr@caret@d#1{%
+ \edef\bx@acr@hex{\bx@acr@hex#1}%
+ \expandafter\bx@acr@caret@e\csname bx@acr@B/\bx@acr@hex\endcsname
+ \bx@acr@ifok{\bx@acr@nextcaret{\bx@acr@caret@g}{\bx@acr@finish{}}}%
+ {\bx@acr@finish{\bx@acr@nxdc\bx@acr@hex}}}
+\def\bx@acr@caret@e#1{%
+ \ifx#1\relax \bx@acr@okfalse
+ \else \bx@acr@oktrue \expandafter\bx@acr@caret@f#1\fi}
+\def\bx@acr@caret@f#1{%
+ \expandafter\def\expandafter\bx@acr@out\expandafter{\bx@acr@out#1}}
+\def\bx@acr@caret@g#1{\bx@acr@caret@a}
+\def\bx@acr@nxc{\noexpand^}
+\def\bx@acr@nxdc{\noexpand^\noexpand^}
+\def\bx@acr@nextcaret#1#2{%
+ \def\bx@acr@tmpa{#1}\def\bx@acr@tmpb{#2}%
+ \futurelet\bx@acr@tok\bx@acr@nextcaret@a}
+\def\bx@acr@nextcaret@a{%
+ \let\bx@acr@nxt\bx@acr@tmpb
+ \ifx^\bx@acr@tok \let\bx@acr@nxt\bx@acr@tmpa
+ \fi \bx@acr@nxt}
+\def\bx@acr@nexthexdgt#1#2{%
+ \def\bx@acr@tmpa{#1}\def\bx@acr@tmpb{#2}%
+ \futurelet\bx@acr@tok\bx@acr@nexthexdgt@a}
+\def\bx@acr@nexthexdgt@a{%
+ \let\bx@acr@nxt\bx@acr@tmpb
+ \ifcat @\noexpand\bx@acr@tok \let\bx@acr@nxt\bx@acr@tmpa \fi
+ \ifcat "\noexpand\bx@acr@tok \let\bx@acr@nxt\bx@acr@tmpa \fi
+ \bx@acr@nxt}
+\def\bx@acr@ifok{%
+ \ifbx@acr@ok \expandafter\@firstoftwo \else \expandafter \@secondoftwo \fi}
+\def\bx@acr@finish#1{%
+ \edef\bx@acr@nxt{#1}%
+ \ifx\bx@acr@out\@empty \bx@acr@oktrue \else \bx@acr@okfalse \fi
+ \bx@acr@ifok{\expandafter\bx@acr@finish@a\bx@acr@nxt\@nil}%
+ {\expandafter\bx@acr@out\bx@acr@nxt}}
+\def\bx@acr@finish@a#1#2\@nil{%
+ % replace first ^ with normal one to avoid loop
+ \bx@acr@normcaret #2}
+\let\bx@acr@normcaret\sp % this does not mean much
+
+%% \bx@acr@initialize
+\bxPreamble\def\bx@acr@initialize{%
+ \bx@acr@defbytes}
+
+%% \bx@acr@annihilate
+\bxPreamble\def\bx@acr@annihilate{%
+ \let\bx@acr@caret\relax\let\bx@acr@caret@a\relax
+ \let\bx@acr@caret@b\relax\let\bx@acr@caret@c\relax
+ \let\bx@acr@caret@d\relax\let\bx@acr@caret@e\relax
+ \let\bx@acr@caret@f\relax\let\bx@acr@caret@g\relax
+ \let\bx@acr@nextcaret\relax\let\bx@acr@nextcaret@a\relax
+ \let\bx@acr@nexthexdgt\relax\let\bx@acr@nexthexdgt@a\relax
+ \let\bx@acr@finish\relax\let\bx@acr@finish@a\relax}
+
+%% \bx@acr@babel@hookcaret
+\bxPreamble\def\bx@acr@babel@hookcaret{%
+ \expandafter\ifx\csname active@char\string^\endcsname\relax\else
+ \declare@shorthand\system@group{^}{\bx@acr@caret}%
+ \let\bx@acr@normcaret\bx@acr@babel@normcaret
+ \bxEnableSafeCaret \fi}
+\edef\bx@acr@babel@normcaret{%
+ \expandafter\noexpand\csname normal@char\string^\endcsname}
+
+%% \bx@acr@verbatim@hookcaret
+\bxPreamble\def\bx@acr@verbatim@hookcaret{%
+ \g@addto@macro\@noligs{\catcode`\^\active\let^\bx@acr@caret
+ \let\bx@acr@normcaret\bx@acr@verb@normcaret}%
+ \bxEnableSafeCaret}
+\begingroup \catcode`\^=12
+\global\let\bx@acr@verb@normcaret=^%
+\endgroup
+
+%%<+> \bxBDHookSafeCaret
+% Begin-document hook.
+\bxPreamble\newcommand*\bxBDHookSafeCaret{%
+ \AtBeginDocument{%
+ %% function activated by '\safecaret'
+ \ifbx@safecaret
+ \@ifpackageloaded{babel}{\bx@acr@babel@hookcaret}{}%
+ \bx@acr@verbatim@hookcaret
+ \fi
+ %% initialize or annihilate...
+ \ifbx@acr@needed \bx@acr@initialize
+ \else \bx@acr@annihilate \fi
+ \let\bxEnableSafeCaret\@undefined}%
+ \bxNullify\bxBDHookSafeCaret}
+
+\catcode`\^=7 %---- make caret normal
+
+%--------------------------------------- hyphenation something
+
+%%<*> 'withnohyph' environment
+\expandafter\ifx\csname l@nohyphenation\endcsname\relax
+ \newlanguage\l@nohyphenation \fi
+\def\withnohyph{\language\l@nohyphenation}
+\let\endwithnohyph\relax
+
+%--------------------------------------- patch for 'ucs' package
+
+%% \bxBDHookUcsFastErrors
+% The begin-document hook, which forces the 'fasterrors' option
+% of 'ucs' package when running on pTeX.
+\bxPreamble\newcommand*\bxBDHookUcsFastErrors{%
+ \ifbxinpTeX
+ \AtBeginDocument{%
+ \@ifpackageloaded{ucs}{%
+ \let\UnicodeOptionfasterrorsfalse\UnicodeOptionfasterrorstrue
+ \UnicodeOptionfasterrorstrue}{}}%
+ \fi
+ \bxNullify\bxBDHookUcsFastErrors}
+
+%--------------------------------------- DVI-specials
+
+%%<*D> \usejapanesepdfstring
+\bxPreamble\newcommand*\usejapanesepdfstring{}
+\if s\bxInternalJaEncoding
+ \def\usejapanesepdfstring{% why use CP932??
+ \bxDocumentSpecialUrgent{pdf:tounicode 90ms-RKSJ-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else\if e\bxInternalJaEncoding
+ \def\usejapanesepdfstring{%
+ \bxDocumentSpecialUrgent{pdf:tounicode EUC-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else\if u\bxInternalJaEncoding
+ \def\usejapanesepdfstring{%
+ \bxDocumentSpecialUrgent{pdf:tounicode UTF8-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else
+ \def\usejapanesepdfstring{%
+ \bx@warn{\string\usejapanesepdfstring\space ignored,\MessageBreak
+ since internal encoding is unknown}%
+ \bxNullify\usejapanesepdfstring}
+\fi\fi\fi
+\preto\usejapanesepdfstring{%
+ \bxbz@warn@depre\usejapanesepdfstring{'pxjahyper' package}}
+
+%%<*D> \recordpapersize
+\bxPreamble\newcommand*\recordpapersize{%
+ \bxbz@warn@depre\recordpapersize{'bxpapersize' package}%
+ \bxDocumentSpecial{papersize=\the\paperwidth,\the\paperheight}%
+ \bxNullify\recordpapersize}
+
+%%<*D> \dvipdfmxmapline{<text>}
+%%<*D> \dvipdfmxmapfile{<text>}
+\bxPreamble\newcommand*\dvipdfmxmapline[1]{%
+ \bxbz@warn@depre@dpxmap
+ \bxDocumentSpecial{pdf:mapline #1}}
+\bxPreamble\newcommand*\dvipdfmxmapfile[1]{%
+ \bxbz@warn@depre@dpxmap
+ \bxDocumentSpecial{pdf:mapfile #1}}
+\def\bxbz@warn@depre@dpxmap{%
+ \bxbz@warn@depre\dvipdfmxmapfile{'pxchfon' package}%
+ \global\let\bxbz@warn@depre@dpxmap\relax}
+
+%--------------------------------------- CJK font scaling
+
+%% \bxbz@doc@class@type
+%%<+D> \pxDocClassType
+% 1 = pLaTeX standard class
+% 2 = New standard classes by Okumura
+% 0 = otherwise
+\bxUcv=\z@
+\@ifclassloaded{jarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{jreport}{\bxUcv=\@ne}{}
+\@ifclassloaded{jbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{tarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{treport}{\bxUcv=\@ne}{}
+\@ifclassloaded{tbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{ujarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{ujreport}{\bxUcv=\@ne}{}
+\@ifclassloaded{ujbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{utarticle}{\bxUcv=\@ne}{}
+\@ifclassloaded{utreport}{\bxUcv=\@ne}{}
+\@ifclassloaded{utbook}{\bxUcv=\@ne}{}
+\@ifclassloaded{jsarticle}{\bxUcv=\tw@}{}
+\@ifclassloaded{jsreport}{\bxUcv=\tw@}{}
+\@ifclassloaded{jsbook}{\bxUcv=\tw@}{}
+\chardef\bxbz@doc@class@type=\bxUcv
+\chardef\pxDocClassType=\bxUcv
+
+%%<+> \pxUpScale
+\edef\pxUpScale{%
+ \ifx\Cjascale\@undefined
+ \ifcase\bxbz@doc@class@type 1\or 0.962216\or 0.924690\else 1\fi
+ \else \Cjascale \fi}
+
+%--------------------------------------- all done
+\endinput
+%% EOF