From 5dc49a8a49d86d52c976d9eec3d0d70fc62372f6 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 28 May 2022 20:20:51 +0000 Subject: pxcjkcat (28may22) git-svn-id: svn://tug.org/texlive/trunk@63427 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/pxcjkcat/LICENSE | 2 +- Master/texmf-dist/doc/latex/pxcjkcat/README-ja.md | 5 + Master/texmf-dist/doc/latex/pxcjkcat/README.md | 1 + Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.pdf | Bin 184654 -> 163412 bytes Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.tex | 146 +++++-- Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty | 499 +++++++++++++++------- 6 files changed, 447 insertions(+), 206 deletions(-) (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/pxcjkcat/LICENSE b/Master/texmf-dist/doc/latex/pxcjkcat/LICENSE index fbe40a0146b..71f0e1f5a2f 100644 --- a/Master/texmf-dist/doc/latex/pxcjkcat/LICENSE +++ b/Master/texmf-dist/doc/latex/pxcjkcat/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2018 Takayuki YATO (aka. "ZR") +Copyright (c) 2010-2022 Takayuki YATO (aka. "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 diff --git a/Master/texmf-dist/doc/latex/pxcjkcat/README-ja.md b/Master/texmf-dist/doc/latex/pxcjkcat/README-ja.md index c9e3530afe1..accb5faf0dc 100644 --- a/Master/texmf-dist/doc/latex/pxcjkcat/README-ja.md +++ b/Master/texmf-dist/doc/latex/pxcjkcat/README-ja.md @@ -30,6 +30,11 @@ pxcjkcat パッケージ ー 本体 更新履歴 -------- + * Version 1.2 〈2022/05/25〉 + - 最新の upTeX に対応させる。 + - `nomode` オプションを追加。 + - `ccv+` オプションの別名 `real` を追加。 + * Version 1.1 〈2018/04/01〉 - upTeX 1.23 版以降に対応する CCV 3(`ccv3` オプション)を追加した。 - `ccv+` オプションを追加。 diff --git a/Master/texmf-dist/doc/latex/pxcjkcat/README.md b/Master/texmf-dist/doc/latex/pxcjkcat/README.md index fcf31a0b7a0..719a3e33968 100644 --- a/Master/texmf-dist/doc/latex/pxcjkcat/README.md +++ b/Master/texmf-dist/doc/latex/pxcjkcat/README.md @@ -90,6 +90,7 @@ document must in encoded in UTF-8. Revision History ---------------- + * Version 1.2 〈2022/05/25〉 * Version 1.1 〈2018/04/01〉 * Version 1.0 〈2012/09/22〉 diff --git a/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.pdf b/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.pdf index 07ad5c54fab..58eae044f82 100644 Binary files a/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.pdf and b/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.pdf differ diff --git a/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.tex b/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.tex index cb63c6ff799..4173f25a444 100644 --- a/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.tex +++ b/Master/texmf-dist/doc/latex/pxcjkcat/pxcjkcat.tex @@ -1,20 +1,26 @@ % upLaTeX 文書; 文字コードは UTF-8 \documentclass[uplatex,dvipdfmx,a4paper]{jsarticle} +\renewcommand{\headfont}{\gtfamily\romanseries{sbc}\sffamily} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{geometry} \usepackage{xcolor} \usepackage[colorlinks,hyperfootnotes=false]{hyperref} \usepackage{pxjahyper} -\hypersetup{linkcolor=blue!75!black,urlcolor=green!45!black} +\hypersetup{linkcolor=blue!75!black,urlcolor=green!45!black, + pdftitle={pxcjkcatパッケージ}, + pdfauthor={八登崇之}} +\usepackage{bxtexlogo} +\bxtexlogoimport{*} +\usepackage[verb]{bxghost} \usepackage{shortvrb} \MakeShortVerb{\|} \usepackage{verbatim} \newenvironment{myverbatim} {\quote\small\verbatim} {\endverbatim\endquote} -\newcommand{\PkgVersion}{1.1} -\newcommand{\PkgDate}{2018/04/01} +\newcommand{\PkgVersion}{1.2} +\newcommand{\PkgDate}{2022/05/25} \newcommand{\Pkg}[1]{\textsf{#1}} \newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$} \newcommand{\Note}{\par\noindent ※} @@ -22,10 +28,6 @@ \newcommand{\strong}{\textsf} \newcommand{\wbr}{\linebreak[0]} \newcommand{\Code}[1]{{\usefont{T1}{lmtt}{l}{n}#1}} -\providecommand{\pTeX}{p\TeX} -\providecommand{\upTeX}{u\pTeX} -\providecommand{\pLaTeX}{p\LaTeX} -\providecommand{\upLaTeX}{u\pLaTeX} %----------------------------------------------------------- \begin{document} \title{\Pkg{pxcjkcat} パッケージ} @@ -52,19 +54,30 @@ オプションとして以下のものが指定できる。 \begin{itemize} -\item |ccv1|\Means - 「モードCCV」を1({\upTeX} v0.11~0.28と互換)とする。 -\item |ccv2|\Means - 「モードCCV」を2({\upTeX} v0.29~1.22と互換)とする。 -\item |ccv3|\Means - 「モードCCV」を3({\upTeX} v1.23以降と互換)とする。 -\item |ccv+|\Means - 「モードCCV」をエンジンの実のCCVと一致させる。 - \Note 「モードCCV」については\ref{sec:CCV}節を参照。 -\item |\cjkcategorymode| \strong{命令で有効なモード値}\Means +\item \strong{モードCCV指定}\Means + \<「モードCCV」の値を指定するオプション。 + \Note モードCCVについては\ref{sec:CCV}節を参照。 + \Note モードCCVの既定値は1であり、 + これは極めて古い版と互換にすることを意味する。 + モード設定(|prefernoncjk|等)を利用する場合には、 + 適切なモードCCVのオプションを指定するのが望ましい。 + \begin{itemize} + \item |ccv1|\Means + モードCCVを1({\upTeX} v0.11~0.28と互換)とする。 + \strong{既定値。} + \item |ccv2|\Means + モードCCVを2({\upTeX} v0.29~1.22と互換)とする。 + \item |ccv3|\Means + モードCCVを3({\upTeX} v1.23以降と互換)とする。 + \item |real|または|ccv+|\Means + モードCCVをエンジンの実のCCVと一致させる。 + \end{itemize} +\item |\cjkcategorymode|\strong{命令で有効なモード値}\Means 和文カテゴリがモードに従って設定される。 \Note モード値オプションが非指定の場合は、パッケージ読込時に 和文カテゴリが変更されることはない。 +\item |nomode|\Means + モード値オプションの効果を打ち消す。 \end{itemize} %=========================================================== @@ -82,6 +95,8 @@ %\item ブロック名 \item 非ASCII文字1つ\Means その文字の属するブロックを指す。 + \Note 文字による指定は「{\upTeX}の版によるブロック分割の差異」に + 影響されることに注意。 %\item 整数値\Means % その符号位置の属するブロックを指す。 \end{itemize} @@ -98,6 +113,7 @@ \end{itemize} 和文カテゴリの変更は局所的(グルーピングに従う)である。 + \Note モードCCVの指定は|\cjkcategory|の動作には影響を与えない。 \item |\cjkcategorymode{|\Meta{モード}|}|\Means 全てのブロックの和文カテゴリの一括設定(モード設定)を行う。 @@ -108,15 +124,17 @@ \begin{itemize} \item |forcecjk|\Means ASCII文字のみ欧文扱いで他のブロックは全て和文扱い - (|noncjk| 以外)とする。 + (|noncjk|以外)とする。 和文フォントの中のUnicode値の割当がある全ての文字を 和文文字として直接用いることができる。 \item |default|\Means 指定のモードCCVにおける既定の設定と一致させる。 - \Note モードCCVが2以下の場合は |forcecjk| と同一の設定になる。 - \Note モードCCVがエンジンの実のCCVと一致する場合 - (|ccv+| オプション指定の場合を含む)は、 - エンジンの既定の設定と一致する。 + \Note モードCCVが2以下の場合は|forcecjk|と同一の設定になる。 + %\Note モードCCVがエンジンの実のCCVと一致する場合は、 + % エンジンの既定の設定と一致する。 + \Note モードCCVが3の場合の\strong{仕様は未確定}である。 + 現状の動作は「v1.23の既定設定と一致させる」となっているが、 + この動作は\strong{将来変更される可能性がある}。 \item |prefercjk|\Means 和文扱いのブロックとして、「CJK中核セット」のものに加えて、 「Adobeの定めるCJK文字集合 @@ -124,7 +142,7 @@ の何れかと共通部分をもつ文字ブロック」を加えて、 残りを欧文扱いに設定する。 \item |prefercjkvar|\Means - |prefercjk| において、ギリシャ・キリル文字の + |prefercjk|において、ギリシャ・キリル文字の ブロックを欧文扱いに変更したもの。 \item |japanese|\Means 和文扱いのブロックとして、「CJK中核セット」のものに加えて、 @@ -132,7 +150,7 @@ の何れかと共通部分をもつ文字ブロック」を加えて、 残りを欧文扱いに設定する。 \item |japanesevar|\Means - |japanese| において、ギリシャ・キリル文字の + |japanese|において、ギリシャ・キリル文字の ブロックを欧文扱いに変更したもの。 \item |prefernoncjk|\Means 「CJK中核セット」のブロックのみを和文扱いとし、 @@ -141,13 +159,13 @@ ここで「CJK中核セット」の内容は以下のとおりである。 \begin{itemize} - \item 漢字・部首・注音字母\Means |kanji| に設定。 - \item ひらがな・カタカナ\Means |kana| に設定。 + \item 漢字・部首・注音字母\Means |kanji|に設定。 + \item ひらがな・カタカナ\Means |kana|に設定。 \item CJK記号の一部・全角半角互換形・彝文字 - ・西夏文字・女書文字\Means |cjk| に設定 - \footnote{モードCCVが2の場合、|cjk12| の再分割の - 中の |cjk1b|、|cjk1c| は |kana| に変更される。}。 - \item ハングル完成形・ハングル字母\Means |hangul| に設定。 + ・西夏文字・女書文字・契丹文字\Means |cjk|に設定。 + \Note モードCCVが2以上の場合、|cjk12|の再分割の|cjk1b|、 + |cjk1c|は|kana|に設定される。 + \item ハングル完成形・ハングル字母\Means |hangul|に設定。 \end{itemize} \Note 各モードでの具体的な設定値については\ref{sec:Values}節を参照。 @@ -157,6 +175,14 @@ \section{文字分類バージョン(CCV)} \label{sec:CCV} +\noindent \strong{注意}\Means +この節に述べられている説明は現状の仕様と食い違っている部分があり、 +大幅な改訂が必要な状態である。 +現状の仕様では、モードCCVの影響を受けるのはモード設定の定義のみであり、 +ブロック分割は常に実際のエンジンのものに一致させている。 + +\bigskip + {\upTeX}エンジンでの文字ブロックの分割および各ブロックの 和文カテゴリの既定値は改版時に変更され、 これが互換性の問題を起こす可能性がある。 @@ -236,18 +262,19 @@ \subsection{Unicodeブロックの一覧} 以下は、Unicodeが定めるブロックと直接に対応するブロックの一覧である。 -この表の「ブロックID」の欄が、|\cjkcategory| 命令で指定する +この表の「ブロックID」の欄が、|\cjkcategory|命令で指定する ブロックIDを示す。 -「CCV」の欄は、そのブロックがサポートされるモードCCVの +「CCV」の欄は、そのブロックがサポートされる実CCVの 範囲の下限を表す。 -\footnote{ここで示すサポート範囲は「必要条件」であることに注意。 - 先述の通り、エンジンの改版でブロックが(分割変更でなく) - 新規追加された場合には以前のCCVの値を引き継ぐ。 - このため、サポート範囲が「2」のブロックは、 - モードCCVが2であっても“実際には使えない”可能性がある。 - (モードCCVが3以上なら必ず使えて、1なら必ず使えない。) - “実際には使えない”ブロックに設定を試みた場合は、 - 警告が出て設定が無視される。} +\footnote{これは参考情報であり、現状の仕様ではあまり意味をもたない。} +%\footnote{ここで示すサポート範囲は「必要条件」であることに注意。 +% 先述の通り、エンジンの改版でブロックが(分割変更でなく) +% 新規追加された場合には以前のCCVの値を引き継ぐ。 +% このため、サポート範囲が「2」のブロックは、 +% モードCCVが2であっても“実際には使えない”可能性がある。 +% (モードCCVが3以上なら必ず使えて、1なら必ず使えない。) +% “実際には使えない”ブロックに設定を試みた場合は、 +% 警告が出て設定が無視される。} \begin{quote} \renewcommand{\baselinestretch}{0.9}\small @@ -258,9 +285,8 @@ ~~~\makebox[3em][r]{\Code{#2}}\hspace*{1em}\ignorespaces} \newcommand*\xN[1]{#1} \hspace*{-1em}%header-line -\makebox[5em][l]{ブロック\mbox{}ID}\makebox[2em][c]{CCV}% +\makebox[5em][l]{ブロック\mbox{}ID}\makebox[2em][c]{~~CCV}% \makebox[10em][c]{符号値範囲}\makebox{ブロック名称}\par -\xI{latn} \xV{1} \xR {0000} {007F} \xN{Basic Latin}\par %///////////////////////////// \xI{latn} \xV{1} \xR {0000} {007F} \xN{Basic Latin}\par \xI{latn1} \xV{1} \xR {0080} {00FF} \xN{Latin-1 Supplement}\par @@ -325,6 +351,7 @@ \xI{lepc} \xV{2} \xR {1C00} {1C4F} \xN{Lepcha}\par \xI{olck} \xV{2} \xR {1C50} {1C7F} \xN{Ol Chiki}\par \xI{cyrlC} \xV{2} \xR {1C80} {1C8F} \xN{Cyrillic Extended-C}\par +\xI{geor2} \xV{3} \xR {1C90} {1CBF} \xN{Georgian Extended}\par \xI{sund1} \xV{2} \xR {1CC0} {1CCF} \xN{Sundanese Supplement}\par \xI{sym38} \xV{2} \xR {1CD0} {1CFF} \xN{Vedic Extensions}\par \xI{latn4} \xV{1} \xR {1D00} {1D7F} \xN{Phonetic Extensions}\par @@ -464,7 +491,13 @@ \xI{phlp} \xV{2} \xR {10B80} {10BAF} \xN{Psalter Pahlavi}\par \xI{orkh} \xV{2} \xR {10C00} {10C4F} \xN{Old Turkic}\par \xI{hung} \xV{2} \xR {10C80} {10CFF} \xN{Old Hungarian}\par +\xI{rohg} \xV{3} \xR {10D00} {10D3F} \xN{Hanifi Rohingya}\par \xI{sym42} \xV{2} \xR {10E60} {10E7F} \xN{Rumi Numeral Symbols}\par +\xI{yezi} \xV{3} \xR {10E80} {10EBF} \xN{Yezidi}\par +\xI{sogo} \xV{3} \xR {10F00} {10F2F} \xN{Old Sogdian}\par +\xI{sogd} \xV{3} \xR {10F30} {10F6F} \xN{Sogdian}\par +\xI{chrs} \xV{3} \xR {10FB0} {10FDF} \xN{Chorasmian}\par +\xI{elym} \xV{3} \xR {10FE0} {10FFF} \xN{Elymaic}\par \xI{brah} \xV{2} \xR {11000} {1107F} \xN{Brahmi}\par \xI{kthi} \xV{2} \xR {11080} {110CF} \xN{Kaithi}\par \xI{sora} \xV{2} \xR {110D0} {110FF} \xN{Sora Sompeng}\par @@ -482,42 +515,59 @@ \xI{modi} \xV{2} \xR {11600} {1165F} \xN{Modi}\par \xI{mong1} \xV{2} \xR {11660} {1167F} \xN{Mongolian Supplement}\par \xI{takr} \xV{2} \xR {11680} {116CF} \xN{Takri}\par -\xI{ahom} \xV{2} \xR {11700} {1173F} \xN{Ahom}\par +\xI{ahom} \xV{2} \xR {11700} {1174F} \xN{Ahom}\par +\xI{dogr} \xV{3} \xR {11800} {1184F} \xN{Dogra}\par \xI{wara} \xV{2} \xR {118A0} {118FF} \xN{Warang Citi}\par +\xI{diak} \xV{3} \xR {11900} {1195F} \xN{Dives Akuru}\par +\xI{nand} \xV{3} \xR {119A0} {119FF} \xN{Nandinagari}\par \xI{zanb} \xV{3} \xR {11A00} {11A4F} \xN{Zanabazar Square}\par \xI{soyo} \xV{3} \xR {11A50} {11AAF} \xN{Soyombo}\par \xI{pauc} \xV{2} \xR {11AC0} {11AFF} \xN{Pau Cin Hau}\par \xI{bhks} \xV{2} \xR {11C00} {11C6F} \xN{Bhaiksuki}\par \xI{marc} \xV{2} \xR {11C70} {11CBF} \xN{Marchen}\par \xI{gonm} \xV{3} \xR {11D00} {11D5F} \xN{Masaram Gondi}\par +\xI{gong} \xV{3} \xR {11D60} {11DAF} \xN{Gunjala Gondi}\par +\xI{maka} \xV{3} \xR {11EE0} {11EFF} \xN{Makasar}\par +\xI{lisu1} \xV{3} \xR {11FB0} {11FBF} \xN{Lisu Supplement}\par +\xI{taml1} \xV{3} \xR {11FC0} {11FFF} \xN{Tamil Supplement}\par \xI{xsux} \xV{1} \xR {12000} {123FF} \xN{Cuneiform}\par \xI{xsux1} \xV{1} \xR {12400} {1247F} \xN{Cuneiform Numbers and Punctuation}\par \xI{xsux2} \xV{2} \xR {12480} {1254F} \xN{Early Dynastic Cuneiform}\par \xI{egyp} \xV{2} \xR {13000} {1342F} \xN{Egyptian Hieroglyphs}\par +\xI{egyp1} \xV{3} \xR {13430} {1343F} \xN{Egyptian Hieroglyph Format Controls}\par \xI{hluw} \xV{2} \xR {14400} {1467F} \xN{Anatolian Hieroglyphs}\par \xI{bamu1} \xV{2} \xR {16800} {16A3F} \xN{Bamum Supplement}\par \xI{mroo} \xV{2} \xR {16A40} {16A6F} \xN{Mro}\par \xI{bass} \xV{2} \xR {16AD0} {16AFF} \xN{Bassa Vah}\par \xI{hmng} \xV{2} \xR {16B00} {16B8F} \xN{Pahawh Hmong}\par +\xI{medf} \xV{3} \xR {16E40} {16E9F} \xN{Medefaidrin}\par \xI{plrd} \xV{2} \xR {16F00} {16F9F} \xN{Miao}\par \xI{cjk14} \xV{2} \xR {16FE0} {16FFF} \xN{Ideographic Symbols and Punctuation}\par \xI{tang} \xV{2} \xR {17000} {187FF} \xN{Tangut}\par \xI{tang1} \xV{2} \xR {18800} {18AFF} \xN{Tangut Components}\par +\xI{kits} \xV{3} \xR {18B00} {18CFF} \xN{Khitan Small Script}\par +\xI{tang2} \xV{3} \xR {18D00} {18D7F} \xN{Tangut Supplement}\par \xI{kana2} \xV{2} \xR {1B000} {1B0FF} \xN{Kana Supplement}\par \xI{kanaA} \xV{3} \xR {1B100} {1B12F} \xN{Kana Extended-A}\par +\xI{kana3} \xV{3} \xR {1B130} {1B16F} \xN{Small Kana Extension}\par \xI{nshu} \xV{3} \xR {1B170} {1B2FF} \xN{Nushu}\par \xI{dupl} \xV{2} \xR {1BC00} {1BC9F} \xN{Duployan}\par \xI{sym53} \xV{2} \xR {1BCA0} {1BCAF} \xN{Shorthand Format Controls}\par \xI{sym32} \xV{1} \xR {1D000} {1D0FF} \xN{Byzantine Musical Symbols}\par \xI{sym33} \xV{1} \xR {1D100} {1D1FF} \xN{Musical Symbols}\par \xI{sym34} \xV{1} \xR {1D200} {1D24F} \xN{Ancient Greek Musical Notation}\par +\xI{sym58} \xV{3} \xR {1D2E0} {1D2FF} \xN{Mayan Numerals}\par \xI{sym35} \xV{1} \xR {1D300} {1D35F} \xN{Tai Xuan Jing Symbols}\par \xI{sym36} \xV{1} \xR {1D360} {1D37F} \xN{Counting Rod Numerals}\par \xI{sym37} \xV{1} \xR {1D400} {1D7FF} \xN{Mathematical Alphanumeric Symbols}\par \xI{sgnw} \xV{2} \xR {1D800} {1DAAF} \xN{Sutton SignWriting}\par \xI{glag1} \xV{2} \xR {1E000} {1E02F} \xN{Glagolitic Supplement}\par +\xI{hmnp} \xV{3} \xR {1E100} {1E14F} \xN{Nyiakeng Puachue Hmong}\par +\xI{wcho} \xV{3} \xR {1E2C0} {1E2FF} \xN{Wancho}\par \xI{mend} \xV{2} \xR {1E800} {1E8DF} \xN{Mende Kikakui}\par \xI{adlm} \xV{2} \xR {1E900} {1E95F} \xN{Adlam}\par +\xI{sym59} \xV{3} \xR {1EC70} {1ECBF} \xN{Indic Siyaq Numbers}\par +\xI{sym61} \xV{3} \xR {1ED00} {1ED4F} \xN{Ottoman Siyaq Numbers}\par \xI{sym51} \xV{2} \xR {1EE00} {1EEFF} \xN{Arabic Mathematical Alphabetic Symbols}\par \xI{sym43} \xV{2} \xR {1F000} {1F02F} \xN{Mahjong Tiles}\par \xI{sym44} \xV{2} \xR {1F030} {1F09F} \xN{Domino Tiles}\par @@ -532,12 +582,16 @@ \xI{sym55} \xV{2} \xR {1F780} {1F7FF} \xN{Geometric Shapes Extended}\par \xI{sym56} \xV{2} \xR {1F800} {1F8FF} \xN{Supplemental Arrows-C}\par \xI{sym57} \xV{2} \xR {1F900} {1F9FF} \xN{Supplemental Symbols and Pictographs}\par +\xI{sym60} \xV{3} \xR {1FA00} {1FA6F} \xN{Chess Symbols}\par +\xI{sym62} \xV{3} \xR {1FA70} {1FAFF} \xN{Symbols and Pictographs Extended-A}\par +\xI{sym63} \xV{3} \xR {1FB00} {1FBFF} \xN{Symbols for Legacy Computing}\par \xI{haniB} \xV{1} \xR {20000} {2A6DF} \xN{CJK Unified Ideographs Extension B}\par \xI{haniC} \xV{2} \xR {2A700} {2B73F} \xN{CJK Unified Ideographs Extension C}\par \xI{haniD} \xV{2} \xR {2B740} {2B81F} \xN{CJK Unified Ideographs Extension D}\par \xI{haniE} \xV{2} \xR {2B820} {2CEAF} \xN{CJK Unified Ideographs Extension E}\par \xI{haniF} \xV{3} \xR {2CEB0} {2EBEF} \xN{CJK Unified Ideographs Extension F}\par \xI{hani2} \xV{1} \xR {2F800} {2FA1F} \xN{CJK Compatibility Ideographs Supplement}\par +\xI{haniG} \xV{3} \xR {30000} {3134F} \xN{CJK Unified Ideographs Extension G}\par \xI{spc07} \xV{1} \xR {E0000} {E007F} \xN{Tags}\par \xI{spc08} \xV{1} \xR {E0100} {E01EF} \xN{Variation Selectors Supplement}\par \xI{spc09} \xV{1} \xR {F0000} {FFFFF} \xN{Supplementary Private Use Area-A}\par @@ -575,7 +629,7 @@ CCV~1ではUnicodeブロックの再分割が存在しないので、 サポートされるブロックの全体は以下のようになる。 \begin{itemize} -\item 前掲の通常ブロックの表で「CCV」欄が「1」の +\item 前掲の通常ブロックの表で「CCV」欄が1の ブロック全て。 \end{itemize} @@ -633,7 +687,7 @@ CCV~3では |latn1|“Latin-1 Supplement”のブロックが 従って、サポートされるブロックの全体は以下のようになる。 \begin{itemize} -\item 前掲の通常ブロックの表で「CCV」欄が2以下のブロック全て。 +\item 前掲の通常ブロックの表にあるブロック全て。 \Note |cjk12|、|latn1| のブロックも使用可能。 \item |cjk12| の下位ブロック\Means |cjk1a|、|cjk1b|、|cjk1c| の3つ。 @@ -645,7 +699,7 @@ CCV~3では |latn1|“Latin-1 Supplement”のブロックが \section{各モードにおける和文カテゴリの設定} \label{sec:Values} -(あとで書く) +(やっぱりあとで書く) \end{document} diff --git a/Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty b/Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty index b6e57056c5e..ae11b02fdea 100644 --- a/Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty +++ b/Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty @@ -1,134 +1,219 @@ -% -% pxcjkcat.sty -% -%%%% package declaration +%% +%% This is file 'pxcjkcat.sty'. +%% +%% Copyright (c) 2010-2022 Takayuki YATO (aka. "ZR") +%% GitHub: https://github.com/zr-tex8r +%% Twitter: @zr_tex8r +%% +%% This package is distributed under the MIT License. +%% + +%% package declaration \NeedsTeXFormat{pLaTeX2e} -\ProvidesPackage{pxcjkcat}[2018/04/01 v1.1 PX cjk-category mode] -%\RequirePackage{ifuptex}[2008/03/14]\RequirenativeupTeX +\ProvidesPackage{pxcjkcat}[2022/05/25 v1.2 PX cjk-category mode] +\def\pxkc@pkgname{pxcjkcat} +%--------------------------------------- general -%%%% error messages -\def\pxkc@pkgname{pxcjkcat} +%% error messages \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} +\def\pxkc@err@ivcsy#1{% + \PackageError\pxkc@pkgname + {Invalid name (#1) for cjk-category}% + {It was replaced by 18(cjk).\MessageBreak + \@ehc}} +\def\pxkc@err@ivbsy#1{% + \PackageError\pxkc@pkgname + {Invalid name (#1) for Unicode block}% + {\@eha}} +\def\pxkc@err@ivmsy#1{% + \PackageError\pxkc@pkgname + {Invalid name (#1) for cjk-category mode}% + {\@eha}} \def\pxkc@warn@dfblk#1{% \PackageWarning\pxkc@pkgname {Defunct Unicode block '#1' is\MessageBreak specified}} + +%% \pxkc@debug{} \ifx\bxUseDebug\@undefined \let\pxkc@debug\@gobble \else \def\pxkc@debug#1{\typeout{**[\pxkc@pkgname] #1}} \fi -%%%% environment check -\@tempswafalse -\ifx\ucs\@undefined\else \ifnum\ucs"3000="3000 - \@tempswatrue -\fi\fi -\if@tempswa\else - \pxkc@error{Native upTeX is required.}% - {Package loading is aborted.} -\expandafter\endinput\fi\relax - -%--------------------------------------- general +%% unique tokens +\def\pxkc@end{\pxkc@end@} +\let\pxkc@mk\indent %% variables \newif\ifpxkc@ok \newif\ifpxkc@warn@defunct \pxkc@warn@defuncttrue +\let\pxkc@good@mccv\relax +\let\pxkc@mccv\relax +\let\pxkc@ccmode@opt\relax \let\pxkc@arg\relax \let\pxkc@blk\relax -\let\pxkc@grp\relax -\let\pxkc@cc\relax +\let\pxkc@cp\relax %% \pxkc@letcs\CSa{} \def\pxkc@letcs#1#2{% \expandafter\let\expandafter#1\csname#2\endcsname} + %% \pxkc@expanded{} \def\pxkc@expanded#1{% - \edef\pxkc@nxt{#1}\pxkc@nxt} + \edef\pxkc@next{#1}\pxkc@next} -%--------------------------------------- +%--------------------------------------- package options -%%%% option handler -\chardef\pxkc@mccv=1 +%% mode CCV options \DeclareOption{ccv1}{\chardef\pxkc@mccv=1 } \DeclareOption{ccv2}{\chardef\pxkc@mccv=2 } \DeclareOption{ccv3}{\chardef\pxkc@mccv=3 } \DeclareOption{ccv+}{\chardef\pxkc@mccv=0 } -\let\pxkc@ccmode\relax -\DeclareOption*{\edef\pxkc@ccmode{\CurrentOption}} +\DeclareOption{real}{\chardef\pxkc@mccv=0 } +%% mode options +% NB. \[pxkc@M@@...] is later redefined. +\def\pxkc@M@@forcecjk {1} +\def\pxkc@M@@prefercjk {1} +\def\pxkc@M@@prefercjkvar {1} +\def\pxkc@M@@japanese {3} +\def\pxkc@M@@japanesevar {3} +\def\pxkc@M@@prefernoncjk {1} +\def\pxkc@M@@default {1} +\def\pxkc@M@@nomode {0}% special +\chardef\pxkc@good@mccv=0 +\DeclareOption*{% + \@ifundefined{pxkc@M@@\CurrentOption}{\@unknownoptionerror}{% + \chardef\pxkc@good@mccv=\@nameuse{pxkc@M@@\CurrentOption}\relax + \edef\pxkc@ccmode@opt{\CurrentOption}}} +%% dispatch \ProcessOptions\relax +%% clear up +\ifnum\pxkc@good@mccv=0 + \let\pxkc@ccmode@opt\relax +\fi +\let\pxkc@M@@nomode\@undefined + +%% set default mode CCV (ccv1) +\ifx\pxkc@mccv\relax + \chardef\pxkc@mccv=1 +\else + \chardef\pxkc@good@mccv=0 % disable check +\fi + +%--------------------------------------- environment check + +%% check engine +\def\pxkc@tmpa{Native upTeX is required} +\ifx\ucs\@undefined\else \ifnum\ucs"3000="3000 + \ifx\forcecjktoken\@undefined + \def\pxkc@tmpa{This upTeX is too old} + \else \let\pxkc@tmpa\relax + \fi +\fi\fi +\ifx\pxkc@tmpa\relax\else + \PackageError\pxkc@pkgname + {\pxkc@tmpa}% + {Package loading is aborted.\MessageBreak + \@ehc} +\expandafter\endinput\fi\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 +%% \pxkc@is@same@block +\def\pxkc@is@same@block#1#2{% + \pxkc@okfalse + \begingroup + \kcatcode#1=16\kcatcode#2=17\relax + \ifnum\kcatcode#1=17 \aftergroup\pxkc@oktrue\fi + \endgroup} + +%% \pxkc@ccv : real CCV +\pxkc@is@same@block{"FF01}{"FF11}\ifpxkc@ok \chardef\pxkc@ccv=1 % v0.11+ \else - \pxkc@issameblock{"A0}{"C0}\ifpxkc@ok + \pxkc@is@same@block{"A0}{"C0}\ifpxkc@ok \chardef\pxkc@ccv=2 % v0.29+ \else \chardef\pxkc@ccv=3 % v1.23+ \fi \fi -\ifx\bxDebugCcv\@undefined\else +\ifx\bxDebugCcv\@undefined\else % override \chardef\pxkc@ccv=\bxDebugCcv\relax \fi -\ifnum\pxkc@mccv=\z@ \let\pxkc@mccv\pxkc@ccv \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.} + +%% Here show warning for mode CCV recommendation. +%% (No warning if the good mode CCV is unavailable.) +\ifnum\pxkc@good@mccv>\pxkc@mccv \ifnum\pxkc@good@mccv>\pxkc@ccv\else + \PackageWarningNoLine\pxkc@pkgname + {Mode CCV \number\pxkc@good@mccv\space + (option 'ccv\number\pxkc@good@mccv') is recommended\MessageBreak + for the use of category mode '\pxkc@ccmode@opt'!\MessageBreak + Or you can simply suppress this warning by giving\MessageBreak + option 'ccv\number\pxkc@mccv' explicitly} +\fi\fi + +%% set mode CCV if 'ccv+' is given +\ifnum\pxkc@mccv=\z@ \let\pxkc@mccv\pxkc@ccv \fi -%%------ \setcjkcategory, etc. +%% mode CCV cannot be newer than real CCV +\ifnum\pxkc@mccv>\pxkc@ccv + \PackageError\pxkc@pkgname + {Bad mode-CCV option (ccv\number\pxkc@mccv) is given!\MessageBreak + The mode-CCV (\number\pxkc@mccv) is newer than + the real CCV (\number\pxkc@ccv)} + {I assume the mode-CCV equals the real CCV.\MessageBreak + \@ehc} + \let\pxkc@mccv\pxkc@ccv +\fi %% \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}} +\def\pxkc@kcatcode#1#2{% + \kcatcode#1=#2\relax + \chardef\pxkc@tmpa=#1\relax + \expandafter\pxkc@kcatcode@a\meaning\pxkc@tmpa\pxkc@end} +\def\pxkc@kcatcode@a#1"#2\pxkc@end{% + \pxkc@debug{\string\kcatcode"#2 set to \number\kcatcode\pxkc@tmpa}} \fi %--------------------------------------- data tables -%%%% table +%% variables +%\[pxkc@B@@] : start codepoint of the block +%\[pxkc@G@@] : members of the group block +%\[pxkc@C@@] : kcatcode value of the category + +%% \pxkc@bslst +\def\pxkc@bslst{\@gobble} +%% \pxkc@bval{}{}{}{} \def\pxkc@bval#1#2#3#4{% #4 is unused for now \ifnum#1>\pxkc@ccv\else \ifnum#1<\tw@ \pxkc@okfalse \else - \@tempcnta=#3\relax \@tempcntb\@tempcnta \advance\@tempcntb\m@ne - \pxkc@issameblock\@tempcnta\@tempcntb + \@tempcnta=#3\relax + \@tempcntb\@tempcnta \advance\@tempcntb\m@ne + \pxkc@is@same@block\@tempcnta\@tempcntb \fi \ifpxkc@ok \pxkc@debug{defunct: #2}% - \@namedef{pxkc@B@@#2}{-1}% invalid + \@namedef{pxkc@B@@#2}{-1}% defunct \else \@namedef{pxkc@B@@#2}{#3}% - \edef\pxkc@bslst{\pxkc@bslst\pxkc@sep#2}\def\pxkc@sep{,}% + \edef\pxkc@bslst{\pxkc@bslst,#2}% \fi \fi} -\def\pxkc@bslst{}\def\pxkc@sep{} -\def\pxkc@cval#1#2{\@namedef{pxkc@C@@#1}{#2}} +%% \pxkc@gval{}{,...}{} \def\pxkc@gval#1#2#3{\@namedef{pxkc@G@@#1}{#2}} +%% \pxkc@cval{}{} +\def\pxkc@cval#1#2{\@namedef{pxkc@C@@#1}{#2}} \pxkc@cval{noncjk}{15} \pxkc@cval{kanji}{16} \pxkc@cval{han}{16} @@ -136,9 +221,8 @@ \pxkc@cval{cjk}{18} \pxkc@cval{hangul}{19} -%--------------------------------------- block tables - -%======================================= +%% Basic blocks +%B====================================== \pxkc@bval{1}{latn}{"0} {Basic Latin} \pxkc@bval{1}{latn1}{"80} {Latin-1 Supplement} \pxkc@bval{1}{latnA}{"100} {Latin Extended-A} @@ -202,6 +286,7 @@ \pxkc@bval{2}{lepc}{"1C00} {Lepcha} \pxkc@bval{2}{olck}{"1C50} {Ol Chiki} \pxkc@bval{2}{cyrlC}{"1C80} {Cyrillic Extended-C} +\pxkc@bval{3}{geor2}{"1C90} {Georgian Extended} \pxkc@bval{2}{sund1}{"1CC0} {Sundanese Supplement} \pxkc@bval{2}{sym38}{"1CD0} {Vedic Extensions} \pxkc@bval{1}{latn4}{"1D00} {Phonetic Extensions} @@ -341,7 +426,13 @@ \pxkc@bval{2}{phlp}{"10B80} {Psalter Pahlavi} \pxkc@bval{2}{orkh}{"10C00} {Old Turkic} \pxkc@bval{2}{hung}{"10C80} {Old Hungarian} +\pxkc@bval{3}{rohg}{"10D00} {Hanifi Rohingya} \pxkc@bval{2}{sym42}{"10E60} {Rumi Numeral Symbols} +\pxkc@bval{3}{yezi}{"10E80} {Yezidi} +\pxkc@bval{3}{sogo}{"10F00} {Old Sogdian} +\pxkc@bval{3}{sogd}{"10F30} {Sogdian} +\pxkc@bval{3}{chrs}{"10FB0} {Chorasmian} +\pxkc@bval{3}{elym}{"10FE0} {Elymaic} \pxkc@bval{2}{brah}{"11000} {Brahmi} \pxkc@bval{2}{kthi}{"11080} {Kaithi} \pxkc@bval{2}{sora}{"110D0} {Sora Sompeng} @@ -360,41 +451,58 @@ \pxkc@bval{2}{mong1}{"11660} {Mongolian Supplement} \pxkc@bval{2}{takr}{"11680} {Takri} \pxkc@bval{2}{ahom}{"11700} {Ahom} +\pxkc@bval{3}{dogr}{"11800} {Dogra} \pxkc@bval{2}{wara}{"118A0} {Warang Citi} +\pxkc@bval{3}{diak}{"11900} {Dives Akuru} +\pxkc@bval{3}{nand}{"119A0} {Nandinagari} \pxkc@bval{3}{zanb}{"11A00} {Zanabazar Square} \pxkc@bval{3}{soyo}{"11A50} {Soyombo} \pxkc@bval{2}{pauc}{"11AC0} {Pau Cin Hau} \pxkc@bval{2}{bhks}{"11C00} {Bhaiksuki} \pxkc@bval{2}{marc}{"11C70} {Marchen} \pxkc@bval{3}{gonm}{"11D00} {Masaram Gondi} +\pxkc@bval{3}{gong}{"11D60} {Gunjala Gondi} +\pxkc@bval{3}{maka}{"11EE0} {Makasar} +\pxkc@bval{3}{lisu1}{"11FB0} {Lisu Supplement} +\pxkc@bval{3}{taml1}{"11FC0} {Tamil Supplement} \pxkc@bval{1}{xsux}{"12000} {Cuneiform} \pxkc@bval{1}{xsux1}{"12400} {Cuneiform Numbers and Punctuation} \pxkc@bval{2}{xsux2}{"12480} {Early Dynastic Cuneiform} \pxkc@bval{2}{egyp}{"13000} {Egyptian Hieroglyphs} +\pxkc@bval{3}{egyp1}{"13430} {Egyptian Hieroglyph Format Controls} \pxkc@bval{2}{hluw}{"14400} {Anatolian Hieroglyphs} \pxkc@bval{2}{bamu1}{"16800} {Bamum Supplement} \pxkc@bval{2}{mroo}{"16A40} {Mro} \pxkc@bval{2}{bass}{"16AD0} {Bassa Vah} \pxkc@bval{2}{hmng}{"16B00} {Pahawh Hmong} +\pxkc@bval{3}{medf}{"16E40} {Medefaidrin} \pxkc@bval{2}{plrd}{"16F00} {Miao} \pxkc@bval{2}{cjk14}{"16FE0} {Ideographic Symbols and Punctuation} \pxkc@bval{2}{tang}{"17000} {Tangut} \pxkc@bval{2}{tang1}{"18800} {Tangut Components} +\pxkc@bval{3}{kits}{"18B00} {Khitan Small Script} +\pxkc@bval{3}{tang2}{"18D00} {Tangut Supplement} \pxkc@bval{2}{kana2}{"1B000} {Kana Supplement} \pxkc@bval{3}{kanaA}{"1B100} {Kana Extended-A} +\pxkc@bval{3}{kana3}{"1B130} {Small Kana Extension} \pxkc@bval{3}{nshu}{"1B170} {Nushu} \pxkc@bval{2}{dupl}{"1BC00} {Duployan} \pxkc@bval{2}{sym53}{"1BCA0} {Shorthand Format Controls} \pxkc@bval{1}{sym32}{"1D000} {Byzantine Musical Symbols} \pxkc@bval{1}{sym33}{"1D100} {Musical Symbols} \pxkc@bval{1}{sym34}{"1D200} {Ancient Greek Musical Notation} +\pxkc@bval{3}{sym58}{"1D2E0} {Mayan Numerals} \pxkc@bval{1}{sym35}{"1D300} {Tai Xuan Jing Symbols} \pxkc@bval{1}{sym36}{"1D360} {Counting Rod Numerals} \pxkc@bval{1}{sym37}{"1D400} {Mathematical Alphanumeric Symbols} \pxkc@bval{2}{sgnw}{"1D800} {Sutton SignWriting} \pxkc@bval{2}{glag1}{"1E000} {Glagolitic Supplement} +\pxkc@bval{3}{hmnp}{"1E100} {Nyiakeng Puachue Hmong} +\pxkc@bval{3}{wcho}{"1E2C0} {Wancho} \pxkc@bval{2}{mend}{"1E800} {Mende Kikakui} \pxkc@bval{2}{adlm}{"1E900} {Adlam} +\pxkc@bval{3}{sym59}{"1EC70} {Indic Siyaq Numbers} +\pxkc@bval{3}{sym61}{"1ED00} {Ottoman Siyaq Numbers} \pxkc@bval{2}{sym51}{"1EE00} {Arabic Mathematical Alphabetic Symbols} \pxkc@bval{2}{sym43}{"1F000} {Mahjong Tiles} \pxkc@bval{2}{sym44}{"1F030} {Domino Tiles} @@ -409,17 +517,22 @@ \pxkc@bval{2}{sym55}{"1F780} {Geometric Shapes Extended} \pxkc@bval{2}{sym56}{"1F800} {Supplemental Arrows-C} \pxkc@bval{2}{sym57}{"1F900} {Supplemental Symbols and Pictographs} +\pxkc@bval{3}{sym60}{"1FA00} {Chess Symbols} +\pxkc@bval{3}{sym62}{"1FA70} {Symbols and Pictographs Extended-A} +\pxkc@bval{3}{sym63}{"1FB00} {Symbols for Legacy Computing} \pxkc@bval{1}{haniB}{"20000} {CJK Unified Ideographs Extension B} \pxkc@bval{2}{haniC}{"2A700} {CJK Unified Ideographs Extension C} \pxkc@bval{2}{haniD}{"2B740} {CJK Unified Ideographs Extension D} \pxkc@bval{2}{haniE}{"2B820} {CJK Unified Ideographs Extension E} \pxkc@bval{3}{haniF}{"2CEB0} {CJK Unified Ideographs Extension F} \pxkc@bval{1}{hani2}{"2F800} {CJK Compatibility Ideographs Supplement} +\pxkc@bval{3}{haniG}{"30000} {CJK Unified Ideographs Extension G} \pxkc@bval{1}{spc07}{"E0000} {Tags} \pxkc@bval{1}{spc08}{"E0100} {Variation Selectors Supplement} \pxkc@bval{1}{spc09}{"F0000} {Supplementary Private Use Area-A} \pxkc@bval{1}{spc10}{"100000} {Supplementary Private Use Area-B} %======================================= +%% Block subdivisions \ifnum\pxkc@ccv<2 \else \pxkc@gval{cjk12}{cjk1a,cjk1b,cjk1c}{Halfwidth and Fullwidth Forms} \pxkc@bval{0}{cjk1a}{"FF01}{Halfwidth and Fullwidth Forms/Other} @@ -431,9 +544,16 @@ \pxkc@bval{0}{latnx}{"00A0}{Latin-1 Supplement/Other} \pxkc@bval{0}{latny}{"00C0}{Latin-1 Supplement/Latin} \fi - % -\edef\pxkc@foreachblk{\noexpand\@for\noexpand\x:={\pxkc@bslst}} -\let\pxkc@bval\relax\let\pxkc@cval\relax\let\pxkc@bslst\relax + +%% \pxkc@foreach@blocks +\edef\pxkc@foreach@blocks{% + \noexpand\@for\noexpand\pxkc@blk:={\pxkc@bslst}} + +%% clean up +\let\pxkc@bval\relax +\let\pxkc@cval\relax +\let\pxkc@gval\relax +\let\pxkc@bslst\relax %--------------------------------------- public interfaces @@ -442,75 +562,86 @@ % Here is given as a block name or a single character in the % block to be specified; 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 +\newcommand*\cjkcategory{% + \begingroup + \forcecjktoken + \expandafter\endgroup\pxkc@cjkcategory@}% read args +\def\pxkc@cjkcategory@#1#2{% + \ifnum2<1#2 % is a number + \edef\pxkc@arg{#2}% + \else + \@ifundefined{pxkc@C@@#2}{% + \pxkc@err@ivcsy{#2}\def\pxkc@arg{18}% + }{%else + \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@a#1{%{} + \@for\pxkc@blk:={#1}\do{% + \expandafter\pxkc@cjkcategory@b\expandafter{\pxkc@blk}}} \def\pxkc@cjkcategory@b#1{% - \pxkc@chkchr{#1}\ifnum\pxkc@cc>\pxkc@la - \pxkc@kcatcode{\pxkc@cc}{\pxkc@arg}% + \pxkc@get@cp{#1}\ifnum\pxkc@cp>"7F + \pxkc@kcatcode{\pxkc@cp}{\pxkc@arg}% FIXME: consider group \else - \pxkc@cjkcategory@c{#1}% + \edef\pxkc@blk{#1}% + \pxkc@set@cjkcategory \fi} -\def\pxkc@cjkcategory@c#1{% - \pxkc@letcs\pxkc@grp{pxkc@G@@#1}% - \ifx\pxkc@grp\relax - \pxkc@letcs\pxkc@blk{pxkc@B@@#1}% - \ifx\pxkc@blk\relax - \pxkc@err@ivbsy{#1}% - \else\ifnum\pxkc@blk<\z@ - \ifpxkc@warn@defunct \pxkc@warn@dfblk{#1}\fi + +%% \pxkc@set@cjkcategory +% Sees \pxkc@blk and \pxkc@arg. +\def\pxkc@set@cjkcategory{% + \pxkc@letcs\pxkc@tmpa{pxkc@G@@\pxkc@blk}% + \ifx\pxkc@tmpa\relax + \pxkc@letcs\pxkc@cp{pxkc@B@@\pxkc@blk}% + \ifx\pxkc@cp\relax + \pxkc@err@ivbsy{\pxkc@blk}% + \else\ifnum\pxkc@cp<\z@ % defunct + \ifpxkc@warn@defunct \pxkc@warn@dfblk{\pxkc@blk}\fi \else - \pxkc@kcatcode{\pxkc@blk}{\pxkc@arg}% + \pxkc@kcatcode{\pxkc@cp}{\pxkc@arg}% \fi\fi \else - \pxkc@expanded{\noexpand\pxkc@cjkcategory@a{\pxkc@grp}}% + \pxkc@expanded{\noexpand\pxkc@cjkcategory@a{\pxkc@tmpa}}% \fi} %%<*> \pxkc@cjkcategory{}{} -%%<*> \pxkc@cjkcategory@mccv{}{}{} -% Another entry point for internal use. +%%<*> \pxkc@cjkcategory@mccv{}{}{}{} +% Other entry points for internal use. \def\pxkc@cjkcategory#1#2{% - \edef\pxkc@arg{#2}% - \pxkc@cjkcategory@c{#1}} + \def\pxkc@blk{#1}\edef\pxkc@arg{#2}% + \pxkc@set@cjkcategory} \def\pxkc@cjkcategory@mccv#1#2#3#4{% \ifnum#1>\pxkc@mccv\else \ifnum#2<\pxkc@mccv\else \pxkc@cjkcategory{#3}{#4}% \fi\fi} -%% \pxkc@chkchr{} -\def\pxkc@chkchr#1{% - \afterassignment\pxkc@chkchr@a\chardef\pxkc@cc=`#1?\relax} -\def\pxkc@chkchr@a#1\relax{} +%% \pxkc@get@cp{} +\def\pxkc@get@cp#1{% + \afterassignment\pxkc@get@cp@a\chardef\pxkc@cp=`#1?\pxkc@mk} +\def\pxkc@get@cp@a#1\pxkc@mk{} %%<*> \cjkcategorymode{} % Invokes the cjk-category mode . -\def\cjkcategorymode#1{% - \pxkc@letcs\pxkc@nxt{pxkc@M@@#1}% - \ifx\pxkc@nxt\relax - \pxkc@err@ivmsy +\newcommand*\cjkcategorymode[1]{% + \pxkc@letcs\pxkc@next{pxkc@M@@#1}% + \ifx\pxkc@next\relax + \pxkc@err@ivmsy{#1}% \else \pxkc@warn@defunctfalse - \pxkc@nxt + \pxkc@next \pxkc@warn@defuncttrue \fi} %--------------------------------------- CJK category modes -%% Invariant blocks +%% variables +\let\pxkc@cat\relax +\let\pxkc@base@cat\relax + +%% \[pxkc@K@@] : Invariant blocks \def\do#1#2{\expandafter\chardef\csname pxkc@K@@#1\endcsname=#2 } -%======================================= +%C====================================== \do{latn} {15} % Basic Latin \do{hang1} {19} % Hangul Jamo \do{sym15} {18} % Enclosed Alphanumerics @@ -546,8 +677,11 @@ \do{cjk14} {18} % Ideographic Symbols and Punctuation \do{tang} {18} % Tangut \do{tang1} {18} % Tangut Components +\do{kits} {18} % Khitan Small Script +\do{tang2} {18} % Tangut Supplement \do{kana2} {17} % Kana Supplement \do{kanaA} {17} % Kana Extended-A +\do{kana3} {17} % Small Kana Extension \do{nshu} {18} % Nushu \do{sym45} {18} % Enclosed Alphanumeric Supplement \do{cjk13} {18} % Enclosed Ideographic Supplement @@ -557,23 +691,24 @@ \do{haniE} {16} % CJK Unified Ideographs Extension E \do{haniF} {16} % CJK Unified Ideographs Extension F \do{hani2} {16} % CJK Compatibility Ideographs Supplement +\do{haniG} {16} % CJK Unified Ideographs Extension G %======================================= -%%%% cjkcategory modes -\def\pxkc@resetcjkcat#1{% +%% \pxkc@reset@all{} +\def\pxkc@reset@all#1{% \chardef\pxkc@base@cat=#1\relax - \pxkc@foreachblk\do{% - \pxkc@letcs\pxkc@cat{pxkc@K@@\x}% + \pxkc@foreach@blocks\do{% + \pxkc@letcs\pxkc@cat{pxkc@K@@\pxkc@blk}% \ifx\pxkc@cat\relax \let\pxkc@cat\pxkc@base@cat \fi - \pxkc@kcatcode{\@nameuse{pxkc@B@@\x}}{\pxkc@cat}}% + \pxkc@kcatcode{\@nameuse{pxkc@B@@\pxkc@blk}}{\pxkc@cat}}% \ifnum\pxkc@mccv<2 \pxkc@cjkcategory{cjk12}{18}% \fi} -%======================================= +%P====================================== %% 'forcecjk' \def\pxkc@M@@forcecjk{% - \pxkc@resetcjkcat{18}% + \pxkc@reset@all{18}% } %% 'prefercjk' \def\pxkc@M@@prefercjk{% @@ -627,7 +762,7 @@ } %% 'prefernoncjk' \def\pxkc@M@@prefernoncjk{% - \pxkc@resetcjkcat{15}% + \pxkc@reset@all{15}% } %======================================= %% 'default' @@ -637,64 +772,110 @@ \pxkc@cjkcategory@mccv{3}{3}{latnA}{15}% } -%%%% \showcjkcategory -\def\showcjkcategory{% - \pxkc@foreachblk\do{% - \expandafter\ifx\csname pxkc@G@@\x\endcsname\relax - \typeout{\x\space= \the\kcatcode\@nameuse{pxkc@B@@\x}}% - \fi}} +%--------------------------------------- miscellaneous accessories -%%-------- \withcjktokendisabled, etc. +%%<*> \showcjkcategory +\newcommand*\showcjkcategory{% + \pxkc@foreach@blocks\do{% + \@ifundefined{pxkc@B@@\pxkc@blk}{}{%else + \typeout{\pxkc@blk\space= \the\kcatcode\@nameuse{pxkc@B@@\pxkc@blk}}% + }}} -%% \pxkc@genprobe -\def\pxkc@genprobe{% +%--------------------------------------- get current cjktoken state + +%% variables +\let\pxkc@ctmode\relax + +\ifx\currentcjktoken\@undefined %<*!e-pTeX> + +%% \pxkc@make@probe +\def\pxkc@make@probe{% \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 +\begingroup \kcatcode"3040=15 \kcatcode"30A0=18 + \disablecjktoken\pxkc@make@probe \global\let\pxkc@prb@d\pxkc@tmpa + \enablecjktoken\pxkc@make@probe \global\let\pxkc@prb@e\pxkc@tmpa + \forcecjktoken\pxkc@make@probe \global\let\pxkc@prb@f\pxkc@tmpa +\endgroup + +%% \pxkc@get@cjktoken@mode\CS +\def\pxkc@get@cjktoken@mode#1{% + \begingroup + \kcatcode"3040=15 \kcatcode"30A0=18 \pxkc@make@probe \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} + \else \global\chardef\pxkc@gtmpa\@cclv + \fi\fi\fi + \endgroup + \let#1\pxkc@gtmpa} + +% The method does not work on new upTeX, but running LaTeX +% on new upTeX without e-TeX is highly improbable.... +\ifx\pxkc@prb@d\pxkc@prb@e + \def\pxkc@get@cjktoken@mode#1{% + \chardef#1\@cclv} % always fail +\fi + +\else %<*e-pTeX> + +\def\pxkc@get@cjktoken@mode#1{% + \chardef#1\ifcase\currentcjktoken + \@ne \or \z@ \or \tw@ \or \@cclv + \fi} + +\fi % -%%<+> \getcjktokenmode +%%<*> \getcjktokenmode % Returns the value showing current mode to \thecjktokenmode % 0: \disablecjktoken % 1: \enablecjktoken % 2: \forcecjktoken -\def\getcjktokenmode{\pxkc@getcjktokmod\thecjktokenmode} - -%%<*> \setcjktokenmode{} -\def\pxkc@setcjktokmod#1{% - \ifcase#1\disablecjktoken\or\enablecjktoken\or\forcecjktoken\fi} +% 255: failure +\newcommand*\getcjktokenmode{% + \pxkc@get@cjktoken@mode\thecjktokenmode} + +%%<*> \setcjktokenmode{} +\newcommand*\setcjktokenmode[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} +\newcommand*\withcjktokendisabled{% + \pxkc@with@cjktoken@mode\disablecjktoken\@iden} +\newcommand*\withcjktokenenabled{% + \pxkc@with@cjktoken@mode\enablecjktoken\@iden} +\newcommand*\withcjktokenforced{% + \pxkc@with@cjktoken@mode\forcecjktoken\@iden} +\newcommand*\withcjktokendisabledex{% + \pxkc@with@cjktoken@mode\disablecjktoken} +\newcommand*\withcjktokenenabledex{% + \pxkc@with@cjktoken@mode\enablecjktoken} +\newcommand*\withcjktokenforcedex{% + \pxkc@with@cjktoken@mode\forcecjktoken} +\def\pxkc@with@cjktoken@mode#1{% + \pxkc@get@cjktoken@mode\pxkc@ctmode + \ifnum\pxkc@ctmode=\@cclv \pxkc@with@cjktoken@mode@b \fi + #1% + \pxkc@with@cjktoken@mode@a} +\def\pxkc@with@cjktoken@mode@a#1#2{% + #1{#2}% + \setcjktokenmode\pxkc@ctmode} +\def\pxkc@with@cjktoken@mode@b{% + \global\let\pxkc@with@cjktoken@mode@b\relax + \PackageWarning\pxkc@pkgname + {Failed in getting current cjktoken mode,\MessageBreak + reported}} + +%--------------------------------------- initial setup + +\ifx\pxkc@ccmode@opt\relax\else + \cjkcategorymode{\pxkc@ccmode@opt} \fi -%%------ all done +%--------------------------------------- all done \endinput %% EOF -- cgit v1.2.3