summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2012-12-11 02:05:11 +0000
committerNorbert Preining <preining@logic.at>2012-12-11 02:05:11 +0000
commit427f60468268e043c941e28ab3196807ef1f9724 (patch)
treef2c4757ba743d75614cf962af4e195aefb577c76 /Master/texmf-dist
parent49b2ae38209e586fb12ce3664f92b24ce29d7162 (diff)
new platex package pxbase (11Dec)
git-svn-id: svn://tug.org/texlive/trunk@28493 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/platex/pxbase/LICENSE24
-rw-r--r--Master/texmf-dist/doc/platex/pxbase/README357
-rw-r--r--Master/texmf-dist/doc/platex/pxbase/README-pxbabel112
-rw-r--r--Master/texmf-dist/doc/platex/pxbase/README-pxcjkcat501
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/ifuptex.sty47
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/pxbabel.sty186
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/pxbase.def791
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/pxbase.sty129
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/pxbasenc.def483
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/pxbsjc.def6
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/pxcjkcat.sty482
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/pxjsfenc.def195
-rw-r--r--Master/texmf-dist/tex/platex/pxbase/upkcat.sty50
13 files changed, 3363 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/platex/pxbase/LICENSE b/Master/texmf-dist/doc/platex/pxbase/LICENSE
new file mode 100644
index 00000000000..15954156886
--- /dev/null
+++ b/Master/texmf-dist/doc/platex/pxbase/LICENSE
@@ -0,0 +1,24 @@
+$BK\%=%U%H%&%'%"$O(B MIT $B%i%$%;%s%9$N2<$GG[I[$5$l$^$9!#Cx:n8"$O:n<T$G$k!V(BZR$B!W$K(B
+$BB0$7$^$9!#$^$?K\%=%U%H%&%'%"$OL5J]>Z$G$9!#(B
+
+The MIT License
+
+Copyright (c) 2009 ZR
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/Master/texmf-dist/doc/platex/pxbase/README b/Master/texmf-dist/doc/platex/pxbase/README
new file mode 100644
index 00000000000..8fa08efd5c9
--- /dev/null
+++ b/Master/texmf-dist/doc/platex/pxbase/README
@@ -0,0 +1,357 @@
+==================================================
+== PXbase バンドル v0.5 <2010/06/15> ==
+== by「ZR」(八登 崇之/Takayuki YATO)==
+== <zrbabbler@yahoo.co.jp> ==
+==================================================
+(This file is encoded in UTF-8,)
+
+pLaTeX2e / upLaTeX2e における文書およびマクロパッケージの作成を支援する
+基本的な機能を提供する。文書作成の為の機能には、具体的には Unicode の
+コード値による文字入力、 PDF の文書情報に日本語を使用する設定の自動化、
+upLaTeX の和文文字カテゴリ(kcatcode)の変更および CJK 間のフォント切替
+の支援等が含まれる。
+
+ - ifuptex パッケージ: upTeX 判定
+ - pxbase パッケージ: 基礎ライブラリ
+ - pxcjkcat パッケージ: 和文文字カテゴリ操作
+ - pxbabel パッケージ: CJK 間のフォント切替
+ - upkcat パッケージ: 文字指定の kcatcode 操作
+ - pxbasenc パッケージ: 文字コード関係ライブラリ(試作)
+
+※ 対応環境は各々のパッケージの解説を参照。
+
+※ pxbabel の解説は README-pxbabel を参照。
+
+※ pxcjkcat の解説は README-pxcjkcat を参照。
+
+■ 本ソフトウェアの一次配布サイト(作者のサイト)
+
+ En toi Pythmeni tes TeXnopoleos ~電脳世界の奥底にて~
+ http://zrbabbler.hp.infoseek.co.jp/
+
+ ※ 以下のページに一部機能の使用例を紹介した。
+ 「Unicode による文字入力」
+ http://zrbabbler.hp.infoseek.co.jp/unichar.html
+ 「upLaTeX を使おう」
+ http://zrbabbler.hp.infoseek.co.jp/uplatex.html
+ 「PXbase パッケージ」
+ http://zrbabbler.hp.infoseek.co.jp/pxbase.html
+
+■ インストール
+
+ TDS 1.1 に従ったシステムでは、各ファイルを次の場所に移動する。
+ ・*.sty, *.def → $TEXMF/tex/platex/PXbase/
+ (残りのファイルは不要)
+
+ W32TeX を C:\usr\local にインストールした場合の例。
+ ・*.sty, *.def → C:\usr\local\share\texmf-local\tex\platex\PXbase
+
+
+-------------------------------------------
+ pxbase パッケージ (v0.5) -- 基礎ライブラリ
+-------------------------------------------
+
+pLaTeX/upLaTeX で和文を扱う上で必要になる基本的な機能を提供する。また
+他の PX シリーズのパッケージの下請けの役割も果たす。
+
+■ 対応環境
+
+ pLaTeX2e / upLaTeX2e
+
+■ 読込
+
+ \usepackage で読み込む。オプションはない。
+
+■ 機能
+
+ 使用している (u)pTeX の漢字コード設定の情報表示。
+
+ \infojenc : 漢字コードの情報を次の形で端末とログに出力する。
+ Kanji encoding: source=UTF8 internal=SJIS;
+
+ これ以降に述べる機能は bxbase パッケージと共通である。
+
+ DVI special 出力の命令。
+
+ \usejapanesepdfstring
+ pLaTeX と dvipdfmx の組み合わせで日本語の文書情報をもつ PDF を作
+ る為に必要な pdf:tounicode special を出力する。
+ pdf:tounicode 90ms-RKSJ-UCS2 (内部漢字コードが Shift_JIS)
+ pdf:tounicode EUC-UCS2 (内部漢字コードが EUC-JP)
+ この special は DVI のなるべく先頭に近い位置に出力する。
+ (新しい版の hyperref への対策。)
+
+ \recordpapersize
+ 次の形の papersize special 命令を DVI の先頭に出力する。
+ papersize=<幅>,<高さ>
+ (幅と高さは現在の \paperwidth と \paperheight の値。)
+
+ \dvipdfmxmapline{<テキスト>}
+ dvipdfmx のマップ指定を文書中で行う。
+ ※次の形の papersize special 命令を DVI の先頭に出力する。
+ pdf:mapline <テキスト>
+
+ \dvipdfmxmapfile{<ファイル名>}
+ dvipdfmx のマップファイル指定を文書中で行う。
+ ※次の形の papersize special 命令を DVI の先頭に出力する。
+ pdf:mapfile <ファイル名>
+
+ 符号値による文字入力のための命令。
+
+ \Ux{<コード値>,...}
+ \UI{<コード値>,...}
+ Unicode コード値による入力を行う。\Ux は欧文用、\UI は和文用(I は
+ Ideographic の意味)。コード値は以下の形式で表す。コンマで区切って
+ 複数文字入力できる。
+ - <16進数>: A72C, 02000B, 1bd 等。
+ - +<10進数>: +254, +0937 等。
+ - '<8進数>: '376, '1651 等。
+ Unicode 文字の出力には次の順番で利用可能な最初の機能を用いる。(\UI
+ の場合 3) を飛ばす。)
+ 1) zxjatype パッケージ。この場合、その機構に従って出力される。\UI
+ は必ず和文フォントで出力し、\Ux は和文/欧文切替の対象となる。
+ 2) XeTeX の Unicode 出力。
+ 3) [\Ux のみ] bxums パッケージ。
+ 4) upTeX の和文 Unicode 出力。
+ 5) UTF/OTF/pxotf パッケージ。
+ 6) ums/bxsuika パッケージ。
+ どれも使えない場合は「16進表現による代替表現」になる。
+
+ \AJ{<コード値>,...}
+ Adobe-Japan1 のコード値による入力を行う。コード値は 10 進数で指定
+ する。出力には次の順番で利用可能な最初の機能を用いる。
+ 1) zxotf パッケージ。
+ 2) UTF/OTF/pxotf パッケージ。
+ どれも使えない場合は代替表現になる。
+
+ \JI{<コード値>,...}
+ いわゆる「JIS コード」(JIS X 0208 の GL 表現)のコード値による入力
+ を行う。コード値指定の方法は \Ux と同じ。出力には (u)pTeX の JIS
+ コード和文出力の機能を使う。使えない場合は代替表現になる。
+
+ \KI{<コード値>,...}
+ いわゆる「区点コード」のコード値による入力を行う。コード値指定は
+ 以下のいずれかの方法で指定する。
+ - RRCC : RR は区番号、CC は点番号を 10 進 2 桁で表したもの。
+ - PRRCC : P は面番号。JIS X 0213 のための指定。
+ 出力には (u)pTeX の JIS コード和文出力の機能を使う。使えない場合は
+ 代替表現になる。JIS X 0213 の文字を出力したい場合は、現在の和文
+ フォントのエンコーディングが JIS X 0213 に対応するものである必要が
+ ある。さらに、第 2 面の文字を出力する場合には pTeX の内部漢字コード
+ が sjis でなければならない。
+
+ \bxUx / \bxUI / \bxAJ / \bxJI / \bxKI
+ \Ux 等は非常に短い名前なので他のパッケージと衝突する恐れがあり、
+ そこでこのパッケージでは既に同名の命令がある場合は上書きしない
+ ようにしている。\bxUx 等はそれぞれ \Ux 等と同じで、先のような場合
+ にも常に使える。
+
+ Bwbel 関係の命令。
+
+ \bxcaptionlanguage{<言語名>}
+ Babel では、通常言語が切り替わるとキャプションや日付の文字列が切り
+ 替わる。この命令を実行すると、文字列は指定された言語のもので固定
+ され、Babel の言語切替の命令に追随しなくなる。この命令自体はプレ
+ アンブル中で何回でも使用できて最後のものが有効になる。引数には有効
+ な言語オプションの名前の他に以下のものが指定できる。
+ - main : 基底言語、すなわち Babel で最後に読み込まれた言語だが
+ 次に述べる \bxmainlanguage で変更可能。
+ - default : 文書クラスで指定されたものをそのまま用いる。日本語
+ の文書クラスで Babel を用いる時に便利である。
+ この命令の意義については後の「キャプション文字列の切替機能について」
+ の節を参照。
+
+ \bxmainlanguage{<言語名>}
+ 基底言語、すなわち \begin{document} の直後において有効となる言語を
+ 設定する。通常は Babel において最後に読み込まれた言語オプションが
+ 基底言語になる。
+
+ その他の命令。
+
+ \safecaret
+ 一部の箇所で TeX エスケープ形式(^^ab)の解釈が失敗するのを回避する。
+ 詳細は「TeX エスケープ形式(^^ab)の処理」の節を参照。
+
+■ utf8x 入力エンコーディングの fasterror 設定
+
+ unicode パッケージ(バンドル)が提供する utf8x 入力エンコーディングで
+ は、パッケージで未定義の Unicode 文字が入力された場合エラーになる。
+ その時のエラーメッセージ中に該当の文字の Unicode 名を出力するが、この
+ 際に高位バイトを含むファイル(テキスト情報をハフマン符号で圧縮したもの
+ と思われる)を用いるので、pTeX では処理に失敗する。そこで本パッケージ
+ では、ucs パッケージが読み込まれた場合には上記の機能を抑止するオプ
+ ションである fasterror を常に有効にする。(utf8x が指定された時に ucs
+ が未読込の場合は自動的に読み込まれる。)
+
+■ TeX エスケープ形式(^^ab)の処理
+
+ ptexenc 対応の pTeX では入力漢字コードが UTF-8 の時に JIS X 0208 に
+ 含まれない文字をエスケープ形式(^^ab)の UTF-8 バイト列に変換する。通常
+ はこの形式は該当のバイト列と等価の解釈をされる。ところがここで <^> の
+ catcode が本来の値 6 から変更されているとこの処理が失敗してしまう。
+ 具体的には次のような場合が該当する。
+ - Babel の一部の言語(esperanto 等)を使用した場合
+ - verbatim や類似の環境の中
+ \safecaret 命令をプレアンブルで実行した場合、これらの場合でエスケープ
+ 形式の連続する出現をバイト列と解釈するようにする。
+
+■ キャプション文字列の切替機能について
+
+ Babel の機能の 1 つとして、言語の切替に伴って、キャプションの文字列
+ (「参考文献」や「図」等)および日付の書式をその言語用のものに切り替え
+ るというものがある。これにより、ある言語(例えばスロベニア語)の為の
+ 文書クラスがなくても英語用のクラスと Babel の言語切替でスロベニア語
+ のキャプションの文書が作成できる(レイアウトがその言語の使用圏で許容
+ されるかの問題は残るが)。だがこの目的には、プレアンブルでキャプション
+ 言語を 1 回指定できればよく、文書途中での言語切替にまでキャプション
+ が追随する利点はあまりなく、場合によっては弊害があると思われる。この
+ ような場合は
+ \bxcaptionlanguage{main}
+ を実行すれば、キャプションは基底言語(\bxmainlanguage の説明参照)で
+ 固定され以後は変更されない。また
+ \bxcaptionlanguage{spanish}
+ のように直接に言語名を指定することもできる。
+
+ 日本語の場合はもっと特殊な事情がある。日本語のレイアウトは欧米の言語
+ のものとは大きく異なるので、日本語の文書を作成する場合には日本語用の
+ 文書クラスが用いられるのが普通であり、そこでは当然キャプションは既に
+ 日本語になっている。このような場合は
+ \bxcaptionlanguage{default}
+ を実行すれば、キャプションは文書クラスで設定されたものに固定され、
+ 以後は変更されない。
+
+■ 開発者向け機能
+
+ 使用中の漢字コード系の情報表示。
+
+ \pxInternalJEnc : [文字トークンへの \let] 内部漢字コードを表す。
+ - s : シフトJIS
+ - e : EUC
+ - u : Unicode (upTeX)
+
+ \pxSourceJEnc : [文字トークンへの \let] 入力 TeX ソースの漢字コード
+ を表す。
+ - s : シフトJIS
+ - e : EUC
+ - u : UTF-8
+
+ \pxDocClassType : [整数定数] 使用中の文書クラスの種別。
+ - 1 : pLaTeX2e/upLaTeX2e 標準文書クラス
+ - 2 : 奥村氏製作の新標準文書クラス(jsclasses)
+ - 0 : 上記のもの以外
+
+ \pxUpScale : [マクロ] 和文の標準のフォントのスケール。\pxDocClassType
+ により決まる: \pxDocClassType が 1 なら 0.962216、2 なら 0.92469、
+ 0 なら 1。
+
+ 残りの機能は bxbase パッケージと共通である。ここでは省略する。
+
+
+-----------------------------------------
+ ifuptex パッケージ (v0.2) -- upTeX 判定
+-----------------------------------------
+
+※ 本パッケージはマクロパッケージ開発者向けのものである。
+
+現在実行中の TeX が upTeX であるかを判定する。
+
+■ 対応環境
+
+ plain TeX / LaTeX2e (和文・欧文共)
+
+■ 読込
+
+ plain TeX の場合:
+ \input ifuptex.sty
+ LaTeX2e の場合:
+ \usepackage{ifuptex}
+
+■ 機能
+
+ \ifupTeX [if-トークン]
+ upTeX を使っているか。
+ \ifnativeupTeX [if-トークン]
+ upTeX を内部文字コードが Unicode の状態で使っているか。
+ \RequireupTeX
+ upTeX を使っている場合は何もしない。そうでない場合はエラーを出す。
+ \RequirenativeupTeX
+ upTeX を内部文字コードが Unicode の状態で使っている場合は何も
+ しない。そうでない場合はエラーを出す。
+
+
+-------------------------------------------------------
+ upkcat パッケージ (v0.2) -- 文字指定の kcatcode 操作
+-------------------------------------------------------
+
+※ 本パッケージはマクロパッケージ開発者向けのものである。
+
+文字を指定して(属するブロックの) kcatcode を操作する場合
+ \kcatcode`<文字>
+の形式を使うことになるが、その際にもしその文字の現在の kcatcode が 15
+である場合は文字がバイト列とみなされるので、この形式が使えない。この
+パッケージはそのような場合でも使用可能な、kcatcode の参照・変更の命令
+を提供する。なお、文書作成者はこちらではなく pxcjkcat パッケージの機能を
+使うべきである。
+
+■ 対応環境
+
+ plain upTeX / upLaTeX2e
+
+■ 読込
+
+ plain upTeX の場合:
+ \input upkcat.sty
+ LaTeX2e の場合:
+ \usepackage{upkcat}
+
+■ 機能
+
+ \getkcatcode{<文字>}
+ <文字> の現在の kcatcode の値(15~19)をマクロ \thekcatcode に(文字
+ 列として)返す。
+ \setkcatcode{<文字>}{<値>}
+ <文字> の kcatcode の値を <値> にする。
+
+
+----------------------------------------
+
+■ 更新履歴
+
+ version 0,5 <2010/06/15>
+ - pxbase: \JI/\KI を追加。
+ - pxbase: \dvipdfmxmapline/\dvipdfmxmapfont を追加。
+
+ version 0,4a <2010/02/07>
+ - pxcjkcat: upTeX v0.29 における kcatcode のブロック分割の変更に
+ 対応。それに伴い ccv1, ccv2 オプションを新設。
+ - pxcjkcat: \cjkcategory の第 1 引数に文字そのものを指定できる
+ ようにした。
+ - pxcjkcat: なぜかモード設定時の「Enclosed CJK Letters and Months」
+ (cjk07)の kcatcode の設定値が 16 になっていた。upTeX 既定値に
+ 合わせて 18 に修正した。
+
+ version 0,4 <2009/07/05>
+ - safe caret 機構のコード(\safecaret の実装の確信)を pxbase.def に
+ 移動(BXbase と共通に)。
+ - Babel に加えて verbatim でも safe caret 機構が働くようにする。
+ ただし「pxbase は単に読み込むだけでは他人のコードを書き換えない」
+ という指針があるので、\safecaret を実行しないと有効にならない。
+ - pxbabel は中で \safecaret を呼ぶので、pxbabel を読み込むと safe
+ caret は自動的に有効になる。
+ - pxbabel でエンコーディングを J20 等に変えた場合に OTF パッケージ
+ の \CID が動かなくなるのを修正。
+
+ version 0,3 <2008/04/06>
+ - pxbabel に safe caret 機構を追加。
+
+ version 0,2b <2008/03/28>
+ pxbabel に \UTF の切替を追加。
+
+ version 0,2a <2008/03/18>
+ pxbabel, pxbase のバグ取り。
+ pxbabel の説明書をまだ書いていないことに気づいた ;-) 慌てて作成。
+
+ version 0.2 <2008/03/14>
+ 最初の公開版。
+
+# EOF
diff --git a/Master/texmf-dist/doc/platex/pxbase/README-pxbabel b/Master/texmf-dist/doc/platex/pxbase/README-pxbabel
new file mode 100644
index 00000000000..84ff3b0c9d6
--- /dev/null
+++ b/Master/texmf-dist/doc/platex/pxbase/README-pxbabel
@@ -0,0 +1,112 @@
+==================================================
+== PXbase バンドル v0.5 <2010/06/15> ==
+== by「ZR」(八登 崇之/Takayuki YATO)==
+== <zrbabbler@yahoo.co.jp> ==
+==================================================
+(This file is encoded in UTF-8,)
+
+----------------------------------------------------
+ pxbabel パッケージ (v0.4) -- CJK 間のフォント切替
+----------------------------------------------------
+
+■ 対応環境
+
+ pLaTeX (ptexenc 拡張版) / upLaTeX2e
+
+ pLaTeX の場合は OTF パッケージが必要。
+
+■ 読込
+
+ \usepackage[<オプション>]{pxbabel}
+
+ オプションは以下の通り。
+
+ japanese=<言語名> ; korean=<言語名> ;
+ schinese=<言語名> ; tchinese=<言語名>
+ 各々の言語に対して実際に使用する Babel の言語オプションの名前を
+ 指定する。詳しくは「機能」の節を参照。
+
+ main=<言語名>
+ 基底言語、すなわち文書開始時に有効である言語を、言語オプションの
+ 名前(言語識別子でない)で指定する。bxbase/pxbase パッケージの
+ \bxmainlanguage を呼び出している。
+
+ noswitchcaption (既定で有効)
+ Babel におけるキャプションや日付の文字列の切替機能を抑止する。
+ このオプションがあると、bxbase/pxbase パッケージの
+ \bxcaptionlanguage{default}
+ が実行され、キャプションは文書クラスで設定されたもののままに
+ なり、言語切替に追随して変更されなくなる。ただし、文書作成者が
+ \bxcaptionlanguage を実行していた場合はそちらが優先される。
+ この機能の詳細については pxbase パッケージの説明書を参照。
+
+ switchcaption
+ Babel におけるキャプションや日付の文字列の切替機能を保持する。
+ noswitchcaption の否定。
+
+ switchfont (既定で有効)
+ このパッケージが提供する、CJK 言語でフォントを切り替える機能を
+ 有効にする。
+
+ noswitchfont
+ このパッケージが提供する、CJK 言語でフォントを切り替える機能を
+ 無効にする。switchfont の否定。
+
+■ 機能 (upLaTeX において)
+
+ upTeX は標準で、日本語・中国語(繁体・簡体)・韓国語(以下これらを CJK
+ 言語と総称する)の TeX フォント(和文 TFM)を用意している。本パッケージ
+ は Babel において CJK 言語の切替処理(\extras...)の中に、フォントの
+ 切替を追加し、言語の選択に応じて適切なフォントが選ばれるようにする。
+ 言語に対する Babel の言語オプションの名前は変わりうるので、その名前
+ をパッケージ読込時に指定できるようにした。また、ある CJK 言語の為の
+ オプションが読み込まれていない時は、フォントの切替のみをする簡易の
+ 言語オプションをその場で生成する。
+
+ 言語オプションの名前は \usepackage のオプションの中で
+ <言語識別子>=<言語オプション名>
+ の形式で指定する。ここで <言語識別子> は japanese(日本語), korean
+ (韓国語), schinese(簡体字中国語), tchinese(繁体字中国語) のいずれか
+ で、<言語オプション名> に Babel の言語オプションの名前を指定する。
+ ある CJK 言語に対して指定を省略した場合は、言語識別子と同じ名前が
+ 言語オプション名となる。指定された言語オプションが存在する場合には
+ その切替処理の中にフォント切替が追加される。存在しない場合は、指定
+ された名前の言語オプションがその場で生成され、それは Babel で読み込
+ まれた他の言語と同じように使用できる。
+
+■ 機能 (pLaTeX において)
+
+ OTF パッケージの multi オプションは pLaTeX において韓国語・中国語を
+ 扱うためのもので、これを使うと \UTFK/\UTFC/\UTFT で韓国語/中国語
+ (簡体)/中国語(繁体)のフォントを用いて文字が出力される(これらの命令
+ の引数は \UTF と同じで Unicode 値 16 進)。
+
+ pLaTeX における本パッケージの動作は次のようである。まず、upLaTeX の
+ 場合と同じように CJK 言語のための Babel 言語オプションを生成する。
+ その上で、CJK 言語に切り替わった場合には、\UTF の動作を「本来の \UTF」
+ /\UTFK/\UTFC/\UTFT に切り替える。この機能は単独ではあまり有用とは
+ いえないが、bxutf8 入力エンコーディング(BXbase バンドル)と併用して CJK
+ 言語の UTF-8 直接入力を行う時に有用となる。すなわち直接入力された CJK
+ 文字は \UTF に変換されるので、結果的に upLaTeX の時と同じように、Babel
+ で切り替えた言語用のフォントで出力することが可能となる。
+
+ ※ ただし、この機構には、「JIS X 0208 にある文字はそもそも \UTF に変換
+ されずに直接日本語フォントで出力される」という欠点をもつ。これを解決
+ するには PXfltsrc バンドル等の機能を用いて文書にテキスト変換フィルタ
+ を適用されるという処理が必要になる。
+
+■ 開発者向け機能
+
+ \pxLanguageName{<言語識別子>}
+ その言語に対する言語オプションの生成。
+
+ \pxDeclareBasicCJKEncoding
+ \pxDeclareBasicCJKShape
+ \pxDeclareBasicCJKFamily
+ CJK 言語用の NFSS のフォント定義の命令。
+
+■ 更新履歴
+
+ README ファイルを参照。
+
+# EOF
diff --git a/Master/texmf-dist/doc/platex/pxbase/README-pxcjkcat b/Master/texmf-dist/doc/platex/pxbase/README-pxcjkcat
new file mode 100644
index 00000000000..b030fbebc60
--- /dev/null
+++ b/Master/texmf-dist/doc/platex/pxbase/README-pxcjkcat
@@ -0,0 +1,501 @@
+==================================================
+== PXbase バンドル v0.5 <2010/06/15> ==
+== by「ZR」(八登 崇之/Takayuki YATO)==
+== <zrbabbler@yahoo.co.jp> ==
+==================================================
+(This file is encoded in UTF-8,)
+
+-----------------------------------------------------
+ pxcjkcat パッケージ (v0.4a) -- 和文文字カテゴリ操作
+-----------------------------------------------------
+
+■ 対応環境
+
+ upLaTeX2e (v0.11 以降)
+
+■ 読込
+
+ \usepackage[<オプション>]{pxcjkcat}
+
+ オプションとして以下のものが指定できる。
+
+ ccv1
+ 「モード CCV」を 1 (upTeX v0.11~0.28 と互換)とする。
+ ccv2
+ 「モード CCV」を 2 (upTeX v0.29 以降と互換)とする。
+ ※「モード CCV」については後で詳述する。
+ \cjkcategorymode で有効なモード値
+ kcatcode がモードに従って設定される。これ以外の場合は、パッケージ
+ 読込時の kcatcode の変更はない。
+
+■ 機能
+
+ \cjkcategory{<ブロック>,...}{<カテゴリ>}
+ <ブロック> で表される文字ブロック(複数指定が可能)の kcatcode を
+ <カテゴリ> に変更する。<ブロック> は「ブロック ID (後述)」または
+ 「ASCII 以外の文字」で指定され、後者の場合はその文字の属するブロック
+ を指す。<カテゴリ> は以下に示す様に「カテゴリ ID」または数値で指定
+ する。この変更は局所的(グルーピングに従う)である。
+ - noncjk (15): 欧文扱い
+ - kanji [または han] (16): 漢字扱い
+ - kana (17): 仮名扱い
+ - cjk (18): 「その他の和文」扱い
+ - hangul (19): ハングル扱い
+ ブロック ID の一覧および各々のカテゴリの意味については後掲。
+
+ \cjkcategorymode{<モード>}
+ 全てのブロックの kcatcode の一括設定を行う。モードには以下のものが
+ ある。後に揚げるものほど noncjk であるブロックが増える。各モードで
+ の具体的な設定値については「各モードでの kcatcode の値」の節を参照。
+ - forcecjk : upTeX の既定の設定と同じ。(ただし「文字分類バージョン」
+ による小さい差異がある。詳細については「文字分類バージョン」の節を
+ 参照。) ASCII 文字のみ noncjk で他のブロックは全て和文扱い(noncjk
+ 以外; 具体的な値は後述)。和文フォントの中の Unicode 値の割当がある
+ 全ての文字を和文文字として直接用いることができる。
+ - prefercjk : 和文扱いのブロックとして、forcecjk のものに加えて、
+ Adobe の定める CJK 文字集合(Adobe-Japan1, Adobe-GB1, Adobe-CNS1,
+ Adobe-Korea1)の何れかと共通部分をもつ文字ブロックのみを加えて
+ (具体的な値は forcecjk と同じ)、残りを noncjk に設定する。
+ - prefercjkvar : prefercjk とほぼ同じで、違いは grek, grek1, cyrl
+ の 3 つ(結果的にギリシャ・キリル文字の全て)が noncjk であること。
+ - prefernoncjk : 以下に掲げる「必要最低限」のブロックを除き、全てを
+ noncjk にする。
+ * kanji: 漢字・部首・注音字母: hani, haniA, haniB, haniC, hani1,
+ hani2, cjk01, cjk02, cjk03, cjk05, cjk06, bopo, bopo1.
+ * kana: ひらがな・カタカナ: hira, kana, kana1.
+ * cjk: CJK 記号の一部・全角/半角互換形・彝文字: cjk04, cjk08,
+ cjk07, cjk09, cjk10, cjk11, cjk12, cjk13, sym15, yiii, yiii1.
+ * hangul: ハングル完成形・ハングル字母: hang, hang1, hang2, hangA,
+ hangB.
+ ※モード CCV が 2 の場合、cjk12 の再分割の中の cjk1b, cjk1c は
+ kana に変更される。
+
+■ kcatcode の値の意味
+
+ upTeX (v0.11~) では Unicode 文字を複数の文字ブロックに分類し、各文字
+ ブロック毎に kcatcode と呼ばれるパラメタを持たせている。(文字ブロック
+ の分類は Unicode 文字ブロックとほぼ一致する。) これはそのブロックに
+ 属する文字が入力ソース中に現れた時の upTeX の字句解析の動作を規定する。
+ なお以下では、入力文字コードが UTF-8 であると仮定する。また文字が属する
+ ブロックの kcatcode のことを単にその文字の kcatcode と呼ぶ。
+
+ (1) ある文字の kcatcode が 15 (noncjk) である場合、その文字は和文文字
+ として扱われず、UTF-8 表現のバイト列とみなされる。字句解析の結果は
+ それらのバイトの catcode の値に依存する。例えば、文字 α(U+03B1) の
+ kcatcode が 15 の状態で α がソースに現れたら、欧文 TeX において
+ ^^8e^^b1 というバイト列が現れた時と同じ結果になる。ここで inputenc
+ で utf8 (または utf8x) を指定してあれば、inputenc における「文字 α」
+ の処理に回るはずである。
+
+ (2) ある文字の kcatcode が 15 以外である場合、その文字は 1 つの文字と
+ して扱われ、次の catcode をもつ文字と同様に字句解析される。
+ - kcatcode が 18 (cjk) → catcode 12 と同様
+ - kcatcode が 16, 17, 19 → catcode 11 と同様
+ そして、コントロールシーケンスの一部でないと判断された場合は、それ
+ は指定された kcatcode を保持する和文文字トークンとなる。
+
+ (3) kcatcode が 16, 17, 18 の和文文字トークンの直後の改行文字は無視
+ される(pTeX の和文と同じ)。kcatcode が 19 の和文文字トークンの直後
+ の改行文字は空白トークンとなる(欧文と同じ)。これはハングルかななる
+ 文書の組版に好都合だからである。
+
+ 補足:
+ - ASCII 文字は常に欧文 TeX と同じ扱いになる。従って、ASCII ブロック
+ (latn) の kcatcode 指定は意味をもたない。
+ - kcatcode を表す upTeX のプリミティブは \kcatcode<数値> で、これは
+ その数値を符号位置とする文字が属するブロックの kcatcode を指し示す
+ レジスタを表す。
+
+■ 文字分類バージョン
+
+ upTeX での文字ブロックの分割(および各ブロックの kcatcode 値の既定値)は
+ 改版時に変更され、これが互換性の問題を起こす可能性がある。
+ a. Unicode の改版での文字ブロックの追加に追随する為の変更。
+ b. 複数の文字種が混在する 1 つの Unicode 文字ブロックに対し、その中
+ で文字種により処理を変えたいとする要望に応えるための Unicode 文字
+ ブロックの再分割。例えば v0.29 の改版では Halfwidth and Fullwidth
+ Forms (ブロックID cjk12)が「再分割」されている。
+
+ 本パッケージでは、ブロックの分割の互換性について以下の方針を採る。
+ - a のタイプの変更は「ある版の upTeX で未対応の文字ブロックの文字は
+ その版では決して使われない」ことを仮定すれば互換性を損なうことが
+ ない。従って、これに対しては特に対策を行わない。
+ - b のタイプの変更(「再分割」と呼ぶ)は、既存のソースの動作を変更
+ することになるので、これに対しては互換性の為の対策を行う。
+ - ブロック ID を用いたブロック指定については、その対象文字集合が
+ upTeX の版により変わらないようにする。
+ - モード指定(\cjkcategorymode)を行う場合は、それによる kcatcode の
+ 設定値が upTeX の版により変わらないようにする。(ただし、その版に
+ 対応する Unicode の版で追加された文字を除く。)
+ - パッケージを読み込むだけでは kcatcode への変更は一切行われない。
+ 従って、この場合の設定値は当然 upTeX の版に依存する。
+
+ 具体的な対応をこれから述べる。まず、文字ブロックの「再分割」の違いを
+ 「文字分類バージョン(CCV;Character Category Version)」と呼ぶことに
+ する。現状では次のものが存在する。
+
+ CCV 1 : upTeX v0.11 での定義
+ CCV 2 : upTeX v0.29 での定義
+
+ その上で、分割の変更について、以下のように対応する。ここでは CCV 2 に
+ おける cjk12 の再分割を例にする。
+
+ - cjk12 の再分割に関しては、再分割後のブロックに新たに ID を与える
+ (cjk1a, cjk1b, cjk1c)。cjk12 も引き続き使用可能である。CCV が 2
+ 以降の upTeX で cjk12 の kcatcode を変更する場合には、内部では
+ cjk1a~cjk1c を同時に変更する動作を行う。当然ながら CCV 1 の upTeX
+ では cjk1a~cjk1c の指定は使えない。
+
+ CCV 2 では分割が変更されただけでなく、cjk1b と cjk1c の kcatcode の
+ 既定値が 18(cjk) から 17(kana) に変更される。本パッケージでのモード
+ 設定における kcatcode の設定値は upTeX の既定値を基礎としていて、特に
+ forcecjk は既定値と全く同じ設定としている。既定値の変更については以下
+ のように対応する。
+
+ - パッケージオプションにおいて、「モード設定の際の設定値の基礎とする
+ CCV」(これを「モード CCV」と呼ぶ)を指定できるようにする。すなわち
+ 'ccvN' (N=1~2) でモード CCV が N になる。
+ - forcecjk の設定値は CCV が「モード CCV」である upTeX の既定値と
+ 一致する。それ以外のモードの設定値もそれに応じて変わる。
+ - モード CCV の既定値は 1 とする。従って、*モード設定を使用した場合*
+ は、kcatcode の設定値は用いる upTeX の CCV に依存しない。
+ - モード設定オプション無しでパッケージを読み込んだだけの場合は、
+ kcatcode の設定は何も変更されない。従ってこの場合の設定値は用いる
+ upTeX の CCV に依存する。
+
+ 例として次の場合を考える。
+ [upTeX の CCV が 1]
+ (1a) \usepackage{pxcjkcat}
+ (1b) \usepackage[forcecjk]{pxcjkcat}
+ (1c) \usepackage[ccv1,forcecjk]{pxcjkcat}
+ [upTeX の CCV が 2]
+ (2a) \usepackage{pxcjkcat}
+ (2b) \usepackage[forcecjk]{pxcjkcat}
+ (2c) \usepackage[ccv1,forcecjk]{pxcjkcat}
+ (2d) \usepackage[ccv2,forcecjk]{pxcjkcat}
+ (1a)(1b)(1c)(2b)(2c) は CCV 1 の既定値、(2a)(2d) は CCV 2 の既定値と
+ 同じ値に設定される。
+
+ 最後の注意点として、\cjkcategory でブロック指定に「文字」を使った場合
+ は単純にその文字の属する文字ブロックとみなされ、その動作は用いる upTeX
+ の CCV に依存し、モード CCV とは無関係である。
+
+■ Unicode ブロック ID 一覧
+
+ 文字分類バージョン(CCV) 1 でのブロック。ただし [2] の注釈を付したもの
+ は CCV 2 の upTeX で追加されたブロックである(先述の通り、Unicode 文字
+ ブロック追加による変更に関しては CCV は関知しない)。CCV 1 の upTeX で
+ は、例えば nkoo の範囲は実際には U+07C0~08FF となる。
+
+ ID Unicode 範囲 名称
+ latn 0000 .. 007F Basic Latin
+ latn1 0080 .. 00FF Latin-1 Supplement
+ latnA 0100 .. 017F Latin Extended-A
+ latnB 0180 .. 024F Latin Extended-B
+ latn2 0250 .. 02AF IPA Extensions
+ sym01 02B0 .. 02FF Spacing Modifier Letters
+ sym02 0300 .. 036F Combining Diacritical Marks
+ grek 0370 .. 03FF Greek and Coptic
+ cyrl 0400 .. 04FF Cyrillic
+ cyrl1 0500 .. 052F Cyrillic Supplement
+ armn 0530 .. 058F Armenian
+ hebr 0590 .. 05FF Hebrew
+ arab 0600 .. 06FF Arabic
+ syrc 0700 .. 074F Syriac
+ arab1 0750 .. 077F Arabic Supplement
+ thaa 0780 .. 07BF Thaana
+ nkoo 07C0 .. 07FF NKo
+ samr [2] 0800 .. 08FF Samaritan
+ deva 0900 .. 097F Devanagari
+ beng 0980 .. 09FF Bengali
+ guru 0A00 .. 0A7F Gurmukhi
+ gujr 0A80 .. 0AFF Gujarati
+ orya 0B00 .. 0B7F Oriya
+ taml 0B80 .. 0BFF Tamil
+ telu 0C00 .. 0C7F Telugu
+ knda 0C80 .. 0CFF Kannada
+ mlym 0D00 .. 0D7F Malayalam
+ sinh 0D80 .. 0DFF Sinhala
+ thai 0E00 .. 0E7F Thai
+ laoo 0E80 .. 0EFF Lao
+ tibt 0F00 .. 0FFF Tibetan
+ mymr 1000 .. 109F Myanmar
+ geor 10A0 .. 10FF Georgian
+ hang1 1100 .. 11FF Hangul Jamo
+ ethi 1200 .. 137F Ethiopic
+ ethi1 1380 .. 139F Ethiopic Supplement
+ cher 13A0 .. 13FF Cherokee
+ cans 1400 .. 167F Unified Canadian Aboriginal Syllabics
+ ogam 1680 .. 169F Ogham
+ runr 16A0 .. 16FF Runic
+ tglg 1700 .. 171F Tagalog
+ hano 1720 .. 173F Hanunoo
+ buhd 1740 .. 175F Buhid
+ tagb 1760 .. 177F Tagbanwa
+ khmr 1780 .. 17FF Khmer
+ mong 1800 .. 187F Mongolian
+ cans1 [2] 1880 .. 18FF Unified Canadian Aboriginal Syllabics
+ Extended
+ limb 1900 .. 194F Limbu
+ tale 1950 .. 197F Tai Le
+ talu 1980 .. 19DF New Tai Lue
+ khmr1 19E0 .. 19FF Khmer Symbols
+ bugi 1A00 .. 1A1F Buginese
+ lana [2] 1A20 .. 1AFF Tai Tham
+ bali 1B00 .. 1B7F Balinese
+ sund [2] 1B80 .. 1BFF Sundanese
+ lepc [2] 1C00 .. 1C4F Lepcha
+ olck [2] 1C50 .. 1CCF Ol Chiki
+ sym38 [2] 1CD0 .. 1CFF Vedic Extensions
+ latn4 1D00 .. 1D7F Phonetic Extensions
+ latn5 1D80 .. 1DBF Phonetic Extensions Supplement
+ sym03 1DC0 .. 1DFF Combining Diacritical Marks Supplement
+ latn3 1E00 .. 1EFF Latin Extended Additional
+ grek1 1F00 .. 1FFF Greek Extended
+ sym04 2000 .. 206F General Punctuation
+ sym05 2070 .. 209F Superscripts and Subscripts
+ sym06 20A0 .. 20CF Currency Symbols
+ sym07 20D0 .. 20FF Combining Diacritical Marks for Symbols
+ sym08 2100 .. 214F Letterlike Symbols
+ sym09 2150 .. 218F Number Forms
+ sym10 2190 .. 21FF Arrows
+ sym11 2200 .. 22FF Mathematical Operators
+ sym12 2300 .. 23FF Miscellaneous Technical
+ sym13 2400 .. 243F Control Pictures
+ sym14 2440 .. 245F Optical Character Recognition
+ sym15 2460 .. 24FF Enclosed Alphanumerics
+ sym16 2500 .. 257F Box Drawing
+ sym17 2580 .. 259F Block Elements
+ sym18 25A0 .. 25FF Geometric Shapes
+ sym19 2600 .. 26FF Miscellaneous Symbols
+ sym20 2700 .. 27BF Dingbats
+ sym21 27C0 .. 27EF Miscellaneous Mathematical Symbols-A
+ sym22 27F0 .. 27FF Supplemental Arrows-A
+ brai 2800 .. 28FF Braille Patterns
+ sym23 2900 .. 297F Supplemental Arrows-B
+ sym24 2980 .. 29FF Miscellaneous Mathematical Symbols-B
+ sym25 2A00 .. 2AFF Supplemental Mathematical Operators
+ sym26 2B00 .. 2BFF Miscellaneous Symbols and Arrows
+ glag 2C00 .. 2C5F Glagolitic
+ latnC 2C60 .. 2C7F Latin Extended-C
+ copt 2C80 .. 2CFF Coptic
+ geor1 2D00 .. 2D2F Georgian Supplement
+ tfng 2D30 .. 2D7F Tifinagh
+ ethi2 2D80 .. 2DDF Ethiopic Extended
+ cyrlA [2] 2DE0 .. 2DFF Cyrillic Extended-A
+ sym27 2E00 .. 2E7F Supplemental Punctuation
+ cjk01 2E80 .. 2EFF CJK Radicals Supplement
+ cjk02 2F00 .. 2FEF Kangxi Radicals
+ cjk03 2FF0 .. 2FFF Ideographic Description Characters
+ cjk04 3000 .. 303F CJK Symbols and Punctuation
+ hira 3040 .. 309F Hiragana
+ kana 30A0 .. 30FF Katakana
+ bopo 3100 .. 312F Bopomofo
+ hang2 3130 .. 318F Hangul Compatibility Jamo
+ cjk05 3190 .. 319F Kanbun
+ bopo1 31A0 .. 31BF Bopomofo Extended
+ cjk06 31C0 .. 31EF CJK Strokes
+ kana1 31F0 .. 31FF Katakana Phonetic Extensions
+ cjk07 3200 .. 32FF Enclosed CJK Letters and Months
+ cjk08 3300 .. 33FF CJK Compatibility
+ haniA 3400 .. 4DBF CJK Unified Ideographs Extension A
+ sym28 4DC0 .. 4DFF Yijing Hexagram Symbols
+ hani 4E00 .. 9FFF CJK Unified Ideographs
+ yiii A000 .. A48F Yi Syllables
+ yiii1 A490 .. A4CF Yi Radicals
+ lisu [2] A4D0 .. A4FF Lisu
+ vaii [2] A500 .. A63F Vai
+ cyrlB [2] A640 .. A69F Cyrillic Extended-B
+ bamu [2] A6A0 .. A6FF Bamum
+ sym29 A700 .. A71F Modifier Tone Letters
+ latnD A720 .. A7FF Latin Extended-D
+ sylo A800 .. A82F Syloti Nagri
+ sym39 [2] A830 .. A83F Common Indic Number Forms
+ phag A840 .. AB7F Phags-pa
+ saur [2] A880 .. A8DF Saurashtra
+ deva1 [2] A8E0 .. A8FF Devanagari Extended
+ kali [2] A900 .. A92F Kayah Li
+ rjng [2] A930 .. A95F Rejang
+ hangA [2] A960 .. A97F Hangul Jamo Extended-A
+ java [2] A980 .. A9FF Javanese
+ cham [2] AA00 .. AA5F Cham
+ mymrA [2] AA60 .. AA7F Myanmar Extended-A
+ tavt [2] AA80 .. ABBF Tai Viet
+ mtei [2] ABC0 .. ABFF Meetei Mayek
+ hang AC00 .. D7AF Hangul Syllables
+ hangB [2] D7B0 .. D7FF Hangul Jamo Extended-B
+ spc01 D800 .. DB7F High Surrogates
+ spc02 DB80 .. DBFF High Private Use Surrogates
+ spc03 DC00 .. DFFF Low Surrogates
+ spc04 E000 .. F8FF Private Use Area
+ hani1 F900 .. FAFF CJK Compatibility Ideographs
+ latn6 FB00 .. FB4F Alphabetic Presentation Forms
+ arab2 FB50 .. FDFF Arabic Presentation Forms-A
+ spc05 FE00 .. FE0F Variation Selectors
+ cjk09 FE10 .. FE1F Vertical Forms
+ sym30 FE20 .. FE2F Combining Half Marks
+ cjk10 FE30 .. FE4F CJK Compatibility Forms
+ cjk11 FE50 .. FE6F Small Form Variants
+ arab3 FE70 .. FEFF Arabic Presentation Forms-B
+ cjk12 FF00 .. FFEF Halfwidth and Fullwidth Forms
+ spc06 FFF0 .. FFFF Specials
+ linb 10000 .. 1007F Linear B Syllabary
+ linb1 10080 .. 100FF Linear B Ideograms
+ sym31 10100 .. 1013F Aegean Numbers
+ grek2 10140 .. 1018F Ancient Greek Numbers
+ sym40 [2] 10190 .. 101CF Ancient Symbols
+ sym41 [2] 101D0 .. 1027F Phaistos Disc
+ lyci [2] 10280 .. 1029F Lycian
+ cari [2] 102A0 .. 102FF Carian
+ ital 10300 .. 1032F Old Italic
+ goth 10330 .. 1037F Gothic
+ ugar 10380 .. 1039F Ugaritic
+ xpeo 103A0 .. 103FF Old Persian
+ dsrt 10400 .. 1044F Deseret
+ shaw 10450 .. 1047F Shavian
+ osma 10480 .. 107FF Osmanya
+ cprt 10800 .. 1083F Cypriot Syllabary
+ armi [2] 10840 .. 108FF Imperial Aramaic
+ phnx 10900 .. 1091F Phoenician
+ lydi [2] 10920 .. 109FF Lydian
+ khar 10A00 .. 10A5F Kharoshthi
+ sarb [2] 10A60 .. 10AFF Old South Arabian
+ avst [2] 10B00 .. 10B3F Avestan
+ prti [2] 10B40 .. 10B5F Inscriptional Parthian
+ phli [2] 10B60 .. 10BFF Inscriptional Pahlavi
+ orkh [2] 10C00 .. 10E5F Old Turkic
+ sym42 [2] 10E60 .. 1107F Rumi Numeral Symbols
+ kthi [2] 11080 .. 11FFF Kaithi
+ xsux 12000 .. 123FF Cuneiform
+ xsux1 12400 .. 12FFF Cuneiform Numbers and Punctuation
+ egyp [2] 13000 .. 1CFFF Egyptian Hieroglyphs
+ sym32 1D000 .. 1D0FF Byzantine Musical Symbols
+ sym33 1D100 .. 1D1FF Musical Symbols
+ sym34 1D200 .. 1D2FF Ancient Greek Musical Notation
+ sym35 1D300 .. 1D35F Tai Xuan Jing Symbols
+ sym36 1D360 .. 1D3FF Counting Rod Numerals
+ sym37 1D400 .. 1EFFF Mathematical Alphanumeric Symbols
+ sym43 [2] 1F000 .. 1F02F Mahjong Tiles
+ sym44 [2] 1F030 .. 1F0FF Domino Tiles
+ sym45 [2] 1F100 .. 1F1FF Enclosed Alphanumeric Supplement
+ cjk13 [2] 1F200 .. 1FFFF Enclosed Ideographic Supplement
+ haniB 20000 .. 2A6FF CJK Unified Ideographs Extension B
+ haniC [2] 2A700 .. 2F7FF CJK Unified Ideographs Extension C
+ hani2 2F800 .. 2FFFF CJK Compatibility Ideographs Supplement
+ spc07 E0000 .. E00FF Tags
+ spc08 E0100 .. EFFFF Variation Selectors Supplement
+ spc09 F0000 .. FFFFF Supplementary Private Use Area-A
+ spc10 100000 .. 10FFFF Supplementary Private Use Area-B
+
+ ※ ID の命名規則
+ - Unicode ブロック名にスクリプト(用字系)の名前が含まれるものは、それ
+ に対する ISO 15924 のコードを用いた。単一のスクリプトのブロックが
+ 複数ある場合は、名前が "Extended-A, B, ..." のものは A, B, ... を、
+ それ以外のものは 1, 2, ... (一部符号値順でない)を末尾に付加した。
+ "Arabic" → arab ; "Latin Extended-C" → latnC
+ なお、Hiragana は hira だが Katakana は kana であることに注意。
+ - それ以外は、CJK 関係(cjk)、特殊用途(spc)、それ以外(sym)の 3 つに
+ 恣意的に分類して、2 桁の番号を付けた。この番号は基本的に符号値の
+ 順とするが、後から追加されたブロックはそうならない。
+
+ CCV 2 では以下の変更がある。
+
+ - cjk12 (Halfwidth and Fullwidth Forms) が次の 3 つに分割される。
+ * cjk1b : U+FF10..U+FF19, U+FF21..U+FF3A, U+FF41..U+FF5A
+ すなわち ASCII 英数字の全角互換形。
+ * cjk1c : U+FF66..U+FF6F, U+FF71..U+FF9D
+ すなわちカタカナの半角互換形。句読点等の記号は含まない。
+ * cjk1a : cjk12 から cjk1b, cjk1c を除いた残り。
+ cjk12 の指定も使用可能である。
+
+■ 各モードでの kcatcode の値
+
+ モード CCV が 1 の場合。
+
+ 記号 fc pc pcv pnc JIS CID 名称
+ latn X - - - * Basic Latin
+ latn1 O - - X * * Latin-1 Supplement
+ latnA O - - X * Latin Extended-A
+ latnB O - - X * Latin Extended-B
+ latn2 O - - X * IPA Extensions
+ sym01 O - - X * Spacing Modifier Letters
+ sym02 O - - X * Combining Diacritical Marks
+ grek O - X - * * Greek and Coptic
+ cyrl O - X - * * Cyrillic
+ hang1 H - - - + Hangul Jamo
+ latn3 O - - X * Latin Extended Additional
+ grek1 O - X - * Greek Extended
+ sym04 O - - X * * General Punctuation
+ sym05 O - - X * Superscripts and Subscripts
+ sym06 O - - X * Currency Symbols
+ sym07 O - - X * Combining Diacritical Marks for Symbols
+ sym08 O - - X * * Letterlike Symbols
+ sym09 O - - X * Number Forms
+ sym10 O - - X * * Arrows
+ sym11 O - - X * * Mathematical Operators
+ sym12 O - - X * * Miscellaneous Technical
+ sym13 O - - X * Control Pictures
+ sym15 O - - - * Enclosed Alphanumerics
+ sym16 O - - X * * Box Drawing
+ sym17 O - - X * Block Elements
+ sym18 O - - X * * Geometric Shapes
+ sym19 O - - X * * Miscellaneous Symbols
+ sym20 O - - X * Dingbats
+ sym23 O - - X * Supplemental Arrows-B
+ sym24 O - - X * Miscellaneous Mathematical Symbols-B
+ sym26 O - - X * Miscellaneous Symbols and Arrows
+ cjk01 I - - - * CJK Radicals Supplement
+ cjk02 I - - - * Kangxi Radicals
+ cjk03 I - - - + Ideographic Description Characters
+ cjk04 O - - - * * CJK Symbols and Punctuation
+ hira K - - - * * Hiragana
+ kana K - - - * * Katakana
+ bopo I - - - + Bopomofo
+ hang2 H - - - + Hangul Compatibility Jamo
+ cjk05 I - - - * Kanbun
+ bopo1 I - - - + Bopomofo Extended
+ cjk06 I - - - + CJK Strokes
+ kana1 K - - - * Katakana Phonetic Extensions
+ cjk07 O - - - * Enclosed CJK Letters and Months
+ cjk08 O - - - * CJK Compatibility
+ haniA I - - - * CJK Unified Ideographs Extension A
+ hani I - - - * * CJK Unified Ideographs
+ yiii O - - - + Yi Syllables
+ yiii1 O - - - + Yi Radicals
+ hangA H - - - Hangul Jamo Extended-B
+ hang H - - - + Hangul Syllables
+ hangB H - - - Hangul Jamo Extended-B
+ spc04 O - - X * Private Use Area
+ hani1 I - - - * CJK Compatibility Ideographs
+ latn6 O - - X * Alphabetic Presentation Forms
+ cjk09 O - - - * Vertical Forms
+ cjk10 O - - - * CJK Compatibility Forms
+ cjk11 O - - - + Small Form Variants
+ cjk12 O - - - * * Halfwidth and Fullwidth Forms
+ cjk13 O - - - Enclosed Ideographic Supplement
+ haniB I - - - * CJK Unified Ideographs Extension B
+ haniC I - - - CJK Unified Ideographs Extension C
+ hani2 I - - - * CJK Compatibility Ideographs Supplement
+ O X - - (その他のブロック)
+ all, prc, pc1, pnc の欄はそれぞれ forcecjk, prefercjk, prefercjkvar,
+ prefernoncjk モードでの kcatcode の値。値の意味: X=noncjk(15),
+ I=kanji(16), K=kana(17), O=cjk(18), H=hangul(19)。JIS 欄の * はその
+ ブロック内の文字に JIS X 0208 に含まれるものがあることを示す。また CID
+ 欄の * は Adobe-Japan1 に、+ は Adobe-GB1, Adobe-CNS1, Adobe-Korea1 に
+ 含まれるものがあることを示す。
+
+ モード CCV が 2 の場合、cjk12 の再分割について以下のようになる。
+
+ 記号 fc pc pcv pnc JIS CID
+ cjk1a O - - - * * cjk12 で cjk1b, cjk1c 以外
+ cjk1b K - - - * * ASCII 英数字の全角互換形
+ cjk1c K - - - * * カタカナの半角互換形(記号は含まず)
+
+ ※ upTeX の CCV が 2 でモード CCV 指定が 1 の場合は cjk1a~cjk1c の
+ 設定値は cjk12 のものに従う。
+
+■ 更新履歴
+
+ README ファイルを参照。
+
+# EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/ifuptex.sty b/Master/texmf-dist/tex/platex/pxbase/ifuptex.sty
new file mode 100644
index 00000000000..ff1ca4d2ac3
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/ifuptex.sty
@@ -0,0 +1,47 @@
+%
+% ifuptex.sty (for both LaTeX2e & plain TeX)
+%
+
+%%%% Avoid multiple loading and check if LaTeX2e is used.
+\ifx\iuMode\undefined\else \expandafter\endinput \fi
+\ifx\RequirePackage\undefined % not LaTeX2e
+ \edef\iuRestoreAt{\catcode64=\the\catcode64}
+ \catcode64=11 \let\iuMode=p
+\else % LaTeX2e
+ \let\iuRestoreAt\relax \let\iuMode=l
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{ifuptex}[2008/03/14 v0.2 upTeX checker]
+\fi
+
+%%%% \ifupTeX, \ifnativeupTeX
+\def\iu@true#1{\expandafter\let\csname#1\endcsname\iftrue}
+\def\iu@false#1{\expandafter\let\csname#1\endcsname\iffalse}
+\edef\reserved@a{\string\kchar}\edef\reserved@b{\meaning\kchar}
+\ifx\reserved@a\reserved@b \iu@true{ifupTeX}
+ \ifnum\ucs"3000="3000 \iu@true{ifnativeupTeX}
+ \else \iu@false{ifnativeupTeX} \fi
+\else \iu@false{ifupTeX}\iu@false{ifnativeupTeX}
+\fi
+
+%%%% \iu@noupTeX
+\if l\iuMode % LaTeX2e
+ \def\iu@noupTeX#1{\PackageError{\@currname}%
+ {This \@cls@pkg\space requires #1}%
+ {I stop loading here.}\expandafter\endinput}
+\else % not LaTeX2e
+ \def\iu@noupTeX#1{\errorcontextlines=-1
+ \errhelp{You should quit right now.}%
+ \errmessage{This document requires #1!}}
+\fi
+
+%% \RequireupTeX, \RequireNativeupTeX
+\def\RequireupTeX{%
+ \ifupTeX\else \iu@noupTeX{upTeX}\fi}
+\def\RequirenativeupTeX{%
+ \ifnativeupTeX\else \iu@noupTeX{native upTeX}\fi}
+
+%%%% all done
+\let\iu@true\relax\let\iu@false\relax
+\iuRestoreAt\let\iuRestoreAt\relax
+\endinput
+%% EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxbabel.sty b/Master/texmf-dist/tex/platex/pxbase/pxbabel.sty
new file mode 100644
index 00000000000..26d007133f3
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/pxbabel.sty
@@ -0,0 +1,186 @@
+%
+% pxbabel.sty
+%
+%%%% package declaration
+\NeedsTeXFormat{pLaTeX2e}
+\ProvidesPackage{pxbabel}[2010/06/15 v0.5 PX Babel interface for CJK]
+\RequirePackage{pxbase}
+\safecaret
+\RequirePackage{keyval}
+
+%%%% error message
+\def\pxbb@pkgname{pxbabel}
+\def\pxbb@error{\PackageError\pxbb@pkgname}
+\def\pxbb@warn{\PackageWarningNoLine\pxbb@pkgname}
+\def\pxbb@eha{\MessageBreak I aborted loading it.}
+\def\pxbb@err@nobbl{\pxbb@error
+ {babel is not yet loaded, load aborted}%
+ {This package must be loaded after babel package.}}
+\@onlypreamble\pxbb@err@nobbl
+\def\pxbb@warn@nocjk{\pxbb@warn
+ {No multi-CJK support found, font switch disabled\MessageBreak
+ (I need upTeX-extension or otf package with `multi')}}
+\@onlypreamble\pxbb@warn@nocjk
+
+%%%% \pxbb@foreach@lang\CS
+\def\pxbb@foreach@lang#1{%
+ #1{japanese}#1{korean}#1{schinese}#1{tchinese}}
+
+%%%% keyval settings
+\def\pxbb@setkey{%
+ \edef\pxbb@nxt{\noexpand\setkeys{pxbabel}{\CurrentOption}}%
+ \pxbb@nxt}
+\def\pxbb@do#1{%
+ \define@key{pxbabel}{#1}{\@namedef{pxbb@LN/#1}{##1}}%
+ \@namedef{pxbb@LN/#1}{#1}}
+\pxbb@foreach@lang\pxbb@do
+\define@key{pxbabel}{main}{\def\pxbb@main{#1}}
+\let\pxbb@main\relax
+
+%%%% option handler
+\newif\ifpxbb@switchcaption \pxbb@switchcaptionfalse
+\DeclareOption{switchcaption}{\pxbb@switchcaptiontrue}
+\DeclareOption{noswitchcaption}{\pxbb@switchcaptionfalse}
+\newif\ifpxbb@switchfont \pxbb@switchfonttrue
+\DeclareOption{switchfont}{\pxbb@switchfonttrue}
+\DeclareOption{noswitchfont}{\pxbb@switchfontfalse}
+\newif\ifpxbb@prefermmixjis
+\DeclareOption{prefer2004jis}{\pxbb@prefermmixjistrue}
+\DeclareOption{noprefer2004jis}{\pxbb@prefermmixjisfalse}
+\DeclareOption*{\pxbb@setkey}
+\ProcessOptions*
+
+%%%% \ifpxbb@otfmulti, \ifpxbb@uptex
+%%%% \ifpxbb@pxotf
+\newif\ifpxbb@otfmulti \newif\ifpxbb@pxotf
+\@ifpackageloaded{mlutf}{\pxbb@otfmultitrue}{\pxbb@otfmultifalse}
+\@ifpackageloaded{pxotf}{\pxbb@otfmultitrue\pxbb@pxotftrue}{}
+\newif\ifpxbb@uptex
+\let\ifpxbb@uptex\ifupTeX
+
+%%%% environment check
+\@ifpackageloaded{babel}{}{\pxbb@err@nobbl\endinput}
+\ifpxbb@switchfont \ifpxbb@otfmulti\else \ifpxbb@uptex\else
+ \pxbb@warn@nocjk \fi\fi\fi
+
+%%%% set caption language to 'default'
+\ifpxbb@switchcaption\else
+ \ifx\bx@bbl@captlang\@undefined
+ \bxcaptionlanguage{default}
+\fi\fi
+
+%%------ language declarations
+
+%%%% \pxlanguagename{<langcode>}
+\def\pxlanguagename#1{\@nameuse{pxbb@LN/#1}}
+
+%%%% declare languages
+\def\pxbb@decl@triv@lang#1{%
+ \edef\pxbb@arg{{\@nameuse{pxbb@LN/#1}}}%
+ \expandafter\pxbb@decl@triv@lang@a\pxbb@arg}
+\def\pxbb@decl@triv@lang@a#1{%
+ \expandafter\ifx\csname date#1\endcsname\relax
+ \bxTrivLangDef{#1}\fi}
+\pxbb@foreach@lang\pxbb@decl@triv@lang
+\pxbb@decl@triv@lang@a{cjkmulti}
+\ifx\pxbb@main\relax\else
+ \bxmainlanguage{\pxbb@main}\fi
+\@onlypreamble\pxb@decl@triv@lang
+\@onlypreamble\pxb@decl@triv@lang@a
+
+\ifpxbb@otfmulti %====================== for OTF
+%%------ \UTF switch
+
+%%%% add \UTF switch to Babel \extras
+\ifpxbb@switchfont
+\def\pxbb@addtoextras@otf#1{%
+ \edef\pxbb@arg{{\@nameuse{pxbb@LN/#1}}}%
+ \expandafter\pxbb@addtoextras@otf@a\pxbb@arg}
+\def\pxbb@addtoextras@otf@a#1#2{%
+ \expandafter\addto\csname extras#1\endcsname{%
+ \babel@save\UTF \let\UTF#2}}
+\pxbb@addtoextras@otf{korean}{\UTFK}
+\pxbb@addtoextras@otf{schinese}{\UTFC}
+\pxbb@addtoextras@otf{tchinese}{\UTFT}
+\pxbb@addtoextras@otf@a{cjkmulti}{\UTFM}
+\@onlypreamble\pxbb@addtoextras@otf
+\@onlypreamble\pxbb@addtoextras@otf@a
+\fi % pxbb@switchfont
+
+\fi %=================================== end
+
+\ifupTeX %============================== for upTeX
+%%------ encoding switch according to NFSS
+\bxInputDefFile{pxbasenc}
+\pxBDHookEncSwitchOTF
+
+%%%% declarations for upTeX standatd CJK fonts
+\ifpxbb@pxotf\else
+\pxDeclareBasicCJKEncoding{J20}{J30}% UniJIS
+\pxDeclareBasicCJKFamily{J20}{!upjpnrm-h}{!upjpngt-h}{*gt}{*gt}
+\pxDeclareBasicCJKFamily{J30}{!upjpnrm-v}{!upjpngt-v}{*gt}{*gt}
+\pxDeclareBasicCJKEncoding{J21}{J31}% UniKS
+\pxDeclareBasicCJKFamily{J21}{!upkorrm-h}{!upkorgt-h}{*gt}{*gt}
+\pxDeclareBasicCJKFamily{J31}{!upkorrm-v}{!upkorgt-v}{*gt}{*gt}
+\pxDeclareBasicCJKEncoding{J22}{J32}% UniGB
+\pxDeclareBasicCJKFamily{J22}{!upschrm-h}{!upschgt-h}{*gt}{*gt}
+\pxDeclareBasicCJKFamily{J32}{!upschrm-v}{!upschgt-v}{*gt}{*gt}
+\pxDeclareBasicCJKEncoding{J23}{J33}% UniCNS
+\pxDeclareBasicCJKFamily{J23}{!uptchrm-h}{!uptchgt-h}{*gt}{*gt}
+\pxDeclareBasicCJKFamily{J33}{!uptchrm-v}{!uptchgt-v}{*gt}{*gt}
+\fi
+
+%%%% add font switch to Babel \extras
+\ifpxbb@switchfont
+\def\pxbb@addtoextras#1#2#3{%
+ \edef\pxbb@arg{{\@nameuse{pxbb@LN/#1}}%
+ \if t#2{\noexpand\pxbb@full@ja@enc}{\noexpand\@undefined}%
+ \else{#3}{t}\fi}%
+ \expandafter\pxbb@addtoextras@a\pxbb@arg}
+\def\pxbb@addtoextras@a#1#2#3{%
+ \expandafter\addto\csname extras#1\endcsname{%
+ \pxbb@set@full@ja@enc \let\pxInNonJaLanguage=#3%
+ \let\pxbb@org@encoding\cy@encoding
+ \kanjiencoding{#2}\selectfont}%
+ \expandafter\addto\csname noextras#1\endcsname{%
+ \let\pxInNonJaLanguage\@undefined
+ \kanjiencoding{\pxbb@org@encoding}\selectfont}}
+\pxbb@addtoextras{japanese}{t}{}
+\pxbb@addtoextras{korean}{f}{J21}
+\pxbb@addtoextras{schinese}{f}{J22}
+\pxbb@addtoextras{tchinese}{f}{J23}
+\@onlypreamble\pxbb@addtoextras
+\@onlypreamble\pxbb@addtoextras@a
+%% \pxbb@set@full@ja@enc
+\edef\pxbb@dflt@ja@enc{\ifpxbb@prefermmixjis J24\else J20\fi}
+\@namedef{pxbb@SFJE/J20}{\def\pxbb@full@ja@enc{J20}}
+\@namedef{pxbb@SFJE/J24}{\def\pxbb@full@ja@enc{J24}}
+\def\pxbb@set@full@ja@enc{%
+ \let\pxbb@full@ja@enc\pxbb@dflt@ja@enc
+ \csname pxbb@SFJE/\cy@encoding\endcsname}
+\fi % pxbb@switchfont
+
+\fi %=================================== end
+
+%%------ all done
+\endinput
+%% EOF
+
+%
+% Roman, H Gothic, H Roman, V Gothic, H : metric encod.
+% ------------ ------------ ------------ ------------ : ------ --------
+% umin10 ugoth10 utmin10 utgoth10 : min10 JIS-old
+% ujis ujisg ujis-v ujisg-v : jis JIS-old
+% ujisn ujisng ujisn-v ujisng-v : jisn JIS-old
+% * urml ugbm urmlv ugbmv : RAW JIS-old
+% upjisr-h upjisg-h upjisr-v upjisg-v : upjpn JIS-bmp
+% upjisr-hq upjisg-hq : upjpn JIS-old
+% upjpnrm-h upjpngt-h upjpnrm-v upjpngt-v : upjpn JIS-full
+% * uprml upgbm uprmlv upgmbv : RAW JIS-bmp
+% * uprmlq upgbmq : RAW JIS-old
+% upkorrm-h upkorgt-h upkorrm-v upkorgt-v : upkor KS
+% * uphysmjm-h uphygt-h uphysmjm-v uphygt-v : RAW KS
+% upschrm-h upschgt-h upschrm-v upschgt-v : upsch GB
+% * upstsl-h upstht-h upstsl-v upstht-v : RAW GB
+% uptchrm-h uptchgt-h uptchrm-v uptchgt-v : uptch CNS
+% * upmsl-h upmhm-h upmsl-v upmhm-v : RAW CNS
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxbase.def b/Master/texmf-dist/tex/platex/pxbase/pxbase.def
new file mode 100644
index 00000000000..926ee1bc6c5
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/pxbase.def
@@ -0,0 +1,791 @@
+%
+% pxbase.def
+%
+
+% Note: bxbase.def and pxbase.def provide same set of functionality.
+% To avoid version clash, when a version of one of them is loaded,
+% load of an older version of the other is aborted.
+
+%%%% stuffs read when \input'ed
+\ifx\bxbaseOk\undefined
+\bgroup
+\catcode`\@=11
+\gdef\bx@defextension{def}
+\gdef\bx@ver@#1{\expandafter\expandafter\expandafter\@parse@version
+ \csname ver@#1.\@currext\endcsname//00\@nil}
+ %% \bxInputDefFile{<def_name>}
+\gdef\bxInputDefFile#1{\@onefilewithoptions{#1}[][]\bx@defextension}
+ %% \bxCheckCPart{<def_name>}
+\gdef\bxCheckCPart#1{%
+ \@ifl@aded\@currext{#1}{%
+ \ifnum\bx@ver@{#1}>\bx@ver@\@currname \expandafter\endinput\fi}{}}
+\egroup
+\let\bxbaseOk=t
+\bxInputDefFile{pxbase} %% read this file again
+\expandafter\endinput\fi
+
+%%--------------- folloing stuffs are read by \bxTnext
+
+%%%% file declaration
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{pxbase.def}[2010/06/15 v0.5 BX/PX base library]
+\bxCheckCPart{bxbase}
+%* v0.5.r13
+
+%%%% error messages
+\def\bx@b@pkgname{BX/PXbase} % bundle name
+\def\bx@b@error{\PackageError\bx@b@pkgname}
+\def\bx@err@nobbl{\bx@b@error{babel not yet loaded}\@eha}
+\def\bx@err@oorng{\bx@b@error{Number out of range}\@eha}
+\def\bx@err@nanbc{\bx@b@error{Non-BMP characters not supported}\@eha}
+\def\bx@err@ilnfm{\bx@b@error{Illegal number format}\@eha}
+\def\bx@err@uddrv#1{\bx@b@error{\string#1 is undefined}\@eha}
+
+%%%% common stuffs
+\ifx\bxUcv\@undefined
+\newcount\bxUcv % argument of \bx@Ux
+\fi
+\newif\ifbxOk % all-purpsoe switch
+\let\bxHex\relax % result of \bxToHex...
+\let\bxRes\relax % result of \bxToLower
+\edef\bx@b@resetcatcodes{% < ! " ' + ^ >
+ \catcode33=\the\catcode33\catcode34=\the\catcode34%
+ \catcode39=\the\catcode39\catcode43=\the\catcode43%
+ \catcode94=\the\catcode94\relax}
+\catcode33=12 \catcode34=12 \catcode39=12 \catcode43=12
+\catcode94=6
+
+%%------ Programming tools
+
+%%%% \bxNullify\CS
+% Make \CS void and unoverridable by \providecommand.
+\def\bxNullify#1{\global\let#1\bx@nullified}
+\def\bx@nullified{\@gobble\bx@@nullified}
+
+%%%% \bxDebug{<text>}
+% If \bxUseDebug is defined when bxbase is loaded, this command
+% prints debug messages; otherwise it is ignored.
+%\let\bx@typeout\typeout
+%\ifx\bxUseDebug\@undefined \let\bxDebug\@gobble
+%\else \def\bxDebug#1{\bx@typeout{BX debug: #1}}\fi
+\providecommand*\bxDebug{\@gobble}
+
+%%%% \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@b@error{Cannot use \string#1 here}\@eha}
+
+%%------ TeX engine distinction
+
+%%%% \bxIfPrimitive\CS{<yes>}{<no>}
+% Checks if \CS is a primitive.
+\def\bxIfPrimitive#1{%
+ \edef\bx@tmpa{\string#1}\edef\bx@tmpb{\meaning#1}%
+ \ifx\bx@tmpa\bx@tmpb \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo \fi}
+
+%%%% \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
+ % (here old pdfTeX without e-TeX is ignored)
+ %
+\bxIfPrimitive\kansuji{\let\bxEngineTypeX\bxETpTeX}{%
+\bxIfPrimitive\XeTeXversion{\let\bxEngineTypeX\bxETXeTeX}{%
+\bxIfPrimitive\Omegaversion{\let\bxEngineTypeX\bxETOmega}{%
+ \let\bxEngineTypeX\bxETTeX}}}
+\bxIfPrimitive\eTeXversion{\let\bxEngineTypeY\bxETeTeX}{%
+\bxIfPrimitive\pdftexversion{\let\bxEngineTypeY\bxETpdfTeX}{%
+ \let\bxEngineTypeY\bxETTeX}}
+
+%%%% \bx@b@uptex
+\bxIfPrimitive\kchar{\chardef\bx@b@uptex\@ne}{\chardef\bx@b@uptex\z@}
+
+%%------ Babel something
+
+%%<+> \bxBDHookBabel
+% A begindocument-hook about Babel.
+\newif\ifbx@bbl@inuse
+\def\bx@bbl@bdhook{}
+\providecommand\bxBDHookBabel{\bx@bdhook@babel@do}
+\def\bx@bdhook@babel@do{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{babel}{%
+ \bx@bbl@inusetrue
+ \ifx\bx@bbl@captlang\@undefined\else \bx@bbl@do@captlang \fi
+ \bx@bbl@bdhook
+ }{}}%
+ \bxNullify\bxBDHookBabel}
+\@onlypreamble\bxBDHookBabel
+\@onlypreamble\bx@bdhook@babel@do
+
+%%<+> \bxAtBeginDocumentBabel{<text>}
+% Register a begin-document hook that willl be invoked only when babel
+% is loaded.
+\def\bxAtBeginDocumentBabel{%
+ \g@addto@macro\bx@bbl@bdhook}
+\@onlypreamble\bxAtBeginDocumentBabel
+\@onlypreamble\bx@bbl@bdhook
+
+%%%% \bx@bbl@patch@sel@lang
+% A patch to \select@language that disables automatic switching of
+% caption language.
+\def\bx@bbl@patch@sel@lang{% this wlll be never invoked twice
+ \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}}}
+\@onlypreamble\bx@bbl@patch@sel@lang
+
+%%%% \bx@bbl@do@captlang
+\def\bx@bbl@@main{main}
+\def\bx@bbl@@default{default}
+\def\bx@bbl@do@captlang{%
+ % set captions
+ \ifx\bx@bbl@captlang\bx@bbl@@main
+ \let\bx@bbl@captlang\bbl@main@language \fi
+ \ifx\bx@bbl@captlang\bx@bbl@@default
+ \else\expandafter\ifx\csname l@\bx@bbl@captlang\endcsname\relax
+ \@nolanerr\bx@bbl@captlang
+ \else \csname date\bx@bbl@captlang\endcsname
+ \csname captions\bx@bbl@captlang\endcsname
+ \fi\fi}
+\@onlypreamble\bx@bbl@do@captlang
+
+%%%% \bx@bbl@copy{<lang1>}{<lang2>}
+% Copies \captions... and \date... for save.
+\def\bx@bbl@copy#1#2{%
+ \bx@bbl@copy@a{#1}{#2}{captions}%
+ \bx@bbl@copy@a{#1}{#2}{date}}
+\def\bx@bbl@copy@a#1#2#3{%
+ \edef\bx@tmpa{\let\expandafter\noexpand\csname#3#1\endcsname
+ \expandafter\noexpand\csname#3#2\endcsname}\bx@tmpa}
+\@namedef{captions**Z}{\@empty}
+\@namedef{date**Z}{\@empty}
+
+%%<*> \bxcaptionlanguage{<lang>}
+% Change the caption language manually, with disabling automatic
+% switching on it.
+\def\bxcaptionlanguage#1{%
+ \@ifpackageloaded{babel}%
+ {\ifx\bx@bbl@captlang\@undefined \bx@bbl@patch@sel@lang \fi
+ \xdef\bx@bbl@captlang{#1}}%
+ {\bx@err@nobbl}}
+\@onlypreamble\bxcaptionlanguage
+
+%%<*> \bxmainlanguage{<lang>}
+% Changes the 'main' language (one that is effective at beginning).
+\def\bxmainlanguage#1{%
+ \expandafter\ifx\csname date#1\endcsname\relax
+ \@nolanerr{#1}\fi
+ \xdef\bbl@main@language{#1}}
+\@onlypreamble\bxmainlanguage
+
+%%<+> \bxTrivLangDef{<lang>}
+% Makes a fake language option.
+\def\bxTrivLangDef#1{%
+ \@ifundefined{date#1}{%
+ \@ifundefined{l@#1}%
+ {\expandafter\chardef\csname l@#1\endcsname\z@}{}%
+ \@namedef{date#1}{\relax}%
+ \@namedef{captions#1}{\relax}%
+ \@namedef{extras#1}{\relax}%
+ \@namedef{noextras#1}{\relax}%
+ \@namedef{date#1}{\relax}%
+ }{}}
+\@onlypreamble\bxTrivLangDef
+
+%%------ 'Number-to-hex-string' functions
+% All public commands put their result in \bxHex.
+
+%%%% preparation
+\newif\ifbx@hx@bigchar
+\ifnum\bxEngineTypeX>\@ne \bx@hx@bigchartrue \fi
+\ifnum\bx@b@uptex>\z@ \bx@hx@bigchartrue \fi
+
+%%<+> \bxToHexTiny
+% For one-to-two-digit hex strings.
+\def\bxToHexTiny#1{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohextiny@a\meaning\bxHex\@nil}
+\def\bx@hx@tohextiny@a#1"#2\@nil{\def\bxHex{#2}}
+
+%%<+> \bxToHexSmall
+% For one-to-three-digit hex strings.
+\def\bxToHexSmall#1{%
+ \mathchardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexsmall@a\meaning\bxHex\@nil}
+\def\bx@hx@tohexsmall@a#1"#2\@nil{\def\bxHex{#2}}
+
+%%<+> \bxToHexTwo
+% For zero-padded two-digit hex strings.
+\def\bxToHexTwo#1{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohextwo@a\meaning\bxHex"0\@nil}
+\def\bx@hx@tohextwo@a#1"#2#3#4#5\@nil{\bx@hx@tohextwo@b#2#3#4\@nil}
+\def\bx@hx@tohextwo@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%%<+> \bxToHexThree
+% For zero-padded three-digit hex strings.
+\def\bxToHexThree#1{%
+ \mathchardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexthree@a\meaning\bxHex"00\@nil}
+\def\bx@hx@tohexthree@a#1"#2#3#4#5#6\@nil{\bx@hx@tohexthree@b#2#3#4#5\@nil}
+\def\bx@hx@tohexthree@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%%<+> \bxToHexFour
+% For zero-padded four-digit hex strings.
+\ifbx@hx@bigchar %----<*bigchar>
+\def\bxToHexFour#1{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexfour@a\meaning\bxHex"000\@nil}
+\def\bx@hx@tohexfour@a#1"#2#3#4#5#6#7\@nil{\bx@hx@tohexfour@b#2#3#4#5#6\@nil}
+\def\bx@hx@tohexfour@b#1"#2\@nil{\def\bxHex{#2#1}}
+\else %----<*!bigchar>
+\mathchardef\bx@hx@fzzz="4000
+\def\bxToHexFour#1{\bgroup
+ \@tempcnta=#1\relax\@tempcntb\@tempcnta\divide\@tempcntb\bx@hx@fzzz
+ \ifcase\@tempcntb \advance\@tempcnta\bx@hx@fzzz \or \or
+ \advance\@tempcnta-\bx@hx@fzzz \or \advance\@tempcnta-"8000 \or
+ \@tempcnta\z@ \fi
+ \mathchardef\bx@hx@tmp\@tempcnta
+ \expandafter\bx@hx@tohexfour@a\meaning\bx@hx@tmp\@nil
+ \egroup \let\bxHex\bx@hx@gtmp}
+\def\bx@hx@tohexfour@a#1"#2#3\@nil{%
+ \expandafter\let\expandafter\bx@hx@tmp
+ \csname bxhx@X/\the\@tempcntb#2\endcsname
+ \ifx\bx@hx@tmp\relax \bx@err@oorng \global\let\bx@hx@gtmp\@empty
+ \else \xdef\bx@hx@gtmp{\bx@hx@tmp#3}\fi}
+\def\bx@hx@nxt#1#2#3{\bgroup\catcode`#3=12
+ \global\expandafter\def\csname bxhx@X/#1#2\endcsname{#3}\egroup}
+\@for\bx@hx@tmp:={040,051,062,073,144,155,166,177,248,259,26A,27B,%
+ 34C,35D,36E,37F}\do{\expandafter\bx@hx@nxt\bx@hx@tmp}
+\fi %----</bigchar>
+
+%%<+> \bxToHexFive
+%%<+> \bxToHexFiveX
+% For zero-padded five-digit hex strings.
+\def\bxToHexFive{\bx@tohexfive@aa\relax}
+\def\bxToHexFiveX{\bx@tohexfive@aa
+ {\ifnum\@tempcnta>\bx@hx@vdmax \@tempcnta=\bx@hx@vdmax\fi}}
+\ifbx@hx@bigchar %----<*bigchar>
+\chardef\bx@hx@vdmax="FFFFF
+\def\bx@tohexfive@aa#1#2{%
+ {\@tempcnta=#2\relax#1\global\chardef\bx@hx@gtmp=\@tempcnta}%
+ \expandafter\bx@hx@tohexfivex@a\meaning\bx@hx@gtmp"0000\@nil}
+\def\bx@hx@tohexfivex@a#1"#2#3#4#5#6#7#8\@nil{%
+ \bx@hx@tohexfivex@b#2#3#4#5#6#7\@nil}
+\def\bx@hx@tohexfivex@b#1"#2\@nil{\edef\bxHex{#2#1}}
+\else %----<*!bigchar>
+\edef\bx@hx@vdmax{"FFFFF\space}
+\def\bx@tohexfive@aa#1#2{%
+ \bgroup \@tempcnta=#2\relax#1%
+ \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax
+ \bxToHexTwo\@tempcnta \let\bx@hx@tmp\bxHex
+ \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax
+ \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}%
+ \egroup \let\bxHex\bx@hx@gtmp}
+\fi %----</bigchar>
+
+%%<+> \bxToHexEight
+% For zero-padded eight-digit hex strings.
+\def\bxToHexEight#1{%
+ \bgroup \@tempcnta=#1\relax
+ \@tempcntb=\@tempcnta\divide\@tempcnta\p@\relax
+ \bxToHexFour\@tempcnta \let\bx@hx@tmp\bxHex
+ \multiply\@tempcnta-\p@\advance\@tempcnta\@tempcntb\relax
+ \bxToHexFour\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}%
+ \egroup \let\bxHex\bx@hx@gtmp}
+
+%%<+> \bxToHexUC
+% For zero-padded four-to-six-digit hex strings.
+\ifbx@hx@bigchar %----<*bigchar>
+\def\bxToHexUC#1{%
+ \chardef\bxHex=#1\relax
+ \expandafter\bx@hx@tohexuc@a\meaning\bxHex"\@empty\@empty000\@nil}
+\def\bx@hx@tohexuc@a#1"#2#3#4#5#6#7#8#9\@nil{%
+ \bx@hx@tohexuc@b#2#3#4#5#6#7#8\@nil}
+\def\bx@hx@tohexuc@b#1"#2\@nil{\edef\bxHex{#2#1}}
+\else %----<*!bigchar>
+\mathchardef\bx@hx@m="1000
+\def\bxToHexUC#1{%
+ \bgroup \@tempcnta=#1\relax
+ \@tempcntb=\@tempcnta \divide\@tempcnta\bx@hx@m\relax
+ \bxToHexSmall\@tempcnta \let\bx@hx@tmp\bxHex
+ \multiply\@tempcnta-\bx@hx@m\advance\@tempcnta\@tempcntb\relax
+ \bxToHexThree\@tempcnta \xdef\bx@hx@gtmp{\bx@hx@tmp\bxHex}%
+ \egroup \let\bxHex\bx@hx@gtmp}
+\fi %----</bigchar>
+
+%%<+> \bxToDecFour
+\def\bxToDecFour#1{%
+ \expandafter\bx@hx@todecfour@a\number#1"000\@nil}
+\def\bx@hx@todecfour@a#1#2#3#4#5#6\@nil{\bx@hx@todecfour@b#1#2#3#4#5\@nil}
+\def\bx@hx@todecfour@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%%<+> \bxToDecFive
+\def\bxToDecFive#1{%
+ \expandafter\bx@hx@todecfive@a\number#1"0000\@nil}
+\def\bx@hx@todecfive@a#1#2#3#4#5#6#7\@nil{\bx@hx@todecfive@b#1#2#3#4#5#6\@nil}
+\def\bx@hx@todecfive@b#1"#2\@nil{\def\bxHex{#2#1}}
+
+%%------ Input through code values
+
+%%<+> \bxBDHookUnicode
+% A begindocument-hook about Unicode (& CID) input.
+\providecommand\bxBDHookUnicode{\bx@bdhook@unicode@do}
+\def\bx@bdhook@unicode@do{%
+ \AtBeginDocument{\bx@assign@Ux}%
+ \bxNullify\bxBDHookUnicode}
+\@onlypreamble\bxBDHookUnicode
+\@onlypreamble\bx@bdhook@unicode@do
+
+%%<+> \bxBDHookJisInput
+% A begindocument-hook about JIS-code input.
+\providecommand\bxBDHookJisInput{\bx@bdhook@jisinput@do}
+\def\bx@bdhook@jisinput@do{%
+ \AtBeginDocument{\bx@assign@JI}%
+ \bxNullify\bxBDHookJisInput}
+\@onlypreamble\bxBDHookJisInput
+\@onlypreamble\bx@bdhook@jisinput@do
+
+%%<+> \bxFallbackSym
+\def\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.
+\def\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.
+\def\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.
+\let\bxUx\relax
+\DeclareRobustCommand*\bxUx{\bxCodeValueSeq\bx@Ux}
+\let\bxUI\relax
+\DeclareRobustCommand*\bxUI{\bxCodeValueSeq\bx@UI}
+\let\bxAJ\relax
+\DeclareRobustCommand*\bxAJ{\bxCodeValueSeqD\bx@AJ}
+\let\bxJI\relax
+\DeclareRobustCommand*\bxJI{\bxCodeValueSeq\bx@JI}
+\let\bxKI\relax
+\DeclareRobustCommand*\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\bxUHex{\protect\bx@Uxh}
+\def\bxUqInt{\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}
+\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.
+ \ifnum\bx@b@uptex>\z@
+ \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
+}
+\@onlypreamble\bx@assign@Ux
+
+%%%% \setUIdriver\CS
+\def\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
+\def\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}
+\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}
+\bgroup \@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
+\egroup
+\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>
+\@onlypreamble\bx@assign@JI
+
+%%------ Assignment check
+
+%%%% \bxAssign <assignment>\relax
+\def\bxAssign{%
+ \bxOkfalse\afterassignment\bx@b@assign@a}
+\def\bx@b@assign@a#1\relax{%
+ \def\bx@tmpa{#1}\ifx\bx@tmpa\@empty\bxOktrue\fi}
+
+%%------ Case conversion
+
+%%%% \bxToLower{<string>}
+% Sets to \bxRes <string> converted to lowercase.
+\def\bxToLower#1{%
+ \edef\bxRes{\lowercase{\def\noexpand\bxRes{#1}}}\bxRes}
+
+%%%% \bxToUpper{<string>}
+\def\bxToUpper#1{%
+ \edef\bxRes{\uppercase{\def\noexpand\bxRes{#1}}}\bxRes}
+
+%%------ Document-level specials
+% Such specials must come before any typeset commands in DVI.
+
+%%%% \bxDocumentSpecial{<text>}
+% Appends \special{<text>} to the list of 'document-level specials'.
+% A simple use of \AtBeginDvi will do in this case.
+\def\bxDocumentSpecial#1{%
+ \AtBeginDvi{\special{#1}}}
+\@onlypreamble\bxDocumentSpecial
+
+%%%% \bxDocumentSpecialUrgent{<text>}
+% Similar to the above, but it demands that the given special be
+% placed as early as possible.
+\def\bxDocumentSpecialUrgent#1{%
+ \bx@docspec@urgent@init
+ \bx@prepend@box\bx@dsu@box{\special{#1}}}
+\def\bx@prepend@box#1#2{%
+ \global\setbox#1\vbox{#2\unvbox#1}}
+\providecommand\bx@docspec@urgent@init{\bx@docspec@urgent@init@do}
+\def\bx@docspec@urgent@init@do{%
+ \newbox\bx@dsu@box
+ \AtBeginDocument{%
+ \ifx\AtBeginShipoutFirst\@undefined
+ \bx@prepend@box\@begindvibox{\unvbox\bx@dsu@box}%
+ \else % 'atbegshi' package is in use
+ {\toks@{\unvbox\bx@dsu@box}%
+ \toks\tw@\expandafter{\AtBegShi@HookFirst}%
+ \xdef\AtBegShi@HookFirst{\the\toks@\the\toks\tw@}}
+ \fi}%
+ \bxNullify\bx@docspec@urgent@init}
+\@onlypreamble\bxDocumentSpecialUrgent
+\@onlypreamble\bx@docspec@urgent@init
+\@onlypreamble\bx@docspec@urgent@init@do
+
+%%%% \recordpapersize
+\def\recordpapersize{%
+ \bxDocumentSpecial{papersize=\the\paperwidth,\the\paperheight}%
+ \bxNullify\recordpapersize}
+\@onlypreamble\recordpapersize
+
+%%<*> \dvipdfmxmapline{<text>}
+%%<*> \dvipdfmxmapfile{<text>}
+\def\dvipdfmxmapline#1{\bxDocumentSpecial{pdf:mapline #1}}
+\@onlypreamble\dvipdfmxmapline
+\def\dvipdfmxmapfile#1{\bxDocumentSpecial{pdf:mapfile #1}}
+\@onlypreamble\dvipdfmxmapfile
+
+%%----- "safe-caret" module
+\newif\ifbx@acr@ok
+\newif\ifbx@acr@needed \bx@acr@neededfalse
+\newif\ifbx@safecaret \bx@safecaretfalse
+\catcode`\^=13
+
+%%%%<*> \safecaret
+\def\safecaret{%
+ \bx@safecarettrue}
+\@onlypreamble\safecaret
+
+%%%% \bxEnableSafeCaret
+\def\bxEnableSafeCaret{%
+ \bx@acr@neededtrue}
+\@onlypreamble\bxEnableSafeCaret
+
+%%%% \bx@acr@defbytes
+\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}
+\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
+\def\bx@acr@initialize{%
+ \bx@acr@defbytes}
+\@onlypreamble\bx@acr@initialize
+
+%%%% \bx@acr@annihilate
+\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}
+\@onlypreamble\bx@acr@annihilate
+
+%%%% \bx@acr@babel@hookcaret
+\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}
+\@onlypreamble\bx@acr@babel@hookcaret
+\edef\bx@acr@babel@normcaret{%
+ \expandafter\noexpand\csname normal@char\string^\endcsname}
+
+%%%% \bx@acr@verbatim@hookcaret
+\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
+\@onlypreamble\bx@acr@verbatim@hookcaret
+
+%%%% begin-document hook
+\providecommand*\bxBDHookSafeCaret{\bx@bdhook@safecaret@do}
+\def\bx@bdhook@safecaret@do{%
+ \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}
+\@onlypreamble\bx@bdhook@safecaret@do
+
+\catcode`\^=6
+%%------ "shadow map" module
+
+%%%% \bxUseShadowMap\CS{<map_tfm>}
+\def\bxUseShadowMap#1#2{%
+ \global\font#1=#2\relax}
+
+%%%% \bxMap\CS
+\mathchardef\bx@m@cc=256
+\def\bxMap#1{\begingroup\count@\bxUcv\divide\count@\bx@m@cc
+ \chardef\bx@m@hb\count@ \multiply\count@\bx@m@cc
+ \advance\bxUcv-\count@ \setbox\z@\hbox{#1\bx@m@hb\char\bxUcv}%
+ \global\bxUcv\wd\z@ \endgroup}
+
+%%------ all done
+\bx@b@resetcatcodes \let\bx@nxt\relax
+\endinput
+%% EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxbase.sty b/Master/texmf-dist/tex/platex/pxbase/pxbase.sty
new file mode 100644
index 00000000000..48ec79b113c
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/pxbase.sty
@@ -0,0 +1,129 @@
+%
+% pxbase.sty
+%
+
+%%%% package declaration
+\NeedsTeXFormat{pLaTeX2e}
+\ProvidesPackage{pxbase}[2010/06/15 v0.5 PX base library]
+
+%%%% include prerequisite packages
+\input{pxbase.def}
+\bxBDHookBabel
+\bxBDHookUnicode
+\bxBDHookJisInput
+\bxBDHookSafeCaret
+\RequirePackage{ifuptex}[2008/03/14]
+
+%%%% error messages
+\def\px@pkgname{pxbase}
+\def\px@b@pkgname{PXbase}
+\def\px@error{\PackageError\px@pkgname}
+\def\px@alert{\PackageWarningNoLine\px@pkgname}
+\def\px@warn{\PackageInfo\px@pkgname}
+\def\px@warn@aecs#1{\px@warn{Command \string#1 already exists}}
+
+%%------ Input through code values
+
+%%<*> \Ux, \UI, \AJ
+\ifx\Ux\@undefined \def\Ux{\bxUx}%
+\else \px@warn@aecs\Ux \fi
+\ifx\UI\@undefined \def\UI{\bxUI}%
+\else \px@warn@aecs\UI \fi
+\ifx\AJ\@undefined \def\AJ{\bxAJ}%
+\else \px@warn@aecs\AJ \fi
+
+%%<*> \JI, \KI
+\ifx\JI\@undefined \def\JI{\bxJI}%
+\else \px@warn@aecs\JI \fi
+\ifx\KI\@undefined \def\KI{\bxKI}%
+\else \px@warn@aecs\KI \fi
+
+%%------ kanji-code detection
+
+%%<+> \pxInternalJEnc
+\ifnum\jis"2121="8140\let\pxInternalJEnc=s\else
+\ifnum\jis"2121="A1A1\let\pxInternalJEnc=e\else
+\ifnum\jis"2121="3000\let\pxInternalJEnc=u\else
+ \let\pxInternalJEnc=?\fi\fi\fi
+
+%%<+> \pxSourceJEnc
+\@@input pxbsjc.def\relax
+\def\px@tmpb#1#2\@nil{%
+ \ifnum `#1=\jis"723F\let\pxSourceJEnc=s\else
+ \ifnum `#1=\jis"693D\let\pxSourceJEnc=e\else
+ \ifnum `#1=\jis"7379\let\pxSourceJEnc=u\else
+ \let\pxSourceJEnc=?\fi\fi\fi}
+\expandafter\px@tmpb\px@tmpa\@nil
+
+%%<*> \infojenc
+\def\px@tmpa{%
+ Kanji encoding: source=%
+ \if s\pxSourceJEnc sjis\else\if e\pxSourceJEnc euc%
+ \else\if u\pxSourceJEnc utf8\else?\fi\fi\fi
+ ; internal=%
+ \if s\pxInternalJEnc sjis\else\if e\pxInternalJEnc euc%
+ \else\if u\pxInternalJEnc unicode\else?\fi\fi\fi}
+\edef\infojenc{\noexpand\typeout{\px@tmpa}}
+
+%%------ force ucs 'fasterrors' option to be in effect
+
+%%%% begindocument hook
+\AtBeginDocument{%
+ \@ifpackageloaded{ucs}{%
+ \let\UnicodeOptionfasterrorsfalse\UnicodeOptionfasterrorstrue
+ \UnicodeOptionfasterrorstrue}{}}
+
+%%------ commands about DVI-specials
+
+%%<*> \usejapanesepdfstring
+\if s\pxInternalJEnc
+ \def\usejapanesepdfstring{% why use CP932??
+ \bxDocumentSpecialUrgent{pdf:tounicode 90ms-RKSJ-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else\if e\pxInternalJEnc
+ \def\usejapanesepdfstring{%
+ \bxDocumentSpecialUrgent{pdf:tounicode EUC-UCS2}%
+ \bxNullify\usejapanesepdfstring}
+\else\if u\pxInternalJEnc
+ \def\usejapanesepdfstring{%
+ \px@alert{Japanese PDF strings in upTeX.\MessageBreak
+ You must use upTeX-aware dvipdfmx}%
+ \bxNullify\usejapanesepdfstring}
+\else
+ \def\usejapanesepdfstring{%
+ \px@alert{\string\usejapanesepdfstring\space ignored,\MessageBreak
+ since internal encoding is unknown}%
+ \bxNullify\usejapanesepdfstring}
+\fi\fi\fi
+\@onlypreamble\usejapanesepdfstring
+
+%%------ CJK font scaling
+
+%%<+> \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{jsbook}{\bxUcv=\tw@}{}
+\chardef\pxDocClassType=\bxUcv
+
+%%<+> \pxUpScale
+\edef\pxUpScale{%
+ \ifcase\pxDocClassType 1\or 0.962216\or 0.924690\else 1\fi}
+
+%%------ all done
+\endinput
+% EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxbasenc.def b/Master/texmf-dist/tex/platex/pxbase/pxbasenc.def
new file mode 100644
index 00000000000..8e2dc7a7cb2
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/pxbasenc.def
@@ -0,0 +1,483 @@
+%
+% pxbasenc.def
+%
+%%%% file declaration
+\NeedsTeXFormat{pLaTeX2e}
+\ProvidesFile{pxbasenc.def}[2010/05/05 v0.5 PX encoding library]
+
+%%%% preparation
+\RequirePackage{ifuptex}
+%\def\pxec@b@pkgname{PXbase}
+\def\pxec@error{\PackageError\px@b@pkgname}
+\def\pxec@err@irfam#1{\pxec@error
+ {Encodings '\pxec@tmpa' redefined inconsistently}\@ehc}
+\def\pxec@err@ukjsf{\pxec@error
+ {'\k@encoding' is not valid as JSF encoding}\@ehc}
+\edef\pxec@resetcatcode{} % nothing for the present
+\ifx\bxUcv\@undefined
+\newcount\bxUcv
+\fi
+\newif\ifpxec@ok
+\newif\ifpxec@sw
+\newif\ifpxec@star
+
+%%------------------ CJK font declarations
+
+%%%% obtain error kanji font setting
+% for use as 'safe font setting'
+\bgroup \escapechar\m@ne \error@kfontshape
+ \expandafter\let\expandafter\pxec@tenc
+ \csname t@enc@\f@encoding\endcsname
+ \xdef\pxec@safe@jfontspec
+ {{\f@encoding}{\pxec@tenc}{\f@family}{\f@series}{\f@shape}}%
+ \global\expandafter\let\expandafter\pxec@safe@y@decl
+ \csname \f@encoding/\f@family/\f@series/\f@shape\endcsname
+ \global\expandafter\let\expandafter\pxec@safe@t@decl
+ \csname \pxec@tenc/\f@family/\f@series/\f@shape\endcsname
+\egroup
+
+%% \pxec@starinvoke\SOMECS
+\def\pxec@starinvoke#1{%
+ \@ifstar{\pxec@startrue#1}{\pxec@starfalse#1}}
+
+%%<+> \pxDeclareCJKEncoding[*]{<h-enc>}{<v-enc>}
+% *-form uses 'safety fonts' as subtitution.
+\@onlypreamble\pxDeclareCJKEncoding
+\def\pxDeclareCJKEncoding{%
+ \pxec@starinvoke\pxec@DeclareCJKEncoding}
+\@onlypreamble\pxDeclareBasicCJKEncoding
+\let\pxDeclareBasicCJKEncoding\pxDeclareCJKEncoding
+\def\pxec@DeclareCJKEncoding#1#2{%
+ \pxec@check@prior@decl{#1}{#2}%
+ \ifbxOk
+ \edef\pxec@args{{#1}{#2}}%
+ \expandafter\pxec@decl@cjkenc@a\pxec@args
+ \fi}
+\@onlypreamble\pxec@decl@cjkenc@a
+\def\pxec@decl@cjkenc@a#1#2{%
+ \DeclareYokoKanjiEncoding{#1}{}{}%
+ \DeclareTateKanjiEncoding{#2}{}{}%
+ \KanjiEncodingPair{#1}{#2}%
+ \ifpxec@star
+ \expandafter\pxec@decl@cjkenc@b\pxec@safe@jfontspec{#1}{#2}%
+ \else
+ \DeclareKanjiSubstitution{#1}{mc}{m}{n}%
+ \DeclareKanjiSubstitution{#2}{mc}{m}{n}%
+ \fi}
+\@onlypreamble\pxec@decl@cjkenc@b
+\def\pxec@decl@cjkenc@b#1#2#3#4#5#6#7{%
+ \DeclareKanjiFamily{#6}{ferr}{}%
+ \DeclareKanjiSubstitution{#6}{ferr}{#4}{#5}%
+ \expandafter\let\csname#6/ferr/#4/#5\endcsname\pxec@safe@y@decl
+ \DeclareKanjiFamily{#7}{ferr}{}%
+ \DeclareKanjiSubstitution{#7}{ferr}{#4}{#5}%
+ \expandafter\let\csname#7/ferr/#4/#5\endcsname\pxec@safe@t@decl}
+
+%% \pxec@check@prior@decl{<h-enc>}{<v-enc>}
+\@onlypreamble\pxec@check@prior@decl
+\def\pxec@check@prior@decl#1#2{%
+ \bxOktrue \def\pxec@tmpa{#1/#2}%
+ {% check if encodings '#1' and '#2' are declared
+ \count@=0\expandafter\ifx\csname T@#1\endcsname\relax\else1\fi
+ \expandafter\ifx\csname T@#2\endcsname\relax\else1\fi\relax
+ \ifnum\count@=\z@ \relax % neither declared, OK
+ \else\ifnum\count@=\@ne % exactly one declared, NG
+ \aftergroup\pxec@error@prior@decl
+ \else % both declared
+ \edef\pxec@y{#1}\edef\pxec@ty{\@nameuse{y@enc@#2}}%
+ \edef\pxec@t{#2}\edef\pxec@yt{\@nameuse{t@enc@#1}}%
+ \ifx\pxec@y\pxec@ty \ifx\pxec@t\pxec@yt \count@\z@ \fi\fi
+ \ifnum\count@=\z@ \aftergroup\bxOkfalse
+ \else \aftergroup\pxec@error@prior@decl \fi
+ \fi\fi}% after this \pxec@error@prior@decl may be called
+}
+\def\pxec@error@prior@decl{\pxec@err@irfam\pxec@tmpa\bxOkfalse}
+
+%%<+> \pxDeclareBasicCJKFamily[*]{<enc>}{<mc-m>}{<gt-m>}{<mc-bx>}{<gt-bx>}
+% Declares the two most basic CJK family, mc (mincho) and gt (gothic),
+% along with the most basic shapes m/n and bx/n for each of them.
+% *-form means the same as \bxDeclareBasicCJKShape.
+\@onlypreamble\pxDeclareBasicCJKFamily
+\def\pxDeclareBasicCJKFamily{%
+ \pxec@starinvoke\pxec@DeclareBasicCJKFamily}
+\@onlypreamble\pxec@DeclareBasicCJKFamily
+\def\pxec@DeclareBasicCJKFamily#1#2#3#4#5{%
+ \pxec@DeclareExtraCJKFamily{#1}{mc}{#2}{#4}%
+ \pxec@DeclareExtraCJKFamily{#1}{gt}{#3}{#5}}
+
+%%<+> \pxDeclareExtraCJKFamily[*]{<enc>}{<fam>}{<font-m>}{<font-bx>}
+\@onlypreamble\pxDeclareExtraCJKFamily
+\def\pxDeclareExtraCJKFamily{%
+ \pxec@starinvoke\pxec@DeclareExtraCJKFamily}
+\@onlypreamble\pxec@DeclareBasicCJKFamily
+\def\pxec@DeclareExtraCJKFamily#1#2#3#4{%
+ \DeclareKanjiFamily{#1}{#2}{}%
+ \pxec@DeclareBasicCJKShape{#1}{#2}{m}{#3}%
+ \pxec@DeclareBasicCJKShape{#1}{#2}{bx}{#4}}
+
+%% \pxec@DeclareBasicShapeSet[*]{<enc>}{<fam>}{<font-m>}{<font-bx>}
+% (private command used for JSF fonts)
+\@onlypreamble\pxec@DeclareBasicShapeSet
+\def\pxec@DeclareBasicShapeSet{%
+ \pxec@starinvoke\pxec@@DeclareBasicShapeSet}
+\@onlypreamble\pxec@@DeclareBasicShapeSet
+\def\pxec@@DeclareBasicShapeSet#1#2#3#4{%
+ \pxec@DeclareBasicCJKShape{#1}{#2}{m}{#3}%
+ \pxec@DeclareBasicCJKShape{#1}{#2}{bx}{#4}}
+
+%%<+> \pxDeclareBasicCJKFallback{<enc>}{<fam>}{<ser>}
+\def\pxDeclareBasicCJKFallback#1#2#3{%
+ \@for\pxec@x:={it,sl,sc}\do{%
+ \pxDeclareFontShape{#1}{#2}{#3}{\pxec@x}{<->ssub*#2/#3/n}}}
+
+%%<+> \pxDeclareBasicCJKShape[*]{<enc>}{<fam>}{<ser>}{<font>}
+% Declares the font for 'n'-shape. *-form does not set
+% substitution for shapes 'it', 'sl', 'sc'.
+\@onlypreamble\pxDeclareBasicCJKShape
+\def\pxDeclareBasicCJKShape{%
+ \pxec@starinvoke\pxec@DeclareBasicCJKShape}
+\@onlypreamble\pxec@DeclareBasicCJKShape
+\def\pxec@DeclareBasicCJKShape#1#2#3#4{%
+ \edef\pxec@args{{#1}{#2}{#3}{#4}}%
+ \expandafter\pxec@decl@bas@cjkshape@a\pxec@args}
+\@onlypreamble\pxec@decl@bas@cjkshape@a
+\def\pxec@decl@bas@cjkshape@a#1#2#3#4{%
+ \pxDeclareCJKShape{#1}{#2}{#3}{n}{#4}%
+ \ifpxec@star\else \pxDeclareBasicCJKFallback{#1}{#2}{#3}\fi}
+
+%%<+> \pxDeclareCJKShape{<enc>}{<fam>}{<ser>}{<shape>}{<font>}
+% Declares a single font shape. Here <font> is a font spec
+% or a fontsubst form.
+\@onlypreamble\pxDeclareCJKShape
+\def\pxDeclareCJKShape#1#2#3#4#5{%
+ \edef\pxec@args{{#1}{#2}{#3}{#4}{\pxFontSubst{#5}}}%
+ \expandafter\pxec@decl@cjkshape@a\pxec@args}
+\@onlypreamble\pxec@decl@cjkshape@a
+\def\pxec@decl@cjkshape@a#1#2#3#4#5{%
+ \pxDeclareFontShape{#1}{#2}{#3}{#4}{<->#5}}
+
+%%<+> \pxDefineFontSubst{<sym>}{<text>}
+% Defines a 'fontsubst' with name <sym>. After its call,
+% \pxFontSubst{*<sym>} will expand to <text>.
+% N.B. A fontsubst must be fully-expandable.
+%%<+> \pxFontSubst{<spec>}
+% Resolves a 'fontsubst' and expands to the resulted text. That is,
+% - <spec> of form !<text> expands to s*[<value>]<text>, where
+% <value> is the standard scale factor defined in \pxUpScale.
+% - <spec> of fotm *<text> expands to the definition of 'fontsubst'
+% with name <text>.
+% - <spec> of other form is left unchanged.
+\@onlypreamble\pxDefineFontSubst
+\def\pxDefineFontSubst#1{\@namedef{pxec@font*#1}}
+\@onlypreamble\pxFontSubst
+\def\pxFontSubst#1{\pxec@fontsubst@a#1\@nil}
+\@onlypreamble\pxec@fontsubst@a
+\def\pxec@fontsubst@a#1#2\@nil{%
+ \if!#1s*[\pxUpScale]#2%
+ \else\if*#1\@nameuse{pxec@font*#2}\else#1#2\fi\fi}
+% define some fontsubsts
+\pxDefineFontSubst{mc}{ssub*mc/m/n}
+\pxDefineFontSubst{gt}{ssub*gt/m/n}
+
+%%<+> \pxDeclareSimpleShape{<enc>}{<fam>}{<ser>}{<shape>}{<font>}
+% An alias of \pxDeclareCJKShape for compatibility.
+\@onlypreamble\pxDeclareSimpleShape
+\let\pxDeclareSimpleShape\pxDeclareCJKShape
+
+%%<+> \pxDeclareExtraCJKShapeBF{<enc>}{<shape>}
+%% {<mc-m>}{<gt-m>}{<mc-bx>}{<gt-bx>}
+\def\pxDeclareExtraCJKShapeBF#1#2#3#4#5#6{%
+ \pxDeclareCJKShape{#1}{mc}{m}{#2}{#3}%
+ \pxDeclareCJKShape{#1}{gt}{m}{#2}{#4}%
+ \pxDeclareCJKShape{#1}{mc}{bx}{#2}{#5}%
+ \pxDeclareCJKShape{#1}{gt}{bx}{#2}{#6}}
+
+
+%%------------------ passive \DeclareFontShape
+
+%%<+> \pxForceFontDeclaration
+% Takes either of the following values and decides what to do
+% when the font shape is already declared.
+% t : Overwrites declaration.
+% f : Skips declaration.
+% e : Displays an error.
+% It should be t except when other values are needed.
+\let\pxForceFontDeclaration=t
+
+%%<+> \pxDeclareFontShape{<enc>}{<fam>}{<ser>}{<shape>}{<spec>}
+\def\pxDeclareFontShape#1#2#3#4#5{%
+ \expandafter\ifx\csname #1/#2/#3/#4\endcsname\relax
+ \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{}%
+ \else\if e\pxForceFontDeclaration
+ \pxec@error{Font shape #1/#2/#3/#4 already defined}\@ehc
+ \else\if f\pxForceFontDeclaration\else
+ \pxUndeclareFontShape{#1}{#2}{#3}{#4}%
+ \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{}%
+ \fi\fi\fi}
+
+%%<+> \pxUndeclareFontShape{<enc>}{<fam>}{<ser>}{<shape>}
+\def\pxUndeclareFontShape#1#2#3#4{%
+ \expandafter\let\csname #1/#2/#3/#4\endcsname\@undefined
+ \@tfor\pxec@y:=\@vpt\@vipt\@viipt\@viiipt\@ixpt\@xpt
+ \@xipt\@xiipt\@xivpt\@xviipt\@xxpt\@xxvpt\do
+ {\expandafter\let\csname #1/#2/#3/#4/\pxec@y\endcsname\@undefined}}
+
+%%------------------- CJK named encodings
+
+%%<+> \pxDeclareEncodingDispatcher{<enc_name>}{<text>}
+\@onlypreamble\pxDeclareEncodingDispatcher
+\def\pxDeclareEncodingDispatcher#1{%
+ \expandafter\pxec@decl@enc@dispat@a\csname pxec@ED/#1\endcsname}
+\def\pxec@decl@enc@dispat@a#1{\@onlypreamble#1\def#1}
+
+%%<+> \pxDispatchEncodings{<enc_name>,...}
+\@onlypreamble\pxDispatchEncodings
+\def\pxDispatchEncodings#1{%
+ \@for\pxec@x:={#1}\do{%
+ \ifx\pxec@x\@empty\else
+ \expandafter\pxec@dispat@enc@a\csname pxec@ED/\pxec@x\endcsname
+ \expandafter\let\csname pxec@EA/\pxec@x\endcsname=t\relax
+ \fi}}
+\def\pxec@dispat@enc@a#1{#1\let#1\relax}
+
+%%<+> \pxIsEncodingDispatched{<enc_name>}
+\def\pxIsEncodingDispatched#1{%
+ 1\expandafter\ifx\csname pxec@EA/#1\endcsname\relax
+ \expandafter0\else\expandafter1\fi}
+
+%%<+> \pxBothEncodingsFromName\CSyoko\CState{<enc_name>}
+%%<+> \pxEncodingFromName{<enc_name>}
+%%<+> \pxTateEncodingFromName{<enc_name>}
+\def\pxBothEncodingsFromName#1#2#3{%
+ \expandafter\let\expandafter#1\csname pxec@EY/#3\endcsname
+ \expandafter\let\expandafter#2\csname pxec@ET/#3\endcsname}
+\def\pxEncodingFromName#1{\csname pxec@EY/#1\endcsname}
+\def\pxTateEncodingFromName#1{\csname pxec@ET/#1\endcsname}
+
+%%<+> \pxSetEncodingName{<enc_name>}{<h_enc>}{<v_enc>}
+\@onlypreamble\pxSetEncodingName
+\def\pxSetEncodingName#1#2#3{%
+ \@namedef{pxec@EY/#1}{#2}\@namedef{pxec@ET/#1}{#3}}
+
+%%------ font declarations using named encodings
+
+%%<+> \pxec@supdef\SOMECS{<text1>}{<text2>}
+% Define \SOMECS to be <text1> if <text1> is non-empty,
+% otherwise <text2>.
+\def\pxec@supdef#1#2#3{%
+ \def#1{#2}\ifx#1\@empty \def#1{#3}\fi}
+
+%%<+> \pxDeclareCJKEncodingNE[*]{<enc_name>}
+\@onlypreamble\pxDeclareCJKEncodingNE
+\def\pxDeclareCJKEncodingNE{%
+ \pxec@starinvoke\pxec@DeclareCJKEncodingNE}
+\def\pxec@DeclareCJKEncodingNE#1{%
+ \pxBothEncodingsFromName\pxec@y\pxec@t{#1}%
+ \pxec@DeclareCJKEncoding\pxec@y\pxec@t}
+
+%%<+> \pxDeclareExtraCJKFamilyNE[*]
+%% {<enc-name>}{<fam>}{<h-m>}{<h-bx>}{<v-m>}{<v-bx>}
+\@onlypreamble\pxDeclareExtraCJKFamilyNE
+\def\pxDeclareExtraCJKFamilyNE{%
+ \pxec@starinvoke\pxec@DeclareExtraCJKFamilyNE}
+\@onlypreamble\pxec@DeclareBasicCJKFamilyNE
+\def\pxec@DeclareExtraCJKFamilyNE#1#2#3#4#5#6{%
+ \pxBothEncodingsFromName\pxec@y\pxec@t{#1}%
+ \DeclareKanjiFamily{\pxec@y}{#2}{}%
+ \pxec@DeclareBasicCJKShape{\pxec@y}{#2}{m}{#3}%
+ \pxec@DeclareBasicCJKShape{\pxec@y}{#2}{bx}{#4}%
+ \DeclareKanjiFamily{\pxec@t}{#2}{}%
+ \pxec@supdef\pxec@vm{#5}{#3}\pxec@supdef\pxec@vb{#6}{#4}%
+ \pxec@DeclareBasicCJKShape{\pxec@t}{#2}{m}{\pxec@vm}%
+ \pxec@DeclareBasicCJKShape{\pxec@t}{#2}{bx}{\pxec@vb}}
+
+%%<+> \pxDeclareBasicCJKShapeNE[*]
+%% {<enc-name>}{<fam>}{<ser>}{<h-font>}{<v-font>}
+% Declares the font shape for 'n'-shape. *-form does not set
+% substitution for shapes 'it', 'sl', 'sc'.
+\@onlypreamble\pxDeclareBasicCJKShapeNE
+\def\pxDeclareBasicCJKShapeNE{%
+ \pxec@starinvoke\pxec@DeclareBasicCJKShapeNE}
+\@onlypreamble\pxec@DeclareBasicCJKShapeNE
+\def\pxec@DeclareBasicCJKShapeNE#1#2#3#4#5{%
+ \pxBothEncodingsFromName\pxec@y\pxec@t{#1}%
+ \pxec@supdef\pxec@z{#5}{#4}%
+ \pxec@DeclareBasicCJKShape\pxec@y{#2}{#3}{#4}%
+ \pxec@DeclareBasicCJKShape\pxec@t{#2}{#3}{\pxec@z}}
+
+%%<+> \pxDeclareCJKShapeNE
+%% {<enc_name>}{<fam>}{<ser>}{<shape>}{<h_font>}{<v_font>}
+\@onlypreamble\pxDeclareCJKShapeNE
+\def\pxDeclareCJKShapeNE#1#2#3#4#5#6{%
+ \pxBothEncodingsFromName\pxec@y\pxec@t{#1}%
+ \pxec@supdef\pxec@z{#6}{#5}%
+ \pxDeclareCJKShape\pxec@y{#2}{#3}{#4}{#5}%
+ \pxDeclareCJKShape\pxec@t{#2}{#3}{#4}{\pxec@z}}
+
+%%------------------- JSF encodings
+
+%%<+> \pxDeclareJSFEncoding{<h-enc>}{<v-enc>}{<sfid>,...}
+\def\pxDeclareJSFEncoding#1#2#3{%
+ \pxDeclareBasicCJKEncoding*{#1}{#2}%
+ \expandafter\edef\csname pxec@ZL/#1\endcsname{#3}%
+ \expandafter\let\csname pxec@ZL/#2\expandafter\endcsname
+ \csname pxec@ZL/#1\endcsname}
+
+%%<+> \DeclareJSFFamily{<enc>}{<fam>}[<sfid>,...]{<body>}
+%%<+> \AppendToJSFFamily{<enc>}{<fam>}[<sfid>,...]{<body>}
+\def\DeclareJSFFamily{\pxec@starfalse\pxec@DeclareJSFFamily}
+\def\AppendToJSFFamily{\pxec@startrue\pxec@DeclareJSFFamily}
+\def\pxec@DeclareJSFFamily#1#2{%
+ \edef\pxec@djf@enc{#1}\edef\pxec@djf@fam{#2}%
+ \expandafter\let\expandafter\pxec@sfidlst\csname pxec@ZL/#1\endcsname
+ \@ifnextchar[%
+ \pxec@decl@jsf@fam@a{\pxec@decl@jsf@fam@b\relax}}
+\def\pxec@decl@jsf@fam@a[#1]{%
+ \pxec@decl@jsf@fam@b{\edef\pxec@sfidlst{#1}}}
+\def\pxec@decl@jsf@fam@b#1{%
+ \ifx\pxec@sfidlst\relax \pxec@err@ukjsf
+ \else #1\expandafter\pxec@decl@jsf@fam@c \fi}
+\def\pxec@decl@jsf@fam@c{%
+ \afterassignment\pxec@decl@jsf@fam@d\def\pxec@djf@body##1##2}
+\def\pxec@decl@jsf@fam@d{%
+ \ifpxec@star\else
+ \DeclareKanjiFamily{\pxec@djf@enc}{\pxec@djf@fam=Z}{\relax}\fi
+ \edef\pxec@nxt{\noexpand\@for\noexpand\pxec@djf@x:=\pxec@sfidlst}%
+ {\pxec@nxt\do{\pxec@decl@jsf@fam@do}}}
+\def\pxec@decl@jsf@fam@do{%
+ \global\expandafter\let\csname
+ pxec@Z/\pxec@djf@enc/\pxec@djf@fam/\pxec@djf@x\endcsname=t%
+ \edef\pxec@famx{\pxec@djf@fam=Z\pxec@djf@x}%
+ \DeclareKanjiFamily{\pxec@djf@enc}{\pxec@famx}{}%
+ \bxDebug{font family \pxec@famx\space loaded}%
+ \edef\JSFBasicShapeSet{\pxec@djf@starinvoke\pxec@JSFBasicShapeSet}%
+ \edef\JSFFallback{\pxec@djf@invoke\pxec@JSFFallback}%
+ \edef\JSFBasicShape{\pxec@djf@starinvoke\pxec@JSFBasicShape}%
+ \edef\JSFShape{\pxec@djf@starinvoke\pxec@JSFShape}%
+ \pxec@djf@body\pxec@djf@x\pxec@djf@fam}
+\def\pxec@djf@invoke#1{\noexpand#1{\pxec@djf@enc}{\pxec@famx}}
+\def\pxec@djf@starinvoke#1{\noexpand\pxec@starinvoke\pxec@djf@invoke#1}
+
+%%%% commands used inside \DeclareJSFFamily
+
+%%<+> \JSFBasicShapeSet[*]{<font-m-n>}{<font-bx-n>}
+\def\pxec@JSFBasicShapeSet{\pxec@DeclareBasicShapeSet}
+
+%%<+> \JSFFallback{<ser>}
+\def\pxec@JSFFallback{\pxDeclareBasicCJKFallback}
+
+%%<+> \JSFBasicShape[*]{<ser>}{<font-n>}
+\def\pxec@JSFBasicShape{\pxDeclareBasicCJKShape}
+
+%%<+> \JSFShape[*]{<ser>}{<shape>}{<font>}
+\def\pxec@JSFShape{%
+ \ifpxec@star \expandafter\pxDeclareFontShape
+ \else \expandafter\pxDeclareCJKShape \fi}
+
+%%<+> \JSFShapeRaw{<ser>}{<shape>}{<spec>}
+\def\pxec@JSFShapeRaw{\pxDeclareFontShape}
+
+%%------------------ basic encodings
+
+%%%% the standard Japanese encodings
+\ifnativeupTeX
+\def\pxStdYEnc{JY2}\def\pxStdTEnc{JT2}
+\else
+\def\pxStdYEnc{JY1}\def\pxStdTEnc{JT1}
+\fi
+
+%%%% encoding name 'standard' for standard encodings
+\edef\pxec@args{{standard}{\pxStdYEnc}{\pxStdTEnc}}
+\expandafter\pxSetEncodingName\pxec@args
+
+%%%% user interfaces
+
+%%<*> \selectjaencoding{<enc_name>}
+\DeclareRobustCommand*\selectjaencoding[1]{%
+ \edef\pxec@tmpa{\pxEncodingFromName{#1}}%
+ \pxec@selectjaencoding\pxec@tmpa \ignorespaces}
+
+%%<*> \normaljaencoding
+\DeclareRobustCommand*\normaljaencoding{%
+ \pxec@selectjaencoding\kanjiencodingdefault}
+
+%%<*> \standardjaencoding
+\DeclareRobustCommand*\standardjaencoding{%
+ \pxec@selectjaencoding\pxStdYEnc}
+
+%% \pxec@selectjaencoding{<enc>}
+% Adjustment for pxbabel.
+\def\pxec@selectjaencoding#1{%
+ \ifx\pxInNonJaLanguage\@undefined \kanjiencoding{#1}\selectfont\fi
+ \ifx\pxbb@org@encoding\@undefined\else \edef\pxbb@org@encoding{#1}\fi}
+
+%%%% declarations for basic Japanese encodings
+
+\ifnativeupTeX %<upTeX>
+
+%% J20, J30 : 2000jis
+\pxSetEncodingName{2000jis}{J20}{J30}
+\pxDeclareEncodingDispatcher{2000jis}{\pxDeclareCJKEncodingNE{2000jis}}
+
+%% J24, J34 : 2004jis
+\pxSetEncodingName{2004jis}{J24}{J34}
+\pxDeclareEncodingDispatcher{2004jis}{\pxDeclareCJKEncodingNE{2004jis}}
+
+\else %<pTeX>
+
+%% J00, J10 : 78jis
+\pxSetEncodingName{78jis}{J00}{J10}
+\pxDeclareEncodingDispatcher{78jis}{\pxDeclareCJKEncodingNE{78jis}}
+
+% It is assumed that the standard encodings (JY1/JT1) have 83JIS form.
+% Thus the encoding '83jis' will not be used.
+%% J01, J11 : 83jis
+%\pxSetEncodingName{83jis}{J01}{J11}
+%\pxDeclareEncodingDispatcher{83jis}{\pxDeclareCJKEncodingNE{83jis}}
+
+% The name "J02/J12' is intended to mean 90JIS (= 97JIS), but Adobe does
+% not distinguish 90JIS from 83JIS. So I will make no distinction between
+% then either.
+
+% The fonts for standard families (mc & gt) in '2000jis' encoding are not
+% provided together with PXfontspec bundle, so this encoding is not ready
+% for use unless the appropriate fonts (jfms) are prepared.
+%% J03, J13 : 2000jis
+\pxSetEncodingName{2000jis}{J03}{J13}
+\pxDeclareEncodingDispatcher{2000jis}{\pxDeclareCJKEncodingNE{2000jis}}
+
+%% J04, J14 : 2004jis
+\pxSetEncodingName{2004jis}{J04}{J14}
+\pxDeclareEncodingDispatcher{2004jis}{\pxDeclareCJKEncodingNE{2004jis}}
+
+%% J08, J18 : winj (CP932)
+\pxSetEncodingName{winj}{J08}{J18}
+\pxDeclareEncodingDispatcher{winj}{\pxDeclareCJKEncodingNE{winj}}
+
+\fi %</upTeX>
+
+%%------------------ patches to OTF/UTF packages
+
+%%%% make \CID work in nonstandard CJK encodings
+% \UTF & \CID require the current encoding to be the standard one, thus
+% they won't work well along with packages that change Japanese encoding
+% (pxfontenc, pxbabel, etc.). This patch resolves this problem.
+\providecommand*\pxBDHookEncSwitchOTF{\pxec@bdhook@encswotf@do}
+\@onlypreamble\pxec@bdhook@encswotf@do
+\def\pxec@bdhook@encswotf@do{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{otf}{\let\pxec@JYn\otf@JYn}{}%
+ \@ifpackageloaded{utf}{\let\pxec@JYn\utf@JYn}{}%
+ \ifx\pxec@JYn\@undefined\else
+ % hook at the \set@character invocation, so that encoding will
+ % be forced to be the standard one
+ \long\def\set@character{% \long, as the original is
+ \afterassignment\pxec@put@character\@tempcnta}%
+ \def\pxec@put@character{\kanjiencoding{\pxec@JYn}\put@character}%
+ \fi}%
+ \let\pxBDHookEncSwitchOTF\@empty}% nullify
+
+%%------------------ all done
+\pxec@resetcatcode
+\endinput
+%% EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxbsjc.def b/Master/texmf-dist/tex/platex/pxbase/pxbsjc.def
new file mode 100644
index 00000000000..26852f21cca
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/pxbsjc.def
@@ -0,0 +1,6 @@
+%
+% pxbsjc.def
+% Warning: Do not change encoding of this file!
+\def\px@tmpa{齷齷}% E9 BD B7 E9 BD B7
+\endinput
+% EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxcjkcat.sty b/Master/texmf-dist/tex/platex/pxbase/pxcjkcat.sty
new file mode 100644
index 00000000000..45b1db0d212
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/pxcjkcat.sty
@@ -0,0 +1,482 @@
+%
+% pxcjkcat.sty
+%
+%%%% package declaration
+\NeedsTeXFormat{pLaTeX2e}
+\ProvidesPackage{pxcjkcat}[2010/02/07 v0.4a PX cjk-category mode]
+\RequirePackage{ifuptex}[2008/03/14]\RequirenativeupTeX
+
+%%%% error messages
+\def\pxkc@pkgname{pxcjkcat}
+\def\pxkc@error{\PackageError\pxkc@pkgname}
+\def\pxkc@err@ivcsy#1{\pxkc@error
+ {Invalid name (#1) for cjk-category}%
+ {It was replaced by 18(cjk).}}
+\def\pxkc@err@ivbsy#1{\pxkc@error
+ {Invalid name (#1) for Unicode block}\@eha}
+\def\pxkc@err@ivmsy#1{\pxkc@error
+ {Invalid name (#1) for cjk-category mode}\@eha}
+\ifx\bxUseDebug\@undefined
+\let\pxkc@debug\@gobble
+\else
+\def\pxkc@debug#1{\typeout{**[\pxkc@pkgname] #1}}
+\fi
+
+%%%% prepraration
+\newif\ifpxkc@ok
+
+%%%% option handler
+\chardef\pxkc@mccv=1
+\DeclareOption{ccv1}{\chardef\pxkc@mccv=1 }
+\DeclareOption{ccv2}{\chardef\pxkc@mccv=2 }
+\chardef\pxkc@rccv=0
+%% ** These options are for debugging!
+\DeclareOption{@ccv1}{\chardef\pxkc@rccv=1 }
+\DeclareOption{@ccv2}{\chardef\pxkc@rccv=2 }
+\let\pxkc@ccmode\relax
+\DeclareOption*{\edef\pxkc@ccmode{\CurrentOption}}
+\ProcessOptions\relax
+
+%%-------- classification version check
+
+%% \pxkc@issameblock
+\def\pxkc@issameblock#1#2{%
+ \pxkc@okfalse{\kcatcode#1=16\kcatcode#2=17\relax
+ \ifnum\kcatcode#1=17 \aftergroup\pxkc@oktrue\fi}}
+\pxkc@issameblock{"FF01}{"FF11}
+\ifpxkc@ok
+\chardef\pxkc@ccv=1 % v0.11+
+\else
+\chardef\pxkc@ccv=2 % v0.29+
+\fi
+\ifnum\pxkc@rccv>\z@ \let\pxkc@ccv\pxkc@rccv \fi
+\pxkc@debug{CJK category version \number\pxkc@ccv}
+%
+\ifnum\pxkc@mccv>\pxkc@ccv
+ \pxkc@error{Invalid mode-CCV option (ccv\number\pxkc@mccv)}%
+ {The mode-CCV value given (\number\pxkc@mccv) is
+ larger than the real CCV (\number\pxkc@ccv).\MessageBreak
+ I assume the mode-CCV equals the real CCV.}
+ \let\pxkc@mccv\pxkc@ccv
+\fi
+
+%%------ \setcjkcategory, etc.
+
+%% \pxkc@kcatcode
+\ifx\bxUseDebug\@undefined
+\def\pxkc@kcatcode#1#2{\kcatcode#1=#2\relax}
+\else
+\def\pxkc@kcatcode#1#2{\kcatcode#1=#2\relax
+ \chardef\pxkc@xa=#1\chardef\pxkc@xb=#2\relax
+ \expandafter\pxkc@kcatcode@a\meaning\pxkc@xa\@nil}
+\def\pxkc@kcatcode@a#1"#2\@nil{%
+ \pxkc@debug{\string\kcatcode"#2 set to \number\pxkc@xb}}
+\fi
+
+
+%%%% table
+\def\pxkc@bval#1#2{%
+ \edef\pxkc@bslst{\pxkc@bslst\pxkc@sep#1}%
+ \@namedef{pxkc@B@@#1}{#2}\def\pxkc@sep{,}}
+\def\pxkc@bslst{}\def\pxkc@sep{}
+\def\pxkc@cval#1#2{\@namedef{pxkc@C@@#1}{#2}}
+\def\pxkc@gval#1#2{\@namedef{pxkc@G@@#1}{#2}}
+ %
+\pxkc@bval{latn}{"0} % Basic Latin
+\pxkc@bval{latn1}{"80} % Latin-1 Supplement
+\pxkc@bval{latnA}{"100} % Latin Extended-A
+\pxkc@bval{latnB}{"180} % Latin Extended-B
+\pxkc@bval{latn2}{"250} % IPA Extensions
+\pxkc@bval{sym01}{"2B0} % Spacing Modifier Letters
+\pxkc@bval{sym02}{"300} % Combining Diacritical Marks
+\pxkc@bval{grek}{"370} % Greek and Coptic
+\pxkc@bval{cyrl}{"400} % Cyrillic
+\pxkc@bval{cyrl1}{"500} % Cyrillic Supplement
+\pxkc@bval{armn}{"530} % Armenian
+\pxkc@bval{hebr}{"590} % Hebrew
+\pxkc@bval{arab}{"600} % Arabic
+\pxkc@bval{syrc}{"700} % Syriac
+\pxkc@bval{arab1}{"750} % Arabic Supplement
+\pxkc@bval{thaa}{"780} % Thaana
+\pxkc@bval{nkoo}{"7C0} % NKo
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{samr}{"800} % Samaritan
+\fi
+\pxkc@bval{deva}{"900} % Devanagari
+\pxkc@bval{beng}{"980} % Bengali
+\pxkc@bval{guru}{"A00} % Gurmukhi
+\pxkc@bval{gujr}{"A80} % Gujarati
+\pxkc@bval{orya}{"B00} % Oriya
+\pxkc@bval{taml}{"B80} % Tamil
+\pxkc@bval{telu}{"C00} % Telugu
+\pxkc@bval{knda}{"C80} % Kannada
+\pxkc@bval{mlym}{"D00} % Malayalam
+\pxkc@bval{sinh}{"D80} % Sinhala
+\pxkc@bval{thai}{"E00} % Thai
+\pxkc@bval{laoo}{"E80} % Lao
+\pxkc@bval{tibt}{"F00} % Tibetan
+\pxkc@bval{mymr}{"1000} % Myanmar
+\pxkc@bval{geor}{"10A0} % Georgian
+\pxkc@bval{hang1}{"1100} % Hangul Jamo
+\pxkc@bval{ethi}{"1200} % Ethiopic
+\pxkc@bval{ethi1}{"1380} % Ethiopic Supplement
+\pxkc@bval{cher}{"13A0} % Cherokee
+\pxkc@bval{cans}{"1400} % Unified Canadian Aboriginal Syllabics
+\pxkc@bval{ogam}{"1680} % Ogham
+\pxkc@bval{runr}{"16A0} % Runic
+\pxkc@bval{tglg}{"1700} % Tagalog
+\pxkc@bval{hano}{"1720} % Hanunoo
+\pxkc@bval{buhd}{"1740} % Buhid
+\pxkc@bval{tagb}{"1760} % Tagbanwa
+\pxkc@bval{khmr}{"1780} % Khmer
+\pxkc@bval{mong}{"1800} % Mongolian
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{cans1}{"1880} % Unified Canadian Aboriginal Syll. Ext.
+\fi
+\pxkc@bval{limb}{"1900} % Limbu
+\pxkc@bval{tale}{"1950} % Tai Le
+\pxkc@bval{talu}{"1980} % New Tai Lue
+\pxkc@bval{khmr1}{"19E0} % Khmer Symbols
+\pxkc@bval{bugi}{"1A00} % Buginese
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{lana}{"1A20} % Tai Tham
+\fi
+\pxkc@bval{bali}{"1B00} % Balinese
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{sund}{"1B80} % Sundanese
+\pxkc@bval{lepc}{"1C00} % Lepcha
+\pxkc@bval{olck}{"1C50} % Ol Chiki
+\pxkc@bval{sym38}{"1CD0} % Vedic Extensions
+\fi
+\pxkc@bval{latn4}{"1D00} % Phonetic Extensions
+\pxkc@bval{latn5}{"1D80} % Phonetic Extensions Supplement
+\pxkc@bval{sym03}{"1DC0} % Combining Diacritical Marks Supplement
+\pxkc@bval{latn3}{"1E00} % Latin Extended Additional
+\pxkc@bval{grek1}{"1F00} % Greek Extended
+\pxkc@bval{sym04}{"2000} % General Punctuation
+\pxkc@bval{sym05}{"2070} % Superscripts and Subscripts
+\pxkc@bval{sym06}{"20A0} % Currency Symbols
+\pxkc@bval{sym07}{"20D0} % Combining Diacritical Marks for Symbols
+\pxkc@bval{sym08}{"2100} % Letterlike Symbols
+\pxkc@bval{sym09}{"2150} % Number Forms
+\pxkc@bval{sym10}{"2190} % Arrows
+\pxkc@bval{sym11}{"2200} % Mathematical Operators
+\pxkc@bval{sym12}{"2300} % Miscellaneous Technical
+\pxkc@bval{sym13}{"2400} % Control Pictures
+\pxkc@bval{sym14}{"2440} % Optical Character Recognition
+\pxkc@bval{sym15}{"2460} % Enclosed Alphanumerics
+\pxkc@bval{sym16}{"2500} % Box Drawing
+\pxkc@bval{sym17}{"2580} % Block Elements
+\pxkc@bval{sym18}{"25A0} % Geometric Shapes
+\pxkc@bval{sym19}{"2600} % Miscellaneous Symbols
+\pxkc@bval{sym20}{"2700} % Dingbats
+\pxkc@bval{sym21}{"27C0} % Miscellaneous Mathematical Symbols-A
+\pxkc@bval{sym22}{"27F0} % Supplemental Arrows-A
+\pxkc@bval{brai}{"2800} % Braille Patterns
+\pxkc@bval{sym23}{"2900} % Supplemental Arrows-B
+\pxkc@bval{sym24}{"2980} % Miscellaneous Mathematical Symbols-B
+\pxkc@bval{sym25}{"2A00} % Supplemental Mathematical Operators
+\pxkc@bval{sym26}{"2B00} % Miscellaneous Symbols and Arrows
+\pxkc@bval{glag}{"2C00} % Glagolitic
+\pxkc@bval{latnC}{"2C60} % Latin Extended-C
+\pxkc@bval{copt}{"2C80} % Coptic
+\pxkc@bval{geor1}{"2D00} % Georgian Supplement
+\pxkc@bval{tfng}{"2D30} % Tifinagh
+\pxkc@bval{ethi2}{"2D80} % Ethiopic Extended
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{cyrlA}{"2DE0} % Cyrillic Extended-A
+\fi
+\pxkc@bval{sym27}{"2E00} % Supplemental Punctuation
+\pxkc@bval{cjk01}{"2E80} % CJK Radicals Supplement
+\pxkc@bval{cjk02}{"2F00} % Kangxi Radicals
+\pxkc@bval{cjk03}{"2FF0} % Ideographic Description Characters
+\pxkc@bval{cjk04}{"3000} % CJK Symbols and Punctuation
+\pxkc@bval{hira}{"3040} % Hiragana
+\pxkc@bval{kana}{"30A0} % Katakana
+\pxkc@bval{bopo}{"3100} % Bopomofo
+\pxkc@bval{hang2}{"3130} % Hangul Compatibility Jamo
+\pxkc@bval{cjk05}{"3190} % Kanbun
+\pxkc@bval{bopo1}{"31A0} % Bopomofo Extended
+\pxkc@bval{cjk06}{"31C0} % CJK Strokes
+\pxkc@bval{kana1}{"31F0} % Katakana Phonetic Extensions
+\pxkc@bval{cjk07}{"3200} % Enclosed CJK Letters and Months
+\pxkc@bval{cjk08}{"3300} % CJK Compatibility
+\pxkc@bval{haniA}{"3400} % CJK Unified Ideographs Extension A
+\pxkc@bval{sym28}{"4DC0} % Yijing Hexagram Symbols
+\pxkc@bval{hani}{"4E00} % CJK Unified Ideographs
+\pxkc@bval{yiii}{"A000} % Yi Syllables
+\pxkc@bval{yiii1}{"A490} % Yi Radicals
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{lisu}{"A4D0} % Lisu
+\pxkc@bval{vaii}{"A500} % Vai
+\pxkc@bval{cyrlB}{"A640} % Cyrillic Extended-B
+\pxkc@bval{bamu}{"A6A0} % Bamum
+\fi
+\pxkc@bval{sym29}{"A700} % Modifier Tone Letters
+\pxkc@bval{latnD}{"A720} % Latin Extended-D
+\pxkc@bval{sylo}{"A800} % Syloti Nagri
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{sym39}{"A830} % Common Indic Number Forms
+\fi
+\pxkc@bval{phag}{"A840} % Phags-pa
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{saur}{"A830} % Saurashtra
+\pxkc@bval{deva1}{"A8E0} % Devanagari Extended
+\pxkc@bval{kali}{"A900} % Kayah Li
+\pxkc@bval{rjng}{"A930} % Rejang
+\pxkc@bval{hangA}{"A960} % Hangul Jamo Extended-A
+\pxkc@bval{java}{"A980} % Javanese
+\pxkc@bval{cham}{"AA00} % Cham
+\pxkc@bval{mymrA}{"AA60} % Myanmar Extended-A
+\pxkc@bval{tavt}{"AA80} % Tai Viet
+\pxkc@bval{mtei}{"ABC0} % Meetei Mayek
+\fi
+\pxkc@bval{hang}{"AC00} % Hangul Syllables
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{hangB}{"D7B0} % Hangul Jamo Extended-B
+\fi
+\pxkc@bval{spc01}{"D800} % High Surrogates
+\pxkc@bval{spc02}{"DB80} % High Private Use Surrogates
+\pxkc@bval{spc03}{"DC00} % Low Surrogates
+\pxkc@bval{spc04}{"E000} % Private Use Area
+\pxkc@bval{hani1}{"F900} % CJK Compatibility Ideographs
+\pxkc@bval{latn6}{"FB00} % Alphabetic Presentation Forms
+\pxkc@bval{arab2}{"FB50} % Arabic Presentation Forms-A
+\pxkc@bval{spc05}{"FE00} % Variation Selectors
+\pxkc@bval{cjk09}{"FE10} % Vertical Forms
+\pxkc@bval{sym30}{"FE20} % Combining Half Marks
+\pxkc@bval{cjk10}{"FE30} % CJK Compatibility Forms
+\pxkc@bval{cjk11}{"FE50} % Small Form Variants
+\pxkc@bval{arab3}{"FE70} % Arabic Presentation Forms-B
+\ifnum\pxkc@ccv<2
+\pxkc@bval{cjk12}{"FF00} % Halfwidth and Fullwidth Forms
+\else
+\pxkc@gval{cjk12}{cjk1a,cjk1b,cjk1c} % Halfwidth and Fullwidth Forms
+\pxkc@bval{cjk1a}{"FF01} % cjk12 subblock A
+\pxkc@bval{cjk1b}{"FF10} % cjk12 subblock B
+\pxkc@bval{cjk1c}{"FF66} % cjk12 subblock C
+\fi
+\pxkc@bval{spc06}{"FFF0} % Specials
+\pxkc@bval{linb}{"10000} % Linear B Syllabary
+\pxkc@bval{linb1}{"10080} % Linear B Ideograms
+\pxkc@bval{sym31}{"10100} % Aegean Numbers
+\pxkc@bval{grek2}{"10140} % Ancient Greek Numbers
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{sym40}{"10190} % Ancient Greek Numbers
+\pxkc@bval{sym41}{"101D0} % Ancient Greek Numbers
+\pxkc@bval{lyci}{"10280} % Ancient Greek Numbers
+\pxkc@bval{cari}{"102A0} % Ancient Greek Numbers
+\fi
+\pxkc@bval{ital}{"10300} % Old Italic
+\pxkc@bval{goth}{"10330} % Gothic
+\pxkc@bval{ugar}{"10380} % Ugaritic
+\pxkc@bval{xpeo}{"103A0} % Old Persian
+\pxkc@bval{dsrt}{"10400} % Deseret
+\pxkc@bval{shaw}{"10450} % Shavian
+\pxkc@bval{osma}{"10480} % Osmanya
+\pxkc@bval{cprt}{"10800} % Cypriot Syllabary
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{armi}{"10840} % Imperial Aramaic
+\fi
+\pxkc@bval{phnx}{"10900} % Phoenician
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{lydi}{"10920} % Lydian
+\fi
+\pxkc@bval{khar}{"10A00} % Kharoshthi
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{sarb}{"10A60} % Old South Arabian
+\pxkc@bval{avst}{"10B00} % Avestan
+\pxkc@bval{prti}{"10B40} % Inscriptional Parthian
+\pxkc@bval{phli}{"10B60} % Inscriptional Pahlavi
+\pxkc@bval{orkh}{"10C00} % Old Turkic
+\pxkc@bval{sym42}{"10E60} % Rumi Numeral Symbols
+\pxkc@bval{kthi}{"11080} % Kaithi
+\fi
+\pxkc@bval{xsux}{"12000} % Cuneiform
+\pxkc@bval{xsux1}{"12400} % Cuneiform Numbers and Punctuation
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{egyp}{"13000} % Egyptian Hieroglyphs
+\fi
+\pxkc@bval{sym32}{"1D000} % Byzantine Musical Symbols
+\pxkc@bval{sym33}{"1D100} % Musical Symbols
+\pxkc@bval{sym34}{"1D200} % Ancient Greek Musical Notation
+\pxkc@bval{sym35}{"1D300} % Tai Xuan Jing Symbols
+\pxkc@bval{sym36}{"1D360} % Counting Rod Numerals
+\pxkc@bval{sym37}{"1D400} % Mathematical Alphanumeric Symbols
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{sym43}{"1F000} % Mahjong Tiles
+\pxkc@bval{sym44}{"1F030} % Domino Tiles
+\pxkc@bval{sym45}{"1F100} % Enclosed Alphanumeric Supplement
+\pxkc@bval{cjk13}{"1F200} % Enclosed Ideographic Supplement
+\fi
+\pxkc@bval{haniB}{"20000} % CJK Unified Ideographs Extension B
+\ifnum\pxkc@ccv<2\else
+\pxkc@bval{haniC}{"2A700} % CJK Unified Ideographs Extension C
+\fi
+\pxkc@bval{hani2}{"2F800} % CJK Compatibility Ideographs Supplement
+\pxkc@bval{spc07}{"E0000} % Tags
+\pxkc@bval{spc08}{"E0100} % Variation Selectors Supplement
+\pxkc@bval{spc09}{"F0000} % Supplementary Private Use Area-A
+\pxkc@bval{spc10}{"100000} % Supplementary Private Use Area-B
+\pxkc@bval{spc11}{"200000} % illegal
+ %
+\pxkc@cval{noncjk}{15}
+\pxkc@cval{kanji}{16}
+\pxkc@cval{han}{16}
+\pxkc@cval{kana}{17}
+\pxkc@cval{cjk}{18}
+\pxkc@cval{hangul}{19}
+ %
+\edef\pxkc@foreachblk{\noexpand\@for\noexpand\x:={\pxkc@bslst}}
+\let\pxkc@bval\relax\let\pxkc@cval\relax\let\pxkc@bslst\relax
+
+%%<*> \cjkcategory{<block>}{<category>}
+% Sets the kcatcode of block <block> to <category>.
+% Here <block> is given as a block name or a single character in the
+% block to be specified; <category> is given as a category name or
+% a number ranged in 15--19.
+\def\cjkcategory{%
+ \bgroup\forcecjktoken\pxkc@cjkcategory@oa}
+\def\pxkc@cjkcategory@oa#1{%
+ \gdef\pxkc@nxt{\pxkc@cjkcategory@ob{#1}}%
+ \egroup\pxkc@nxt}
+\def\pxkc@cjkcategory@ob#1#2{%
+ \ifnum2<1#2 \edef\pxkc@arg{#2}%
+ \else\@ifundefined{pxkc@C@@#2}%
+ {\pxkc@err@ivcsy{#2}\def\pxkc@arg{18}}%
+ {\edef\pxkc@arg{\@nameuse{pxkc@C@@#2}}}\fi
+ \pxkc@cjkcategory@a{#1}}
+\chardef\pxkc@la="7F
+\def\pxkc@cjkcategory@a#1{%
+ \@for\pxkc@x:={#1}\do{%
+ \expandafter\pxkc@cjkcategory@b\expandafter{\pxkc@x}}}
+\def\pxkc@cjkcategory@b#1{%
+ \pxkc@chkchr{#1}\ifnum\pxkc@cc>\pxkc@la
+ \pxkc@kcatcode{\pxkc@cc}{\pxkc@arg}%
+ \else\expandafter\ifx\csname pxkc@G@@#1\endcsname\relax
+ \expandafter\ifx\csname pxkc@B@@#1\endcsname\relax
+ \pxkc@err@ivbsy{#1}%
+ \else \pxkc@kcatcode{\@nameuse{pxkc@B@@#1}}{\pxkc@arg}\fi
+ \else \edef\pxkc@nxt{\noexpand\pxkc@cjkcategory@a
+ {\@nameuse{pxkc@G@@#1}}}\pxkc@nxt
+ \fi\fi}
+\def\pxkc@chkchr#1{%
+ \afterassignment\pxkc@chkchr@a\chardef\pxkc@cc=`#1?\relax}
+\def\pxkc@chkchr@a#1\relax{}
+
+%%<*> \cjkcategorymode{<mode>}
+% Invokes the cjk-category mode <mode>.
+\def\cjkcategorymode#1{%
+ \@ifundefined{pxkc@M@@#1}{\pxkc@err@ivmsy}
+ {\@nameuse{pxkc@M@@#1}}}
+
+%%%% cjkcategory modes
+\def\pxkc@resetcjkcat{%
+ \pxkc@foreachblk\do{\pxkc@kcatcode{\@nameuse{pxkc@B@@\x}}{18}}}
+\def\pxkc@M@@forcecjk{\pxkc@resetcjkcat
+ \cjkcategory{latn}{noncjk}%
+ \cjkcategory{bopo,bopo1,cjk01,cjk02,cjk03,cjk05,cjk06,hani,hani1}{kanji}%
+ \cjkcategory{hani2,haniA,haniB}{kanji}%
+ \cjkcategory{hira,kana,kana1}{kana}%
+ \cjkcategory{hang,hang1,hang2}{hangul}%
+ \ifnum\pxkc@mccv<2\else
+ \cjkcategory{cjk1b,cjk1c}{kana}%
+ \fi
+ \ifnum\pxkc@ccv<2\else
+ \cjkcategory{haniC}{kanji}%
+ \cjkcategory{hangA,hangB}{hangul}%
+ \fi
+}
+\def\pxkc@M@@prefercjk{\pxkc@M@@forcecjk
+ \@for\x:={%
+ cyrl1,armn,hebr,arab,syrc,arab1,thaa,nkoo,deva,beng,%
+ guru,gujr,orya,taml,telu,knda,mlym,sinh,thai,laoo,%
+ tibt,mymr,geor,ethi,ethi1,cher,cans,ogam,runr,tglg,%
+ hano,buhd,tagb,khmr,mong,limb,tale,talu,khmr1,bugi,%
+ bali,latn4,latn5,sym03,sym14,sym21,sym22,brai,sym25,glag,%
+ latnC,copt,geor1,tfng,ethi2,sym27,sym28,sym29,latnD,sylo,%
+ phag,spc01,spc02,spc03,arab2,spc05,sym30,arab3,spc06,linb,%
+ linb1,sym31,grek2,ital,goth,ugar,xpeo,dsrt,shaw,osma,%
+ cprt,phnx,khar,xsux,xsux1,sym32,sym33,sym34,sym35,sym36,%
+ sym37,spc07,spc08,spc09,spc10%
+ }\do{\pxkc@kcatcode{\@nameuse{pxkc@B@@\x}}{15}}%
+ \ifnum\pxkc@ccv<2\else
+ \cjkcategory{samr,cans1,lana,sund,lepc,olck,sym38,cyrlA}{noncjk}%
+ \cjkcategory{lisu,vaii,cyrlB,bamu,sym39,saur,deva1,kali}{noncjk}%
+ \cjkcategory{rjng,java,cham,mymrA,tavt,mtei,sym40,sym41}{noncjk}%
+ \cjkcategory{lyci,cari,armi,lydi,sarb,avst,prti,phli}{noncjk}%
+ \cjkcategory{orkh,sym42,kthi,egyp,sym43,sym44,sym45}{noncjk}%
+ \fi
+}
+\@namedef{pxkc@M@@prefercjkvar}{\pxkc@M@@prefercjk
+ \cjkcategory{cyrl,grek,grek1}{noncjk}%
+}
+\def\pxkc@M@@prefernoncjk{\pxkc@M@@prefercjkvar
+ \cjkcategory{latn1,latn2,latn3,latn6,latnA,latnB,spc04,sym01}{noncjk}%
+ \cjkcategory{sym02,sym04,sym05,sym06,sym07,sym08,sym09,sym10}{noncjk}%
+ \cjkcategory{sym11,sym12,sym13,sym16,sym17,sym18,sym19,sym20}{noncjk}%
+ \cjkcategory{sym23,sym24,sym26}{noncjk}%
+}
+\def\pxkc@M@@prefernoncjkvar{\pxkc@M@@prefernoncjk
+ \cjkcategory{sym04,sym10,sym18}{other}%
+}
+
+%%%% \showcjkcategory
+\def\showcjkcategory{%
+ \pxkc@foreachblk\do{%
+ \typeout{\x\space= \the\kcatcode\@nameuse{pxkc@B@@\x}}}}
+
+%%-------- \withcjktokendisabled, etc.
+
+%% \pxkc@genprobe
+\def\pxkc@genprobe{%
+ \edef\pxkc@tmpa{\expandafter\string\csname
+ pxkc@@\string ^^e3\string ^^81\string ^^82%
+ \string ^^e3\string ^^82\string ^^a2\endcsname}}
+\bgroup \kcatcode"3040=15\kcatcode"30A0=18
+ \disablecjktoken\pxkc@genprobe \global\let\pxkc@prb@d\pxkc@tmpa
+ \enablecjktoken\pxkc@genprobe \global\let\pxkc@prb@e\pxkc@tmpa
+ \forcecjktoken\pxkc@genprobe \global\let\pxkc@prb@f\pxkc@tmpa
+\egroup
+
+%% \pxkc@getcjktokmod\CS
+\def\pxkc@getcjktokmod#1{%
+ \bgroup \kcatcode"3040=15\kcatcode"30A0=18\pxkc@genprobe
+ \ifx\pxkc@tmpa\pxkc@prb@d \global\chardef\pxkc@gtmpa\z@
+ \else\ifx\pxkc@tmpa\pxkc@prb@e \global\chardef\pxkc@gtmpa\@ne
+ \else\ifx\pxkc@tmpa\pxkc@prb@f \global\chardef\pxkc@gtmpa\tw@
+ \else \global\let\pxkc@gtmpa\m@ne \fi\fi\fi
+ \egroup \let#1\pxkc@gtmpa}
+
+%%<+> \getcjktokenmode
+% Returns the value showing current mode to \thecjktokenmode
+% 0: \disablecjktoken
+% 1: \enablecjktoken
+% 2: \forcecjktoken
+\def\getcjktokenmode{\pxkc@getcjktokmod\thecjktokenmode}
+
+%%<*> \setcjktokenmode{<val>}
+\def\pxkc@setcjktokmod#1{%
+ \ifcase#1\disablecjktoken\or\enablecjktoken\or\forcecjktoken\fi}
+
+%%<*> \withcjktokendisabled, etc.
+\def\withcjktokendisabled{\pxkc@withcjktokmod\disablecjktoken\@iden}
+\def\withcjktokenenabled{\pxkc@withcjktokmod\enablecjktoken\@iden}
+\def\withcjktokenforced{\pxkc@withcjktokmod\forcecjktoken\@iden}
+\def\withcjktokendisabledex{\pxkc@withcjktokmod\disablecjktoken}
+\def\withcjktokenenabledex{\pxkc@withcjktokmod\enablecjktoken}
+\def\withcjktokenforcedex{\pxkc@withcjktokmod\forcecjktoken}
+\def\pxkc@withcjktokmod#1{%
+ \pxkc@getcjktokmod\pxkc@tokmod #1\pxkc@withcjktokmod@a}
+\def\pxkc@withcjktokmod@a#1#2{%
+ #1{#2}\pxkc@setcjktokmod\pxkc@tokmod}
+
+%%------ initial setup
+
+\ifx\pxkc@ccmode\relax\else
+\cjkcategorymode{\pxkc@ccmode}
+\fi
+
+%%------ all done
+\endinput
+%% EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/pxjsfenc.def b/Master/texmf-dist/tex/platex/pxbase/pxjsfenc.def
new file mode 100644
index 00000000000..0a61158d4d7
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/pxjsfenc.def
@@ -0,0 +1,195 @@
+%
+% pxjsfenc.def
+%
+%%%% file declaration
+\NeedsTeXFormat{pLaTeX2e}
+\ProvidesFile{pxjsfenc.def}[2010/05/05 v0.5 PX JSF encoding]
+
+%%%% preparation
+\RequirePackage{pxbase}
+\bxInputDefFile{pxbasenc}
+% common with pxbasenc
+%\def\pxec@b@pkgname{PXbase}
+%\def\pxec@error{\PackageError\px@b@pkgname}
+%
+\edef\pxec@jsf@resetcatcode{\catcode34=\the\catcode34\relax}
+\catcode34=12 %<">
+\newif\ifpxec@hyperref % true if hyperref patch is invoked
+
+%%------ main module
+
+%% \pxec@declare@jsf@gen{<name>}{<enc>}{<ext>}
+\def\pxec@declare@jsf@ucs{\pxec@swtrue\pxec@declare@jsf@a}
+\def\pxec@declare@jsf@cid{\pxec@swfalse\pxec@declare@jsf@a}
+\def\pxec@declare@jsf@a#1{% {<name>} | {<enc>}{<ext>}
+ \expandafter\pxec@declare@jsf@b\csname#1\expandafter\endcsname
+ \csname pxUcv#1\expandafter\endcsname
+ \csname pxec@E@#1\expandafter\endcsname
+ \csname pxec@ext@#1\endcsname{#1}}
+\def\pxec@declare@jsf@b#1#2#3#4#5#6#7{%
+ % \[<name>]\[pxUcv<name>]\[pxec@E@<name>]\[pxec@ext@<name>]
+ % {<name>}{<enc>}{<ext>}
+ \ifpxec@sw \DeclareRobustCommand{#1}[1]{%
+ \uppercase{\bxUcv="##1}\pxec@out@jsf#3#4}%
+ \else \DeclareRobustCommand{#1}[1]{%
+ \uppercase{\bxUcv=##1}\pxec@out@jsf#3#4}%
+ \fi
+ \def#2{\pxec@out@jsf#3#4}\def#3{#6}%
+ \ifpxec@sw \pxec@addto@hyref@patch{#5}\fi
+ \ifx @#7@\else\bxUseShadowMap#4{#7}\fi}
+%% hyperref patch
+\def\pxec@hyref@patch{\pxec@hyperreftrue}
+\AtBeginDocument{\@ifpackageloaded{hyperref}{\pxec@hyref@patch}{}}
+\def\pxec@addto@hyref@patch#1{% {<name>}
+ \expandafter\pxec@addto@hyref@patch@a\csname#1\expandafter\endcsname
+ \csname pxec@hy@#1\expandafter\endcsname\csname#1 \endcsname}
+\def\pxec@addto@hyref@patch@a#1#2#3{%
+ % \[<name>]\[pxec@hy@<name>]\[<name> ]
+ \g@addto@macro\pxec@hyref@patch{\def#1{\protect#2}%
+ \def#2##1{\ifHy@pdfstring\0x##1\else#3{##1}\fi}}}
+
+%% define \UTF command
+% \pxec@E@UTF (second argument) will be \let'd to be either
+% \pxec@E@UTF@a or \pxec@E@UTF@b.
+% Note that pxbabel package \let's \UTF be \UTFK, etc. when
+% a CJK language is in effect.
+\pxec@declare@jsf@ucs{UTF}{J20}{sm-pxot-ja}
+
+%% \pxSwitchUTFCommand
+\def\pxSwitchUTFCommand#1{\csname pxec@SWU/#1\endcsname}
+\@namedef{pxec@SWU/2000jis}{\let\pxec@E@UTF\pxec@E@UTF@a}
+\@namedef{pxec@SWU/2004jis}{\let\pxec@E@UTF\pxec@E@UTF@b}
+
+%% define standard sets
+\pxec@declare@jsf@ucs{UTF@a}{J20}{sm-pxot-ja}
+\pxec@declare@jsf@ucs{UTFK}{J21}{sm-pxot-ko}
+\pxec@declare@jsf@ucs{UTFC}{J22}{sm-pxot-sc}
+\pxec@declare@jsf@ucs{UTFT}{J23}{sm-pxot-tc}
+\pxec@declare@jsf@ucs{UTF@b}{J24}{sm-pxot-ja}
+\pxec@declare@jsf@ucs{UTFM}{J25}{}
+\pxec@declare@jsf@cid{CID}{J40}{}
+\pxec@declare@jsf@cid{CIDK}{J41}{}
+\pxec@declare@jsf@cid{CIDC}{J42}{}
+\pxec@declare@jsf@cid{CIDT}{J43}{}
+
+%%------------------ processing in upTeX
+\ifnativeupTeX
+
+\pxDeclareCJKEncoding*{J20}{J30}
+\pxDeclareCJKEncoding*{J21}{J31}
+\pxDeclareCJKEncoding*{J22}{J32}
+\pxDeclareCJKEncoding*{J23}{J33}
+\pxDeclareCJKEncoding*{J24}{J34}
+\pxDeclareCJKEncoding*{J40}{J50}
+\pxDeclareCJKEncoding*{J41}{J51}
+\pxDeclareCJKEncoding*{J42}{J52}
+\pxDeclareCJKEncoding*{J43}{J53}
+
+%<+> \pxSwitchUTFDirect
+%<+> \pxSwitchUTFIndirect
+\def\pxec@nxt#1{% here #1 is \[UTF ]
+ \let\pxec@UTF@ind#1\let\pxec@UcvUTF@ind\pxUcvUTF
+ \def\pxec@UTF@dir##1{\uppercase{\char"##1 }}%
+ \def\pxec@UcvUTF@dir{\char\bxUcv}%
+ \def\pxSwitchUTFDirect{%
+ \let#1\pxec@UTF@dir \let\pxUcvUTF\pxec@UcvUTF@dir}%
+ \def\pxSwitchUTFIndirect{%
+ \let#1\pxec@UTF@ind \let\pxUcvUTF\pxec@UcvUTF@ind}}
+\expandafter\pxec@nxt\csname UTF \endcsname
+
+%% \pxec@out@jsf{<enc>}\[<ext>]
+\def\pxec@out@jsf#1#2{% {<enc>}\[<ext>]
+ {\kanjiencoding{#1}\selectfont \kchar\bxUcv}}
+
+\pxec@jsf@resetcatcode
+\expandafter\endinput \fi\relax % stop here
+%%------------------ processing in pTeX
+
+%% JSF encodings
+\pxDeclareJSFEncoding{J20}{J30}{0,2,3,4,5,6,7,8,9,d,f}
+\pxDeclareJSFEncoding{J21}{J31}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,f}
+\pxDeclareJSFEncoding{J22}{J32}{0,1,2,3,4,5,6,7,8,9,d,f}
+\pxDeclareJSFEncoding{J23}{J33}{0,2,3,4,5,6,7,8,9,d,f}
+\pxDeclareJSFEncoding{J24}{J34}{0,2,3,4,5,6,7,8,9,d,f}
+\pxDeclareJSFEncoding{J40}{J50}{0,1,2,3,4,5}
+\pxDeclareJSFEncoding{J41}{J51}{0,1,2,3,4}
+\pxDeclareJSFEncoding{J42}{J52}{0,1,2,3,4,5,6,7}
+\pxDeclareJSFEncoding{J43}{J53}{0,1,2,3,4}
+
+%% \pxec@out@jsf{<enc>}\[<ext>]
+% The code value specified has been assigned to \bxUcv here.
+\def\pxec@out@jsf#1#2{% {<enc>}\[<ext>]
+ \pxec@loadfontdef{#1}%
+ \bgroup\pxec@pretranscode#2\pxec@transcode
+ \expandafter\let\expandafter\pxec@tmpa
+ \csname #1/\k@family=Z\pxec@sfid/\k@series/\k@shape\endcsname
+ \ifx\pxec@tmpa\relax \pxec@setinvalid \fi
+ \kanjiencoding{#1}\kanjifamily{\k@family=Z\pxec@sfid}%
+ \selectfont\char\jis\bxUcv
+ \egroup\pxec@end}
+
+%% \pxec@transcode
+\mathchardef\pxec@c@jsfa="3030
+\mathchardef\pxec@c@jsfb="1000
+\chardef\pxec@c@jsfx="40
+\chardef\pxec@c@jsfy="C0
+\chardef\pxec@c@jsfz=10
+\def\do#1{\uppercase{\@tempcnta="#1}\relax
+ \expandafter\def\csname pxec@TX/\the\@tempcnta\endcsname{#1}}
+\do a\do b\do c\do d\do e\do f
+\def\pxec@transcode{%
+ \@tempcnta\bxUcv \divide\@tempcnta\pxec@c@jsfb
+ \edef\pxec@sfid{\ifnum\@tempcnta<\pxec@c@jsfz \the\@tempcnta
+ \else \csname pxec@TX/\the\@tempcnta\endcsname \fi}%
+ \multiply\@tempcnta\pxec@c@jsfb \advance\bxUcv-\@tempcnta
+ \@tempcnta\bxUcv \divide\@tempcnta\pxec@c@jsfx
+ \multiply\@tempcnta\pxec@c@jsfy \advance\bxUcv\@tempcnta
+ \advance\bxUcv\pxec@c@jsfa}
+\def\pxec@setinvalid{%
+ % set translated values for source codepoint 0
+ \def\pxec@sfid{0}\bxUcv\pxec@c@jsfa}
+
+%% \pxec@pretranscode\fontSM
+% Here \fontSM is a shadow-map font spec.
+\def\pxec@pretranscode#1{%
+ \ifnum\bxUcv<\p@\else% \p@ = "10000
+ \@tempcnta=\bxUcv \divide\@tempcnta\p@
+ \ifcase\@tempcnta\or \bxUcv\z@ \or
+ \ifx#1\@undefined \bxUcv\z@
+ \else \advance\bxUcv-"20000 \bxMap#1\fi
+ \else\bxUcv\z@\fi
+ \fi}
+
+%% \pxec@loadfontdef{<h-enc>}
+% Tries to load the font definition for current family and encoding
+% <h-enc> on demand from .fd files.
+\def\pxec@loadfontdef#1{%
+ \expandafter\let\expandafter\pxec@tmpa
+ \csname #1+\k@family=Z\endcsname
+ \ifx\pxec@tmpa\@empty \pxec@okfalse % already tried in failure
+ \else\ifx\pxec@tmpa\relax % not yet tried
+ \edef\pxec@nxt{%
+ \noexpand\pxec@loadfontdef@a{#1}%
+ \noexpand\pxec@loadfontdef@a{\csname t@enc#1\endcsname}}%
+ \pxec@oktrue \pxec@nxt
+ \ifpxec@ok\else
+ \expnadafter\let\csname#1+\k@family=Z\endcsname\@empty \fi
+ \else \pxec@oktrue \fi\fi
+ \ifpxec@ok\else \expandafter\pxec@skiptoend \fi}
+\def\pxec@loadfontdef@a#1{%
+ \expandafter\ifx\csname #1+\k@family=Z\endcsname\relax
+ \begingroup \let\typeout\@font@info \escapechar\m@ne
+ \def\f@encoding{#1}\def\f@family{\k@family=Z}%
+ \try@load@fontshape
+ \endgroup\fi
+ \expandafter\ifx\csname #1+\k@family=Z\endcsname\@empty
+ \pxec@err@nojsf{#1}\pxec@okfalse \fi}
+
+%%%% \pxec@skiptoend
+\def\pxec@skiptoend#1\pxec@end{}
+\let\pxec@end\@empty
+
+%%------------------ all done
+\pxec@jsf@resetcatcode
+\endinput
+%% EOF
diff --git a/Master/texmf-dist/tex/platex/pxbase/upkcat.sty b/Master/texmf-dist/tex/platex/pxbase/upkcat.sty
new file mode 100644
index 00000000000..4f97b510c44
--- /dev/null
+++ b/Master/texmf-dist/tex/platex/pxbase/upkcat.sty
@@ -0,0 +1,50 @@
+%
+% upkcat.sty (for both upLaTeX2e & plain upTeX)
+%
+
+%%%% avoid multiple loading and check if LaTeX2e is used.
+\ifx\pxkqOk\undefined\else \expandafter\endinput \fi
+\edef\pxkqRestoreAt{\catcode64=\the\catcode64\relax}\catcode64=11
+\ifx\RequirePackage\@undefined % LaTeX2e
+ \NeedsTeXFormat{pLaTeX2e}
+ \ProvidesPackage{upkcat}[2008/03/14 v0.2 safe kcatcode access]
+ \RequirePackage{ifuptex}[2008/03/14]\RequireupTeX
+\fi \let\pxkqOk=t
+
+%%%% \getkcatcode, \setkcatcode
+\edef\skrestoreat{\catcode64=\the\catcode64}\catcode64=11
+\newcount\pxkq@cp \newif\ifpxkq@ok
+\def\getkcatcode#1{\pxkq@getcp{#1}%
+ \edef\thekcatcode{\the\kcatcode\pxkq@cp}}
+\def\setkcatcode#1#2{\pxkq@getcp{#1}\kcatcode\pxkq@cp#2}
+\def\pxkq@getcp#1{\pxkq@getcp@a#1\relax\relax}
+\def\pxkq@nxt#1#2#3#4#5{\pxkq@cp#1\loop
+ {\lccode`\?\pxkq@cp \advance\pxkq@cp-#3%
+ \lowercase{\expandafter\xdef\csname pxkq@#4?\endcsname}{#5}}%
+ \advance\pxkq@cp\@ne \ifnum\pxkq@cp<#2\repeat}
+\pxkq@nxt{240}{248}{240}l{\pxkq@cp\the\pxkq@cp\noexpand\pxkq@da}
+\pxkq@nxt{224}{240}{224}l{\pxkq@cp\the\pxkq@cp\noexpand\pxkq@ca}
+\pxkq@nxt{194}{224}{192}l{\pxkq@cp\the\pxkq@cp\noexpand\pxkq@ba}
+\pxkq@nxt{128}{192}{128}t{\advance\pxkq@cp\the\pxkq@cp\noexpand\pxkq@oktrue}
+\def\pxkq@getcp@a#1{\pxkq@cp`#1\relax\pxkq@chkk#1%
+ \ifpxkq@ok \let\pxkq@nxt\pxkq@end \else
+ \expandafter\let\expandafter\pxkq@nxt\csname pxkq@l\string#1\endcsname
+ \ifx\pxkq@nxt\relax \let\pxkq@nxt\pxkq@err \fi
+ \fi \pxkq@nxt}
+\def\pxkq@stp#1#2{\multiply\pxkq@cp64\pxkq@okfalse
+ \csname pxkq@t\string#2\endcsname
+ \ifpxkq@ok \expandafter#1\else \expandafter\pxkq@err \fi}
+\def\pxkq@end#1\relax{}
+\def\pxkq@ba{\pxkq@stp\pxkq@end}\def\pxkq@ca{\pxkq@stp\pxkq@cb}
+\def\pxkq@cb{\pxkq@stp\pxkq@end}\def\pxkq@da{\pxkq@stp\pxkq@db}
+\def\pxkq@db{\pxkq@stp\pxkq@dc}\def\pxkq@dc{\pxkq@stp\pxkq@end}
+\begingroup\lccode`8=`k\lccode`9=`a \lowercase{\endgroup
+ \def\pxkq@chkk#1{\pxkq@okfalse\expandafter\pxkq@chkk@a\meaning#189\@nil}
+ \def\pxkq@chkk@a#189#2\@nil{\ifcat @#1@\pxkq@oktrue\fi}}
+\def\pxkq@err#1\relax{\errhelp{I regard it as U+FFFF}%
+ \errmessage{Corrupted UTF-8 bytes}\pxkq@cp65535\relax}
+%\def\pxkq@end#1\relax{\showthe\pxkq@cp}
+
+%%%% all done
+\pxkqRestoreAt \endinput
+%% EOF