summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty')
-rw-r--r--Master/texmf-dist/tex/latex/pxcjkcat/pxcjkcat.sty499
1 files changed, 340 insertions, 159 deletions
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{<message>}
\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{<csname-b>}
\def\pxkc@letcs#1#2{%
\expandafter\let\expandafter#1\csname#2\endcsname}
+
%% \pxkc@expanded{<text>}
\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@@<block>] : start codepoint of the block
+%\[pxkc@G@@<block>] : members of the group block
+%\[pxkc@C@@<category>] : kcatcode value of the category
+
+%% \pxkc@bslst
+\def\pxkc@bslst{\@gobble}
+%% \pxkc@bval{<min_ccv>}{<block>}{<ucs>}{<full_name>}
\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{<gblock>}{<block>,...}{<full_name>}
\def\pxkc@gval#1#2#3{\@namedef{pxkc@G@@#1}{#2}}
+%% \pxkc@cval{<category>}{<value>}
+\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 <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
+\newcommand*\cjkcategory{%
+ \begingroup
+ \forcecjktoken
+ \expandafter\endgroup\pxkc@cjkcategory@}% read args
+\def\pxkc@cjkcategory@#1#2{%
+ \ifnum2<1#2 % <category> 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{%{<block>}
+ \@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{<block>}{<kcatcode>}
-%%<*> \pxkc@cjkcategory@mccv{<mccv>}{<block>}{<kcatcode>}
-% Another entry point for internal use.
+%%<*> \pxkc@cjkcategory@mccv{<minmccv>}{<maxmccv>}{<block>}{<kcatcode>}
+% 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{<arg>}
-\def\pxkc@chkchr#1{%
- \afterassignment\pxkc@chkchr@a\chardef\pxkc@cc=`#1?\relax}
-\def\pxkc@chkchr@a#1\relax{}
+%% \pxkc@get@cp{<arg>}
+\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{<mode>}
% Invokes the cjk-category mode <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@@<block>] : 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{<kcatcode>}
+\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 %</e-pTeX>
-%%<+> \getcjktokenmode
+%%<*> \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}
+% 255: failure
+\newcommand*\getcjktokenmode{%
+ \pxkc@get@cjktoken@mode\thecjktokenmode}
+
+%%<*> \setcjktokenmode{<value>}
+\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