diff options
author | Norbert Preining <norbert@preining.info> | 2022-07-21 03:00:45 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-07-21 03:00:45 +0000 |
commit | 5cf5182b44c08dfb2bc977ce5aa5ca6d03b36923 (patch) | |
tree | b32d29c9fb1289ccc994ee099b27c4a45b621a0a /macros/jptex/latex/pxcjkcat | |
parent | 2773132ea593028dafe764f7560fd94ecb827d3d (diff) |
CTAN sync 202207210300
Diffstat (limited to 'macros/jptex/latex/pxcjkcat')
-rw-r--r-- | macros/jptex/latex/pxcjkcat/LICENSE | 21 | ||||
-rw-r--r-- | macros/jptex/latex/pxcjkcat/README-ja.md | 55 | ||||
-rw-r--r-- | macros/jptex/latex/pxcjkcat/README.md | 101 | ||||
-rw-r--r-- | macros/jptex/latex/pxcjkcat/pxcjkcat.pdf | bin | 0 -> 197668 bytes | |||
-rw-r--r-- | macros/jptex/latex/pxcjkcat/pxcjkcat.sty | 1130 | ||||
-rw-r--r-- | macros/jptex/latex/pxcjkcat/pxcjkcat.tex | 999 |
6 files changed, 2306 insertions, 0 deletions
diff --git a/macros/jptex/latex/pxcjkcat/LICENSE b/macros/jptex/latex/pxcjkcat/LICENSE new file mode 100644 index 0000000000..71f0e1f5a2 --- /dev/null +++ b/macros/jptex/latex/pxcjkcat/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +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 +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/macros/jptex/latex/pxcjkcat/README-ja.md b/macros/jptex/latex/pxcjkcat/README-ja.md new file mode 100644 index 0000000000..4c93dc9b04 --- /dev/null +++ b/macros/jptex/latex/pxcjkcat/README-ja.md @@ -0,0 +1,55 @@ +PXcjkcat パッケージバンドル +=========================== + +LaTeX: upTeX の和文文字カテゴリを扱う LaTeX 上のインタフェース + +upTeX の和文文字カテゴリ(kcatcode)を扱う LaTeX 上のインタフェースを +提供する。 + +### 前提環境 + + * フォーマット: LaTeX + * エンジン: upTeX、pTeX-ng + * DVIウェア: 不問 + +### インストール + + - `*.sty` → $TEXMF/tex/platex/PXcjkcat + +### ライセンス + +本パッケージは MIT ライセンスの下で配布される。 + + +pxcjkcat パッケージ ー 本体 +--------------------------- + +詳細についてはマニュアル `pxcjkcat.pdf` を参照されたい。 + + +更新履歴 +-------- + + * Version 1.4 〈2022/06/06〉 + - `\cjkcategory` 命令でブロックを符号値で指定可能にした。 + + * Version 1.3 〈2022/05/28〉 + - upTeX 1.25 版以降のブロック定義を新たに CCV 4 と規定する。 + - (試験的) key-value オプションのサポート。 + + * Version 1.2 〈2022/05/25〉 + - 最新の upTeX に対応させる。 + - `nomode` オプションを追加。 + - `ccv+` オプションの別名 `real` を追加。 + + * Version 1.1 〈2018/04/01〉 + - upTeX 1.23 版以降に対応する CCV 3(`ccv3` オプション)を追加した。 + - `ccv+` オプションを追加。 + + * Version 1.0 〈2012/09/22〉 + - PXbase バンドル中の pxcjkcat パッケージを分離して本バンドルを作成。 + - pxcjkcat の中身は PXbase 0.5 版収録の「0.4a 版」と同一。 + +-------------------- +Takayuki YATO (aka. "ZR") +https://github.com/zr-tex8r diff --git a/macros/jptex/latex/pxcjkcat/README.md b/macros/jptex/latex/pxcjkcat/README.md new file mode 100644 index 0000000000..11fcfe0132 --- /dev/null +++ b/macros/jptex/latex/pxcjkcat/README.md @@ -0,0 +1,101 @@ +PXcjkcat Package +================ + +LaTeX: LaTeX interface for the CJK category codes of upTeX + +The package provides management of the CJK category code (‘kcatcode’) +table of the upTeX extended TeX engine. + +Package options are available for tailored use in the cases of documents +that are principally written in Japanese, or principally written in English +or other Western languages. + +### System Requirements + + * TeX format: LaTeX. + * TeX engine: upTeX, pTeX-ng. + * DVI-ware: Anything. + +### Installation + +In the distribution in conformance with TDS 1.1: + + - `*.sty` → $TEXMF/tex/platex/PXcjkcat + +### License + +This package is distributed under the MIT License. + + +The pxcjkcat Package ー main +---------------------------- + +Please refer to the manual `pxcjkcat.pdf` (in Japanese) for detail. + +Below is described the most basic use. + +### Overview + +The upTeX engine is an extention to the TeX engine and is developed by +Takuji TANAKA since 2007. This extension mainly aims in providing +better Unicode support to the pTeX engine, which has long been the +de facto standard of the TeX engine in Japan. The upTeX engine inherits +the basic architecture of pTeX, and only Japanese processing (which is +already on multi-byte basis in pTeX) is lift to the full Unicode range, +and non-Japanese processing remains on 8-bit basis (just like the +original TeX engine). Thus one can typeset UTF-8 encoded documents that +contain all kinds of Unicode letters with use of upTeX accompanied with +the standard techniques for handling UTF-8 letters in the traditional +8-bit TeX engines (such as pdfTeX). + +Since upTeX could treat all the Unicode letters either as non-CJK or +CJK letter, it has the mechanism (called “CJK category table”) for +specifying which letters should be treated as CJK. The pxcjkcat package +provides a concise and user-friendly LaTeX interface to the mechanism. + +### Basic Usage + +If your document is mainly in English (or some other Western language) +and has sporadic occurrences of Japanese words/phrases, then put the +following lines in the preamble: + + \usepackage[prefernoncjk]{pxcjkcat} + \usepackage[utf8]{inputenc} + +If your document is mainly in Japanese, then put the following lines +in the preamble: + + \usepackage[ccv3,japanesevar]{pxcjkcat} + \usepackage[utf8]{inputenc} + +The former setting treats the “CJK-ambiguous” punctuation symbols as +non-CJK letters, while the latter as CJK letters. Of course, your +document must in encoded in UTF-8. + +### A Sample Document + + % upLaTeX; UTF-8 + \documentclass[a4paper]{article} + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage[prefernoncjk]{pxcjkcat} + \usepackage[french]{babel} + \begin{document} + \emph{Je suis un chat} (吾輩は猫である) est un roman japonais + écrit par Sōseki Natsume (夏目漱石) de 1905 à 1906 + dans la revue littéraire \emph{Hototogisu} (ホトトギス). + \end{document} + + +Revision History +---------------- + + * Version 1.4 〈2022/06/06〉 + * Version 1.3 〈2022/05/28〉 + * Version 1.2 〈2022/05/25〉 + * Version 1.1 〈2018/04/01〉 + * Version 1.0 〈2012/09/22〉 + +-------------------- +Takayuki YATO (aka. "ZR") +https://github.com/zr-tex8r diff --git a/macros/jptex/latex/pxcjkcat/pxcjkcat.pdf b/macros/jptex/latex/pxcjkcat/pxcjkcat.pdf Binary files differnew file mode 100644 index 0000000000..8772b88c4a --- /dev/null +++ b/macros/jptex/latex/pxcjkcat/pxcjkcat.pdf diff --git a/macros/jptex/latex/pxcjkcat/pxcjkcat.sty b/macros/jptex/latex/pxcjkcat/pxcjkcat.sty new file mode 100644 index 0000000000..04fad06654 --- /dev/null +++ b/macros/jptex/latex/pxcjkcat/pxcjkcat.sty @@ -0,0 +1,1130 @@ +%% +%% 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}[2022/06/06 v1.4 PX cjk-category mode] +\def\pxkc@pkgname{pxcjkcat} + +%% code guards +\edef\pxkc@restore@codes{% +\catcode33=\the\catcode33% +\catcode34=\the\catcode34% +\catcode39=\the\catcode39% +\catcode43=\the\catcode43% +\catcode45=\the\catcode45% +\catcode46=\the\catcode46% +\catcode47=\the\catcode47% +\catcode58=\the\catcode58% +\catcode60=\the\catcode60% +\catcode62=\the\catcode62% +\catcode63=\the\catcode63% +\catcode94=\the\catcode94% +\catcode96=\the\catcode96% +\catcode239=\the\catcode239% +\endlinechar=\the\endlinechar% +\relax}% +\catcode33=12 % <!> +\catcode34=12 % <"> +\catcode39=12 % <'> +\catcode43=12 % <+> +\catcode45=12 % <-> +\catcode46=12 % <.> +\catcode47=12 % </> +\catcode58=12 % <:> +\catcode60=12 % <<> +\catcode62=12 % <>> +\catcode63=12 % <?> +\catcode94=7 % <^> +\catcode96=12 % <`> +\catcode239=13 % +\AtEndOfPackage{% +\pxkc@restore@codes +\let\pxkc@restore@codes\relax} + +%--------------------------------------- general + +%% error messages +\def\pxkc@error{\PackageError\pxkc@pkgname} +\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@err@naltn{% + \PackageError\pxkc@pkgname + {Change to cjk-category of 'latn' is forbidden}% + {\@eha}} +\def\pxkc@warn@dfblk#1{% + \PackageWarning\pxkc@pkgname + {Unsupported Unicode block '#1' is\MessageBreak + specified}} +\def\pxkc@err@ivfmt#1{% + \PackageError\pxkc@pkgname + {Block specs are given in bad format% + \ifx\detokenize\@undefined\else + :\MessageBreak \space'\detokenize{#1}'\fi}% + {\@eha}} + +%% \pxkc@debug{<message>} +\ifx\bxUseDebug\@undefined +\let\pxkc@debug\@gobble +\else +\def\pxkc@debug#1{\typeout{**[\pxkc@pkgname] #1}} +\fi + +%% packages +\RequirePackage{keyval}\relax + +%% unique tokens +\def\pxkc@end{\pxkc@end@} +\def\pxkc@mt{\pxkc@mt@} +\let\pxkc@mk\indent + +%% variables +\newif\ifpxkc@ok +\newif\ifpxkc@warn@bad \pxkc@warn@badtrue +\let\pxkc@good@mccv\relax +\let\pxkc@mccv\relax +\let\pxkc@ccmode@opt\relax +\let\pxkc@arg\relax +\let\pxkc@blk\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@next{#1}\pxkc@next} + +%% \pxkc@setup{<key>=<value>,...} +\def\pxkc@setup#1{% + \let\pxkc@KV@errx\KV@errx \def\KV@errx##1{\@unknownoptionerror}% + \setkeys{\pxkc@pkgname}{#1} + \let\KV@errx\pxkc@KV@errx} + +%% \pxkc@handle@key{<key>}{<value>}{<name>} +\def\pxkc@handle@key#1#2#3{% + \expandafter\let\expandafter\pxkc@tmpa\csname pxkc@#3\endcsname + \ifx\pxkc@tmpa\relax + \PackageError\pxkc@pkgname + {Invalid value for key '#1':\MessageBreak\@spaces#2}% + {\@eha}% + \else \pxkc@tmpa + \fi} + +%--------------------------------------- package options + +%% mode CCV options +\DeclareOption{ccv1}{\chardef\pxkc@mccv=1 } +\DeclareOption{ccv2}{\chardef\pxkc@mccv=2 } +\DeclareOption{ccv3}{\chardef\pxkc@mccv=3 } +\DeclareOption{ccv4}{\chardef\pxkc@mccv=4 } +\DeclareOption{ccv+}{\chardef\pxkc@mccv=0 } +\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 +%% key-value options +\define@key{\pxkc@pkgname}{ccv}{% + \pxkc@handle@key{ccv}{#1}{kv@ccv@@#1}} +\@namedef{pxkc@kv@ccv@@1}{\chardef\pxkc@mccv=1 } +\@namedef{pxkc@kv@ccv@@2}{\chardef\pxkc@mccv=2 } +\@namedef{pxkc@kv@ccv@@3}{\chardef\pxkc@mccv=3 } +\@namedef{pxkc@kv@ccv@@4}{\chardef\pxkc@mccv=4 } +\@namedef{pxkc@kv@ccv@@real}{\chardef\pxkc@mccv=0 } +%% dispatch +\DeclareOption*{% + \@ifundefined{pxkc@M@@\CurrentOption}{% key option + \expandafter\pxkc@setup\expandafter{\CurrentOption}% + }{%else; mode option + \chardef\pxkc@good@mccv=\@nameuse{pxkc@M@@\CurrentOption}\relax + \edef\pxkc@ccmode@opt{\CurrentOption}}} +\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 + +%% engine version +\chardef\pxkc@uptex@version=0 +\def\pxkc@next#1.#2#3#4\pxkc@end{% + \ifx\pxkc@mk#1\pxkc@mk \ifnum99<1#2#3 + \chardef\pxkc@uptex@version=\the\uptexversion#2#3\relax + \fi\fi} +\ifx\uptexversion\@undefined\else \ifx\uptexrevision\@undefined\else + \expandafter\pxkc@next\uptexrevision...\pxkc@end +\fi\fi + +%%-------- classification version check + +%% \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@is@same@block{"A0}{"C0}\ifpxkc@ok + \chardef\pxkc@ccv=2 % v0.29+ + \else\ifnum\pxkc@uptex@version<125 + \chardef\pxkc@ccv=3 % v1.23+ + \else + \chardef\pxkc@ccv=4 % v1.25+ + \fi\fi +\fi +\ifx\bxDebugCcv\@undefined\else % override + \chardef\pxkc@ccv=\bxDebugCcv\relax +\fi +\pxkc@debug{upTeX version \number\pxkc@uptex@version} +\pxkc@debug{CJK category version \number\pxkc@ccv} + +%% Here show warning about the buggy engine version (v1.24) +\ifnum\pxkc@ccv=1 \ifnum\pxkc@uptex@version=124 + \PackageWarningNoLine\pxkc@pkgname + {The upTeX engine of version 1.24 is used!\MessageBreak + This version has a bug on CJK category,\MessageBreak + and here real CCV is regard as 1} +\fi\fi + +%% 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 + +%% 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 + +%--------------------------------------- helpers + +%% constants +\chardef\pxkc@ascii@max="7F + +%% \pxkc@cond\ifXXX...\fi{<true>}{<false>} +\def\pxkc@cond#1\fi{% + #1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} + +%% \pxkc@get@jchar{<charcode>} +\def\pxkc@get@jchar#1{% + \begingroup + \forcecjktoken + \kansujichar\@ne=#1\relax + \xdef\pxkc@jchar{\kansuji\@ne}% + \endgroup} + +%% \pxkc@kcatcode{<charcode>}{<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@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 + +%% variables +%\[pxkc@B@@<block>] : start charcode 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} +\def\pxkc@bbslst{} +%% \pxkc@bval{<min_ccv>}{<block>}{<charcode>}{<full_name>} +\def\pxkc@bval#1#2#3#4{% #4 is unused for now + \ifnum#1<\z@\else + % check if min_ccv >= 2 (now min_ccv has no other role) + \ifnum#1<\tw@ \pxkc@okfalse + \else + \@tempcnta=#3\relax + \@tempcntb\@tempcnta \advance\@tempcntb\m@ne + \pxkc@is@same@block\@tempcnta\@tempcntb + \fi + \ifpxkc@ok % bad + \@namedef{pxkc@B@@#2}{-1}% + \edef\pxkc@bbslst{\pxkc@bbslst\space#2}% + \else\ifnum#3=\z@ % 'latn' + \@namedef{pxkc@B@@#2}{0}% + \else + \@namedef{pxkc@B@@#2}{#3}% + \edef\pxkc@bslst{\pxkc@bslst,#2}% + \fi\fi + \fi} +%% \pxkc@gval{<gblock>}{<block>,...}{<full_name>} +\def\pxkc@gval#1#2#3{\@namedef{pxkc@G@@#1}{#2}} + +%% \pxkc@cval{<category>}{<kcatcode>} +\def\pxkc@cval#1#2{\@namedef{pxkc@C@@#1}{#2}} +\pxkc@cval{noncjk}{15} +\pxkc@cval{kanji}{16} +\pxkc@cval{han}{16} +\pxkc@cval{kana}{17} +\pxkc@cval{cjk}{18} +\pxkc@cval{hangul}{19} + +%% 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} +\pxkc@bval{1}{latnB}{"180} {Latin Extended-B} +\pxkc@bval{1}{latn2}{"250} {IPA Extensions} +\pxkc@bval{1}{sym01}{"2B0} {Spacing Modifier Letters} +\pxkc@bval{1}{sym02}{"300} {Combining Diacritical Marks} +\pxkc@bval{1}{grek}{"370} {Greek and Coptic} +\pxkc@bval{1}{cyrl}{"400} {Cyrillic} +\pxkc@bval{1}{cyrl1}{"500} {Cyrillic Supplement} +\pxkc@bval{1}{armn}{"530} {Armenian} +\pxkc@bval{1}{hebr}{"590} {Hebrew} +\pxkc@bval{1}{arab}{"600} {Arabic} +\pxkc@bval{1}{syrc}{"700} {Syriac} +\pxkc@bval{1}{arab1}{"750} {Arabic Supplement} +\pxkc@bval{1}{thaa}{"780} {Thaana} +\pxkc@bval{1}{nkoo}{"7C0} {NKo} +\pxkc@bval{2}{samr}{"800} {Samaritan} +\pxkc@bval{2}{mand}{"840} {Mandaic} +\pxkc@bval{3}{syrc1}{"860} {Syriac Supplement} +\pxkc@bval{2}{arabA}{"8A0} {Arabic Extended-A} +\pxkc@bval{1}{deva}{"900} {Devanagari} +\pxkc@bval{1}{beng}{"980} {Bengali} +\pxkc@bval{1}{guru}{"A00} {Gurmukhi} +\pxkc@bval{1}{gujr}{"A80} {Gujarati} +\pxkc@bval{1}{orya}{"B00} {Oriya} +\pxkc@bval{1}{taml}{"B80} {Tamil} +\pxkc@bval{1}{telu}{"C00} {Telugu} +\pxkc@bval{1}{knda}{"C80} {Kannada} +\pxkc@bval{1}{mlym}{"D00} {Malayalam} +\pxkc@bval{1}{sinh}{"D80} {Sinhala} +\pxkc@bval{1}{thai}{"E00} {Thai} +\pxkc@bval{1}{laoo}{"E80} {Lao} +\pxkc@bval{1}{tibt}{"F00} {Tibetan} +\pxkc@bval{1}{mymr}{"1000} {Myanmar} +\pxkc@bval{1}{geor}{"10A0} {Georgian} +\pxkc@bval{1}{hang1}{"1100} {Hangul Jamo} +\pxkc@bval{1}{ethi}{"1200} {Ethiopic} +\pxkc@bval{1}{ethi1}{"1380} {Ethiopic Supplement} +\pxkc@bval{1}{cher}{"13A0} {Cherokee} +\pxkc@bval{1}{cans}{"1400} {Unified Canadian Aboriginal Syllabics} +\pxkc@bval{1}{ogam}{"1680} {Ogham} +\pxkc@bval{1}{runr}{"16A0} {Runic} +\pxkc@bval{1}{tglg}{"1700} {Tagalog} +\pxkc@bval{1}{hano}{"1720} {Hanunoo} +\pxkc@bval{1}{buhd}{"1740} {Buhid} +\pxkc@bval{1}{tagb}{"1760} {Tagbanwa} +\pxkc@bval{1}{khmr}{"1780} {Khmer} +\pxkc@bval{1}{mong}{"1800} {Mongolian} +\pxkc@bval{2}{cans1}{"18B0} {Unified Canadian Aboriginal Syllabics Extended} +\pxkc@bval{1}{limb}{"1900} {Limbu} +\pxkc@bval{1}{tale}{"1950} {Tai Le} +\pxkc@bval{1}{talu}{"1980} {New Tai Lue} +\pxkc@bval{1}{khmr1}{"19E0} {Khmer Symbols} +\pxkc@bval{1}{bugi}{"1A00} {Buginese} +\pxkc@bval{2}{lana}{"1A20} {Tai Tham} +\pxkc@bval{2}{sym52}{"1AB0} {Combining Diacritical Marks Extended} +\pxkc@bval{1}{bali}{"1B00} {Balinese} +\pxkc@bval{2}{sund}{"1B80} {Sundanese} +\pxkc@bval{2}{batk}{"1BC0} {Batak} +\pxkc@bval{2}{lepc}{"1C00} {Lepcha} +\pxkc@bval{2}{olck}{"1C50} {Ol Chiki} +\pxkc@bval{2}{cyrlC}{"1C80} {Cyrillic Extended-C} +\pxkc@bval{4}{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} +\pxkc@bval{1}{latn5}{"1D80} {Phonetic Extensions Supplement} +\pxkc@bval{1}{sym03}{"1DC0} {Combining Diacritical Marks Supplement} +\pxkc@bval{1}{latn3}{"1E00} {Latin Extended Additional} +\pxkc@bval{1}{grek1}{"1F00} {Greek Extended} +\pxkc@bval{1}{sym04}{"2000} {General Punctuation} +\pxkc@bval{1}{sym05}{"2070} {Superscripts and Subscripts} +\pxkc@bval{1}{sym06}{"20A0} {Currency Symbols} +\pxkc@bval{1}{sym07}{"20D0} {Combining Diacritical Marks for Symbols} +\pxkc@bval{1}{sym08}{"2100} {Letterlike Symbols} +\pxkc@bval{1}{sym09}{"2150} {Number Forms} +\pxkc@bval{1}{sym10}{"2190} {Arrows} +\pxkc@bval{1}{sym11}{"2200} {Mathematical Operators} +\pxkc@bval{1}{sym12}{"2300} {Miscellaneous Technical} +\pxkc@bval{1}{sym13}{"2400} {Control Pictures} +\pxkc@bval{1}{sym14}{"2440} {Optical Character Recognition} +\pxkc@bval{1}{sym15}{"2460} {Enclosed Alphanumerics} +\pxkc@bval{1}{sym16}{"2500} {Box Drawing} +\pxkc@bval{1}{sym17}{"2580} {Block Elements} +\pxkc@bval{1}{sym18}{"25A0} {Geometric Shapes} +\pxkc@bval{1}{sym19}{"2600} {Miscellaneous Symbols} +\pxkc@bval{1}{sym20}{"2700} {Dingbats} +\pxkc@bval{1}{sym21}{"27C0} {Miscellaneous Mathematical Symbols-A} +\pxkc@bval{1}{sym22}{"27F0} {Supplemental Arrows-A} +\pxkc@bval{1}{brai}{"2800} {Braille Patterns} +\pxkc@bval{1}{sym23}{"2900} {Supplemental Arrows-B} +\pxkc@bval{1}{sym24}{"2980} {Miscellaneous Mathematical Symbols-B} +\pxkc@bval{1}{sym25}{"2A00} {Supplemental Mathematical Operators} +\pxkc@bval{1}{sym26}{"2B00} {Miscellaneous Symbols and Arrows} +\pxkc@bval{1}{glag}{"2C00} {Glagolitic} +\pxkc@bval{1}{latnC}{"2C60} {Latin Extended-C} +\pxkc@bval{1}{copt}{"2C80} {Coptic} +\pxkc@bval{1}{geor1}{"2D00} {Georgian Supplement} +\pxkc@bval{1}{tfng}{"2D30} {Tifinagh} +\pxkc@bval{1}{ethi2}{"2D80} {Ethiopic Extended} +\pxkc@bval{2}{cyrlA}{"2DE0} {Cyrillic Extended-A} +\pxkc@bval{1}{sym27}{"2E00} {Supplemental Punctuation} +\pxkc@bval{1}{cjk01}{"2E80} {CJK Radicals Supplement} +\pxkc@bval{1}{cjk02}{"2F00} {Kangxi Radicals} +\pxkc@bval{1}{cjk03}{"2FF0} {Ideographic Description Characters} +\pxkc@bval{1}{cjk04}{"3000} {CJK Symbols and Punctuation} +\pxkc@bval{1}{hira}{"3040} {Hiragana} +\pxkc@bval{1}{kana}{"30A0} {Katakana} +\pxkc@bval{1}{bopo}{"3100} {Bopomofo} +\pxkc@bval{1}{hang2}{"3130} {Hangul Compatibility Jamo} +\pxkc@bval{1}{cjk05}{"3190} {Kanbun} +\pxkc@bval{1}{bopo1}{"31A0} {Bopomofo Extended} +\pxkc@bval{1}{cjk06}{"31C0} {CJK Strokes} +\pxkc@bval{1}{kana1}{"31F0} {Katakana Phonetic Extensions} +\pxkc@bval{1}{cjk07}{"3200} {Enclosed CJK Letters and Months} +\pxkc@bval{1}{cjk08}{"3300} {CJK Compatibility} +\pxkc@bval{1}{haniA}{"3400} {CJK Unified Ideographs Extension A} +\pxkc@bval{1}{sym28}{"4DC0} {Yijing Hexagram Symbols} +\pxkc@bval{1}{hani}{"4E00} {CJK Unified Ideographs} +\pxkc@bval{1}{yiii}{"A000} {Yi Syllables} +\pxkc@bval{1}{yiii1}{"A490} {Yi Radicals} +\pxkc@bval{2}{lisu}{"A4D0} {Lisu} +\pxkc@bval{2}{vaii}{"A500} {Vai} +\pxkc@bval{2}{cyrlB}{"A640} {Cyrillic Extended-B} +\pxkc@bval{2}{bamu}{"A6A0} {Bamum} +\pxkc@bval{1}{sym29}{"A700} {Modifier Tone Letters} +\pxkc@bval{1}{latnD}{"A720} {Latin Extended-D} +\pxkc@bval{1}{sylo}{"A800} {Syloti Nagri} +\pxkc@bval{2}{sym39}{"A830} {Common Indic Number Forms} +\pxkc@bval{1}{phag}{"A840} {Phags-pa} +\pxkc@bval{2}{saur}{"A880} {Saurashtra} +\pxkc@bval{2}{deva1}{"A8E0} {Devanagari Extended} +\pxkc@bval{2}{kali}{"A900} {Kayah Li} +\pxkc@bval{2}{rjng}{"A930} {Rejang} +\pxkc@bval{2}{hangA}{"A960} {Hangul Jamo Extended-A} +\pxkc@bval{2}{java}{"A980} {Javanese} +\pxkc@bval{2}{mymrB}{"A9E0} {Myanmar Extended-B} +\pxkc@bval{2}{cham}{"AA00} {Cham} +\pxkc@bval{2}{mymrA}{"AA60} {Myanmar Extended-A} +\pxkc@bval{2}{tavt}{"AA80} {Tai Viet} +\pxkc@bval{2}{mtei1}{"AAE0} {Meetei Mayek Extensions} +\pxkc@bval{2}{ethiA}{"AB00} {Ethiopic Extended-A} +\pxkc@bval{2}{latnE}{"AB30} {Latin Extended-E} +\pxkc@bval{2}{cher1}{"AB70} {Cherokee Supplement} +\pxkc@bval{2}{mtei}{"ABC0} {Meetei Mayek} +\pxkc@bval{1}{hang}{"AC00} {Hangul Syllables} +\pxkc@bval{2}{hangB}{"D7B0} {Hangul Jamo Extended-B} +\pxkc@bval{1}{spc01}{"D800} {High Surrogates} +\pxkc@bval{1}{spc02}{"DB80} {High Private Use Surrogates} +\pxkc@bval{1}{spc03}{"DC00} {Low Surrogates} +\pxkc@bval{1}{spc04}{"E000} {Private Use Area} +\pxkc@bval{1}{hani1}{"F900} {CJK Compatibility Ideographs} +\pxkc@bval{1}{latn6}{"FB00} {Alphabetic Presentation Forms} +\pxkc@bval{1}{arab2}{"FB50} {Arabic Presentation Forms-A} +\pxkc@bval{1}{spc05}{"FE00} {Variation Selectors} +\pxkc@bval{1}{cjk09}{"FE10} {Vertical Forms} +\pxkc@bval{1}{sym30}{"FE20} {Combining Half Marks} +\pxkc@bval{1}{cjk10}{"FE30} {CJK Compatibility Forms} +\pxkc@bval{1}{cjk11}{"FE50} {Small Form Variants} +\pxkc@bval{1}{arab3}{"FE70} {Arabic Presentation Forms-B} +\pxkc@bval{1}{cjk12}{"FF00} {Halfwidth and Fullwidth Forms} +\pxkc@bval{1}{spc06}{"FFF0} {Specials} +\pxkc@bval{1}{linb}{"10000} {Linear B Syllabary} +\pxkc@bval{1}{linb1}{"10080} {Linear B Ideograms} +\pxkc@bval{1}{sym31}{"10100} {Aegean Numbers} +\pxkc@bval{1}{grek2}{"10140} {Ancient Greek Numbers} +\pxkc@bval{2}{sym40}{"10190} {Ancient Symbols} +\pxkc@bval{2}{sym41}{"101D0} {Phaistos Disc} +\pxkc@bval{2}{lyci}{"10280} {Lycian} +\pxkc@bval{2}{cari}{"102A0} {Carian} +\pxkc@bval{2}{copt1}{"102E0} {Coptic Epact Numbers} +\pxkc@bval{1}{ital}{"10300} {Old Italic} +\pxkc@bval{1}{goth}{"10330} {Gothic} +\pxkc@bval{2}{perm}{"10350} {Old Permic} +\pxkc@bval{1}{ugar}{"10380} {Ugaritic} +\pxkc@bval{1}{xpeo}{"103A0} {Old Persian} +\pxkc@bval{1}{dsrt}{"10400} {Deseret} +\pxkc@bval{1}{shaw}{"10450} {Shavian} +\pxkc@bval{1}{osma}{"10480} {Osmanya} +\pxkc@bval{2}{osge}{"104B0} {Osage} +\pxkc@bval{2}{elba}{"10500} {Elbasan} +\pxkc@bval{2}{aghb}{"10530} {Caucasian Albanian} +\pxkc@bval{2}{lina}{"10600} {Linear A} +\pxkc@bval{1}{cprt}{"10800} {Cypriot Syllabary} +\pxkc@bval{2}{armi}{"10840} {Imperial Aramaic} +\pxkc@bval{2}{palm}{"10860} {Palmyrene} +\pxkc@bval{2}{nbat}{"10880} {Nabataean} +\pxkc@bval{2}{hatr}{"108E0} {Hatran} +\pxkc@bval{1}{phnx}{"10900} {Phoenician} +\pxkc@bval{2}{lydi}{"10920} {Lydian} +\pxkc@bval{2}{mero}{"10980} {Meroitic Hieroglyphs} +\pxkc@bval{2}{merc}{"109A0} {Meroitic Cursive} +\pxkc@bval{1}{khar}{"10A00} {Kharoshthi} +\pxkc@bval{2}{sarb}{"10A60} {Old South Arabian} +\pxkc@bval{2}{narb}{"10A80} {Old North Arabian} +\pxkc@bval{2}{mani}{"10AC0} {Manichaean} +\pxkc@bval{2}{avst}{"10B00} {Avestan} +\pxkc@bval{2}{prti}{"10B40} {Inscriptional Parthian} +\pxkc@bval{2}{phli}{"10B60} {Inscriptional Pahlavi} +\pxkc@bval{2}{phlp}{"10B80} {Psalter Pahlavi} +\pxkc@bval{2}{orkh}{"10C00} {Old Turkic} +\pxkc@bval{2}{hung}{"10C80} {Old Hungarian} +\pxkc@bval{4}{rohg}{"10D00} {Hanifi Rohingya} +\pxkc@bval{2}{sym42}{"10E60} {Rumi Numeral Symbols} +\pxkc@bval{4}{yezi}{"10E80} {Yezidi} +\pxkc@bval{4}{sogo}{"10F00} {Old Sogdian} +\pxkc@bval{4}{sogd}{"10F30} {Sogdian} +\pxkc@bval{4}{chrs}{"10FB0} {Chorasmian} +\pxkc@bval{4}{elym}{"10FE0} {Elymaic} +\pxkc@bval{2}{brah}{"11000} {Brahmi} +\pxkc@bval{2}{kthi}{"11080} {Kaithi} +\pxkc@bval{2}{sora}{"110D0} {Sora Sompeng} +\pxkc@bval{2}{cakm}{"11100} {Chakma} +\pxkc@bval{2}{mahj}{"11150} {Mahajani} +\pxkc@bval{2}{shrd}{"11180} {Sharada} +\pxkc@bval{2}{sinh1}{"111E0} {Sinhala Archaic Numbers} +\pxkc@bval{2}{khoj}{"11200} {Khojki} +\pxkc@bval{2}{mult}{"11280} {Multani} +\pxkc@bval{2}{sind}{"112B0} {Khudawadi} +\pxkc@bval{2}{gran}{"11300} {Grantha} +\pxkc@bval{2}{newa}{"11400} {Newa} +\pxkc@bval{2}{tirh}{"11480} {Tirhuta} +\pxkc@bval{2}{sidd}{"11580} {Siddham} +\pxkc@bval{2}{modi}{"11600} {Modi} +\pxkc@bval{2}{mong1}{"11660} {Mongolian Supplement} +\pxkc@bval{2}{takr}{"11680} {Takri} +\pxkc@bval{2}{ahom}{"11700} {Ahom} +\pxkc@bval{4}{dogr}{"11800} {Dogra} +\pxkc@bval{2}{wara}{"118A0} {Warang Citi} +\pxkc@bval{4}{diak}{"11900} {Dives Akuru} +\pxkc@bval{4}{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{4}{gong}{"11D60} {Gunjala Gondi} +\pxkc@bval{4}{maka}{"11EE0} {Makasar} +\pxkc@bval{4}{lisu1}{"11FB0} {Lisu Supplement} +\pxkc@bval{4}{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{4}{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{4}{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{4}{kits}{"18B00} {Khitan Small Script} +\pxkc@bval{4}{tang2}{"18D00} {Tangut Supplement} +\pxkc@bval{2}{kana2}{"1B000} {Kana Supplement} +\pxkc@bval{3}{kanaA}{"1B100} {Kana Extended-A} +\pxkc@bval{4}{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{4}{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{4}{hmnp}{"1E100} {Nyiakeng Puachue Hmong} +\pxkc@bval{4}{wcho}{"1E2C0} {Wancho} +\pxkc@bval{2}{mend}{"1E800} {Mende Kikakui} +\pxkc@bval{2}{adlm}{"1E900} {Adlam} +\pxkc@bval{4}{sym59}{"1EC70} {Indic Siyaq Numbers} +\pxkc@bval{4}{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} +\pxkc@bval{2}{sym46}{"1F0A0} {Playing Cards} +\pxkc@bval{2}{sym45}{"1F100} {Enclosed Alphanumeric Supplement} +\pxkc@bval{2}{cjk13}{"1F200} {Enclosed Ideographic Supplement} +\pxkc@bval{2}{sym47}{"1F300} {Miscellaneous Symbols and Pictographs} +\pxkc@bval{2}{sym48}{"1F600} {Emoticons} +\pxkc@bval{2}{sym54}{"1F650} {Ornamental Dingbats} +\pxkc@bval{2}{sym49}{"1F680} {Transport and Map Symbols} +\pxkc@bval{2}{sym50}{"1F700} {Alchemical Symbols} +\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{4}{sym60}{"1FA00} {Chess Symbols} +\pxkc@bval{4}{sym62}{"1FA70} {Symbols and Pictographs Extended-A} +\pxkc@bval{4}{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{4}{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} +\pxkc@bval{0}{cjk1b}{"FF10}{Halfwidth and Fullwidth Forms/Latin} +\pxkc@bval{0}{cjk1c}{"FF66}{Halfwidth and Fullwidth Forms/Kana} +\fi +\ifnum\pxkc@ccv<3 \else +\pxkc@gval{latn1}{latnx,latny}{Latin-1 Supplement} +\pxkc@bval{0}{latnx}{"00A0}{Latin-1 Supplement/Other} +\pxkc@bval{0}{latny}{"00C0}{Latin-1 Supplement/Latin} +\fi +\ifx\pxkc@bbslst\@empty\else + \pxkc@debug{Unsupported blocks:\pxkc@bbslst} +\fi + +%% \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 +\let\pxkc@bbslst\relax + +%--------------------------------------- public interfaces + +%%<*> \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 (groups are not considered) to be specified; +% <category> is given as a category name or a kcatcode value (15--19). +\newcommand*\cjkcategory{% + \begingroup + \forcecjktoken + \expandafter\endgroup\pxkc@cjkcategory@}% read args +\def\pxkc@cjkcategory@#1#2{% + \edef\pxkc@arg{#2}% + \ifnum2<1\pxkc@arg\relax \else % <category> is a number + \@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}} +\def\pxkc@cjkcategory@a#1{%{<block>} + \pxkc@expand@text\pxkc@tmpa{#1}% + \ifx\pxkc@tmpa\relax + \pxkc@err@ivfmt{#1}% + \else + \@for\pxkc@blk:=\pxkc@tmpa\do{% + \expandafter\pxkc@cjkcategory@b\expandafter{\pxkc@blk}}% + \fi} +\def\pxkc@cjkcategory@b#1{% + \pxkc@get@cp{#1}\ifpxkc@ok % charcode + \pxkc@kcatcode{\pxkc@cp}{\pxkc@arg}% + \else + \ifcase\pxkc@cp % no-op + \or % name + \edef\pxkc@blk{#1}% + \pxkc@set@cjkcategory + \else \pxkc@err@ivfmt{#1}% error + \fi + \fi} + +%% \pxkc@set@cjkcategory +% Sees \pxkc@blk (block name) and \pxkc@arg (kcatcode). +\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@ % bad + \ifpxkc@warn@bad \pxkc@warn@dfblk{\pxkc@blk}\fi + \else\ifnum\pxkc@cp=\z@ + \ifnum\pxkc@arg=15 \else + \pxkc@err@naltn + \fi + \else + \pxkc@kcatcode{\pxkc@cp}{\pxkc@arg}% + \fi\fi\fi + \else + \pxkc@expanded{\noexpand\pxkc@cjkcategory@a{\pxkc@tmpa}}% + \fi} + +%% \pxkc@cjkcategory{<block>}{<kcatcode>} +%% \pxkc@cjkcategory@mccv{<minmccv>}{<maxmccv>}{<block>}{<kcatcode>} +% Other entry points for internal use. +\def\pxkc@cjkcategory#1#2{% + \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@get@cp{<arg>} +% ok / 0=nop / 1=name / 2=err +\def\pxkc@get@cp#1{% + \pxkc@okfalse \chardef\pxkc@cp\z@ + \pxkc@get@cp@a#1\pxkc@mk\pxkc@end} +\def\pxkc@get@cp@a#1{% + \pxkc@cond\ifx#1\pxkc@mk\fi{% + \pxkc@get@cp@fin\pxkc@mk + }{\pxkc@cond\ifnum\pxkc@get@cp@b#1>\z@\fi{% + \pxkc@get@cp@c#1% + }{\pxkc@cond\ifnum2<"1#1 \fi{% + \pxkc@get@cp@c"#1% + }{%else + \chardef\pxkc@cp`#1 % + \pxkc@cond\ifnum\pxkc@cp>\pxkc@ascii@max\fi{% + \pxkc@oktrue \pxkc@get@cp@fin + }{% + \pxkc@okfalse \chardef\pxkc@cp\@ne \pxkc@get@cp@e + }% + }}}} +\def\pxkc@get@cp@b#1{0\if#1"1\fi\if#1'1\fi\if#1+1\fi} +\def\pxkc@get@cp@c{% + \afterassignment\pxkc@get@cp@d\count@=} +\def\pxkc@get@cp@d{% + \chardef\pxkc@cp\count@ + \ifnum\pxkc@cp=\count@ \pxkc@oktrue + \else \chardef\pxkc@cp\z@ + \fi + \pxkc@get@cp@fin} +\def\pxkc@get@cp@e#1\pxkc@mk{% + \pxkc@get@cp@fin\pxkc@mk} +\def\pxkc@get@cp@fin#1\pxkc@mk\pxkc@end{% + \ifx\pxkc@mt#1\pxkc@mt\else + \pxkc@okfalse \chardef\pxkc@cp\tw@ + \fi} + +%%<*> \cjkcategorymode{<mode>} +% Invokes the cjk-category mode <mode>. +\newcommand*\cjkcategorymode[1]{% + \pxkc@letcs\pxkc@next{pxkc@M@@#1}% + \ifx\pxkc@next\relax + \pxkc@err@ivmsy{#1}% + \else + \pxkc@warn@badfalse + \pxkc@next + \pxkc@warn@badtrue + \kcatcode0=15 % 'latn' is fixed + \fi} + +%--------------------------------------- CJK category modes + +%% variables +\let\pxkc@cat\relax +\let\pxkc@base@cat\relax + +%% \[pxkc@K@@<block>] : the kcatcode of CJK core blocks +\def\do#1#2{\expandafter\chardef\csname pxkc@K@@#1\endcsname=#2 } +%C====================================== +\do{hang1} {19} % Hangul Jamo +\do{sym15} {18} % Enclosed Alphanumerics +\do{cjk01} {16} % CJK Radicals Supplement +\do{cjk02} {16} % Kangxi Radicals +\do{cjk03} {16} % Ideographic Description Characters +\do{cjk04} {18} % CJK Symbols and Punctuation +\do{hira} {17} % Hiragana +\do{kana} {17} % Katakana +\do{bopo} {16} % Bopomofo +\do{hang2} {19} % Hangul Compatibility Jamo +\do{cjk05} {16} % Kanbun +\do{bopo1} {16} % Bopomofo Extended +\do{cjk06} {16} % CJK Strokes +\do{kana1} {17} % Katakana Phonetic Extensions +\do{cjk07} {18} % Enclosed CJK Letters and Months +\do{cjk08} {18} % CJK Compatibility +\do{haniA} {16} % CJK Unified Ideographs Extension A +\do{hani} {16} % CJK Unified Ideographs +\do{yiii} {18} % Yi Syllables +\do{yiii1} {18} % Yi Radicals +\do{hangA} {19} % Hangul Jamo Extended-A +\do{hang} {19} % Hangul Syllables +\do{hangB} {19} % Hangul Jamo Extended-B +\do{hani1} {16} % CJK Compatibility Ideographs +\do{cjk09} {18} % Vertical Forms +\do{cjk10} {18} % CJK Compatibility Forms +\do{cjk11} {18} % Small Form Variants +\do{cjk12} {18} % Halfwidth and Fullwidth Forms +\do{cjk1a} {18} % Halfwidth and Fullwidth Forms/Other +\do{cjk1b} {17} % Halfwidth and Fullwidth Forms/Latin +\do{cjk1c} {17} % Halfwidth and Fullwidth Forms/Kana +\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 +\do{haniB} {16} % CJK Unified Ideographs Extension B +\do{haniC} {16} % CJK Unified Ideographs Extension C +\do{haniD} {16} % CJK Unified Ideographs Extension D +\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 +%======================================= +\ifnum\pxkc@mccv<2 + \do{cjk1b} {18} + \do{cjk1c} {18} +\fi + +%% \pxkc@reset@all{<kcatcode>} +\def\pxkc@reset@all#1{% + \chardef\pxkc@base@cat=#1\relax + \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@@\pxkc@blk}}{\pxkc@cat}}} + +%% \[pxkc@M@@<mode>] : the implementation of a mode +%P====================================== +%% 'forcecjk' +\def\pxkc@M@@forcecjk{% + \pxkc@reset@all{18}% +} +%% 'prefercjk' +\def\pxkc@M@@prefercjk{% + \pxkc@M@@prefercjkvar + \pxkc@cjkcategory{grek}{18}% + \pxkc@cjkcategory{cyrl}{18}% + \pxkc@cjkcategory{grek1}{18}% +} +%% 'prefercjkvar' +\def\pxkc@M@@prefercjkvar{% + \pxkc@M@@japanesevar + \pxkc@cjkcategory@mccv{3}{4}{latny}{18}% + \pxkc@cjkcategory{latnA}{18}% + \pxkc@cjkcategory{latnB}{18}% + \pxkc@cjkcategory{latn2}{18}% + \pxkc@cjkcategory{sym01}{18}% + \pxkc@cjkcategory{sym02}{18}% + \pxkc@cjkcategory{latn3}{18}% + \pxkc@cjkcategory{sym05}{18}% + \pxkc@cjkcategory{sym06}{18}% + \pxkc@cjkcategory{latn6}{18}% +} +%% 'japanese' +\def\pxkc@M@@japanese{% + \pxkc@M@@japanesevar + \pxkc@cjkcategory{grek}{18}% + \pxkc@cjkcategory{cyrl}{18}% +} +%% 'japanesevar' +\def\pxkc@M@@japanesevar{% + \pxkc@M@@prefernoncjk + \pxkc@cjkcategory@mccv{1}{2}{latn1}{18}% + \pxkc@cjkcategory@mccv{3}{4}{latnx}{18}% + \pxkc@cjkcategory{sym04}{18}% + \pxkc@cjkcategory{sym07}{18}% + \pxkc@cjkcategory{sym08}{18}% + \pxkc@cjkcategory{sym09}{18}% + \pxkc@cjkcategory{sym10}{18}% + \pxkc@cjkcategory{sym11}{18}% + \pxkc@cjkcategory{sym12}{18}% + \pxkc@cjkcategory{sym13}{18}% + \pxkc@cjkcategory{sym16}{18}% + \pxkc@cjkcategory{sym17}{18}% + \pxkc@cjkcategory{sym18}{18}% + \pxkc@cjkcategory{sym19}{18}% + \pxkc@cjkcategory{sym20}{18}% + \pxkc@cjkcategory{sym23}{18}% + \pxkc@cjkcategory{sym24}{18}% + \pxkc@cjkcategory{sym26}{18}% + \pxkc@cjkcategory{spc04}{18}% +} +%% 'prefernoncjk' +\def\pxkc@M@@prefernoncjk{% + \pxkc@reset@all{15}% +} +%======================================= +%% 'default' +\def\pxkc@M@@default{% + \pxkc@M@@forcecjk + \pxkc@cjkcategory@mccv{3}{4}{latny}{15}% + \pxkc@cjkcategory@mccv{3}{4}{latnA}{15}% + \pxkc@cjkcategory@mccv{4}{4}{latnB}{15}% +} + +%--------------------------------------- safe text expansion + +%% variables +\let\pxkc@expd\relax + +%% \pxkc@expand@text\CS{<text>} +\def\pxkc@expand@text#1#2{% + \begingroup + \let\UTFviii@invalid@err \noexpand + \let\UTFviii@two@octets \pxkc@lead@byte@NB + \let\UTFviii@three@octets\pxkc@lead@byte@NC + \let\UTFviii@four@octets \pxkc@lead@byte@ND + \edef\pxkc@tmpa{#2}% + \let\UTFviii@invalid@err \pxkc@expand@text@err + \let\UTFviii@two@octets \pxkc@lead@byte@PB + \let\UTFviii@three@octets\pxkc@lead@byte@PC + \let\UTFviii@four@octets \pxkc@lead@byte@PD + \let\pxkc@expd\@empty + \expandafter\pxkc@expand@text@a\pxkc@tmpa\pxkc@mk\pxkc@end + \global\let\pxkc@g@tmpa\pxkc@expd + \endgroup + \let#1\pxkc@g@tmpa} +\def\pxkc@expand@text@a{% + \futurelet\pxkc@tok\pxkc@expand@text@b} +\def\pxkc@expand@text@b{% + \ifcat\noexpand\pxkc@tok0% other + \let\pxkc@next\pxkc@expand@text@d + \else\ifcat\noexpand\pxkc@tok\@sptoken + \let\pxkc@next\pxkc@expand@text@f + \else\ifx\pxkc@tok\pxkc@mk % end + \let\pxkc@next\pxkc@expand@text@fin + \else\ifx\pxkc@tok\bgroup + \let\pxkc@next\pxkc@expand@text@err + \else\expandafter\ifx\noexpand\pxkc@tok\pxkc@tok % unexpandable + \let\pxkc@next\pxkc@expand@text@c + \else \let\pxkc@next\pxkc@expand@text@e + \fi\fi\fi\fi\fi + \pxkc@next} +\def\pxkc@expand@text@c#1{% + \edef\pxkc@expd{\pxkc@expd#1}% + \pxkc@expand@text@a} +\def\pxkc@expand@text@d#1{% + \ifnum`#1>\pxkc@ascii@max % high byte + \let\pxkc@next\pxkc@expand@text@ret + \lccode"EF=`#1\relax\lowercase{\expandafter^^ef}% reactivate + \else \expandafter\pxkc@expand@text@c\expandafter#1% + \fi} +\def\pxkc@expand@text@e#1{% + \ifcat\noexpand#1\noexpand^^ef% active-char + \let\pxkc@next\pxkc@expand@text@ret + \expandafter#1% + \else \expandafter\pxkc@expand@text@err + \fi} +\expandafter\def\expandafter\pxkc@expand@text@f\space{% + \pxkc@expand@text@c\space} +\def\pxkc@expand@text@fin#1#2\pxkc@end{% + \ifx\pxkc@mt#2\pxkc@mt \else \let\pxkc@expd\relax \fi} +\def\pxkc@expand@text@err{% + \pxkc@expand@text@fin\pxkc@mk} +\def\pxkc@expand@text@ret{% UTF-8 bytes are read + \pxkc@get@jchar\count@ + \pxkc@expand@text@c\pxkc@jchar} + +%% processors +\def\pxkc@lead@byte@NB#1{\noexpand#1\noexpand} +\def\pxkc@lead@byte@NC#1#2{\noexpand#1\noexpand#2\noexpand} +\def\pxkc@lead@byte@ND#1#2#3{\noexpand#1\noexpand#2\noexpand#3\noexpand} +\def\pxkc@lead@byte@PB#1#2{% + \count@`#1 \advance\count@-"C0 + \pxkc@trail@byte{#2}\pxkc@next} +\def\pxkc@lead@byte@PC#1#2#3{% + \count@`#1 \advance\count@-"E0 + \pxkc@trail@byte{#2}\pxkc@trail@byte{#3}\pxkc@next} +\def\pxkc@lead@byte@PD#1#2#3#4{% + \count@`#1 \advance\count@-"F0 + \pxkc@trail@byte{#2}\pxkc@trail@byte{#3}\pxkc@trail@byte{#4}\pxkc@next} +\def\pxkc@trail@byte#1{% + \multiply\count@"40 \advance\count@`#1 \advance\count@-"80 } + +%--------------------------------------- miscellaneous accessories + +%%<*> \showcjkcategory +\newcommand*\showcjkcategory{% + \pxkc@foreach@blocks\do{% + \@ifundefined{pxkc@B@@\pxkc@blk}{}{%else + \typeout{\pxkc@blk\space= \the\kcatcode\@nameuse{pxkc@B@@\pxkc@blk}}% + }}} + +%--------------------------------------- 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}} +\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\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 +% Returns the value showing current mode to \thecjktokenmode +% 0: \disablecjktoken +% 1: \enablecjktoken +% 2: \forcecjktoken +% 255: failure +\newcommand*\getcjktokenmode{% + \pxkc@get@cjktoken@mode\thecjktokenmode} + +%%<*> \setcjktokenmode{<value>} +\newcommand*\setcjktokenmode[1]{% + \ifcase#1\disablecjktoken + \or \enablecjktoken + \or \forcecjktoken + \fi} + +%%<*> \withcjktokendisabled, etc. +\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 +\endinput +%% EOF diff --git a/macros/jptex/latex/pxcjkcat/pxcjkcat.tex b/macros/jptex/latex/pxcjkcat/pxcjkcat.tex new file mode 100644 index 0000000000..e8e00fcbc7 --- /dev/null +++ b/macros/jptex/latex/pxcjkcat/pxcjkcat.tex @@ -0,0 +1,999 @@ +% 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, + pdftitle={pxcjkcatパッケージ}, + pdfauthor={八登崇之}} +\usepackage{bxtexlogo} +\bxtexlogoimport{*,LaTeXTeX} +\usepackage[verb]{bxghost} +\usepackage{shortvrb} +\MakeShortVerb{\|} +\usepackage{verbatim} +\newenvironment{myverbatim} + {\quote\small\verbatim} + {\endverbatim\endquote} +\newcommand{\PkgVersion}{1.4} +\newcommand{\PkgDate}{2022/06/06} +\newcommand{\Pkg}[1]{\textsf{#1}} +\newcommand{\Meta}[1]{% + $\langle$\mbox{}\nolinebreak#1\nolinebreak\mbox{}$\rangle$} +\newcommand{\Note}{\par\noindent ※} +\newcommand{\Means}{:~} +\newcommand{\strong}{\textsf} +\newcommand{\wbr}{\linebreak[0]} +\newcommand{\Code}[1]{{\usefont{T1}{lmtt}{l}{n}#1}} +%----------------------------------------------------------- +\begin{document} +\title{\Pkg{pxcjkcat} パッケージ} +\author{八登崇之\ (Takayuki YATO; aka.~``ZR'')} +\date{v\PkgVersion\quad[\PkgDate]} +\maketitle + +\begin{abstract} +{\upTeX}エンジンには +「ソース中の非ASCII文字の扱い」 +(和文・欧文の何れとして扱うか、等) +を制御するための「和文カテゴリ(kcatcode)」 +という設定がある。 +本パッケージは、{\upTeX}の和文カテゴリを扱うための +{\LaTeX}の文書作成者向けのインタフェースを提供する。 +\end{abstract} + +\tableofcontents + +%=========================================================== +\section{前提知識} +\label{sec:Introduction} + +%------------------- +\subsection{和文カテゴリ} +\label{ssec:cjkcategory} + +{\upTeX}エンジンの「\strong{和文カテゴリ}(kcatcode)」の設定は +「ソース中の非ASCII文字の振舞」を制御するためのものである。 +例えば「ア」(U+30A2)という文字は普通は(既定値では) +仮名として扱われるが、U+30A2の和文カテゴリを変更することで、 +これを「和文記号扱い」「欧文扱い」などに変えることができる。 + +{\upTeX}の仕様では和文カテゴリの値は15~19の範囲の整数 +(\strong{和文カテゴリコード}) +として表される。 +本パッケージでは操作を直感的にするため和文カテゴリの値に名前 +(\strong{カテゴリID})を付けて扱う。 +和文カテゴリの値の一覧は以下の通りである。 + +\begin{center}\small\begin{tabular}{ccl} + \hline + コード & カテゴリID & 意味 \\ + \hline + 15 & |noncjk| & 欧文扱い \\ + 16 & |kanji| & 漢字扱い \\ + 17 & |kana| & 仮名扱い \\ + 18 & |cjk| & 「その他の和文」扱い \\ + 19 & |hangul| & ハングル扱い \\ + \hline +\end{tabular}\end{center} +和文カテゴリの設定による実際の「振舞」の違いには +以下のようなものがある +\footnote{なお、現在の{\upTeX}の仕様では|kanji|(16)と|kana|(17) + の間には「振舞」の違いは存在しないようである。}。 +\begin{itemize} +\item 和文カテゴリが|noncjk|(15)である文字は欧文として扱われる。 + 対して、|noncjk|以外の文字は和文扱いとなる。 + \Note なお、欧文扱いとなる文字は欧文{\LaTeX}({\pdfLaTeX})と + 同じ機構で処理される。 + すなわち、{\TeX}のレベルではUTF-8のバイト列として扱われ、 + これを\Pkg{inputenc}パッケージが適切に処理することで + 初めて「文字」として認識される。 +\item (u){\pLaTeX}には「行末にある文字が和文文字の場合には当該の改行は + 空白にならずに無視される」という独自の入力規則があるが、 + 和文カテゴリが|hangul|(19)である和文文字が行末にある場合は + 欧文と同様に改行は空白を発生させる。 +\item {\LaTeX}の|\|から始まる命令名(制御綴)の構成について + 「複数文字の名前を作れるのは英字のみ」という規則がある。 + 命令名構成の規則について、和文カテゴリが + |kanji|(16)・|kana|(17)・|hangul|(19) + の和文文字は「英字」と同じ扱いになり、 + |cjk|(18)の和文文字は「英字以外の欧文文字」と同じ扱いになる。 +\end{itemize} + +ただし、{\upTeX}の仕様では、和文文字カテゴリの設定は“文字単位”ではなく +“Unicodeブロック単位”で行うようになっている(一部例外あり)。 +従って、例えば「ア」(U+30A2)の和文カテゴリを変更したいという場合には、 +U+30A2が属する“Katakana”(U+30A0~30FF)のブロックについて +和文カテゴリの設定を行うことになる。 + +本パッケージが提供する命令を利用すると +「“Katakana”の和文カテゴリを|cjk|(18)に変更する」 +という設定は +\begin{quote}\small +\begin{verbatim} +\cjkcategory{kana}{cjk} +\end{verbatim} +\end{quote} +で実現できる。 + +%------------------- +\subsection{和文カテゴリモード} +\label{ssec:cjkcategory-mode} + +\strong{和文カテゴリモード}は +全てのブロックに対する和文カテゴリの一括設定 +(プリセット設定)のことである +(TODO:ちゃんと説明する)。 + +モード設定には以下のものがある。 +何れのモードも、「CJK中核セット」(後述)のブロック群の +設定は共通で、 +その他のブロックが欧文扱い(|noncjk|)であるか +和文扱い(|cjk|% +\footnote{全てのモード設定において、「CJK中核セット」\strong{以外}の + ブロックのカテゴリは必ず|noncjk|か|cjk|の何れかになる。}% +)であるかが異なる。 +\begin{itemize} +\item |forcecjk|\Means + 全てのブロックを和文扱い + (|noncjk|以外)とする。 + 和文フォントの中のUnicode値の割当がある全ての文字を + 和文文字として直接用いることができる。 +\item |default|\Means + 現在のモードCCVに対応する{\upTeX}の版 + (例えばモードCCVが3ならばv1.23) + における既定設定と一致させる。 + \Note モードCCVが2以下の場合は|forcecjk|と同一の設定になる。 +\item |prefercjk|\Means + 和文扱いのブロックとして「CJK中核セット」の他に + 「Adobeの定めるCJK文字集合 + \footnote{Adobe-Japan1、Adobe-GB1、Adobe-CNS1、Adobe-Korea1の4つ。}% + の何れかと共通部分をもつ文字ブロック」を加えて、 + 残りを欧文扱いに設定する。 +\item |prefercjkvar|\Means\hspace{-.25em}% + |prefercjk|からギリシャ・キリル文字の + ブロックを欧文扱いに変更したもの。 +\item |japanese|\Means + 和文扱いのブロックとして「CJK中核セット」の他に + 「Adobe-Japan1の全角幅のグリフ + の何れかと共通部分をもつ文字ブロック」を加えて、 + 残りを欧文扱いに設定する。 +\item |japanesevar|\Means + |japanese|からギリシャ・キリル文字の + ブロックを欧文扱いに変更したもの。 +\item |prefernoncjk|\Means + 「CJK中核セット」のブロックのみを和文扱いとし、 + 残りを欧文扱いにする。 +\end{itemize} + +\Note 各モードでの具体的な設定値については\ref{sec:Values}節を参照。 + +\paragraph{CJK中核セット} +「CJK中核セット」は以下の文字種が属するブロックのセットを指す。 +(括弧内は、モード設定において当該のブロックに設定される +和文カテゴリの値。) + \begin{itemize} + \item 漢字・部首・注音字母(|kanji|) + \item ひらがな・カタカナ(|kana|) + \item CJK記号の一部・全角半角互換形・彝文字 + ・西夏文字・女書文字・契丹文字(|cjk|) + \Note モードCCVが2以上の場合、|cjk12|の再分割の|cjk1b|、 + |cjk1c|は|kana|に設定される。 + \item ハングル完成形・ハングル字母(|hangul|) +\end{itemize} + +%------------------- +\subsection{和文トークン状態} +\label{ssec:cjktoken} + +{\upTeX}には、和文カテゴリ(kcatcode)とは別に、 +非ASCII文字全体の和文・欧文扱いの設定を一斉に切り替えるための +命令が存在する +\footnote{これらの命令は本パッケージが提供するものではなく + {\upTeX}に元から存在するものであることに注意。}。 +\begin{itemize} +\item |\enablecjktoken|\Means + 和文・欧文扱いの設定を和文カテゴリの設定に従わせる。 +\item |\disablecjktoken|\Means + 和文カテゴリ設定に関わらず非ASCII文字全体を欧文扱いにする。 + \Note あたかも全ブロックの和文カテゴリを|noncjk|(15)に設定したのと + 同じ状態になる。 +\item |\forcecjktoken|\Means + 和文カテゴリ設定に関わらず非ASCII文字全体を和文扱いにする。 + \Note 和文カテゴリが|noncjk|(15)であるブロックは + あたかもそれが|cjk|(18)であるように動作する。 +\end{itemize} + +これらの命令群により変更されるパラメタのことを本パッケージでは +「\strong{和文トークン状態}」と呼ぶことにする +\footnote{「和文トークン状態」を指す公式の用語は存在しないと思われる。}。 + +%=========================================================== +\section{パッケージ読込} +\label{sec:Loading} + +\begin{myverbatim} +\usepackage[<オプション>]{pxcjkcat} +\end{myverbatim} + +オプションとして以下のものが指定できる。 + +\begin{itemize} +\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 |ccv4|\Means + モードCCVを4({\upTeX} v1.25以降と互換)とする。 + \item |real|または|ccv+|\Means + モードCCVを{\upTeX}の実際のCCVと一致させる。 + \end{itemize} +\item \strong{和文カテゴリモード値}\Means + |\cjkcategorymode|命令で有効なモード値(|prefernoncjk|等) + をオプションとして指定可能で、 + この場合、和文カテゴリがモードに従って設定される。 + \Note 和文カテゴリモード値オプションが指定されていない場合は、 + パッケージ読込時に和文カテゴリが変更されることはない。 +\item |nomode|\Means + 和文カテゴリモード値オプションの効果を打ち消す。 +\end{itemize} + +%=========================================================== +\section{機能} +\label{sec:Function} + +%------------------- +\subsection{和文カテゴリ設定に関連する機能} +\label{ssec:cjkcategory-function} + +\begin{itemize} +\item |\cjkcategory{|\Meta{ブロック}|,...}{|\Meta{カテゴリ}|}|\Means + \Meta{ブロック}で指定される文字ブロック(複数指定が可能)の + 和文カテゴリを\Meta{カテゴリ}に変更する。 + + \Meta{ブロック}は以下の何れかの形式で指定する: + \begin{itemize} + \item ブロックID(\ref{sec:Blocks}節参照)% + \footnote{ブロックIDによる指定は{\upTeX}の版の影響を受けない。 + 例えば、{\upTeX}の版(およびモードCCV指定)が何であっても、 + |latn1|は常に“Latin-1 Supplement”の範囲(U+0080~00FF)を指す。 + 実CCVが3以上の場合に|latn1|のカテゴリ設定を行った場合は、 + 実際には|latnx|と|latny|の2つのブロックに対して設定が行われる。} + \item 非ASCII文字1つ\Means + 当該の文字が属するブロックを指す。 + \Note 「文字の属するブロック」は、モードCCV設定とは無関係であり + 常に{\upTeX}の実際のブロック定義に従う。 + 従ってその動作は{\upTeX}の版に依存することに注意。 + \item 符号値(整数値)\Means + 当該の符号値の文字が属するブロックを指す。 + 符号値は以下の形式で指定できる\Means + \begin{itemize} + \item \Meta{16進表記}\Means 例えば|1F600|。 + \item |"|\Meta{16進表記}\Means 例えば|"1F600|。 + \Note 16進数字の|A|~|F|は大文字で書く。 + \item |+|\Meta{整数}\Means 例えば|+128512|は10進表記で128512、 + すなわちU+1F600を表す。 + \Note \Meta{整数}の部分には一般に任意の + 「{\LaTeXTeX}で整数を表すテキスト」が記述できる。 + 例えば|+\value{mycode}|のように書くとカウンタ値を指定できる。 + \end{itemize} + \Note 前項と同様、動作が{\upTeX}の版に依存することに注意を要する。 + \end{itemize} + \Meta{カテゴリ}は「カテゴリID」または + 「カテゴリコード」(括弧内の整数値)で指定する。 + \begin{itemize} + \item |noncjk|(15)\Means 欧文扱い + \item |kanji|または|han|(16)\Means 漢字扱い + \item |kana|(17)\Means 仮名扱い + \item |cjk|(18)\Means \<「その他の和文」扱い + \item |hangul|(19)\Means ハングル扱い + \end{itemize} + + 和文カテゴリの変更は局所的(グルーピングに従う)である。 + + \Note モードCCVの指定は|\cjkcategory|の動作には影響を与えない。 + + \Note “Basic Latin”ブロック(|latn|)のカテゴリは常に|noncjk|で + なければならず、|noncjk|以外に変更しようとするとエラーになる。 + +\item |\cjkcategorymode{|\Meta{モード}|}|\Means + 全てのブロックの和文カテゴリの一括設定(モード設定)を行う。 + 有効なモード設定の値は以下の通りである。 + \Note モード設定の詳細については + \ref{ssec:cjkcategory-mode}節を参照。 + \begin{itemize} + \item |forcecjk| + \item |default| + \item |prefercjk| + \item |prefercjkvar| + \item |japanese| + \item |japanesevar| + \item |prefernoncjk| + \end{itemize} + +\end{itemize} + +%------------------- +\subsection{和文トークン状態に関する機能} +\label{ssec:cjktoken-function} + +\Note 「和文トークン状態」については\ref{ssec:cjktoken}節を参照。 + +\begin{itemize} + +\item |\getcjktokenmode|\Means + 現在の和文トークン状態の取得して、 + それを表す整数値を|\thecjktokenmode|に設定する。 + \begin{itemize} + \item 0\Means |\disablecjktoken|の状態。 + \item 1\Means |\enablecjktoken|の状態。 + \item 2\Means |\forcecjktoken|の状態。 + \item 255\Means 状態取得に失敗した% + \footnote{{\TeX} Live 2022以降で{\eTeX}拡張無しの{\upTeX}エンジンの + 場合は取得ができない。 + しかし、2014年以降の{\LaTeX}カーネルは{\eTeX}拡張を必須としている + ので、そのようなエンジンの上で{\LaTeX}が動作している可能性は + ほぼ考えられない。 + 従って、現実的には255が返ることはないと思ってよい。}。 + \end{itemize} + +\item |\setcjktokenmode{|\Meta{整数値}|}|\Means + |\getcjktokenmode|の規則の整数値を用いて和文トークン状態を設定する。 + +\item |\withcjktokendisabled{|\Meta{コード}|}|\Means + 一時的に|\disablecjktoken|に変更した状態で、 + \Meta{コード}を実行する。 +\item |\withcjktokenenabled{|\Meta{コード}|}|\Means + 一時的に|\enablecjktoken|に変更した状態で、 + \Meta{コード}を実行する。 +\item |\withcjktokenforced{|\Meta{コード}|}|\Means + 一時的に|\forcecjktoken|に変更した状態で、 + \Meta{コード}を実行する。 +\Note 以上3つの命令はどれも、 +「和文トークン状態を設定して\Meta{コード}を実行した後 +和文トークン状態を再設定する」 +という動作を行う。 +そのため新たに局所化グループに入ることはない。 + +\end{itemize} + +%=========================================================== +\section{文字分類バージョン(CCV)} +\label{sec:CCV} + +\noindent \strong{注意}\Means +\ref{sec:CCV}節および\ref{sec:Blocks}に述べられている +説明は現状の仕様と食い違っている部分があり、 +大幅な改訂が必要な状態である。 +少なくとも1.1版以降の仕様では、 +モードCCVの影響を受けるのはモード設定の定義のみであり、 +ブロック分割は常に実際のエンジンのものに一致させている。 + +\bigskip + +{\upTeX}エンジンでの文字ブロックの分割および各ブロックの +和文カテゴリの既定値は改版時に変更され、 +これが互換性の問題を起こす可能性がある。 +本パッケージでは、パッケージの機能を用いて設定された +和文カテゴリの値がエンジンの改版により変化することを防ぐため、 +「特定のエンジンのバージョンを指定して、その動作を模倣する」 +という方針をとる。 + +\subsection{文字分類バージョンとは何か} + +\begin{itemize} +\item 文字ブロックの分割の違いを + 「\strong{文字分類バージョン}(CCV;Character Category Version)」 + と呼ぶことにする。 + 現状では次のものが存在する + \footnote{{\upTeX}のv1.24には文字ブロック分割に関してバグが存在するので、 + CCVの定義からは除外する。 + なお、実際にv1.24の{\upTeX}で本パッケージが読み込まれた場合は、 + 実CCVは1と見なされる(はずである)。}。 + \begin{itemize} + \item バージョン1: {\upTeX} v0.11~0.28と互換 + \item バージョン2: {\upTeX} v0.29~1.22と互換 + \item バージョン3: {\upTeX} v1.23と互換 + \item バージョン4: {\upTeX} v1.25以降と互換 + \end{itemize} + +\item \Pkg{pxcjkcat}の読込時に、そのオプションにおいて + 「その文書が依拠するCCVの値」(これを\strong{モードCCV}と呼ぶ) + を指定する。 + すなわち、オプション |ccv|$N$($N=\mbox{1~3}$)を指定すると、 + モードCCVが$N$になる。 + +\item モードCCVを使用するエンジンの実のCCVと常に一致させたい場合は、 + |ccv+| というオプションを指定すればよい。 + ただしこの場合は当然、和文カテゴリ設定がエンジンの版に + 依存することになる。 + +\item モードCCVの既定値は1(|ccv1|)である。 + この場合、ブロック分割の状態はUnicode% + \footnote{エンジンの版に対応する版のUnicode。}% + のブロック定義と完全に一致する。 + +\item モード設定で |default| を指定した場合は、 + 和文カテゴリの設定は + 「モードCCVに対応するエンジンの版の既定値」 + に一致する。 + 他のモード設定の実際の設定値も |default| を基礎にして + 決まるので、モードCCVにより多少の差異が出る。 + +\end{itemize} + +\subsection{注意事項} + +\begin{itemize} +\item Unicodeの改版による「文字ブロックの追加」については + 「当該の版のエンジンで未対応の文字ブロックの文字は + 決して使われない」 + ことを仮定すれば互換性を損なうことがないため、 + 特に対策を行わない。 + + 従って、エンジンの改版が「文字ブロックの追加」だけを伴う場合は、 + それは新しいCCVとは見なされない。 + 例えば、v1.00→v1.10の改修では幾つかのブロックが追加されたが、 + CCVは2のままである。 + +\item もちろん、「旧版の動作の模倣」は本パッケージの機能を用いた + 場合に限られ、{\upTeX}エンジンの和文カテゴリコード(kcatcode)の + 処理自体は何も変更されない。 + また、本パッケージの機能を用いる以外の方法 + (エンジン既定のままの場合を含む) + で設定された和文カテゴリ値については、 + 当然、エンジンの版による差異が生じうる。 + +\end{itemize} + + +%=========================================================== +\section{文字ブロック} +\label{sec:Blocks} + +%------------------- +\subsection{Unicodeブロックの一覧} + +以下は、Unicodeが定めるブロックと直接に対応するブロックの一覧である。 +この表の「ブロックID」の欄が、|\cjkcategory|命令で指定する +ブロックIDを示す。 +「CCV」の欄は、そのブロックがサポートされる実CCVの +範囲の下限を表す。 +\footnote{これは参考情報であり、現状の仕様ではあまり意味をもたない。} +%\footnote{ここで示すサポート範囲は「必要条件」であることに注意。 +% 先述の通り、エンジンの改版でブロックが(分割変更でなく) +% 新規追加された場合には以前のCCVの値を引き継ぐ。 +% このため、サポート範囲が「2」のブロックは、 +% モードCCVが2であっても“実際には使えない”可能性がある。 +% (モードCCVが3以上なら必ず使えて、1なら必ず使えない。) +% “実際には使えない”ブロックに設定を試みた場合は、 +% 警告が出て設定が無視される。} + +\begin{quote} +\renewcommand{\baselinestretch}{0.9}\small +\setlength{\parskip}{0pt} +\newcommand*\xI[1]{\makebox[4em][l]{\texttt{#1}}\ignorespaces} +\newcommand*\xV[1]{\makebox[2em][c]{#1}\hspace*{1em}\ignorespaces} +\newcommand*\xR[2]{\Code{U+}\makebox[3em][r]{\Code{#1}}% + ~~~\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[10em][c]{符号値範囲}\makebox{ブロック名称}\par +%///////////////////////////// +\xI{latn} \xV{1} \xR {0000} {007F} \xN{Basic Latin}\par +\xI{latn1} \xV{1} \xR {0080} {00FF} \xN{Latin-1 Supplement}\par +\xI{latnA} \xV{1} \xR {0100} {017F} \xN{Latin Extended-A}\par +\xI{latnB} \xV{1} \xR {0180} {024F} \xN{Latin Extended-B}\par +\xI{latn2} \xV{1} \xR {0250} {02AF} \xN{IPA Extensions}\par +\xI{sym01} \xV{1} \xR {02B0} {02FF} \xN{Spacing Modifier Letters}\par +\xI{sym02} \xV{1} \xR {0300} {036F} \xN{Combining Diacritical Marks}\par +\xI{grek} \xV{1} \xR {0370} {03FF} \xN{Greek and Coptic}\par +\xI{cyrl} \xV{1} \xR {0400} {04FF} \xN{Cyrillic}\par +\xI{cyrl1} \xV{1} \xR {0500} {052F} \xN{Cyrillic Supplement}\par +\xI{armn} \xV{1} \xR {0530} {058F} \xN{Armenian}\par +\xI{hebr} \xV{1} \xR {0590} {05FF} \xN{Hebrew}\par +\xI{arab} \xV{1} \xR {0600} {06FF} \xN{Arabic}\par +\xI{syrc} \xV{1} \xR {0700} {074F} \xN{Syriac}\par +\xI{arab1} \xV{1} \xR {0750} {077F} \xN{Arabic Supplement}\par +\xI{thaa} \xV{1} \xR {0780} {07BF} \xN{Thaana}\par +\xI{nkoo} \xV{1} \xR {07C0} {07FF} \xN{NKo}\par +\xI{samr} \xV{2} \xR {0800} {083F} \xN{Samaritan}\par +\xI{mand} \xV{2} \xR {0840} {085F} \xN{Mandaic}\par +\xI{syrc1} \xV{3} \xR {0860} {086F} \xN{Syriac Supplement}\par +\xI{arabA} \xV{2} \xR {08A0} {08FF} \xN{Arabic Extended-A}\par +\xI{deva} \xV{1} \xR {0900} {097F} \xN{Devanagari}\par +\xI{beng} \xV{1} \xR {0980} {09FF} \xN{Bengali}\par +\xI{guru} \xV{1} \xR {0A00} {0A7F} \xN{Gurmukhi}\par +\xI{gujr} \xV{1} \xR {0A80} {0AFF} \xN{Gujarati}\par +\xI{orya} \xV{1} \xR {0B00} {0B7F} \xN{Oriya}\par +\xI{taml} \xV{1} \xR {0B80} {0BFF} \xN{Tamil}\par +\xI{telu} \xV{1} \xR {0C00} {0C7F} \xN{Telugu}\par +\xI{knda} \xV{1} \xR {0C80} {0CFF} \xN{Kannada}\par +\xI{mlym} \xV{1} \xR {0D00} {0D7F} \xN{Malayalam}\par +\xI{sinh} \xV{1} \xR {0D80} {0DFF} \xN{Sinhala}\par +\xI{thai} \xV{1} \xR {0E00} {0E7F} \xN{Thai}\par +\xI{laoo} \xV{1} \xR {0E80} {0EFF} \xN{Lao}\par +\xI{tibt} \xV{1} \xR {0F00} {0FFF} \xN{Tibetan}\par +\xI{mymr} \xV{1} \xR {1000} {109F} \xN{Myanmar}\par +\xI{geor} \xV{1} \xR {10A0} {10FF} \xN{Georgian}\par +\xI{hang1} \xV{1} \xR {1100} {11FF} \xN{Hangul Jamo}\par +\xI{ethi} \xV{1} \xR {1200} {137F} \xN{Ethiopic}\par +\xI{ethi1} \xV{1} \xR {1380} {139F} \xN{Ethiopic Supplement}\par +\xI{cher} \xV{1} \xR {13A0} {13FF} \xN{Cherokee}\par +\xI{cans} \xV{1} \xR {1400} {167F} \xN{Unified Canadian Aboriginal Syllabics}\par +\xI{ogam} \xV{1} \xR {1680} {169F} \xN{Ogham}\par +\xI{runr} \xV{1} \xR {16A0} {16FF} \xN{Runic}\par +\xI{tglg} \xV{1} \xR {1700} {171F} \xN{Tagalog}\par +\xI{hano} \xV{1} \xR {1720} {173F} \xN{Hanunoo}\par +\xI{buhd} \xV{1} \xR {1740} {175F} \xN{Buhid}\par +\xI{tagb} \xV{1} \xR {1760} {177F} \xN{Tagbanwa}\par +\xI{khmr} \xV{1} \xR {1780} {17FF} \xN{Khmer}\par +\xI{mong} \xV{1} \xR {1800} {18AF} \xN{Mongolian}\par +\xI{cans1} \xV{2} \xR {18B0} {18FF} \xN{Unified Canadian Aboriginal Syllabics Extended}\par +\xI{limb} \xV{1} \xR {1900} {194F} \xN{Limbu}\par +\xI{tale} \xV{1} \xR {1950} {197F} \xN{Tai Le}\par +\xI{talu} \xV{1} \xR {1980} {19DF} \xN{New Tai Lue}\par +\xI{khmr1} \xV{1} \xR {19E0} {19FF} \xN{Khmer Symbols}\par +\xI{bugi} \xV{1} \xR {1A00} {1A1F} \xN{Buginese}\par +\xI{lana} \xV{2} \xR {1A20} {1AAF} \xN{Tai Tham}\par +\xI{sym52} \xV{2} \xR {1AB0} {1AFF} \xN{Combining Diacritical Marks Extended}\par +\xI{bali} \xV{1} \xR {1B00} {1B7F} \xN{Balinese}\par +\xI{sund} \xV{2} \xR {1B80} {1BBF} \xN{Sundanese}\par +\xI{batk} \xV{2} \xR {1BC0} {1BFF} \xN{Batak}\par +\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{4} \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 +\xI{latn5} \xV{1} \xR {1D80} {1DBF} \xN{Phonetic Extensions Supplement}\par +\xI{sym03} \xV{1} \xR {1DC0} {1DFF} \xN{Combining Diacritical Marks Supplement}\par +\xI{latn3} \xV{1} \xR {1E00} {1EFF} \xN{Latin Extended Additional}\par +\xI{grek1} \xV{1} \xR {1F00} {1FFF} \xN{Greek Extended}\par +\xI{sym04} \xV{1} \xR {2000} {206F} \xN{General Punctuation}\par +\xI{sym05} \xV{1} \xR {2070} {209F} \xN{Superscripts and Subscripts}\par +\xI{sym06} \xV{1} \xR {20A0} {20CF} \xN{Currency Symbols}\par +\xI{sym07} \xV{1} \xR {20D0} {20FF} \xN{Combining Diacritical Marks for Symbols}\par +\xI{sym08} \xV{1} \xR {2100} {214F} \xN{Letterlike Symbols}\par +\xI{sym09} \xV{1} \xR {2150} {218F} \xN{Number Forms}\par +\xI{sym10} \xV{1} \xR {2190} {21FF} \xN{Arrows}\par +\xI{sym11} \xV{1} \xR {2200} {22FF} \xN{Mathematical Operators}\par +\xI{sym12} \xV{1} \xR {2300} {23FF} \xN{Miscellaneous Technical}\par +\xI{sym13} \xV{1} \xR {2400} {243F} \xN{Control Pictures}\par +\xI{sym14} \xV{1} \xR {2440} {245F} \xN{Optical Character Recognition}\par +\xI{sym15} \xV{1} \xR {2460} {24FF} \xN{Enclosed Alphanumerics}\par +\xI{sym16} \xV{1} \xR {2500} {257F} \xN{Box Drawing}\par +\xI{sym17} \xV{1} \xR {2580} {259F} \xN{Block Elements}\par +\xI{sym18} \xV{1} \xR {25A0} {25FF} \xN{Geometric Shapes}\par +\xI{sym19} \xV{1} \xR {2600} {26FF} \xN{Miscellaneous Symbols}\par +\xI{sym20} \xV{1} \xR {2700} {27BF} \xN{Dingbats}\par +\xI{sym21} \xV{1} \xR {27C0} {27EF} \xN{Miscellaneous Mathematical Symbols-A}\par +\xI{sym22} \xV{1} \xR {27F0} {27FF} \xN{Supplemental Arrows-A}\par +\xI{brai} \xV{1} \xR {2800} {28FF} \xN{Braille Patterns}\par +\xI{sym23} \xV{1} \xR {2900} {297F} \xN{Supplemental Arrows-B}\par +\xI{sym24} \xV{1} \xR {2980} {29FF} \xN{Miscellaneous Mathematical Symbols-B}\par +\xI{sym25} \xV{1} \xR {2A00} {2AFF} \xN{Supplemental Mathematical Operators}\par +\xI{sym26} \xV{1} \xR {2B00} {2BFF} \xN{Miscellaneous Symbols and Arrows}\par +\xI{glag} \xV{1} \xR {2C00} {2C5F} \xN{Glagolitic}\par +\xI{latnC} \xV{1} \xR {2C60} {2C7F} \xN{Latin Extended-C}\par +\xI{copt} \xV{1} \xR {2C80} {2CFF} \xN{Coptic}\par +\xI{geor1} \xV{1} \xR {2D00} {2D2F} \xN{Georgian Supplement}\par +\xI{tfng} \xV{1} \xR {2D30} {2D7F} \xN{Tifinagh}\par +\xI{ethi2} \xV{1} \xR {2D80} {2DDF} \xN{Ethiopic Extended}\par +\xI{cyrlA} \xV{2} \xR {2DE0} {2DFF} \xN{Cyrillic Extended-A}\par +\xI{sym27} \xV{1} \xR {2E00} {2E7F} \xN{Supplemental Punctuation}\par +\xI{cjk01} \xV{1} \xR {2E80} {2EFF} \xN{CJK Radicals Supplement}\par +\xI{cjk02} \xV{1} \xR {2F00} {2FDF} \xN{Kangxi Radicals}\par +\xI{cjk03} \xV{1} \xR {2FF0} {2FFF} \xN{Ideographic Description Characters}\par +\xI{cjk04} \xV{1} \xR {3000} {303F} \xN{CJK Symbols and Punctuation}\par +\xI{hira} \xV{1} \xR {3040} {309F} \xN{Hiragana}\par +\xI{kana} \xV{1} \xR {30A0} {30FF} \xN{Katakana}\par +\xI{bopo} \xV{1} \xR {3100} {312F} \xN{Bopomofo}\par +\xI{hang2} \xV{1} \xR {3130} {318F} \xN{Hangul Compatibility Jamo}\par +\xI{cjk05} \xV{1} \xR {3190} {319F} \xN{Kanbun}\par +\xI{bopo1} \xV{1} \xR {31A0} {31BF} \xN{Bopomofo Extended}\par +\xI{cjk06} \xV{1} \xR {31C0} {31EF} \xN{CJK Strokes}\par +\xI{kana1} \xV{1} \xR {31F0} {31FF} \xN{Katakana Phonetic Extensions}\par +\xI{cjk07} \xV{1} \xR {3200} {32FF} \xN{Enclosed CJK Letters and Months}\par +\xI{cjk08} \xV{1} \xR {3300} {33FF} \xN{CJK Compatibility}\par +\xI{haniA} \xV{1} \xR {3400} {4DBF} \xN{CJK Unified Ideographs Extension A}\par +\xI{sym28} \xV{1} \xR {4DC0} {4DFF} \xN{Yijing Hexagram Symbols}\par +\xI{hani} \xV{1} \xR {4E00} {9FFF} \xN{CJK Unified Ideographs}\par +\xI{yiii} \xV{1} \xR {A000} {A48F} \xN{Yi Syllables}\par +\xI{yiii1} \xV{1} \xR {A490} {A4CF} \xN{Yi Radicals}\par +\xI{lisu} \xV{2} \xR {A4D0} {A4FF} \xN{Lisu}\par +\xI{vaii} \xV{2} \xR {A500} {A63F} \xN{Vai}\par +\xI{cyrlB} \xV{2} \xR {A640} {A69F} \xN{Cyrillic Extended-B}\par +\xI{bamu} \xV{2} \xR {A6A0} {A6FF} \xN{Bamum}\par +\xI{sym29} \xV{1} \xR {A700} {A71F} \xN{Modifier Tone Letters}\par +\xI{latnD} \xV{1} \xR {A720} {A7FF} \xN{Latin Extended-D}\par +\xI{sylo} \xV{1} \xR {A800} {A82F} \xN{Syloti Nagri}\par +\xI{sym39} \xV{2} \xR {A830} {A83F} \xN{Common Indic Number Forms}\par +\xI{phag} \xV{1} \xR {A840} {A87F} \xN{Phags-pa}\par +\xI{saur} \xV{2} \xR {A880} {A8DF} \xN{Saurashtra}\par +\xI{deva1} \xV{2} \xR {A8E0} {A8FF} \xN{Devanagari Extended}\par +\xI{kali} \xV{2} \xR {A900} {A92F} \xN{Kayah Li}\par +\xI{rjng} \xV{2} \xR {A930} {A95F} \xN{Rejang}\par +\xI{hangA} \xV{2} \xR {A960} {A97F} \xN{Hangul Jamo Extended-A}\par +\xI{java} \xV{2} \xR {A980} {A9DF} \xN{Javanese}\par +\xI{mymrB} \xV{2} \xR {A9E0} {A9FF} \xN{Myanmar Extended-B}\par +\xI{cham} \xV{2} \xR {AA00} {AA5F} \xN{Cham}\par +\xI{mymrA} \xV{2} \xR {AA60} {AA7F} \xN{Myanmar Extended-A}\par +\xI{tavt} \xV{2} \xR {AA80} {AADF} \xN{Tai Viet}\par +\xI{mtei1} \xV{2} \xR {AAE0} {AAFF} \xN{Meetei Mayek Extensions}\par +\xI{ethiA} \xV{2} \xR {AB00} {AB2F} \xN{Ethiopic Extended-A}\par +\xI{latnE} \xV{2} \xR {AB30} {AB6F} \xN{Latin Extended-E}\par +\xI{cher1} \xV{2} \xR {AB70} {ABBF} \xN{Cherokee Supplement}\par +\xI{mtei} \xV{2} \xR {ABC0} {ABFF} \xN{Meetei Mayek}\par +\xI{hang} \xV{1} \xR {AC00} {D7AF} \xN{Hangul Syllables}\par +\xI{hangB} \xV{2} \xR {D7B0} {D7FF} \xN{Hangul Jamo Extended-B}\par +\xI{spc01} \xV{1} \xR {D800} {DB7F} \xN{High Surrogates}\par +\xI{spc02} \xV{1} \xR {DB80} {DBFF} \xN{High Private Use Surrogates}\par +\xI{spc03} \xV{1} \xR {DC00} {DFFF} \xN{Low Surrogates}\par +\xI{spc04} \xV{1} \xR {E000} {F8FF} \xN{Private Use Area}\par +\xI{hani1} \xV{1} \xR {F900} {FAFF} \xN{CJK Compatibility Ideographs}\par +\xI{latn6} \xV{1} \xR {FB00} {FB4F} \xN{Alphabetic Presentation Forms}\par +\xI{arab2} \xV{1} \xR {FB50} {FDFF} \xN{Arabic Presentation Forms-A}\par +\xI{spc05} \xV{1} \xR {FE00} {FE0F} \xN{Variation Selectors}\par +\xI{cjk09} \xV{1} \xR {FE10} {FE1F} \xN{Vertical Forms}\par +\xI{sym30} \xV{1} \xR {FE20} {FE2F} \xN{Combining Half Marks}\par +\xI{cjk10} \xV{1} \xR {FE30} {FE4F} \xN{CJK Compatibility Forms}\par +\xI{cjk11} \xV{1} \xR {FE50} {FE6F} \xN{Small Form Variants}\par +\xI{arab3} \xV{1} \xR {FE70} {FEFF} \xN{Arabic Presentation Forms-B}\par +\xI{cjk12} \xV{1} \xR {FF00} {FFEF} \xN{Halfwidth and Fullwidth Forms}\par +\xI{spc06} \xV{1} \xR {FFF0} {FFFF} \xN{Specials}\par +\xI{linb} \xV{1} \xR {10000} {1007F} \xN{Linear B Syllabary}\par +\xI{linb1} \xV{1} \xR {10080} {100FF} \xN{Linear B Ideograms}\par +\xI{sym31} \xV{1} \xR {10100} {1013F} \xN{Aegean Numbers}\par +\xI{grek2} \xV{1} \xR {10140} {1018F} \xN{Ancient Greek Numbers}\par +\xI{sym40} \xV{2} \xR {10190} {101CF} \xN{Ancient Symbols}\par +\xI{sym41} \xV{2} \xR {101D0} {101FF} \xN{Phaistos Disc}\par +\xI{lyci} \xV{2} \xR {10280} {1029F} \xN{Lycian}\par +\xI{cari} \xV{2} \xR {102A0} {102DF} \xN{Carian}\par +\xI{copt1} \xV{2} \xR {102E0} {102FF} \xN{Coptic Epact Numbers}\par +\xI{ital} \xV{1} \xR {10300} {1032F} \xN{Old Italic}\par +\xI{goth} \xV{1} \xR {10330} {1034F} \xN{Gothic}\par +\xI{perm} \xV{2} \xR {10350} {1037F} \xN{Old Permic}\par +\xI{ugar} \xV{1} \xR {10380} {1039F} \xN{Ugaritic}\par +\xI{xpeo} \xV{1} \xR {103A0} {103DF} \xN{Old Persian}\par +\xI{dsrt} \xV{1} \xR {10400} {1044F} \xN{Deseret}\par +\xI{shaw} \xV{1} \xR {10450} {1047F} \xN{Shavian}\par +\xI{osma} \xV{1} \xR {10480} {104AF} \xN{Osmanya}\par +\xI{osge} \xV{2} \xR {104B0} {104FF} \xN{Osage}\par +\xI{elba} \xV{2} \xR {10500} {1052F} \xN{Elbasan}\par +\xI{aghb} \xV{2} \xR {10530} {1056F} \xN{Caucasian Albanian}\par +\xI{lina} \xV{2} \xR {10600} {1077F} \xN{Linear A}\par +\xI{cprt} \xV{1} \xR {10800} {1083F} \xN{Cypriot Syllabary}\par +\xI{armi} \xV{2} \xR {10840} {1085F} \xN{Imperial Aramaic}\par +\xI{palm} \xV{2} \xR {10860} {1087F} \xN{Palmyrene}\par +\xI{nbat} \xV{2} \xR {10880} {108AF} \xN{Nabataean}\par +\xI{hatr} \xV{2} \xR {108E0} {108FF} \xN{Hatran}\par +\xI{phnx} \xV{1} \xR {10900} {1091F} \xN{Phoenician}\par +\xI{lydi} \xV{2} \xR {10920} {1093F} \xN{Lydian}\par +\xI{mero} \xV{2} \xR {10980} {1099F} \xN{Meroitic Hieroglyphs}\par +\xI{merc} \xV{2} \xR {109A0} {109FF} \xN{Meroitic Cursive}\par +\xI{khar} \xV{1} \xR {10A00} {10A5F} \xN{Kharoshthi}\par +\xI{sarb} \xV{2} \xR {10A60} {10A7F} \xN{Old South Arabian}\par +\xI{narb} \xV{2} \xR {10A80} {10A9F} \xN{Old North Arabian}\par +\xI{mani} \xV{2} \xR {10AC0} {10AFF} \xN{Manichaean}\par +\xI{avst} \xV{2} \xR {10B00} {10B3F} \xN{Avestan}\par +\xI{prti} \xV{2} \xR {10B40} {10B5F} \xN{Inscriptional Parthian}\par +\xI{phli} \xV{2} \xR {10B60} {10B7F} \xN{Inscriptional Pahlavi}\par +\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{4} \xR {10D00} {10D3F} \xN{Hanifi Rohingya}\par +\xI{sym42} \xV{2} \xR {10E60} {10E7F} \xN{Rumi Numeral Symbols}\par +\xI{yezi} \xV{4} \xR {10E80} {10EBF} \xN{Yezidi}\par +\xI{sogo} \xV{4} \xR {10F00} {10F2F} \xN{Old Sogdian}\par +\xI{sogd} \xV{4} \xR {10F30} {10F6F} \xN{Sogdian}\par +\xI{chrs} \xV{4} \xR {10FB0} {10FDF} \xN{Chorasmian}\par +\xI{elym} \xV{4} \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 +\xI{cakm} \xV{2} \xR {11100} {1114F} \xN{Chakma}\par +\xI{mahj} \xV{2} \xR {11150} {1117F} \xN{Mahajani}\par +\xI{shrd} \xV{2} \xR {11180} {111DF} \xN{Sharada}\par +\xI{sinh1} \xV{2} \xR {111E0} {111FF} \xN{Sinhala Archaic Numbers}\par +\xI{khoj} \xV{2} \xR {11200} {1124F} \xN{Khojki}\par +\xI{mult} \xV{2} \xR {11280} {112AF} \xN{Multani}\par +\xI{sind} \xV{2} \xR {112B0} {112FF} \xN{Khudawadi}\par +\xI{gran} \xV{2} \xR {11300} {1137F} \xN{Grantha}\par +\xI{newa} \xV{2} \xR {11400} {1147F} \xN{Newa}\par +\xI{tirh} \xV{2} \xR {11480} {114DF} \xN{Tirhuta}\par +\xI{sidd} \xV{2} \xR {11580} {115FF} \xN{Siddham}\par +\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} {1174F} \xN{Ahom}\par +\xI{dogr} \xV{4} \xR {11800} {1184F} \xN{Dogra}\par +\xI{wara} \xV{2} \xR {118A0} {118FF} \xN{Warang Citi}\par +\xI{diak} \xV{4} \xR {11900} {1195F} \xN{Dives Akuru}\par +\xI{nand} \xV{4} \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{4} \xR {11D60} {11DAF} \xN{Gunjala Gondi}\par +\xI{maka} \xV{4} \xR {11EE0} {11EFF} \xN{Makasar}\par +\xI{lisu1} \xV{4} \xR {11FB0} {11FBF} \xN{Lisu Supplement}\par +\xI{taml1} \xV{4} \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{4} \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{4} \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{4} \xR {18B00} {18CFF} \xN{Khitan Small Script}\par +\xI{tang2} \xV{4} \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{4} \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{4} \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{4} \xR {1E100} {1E14F} \xN{Nyiakeng Puachue Hmong}\par +\xI{wcho} \xV{4} \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{4} \xR {1EC70} {1ECBF} \xN{Indic Siyaq Numbers}\par +\xI{sym61} \xV{4} \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 +\xI{sym46} \xV{2} \xR {1F0A0} {1F0FF} \xN{Playing Cards}\par +\xI{sym45} \xV{2} \xR {1F100} {1F1FF} \xN{Enclosed Alphanumeric Supplement}\par +\xI{cjk13} \xV{2} \xR {1F200} {1F2FF} \xN{Enclosed Ideographic Supplement}\par +\xI{sym47} \xV{2} \xR {1F300} {1F5FF} \xN{Miscellaneous Symbols and Pictographs}\par +\xI{sym48} \xV{2} \xR {1F600} {1F64F} \xN{Emoticons}\par +\xI{sym54} \xV{2} \xR {1F650} {1F67F} \xN{Ornamental Dingbats}\par +\xI{sym49} \xV{2} \xR {1F680} {1F6FF} \xN{Transport and Map Symbols}\par +\xI{sym50} \xV{2} \xR {1F700} {1F77F} \xN{Alchemical Symbols}\par +\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{4} \xR {1FA00} {1FA6F} \xN{Chess Symbols}\par +\xI{sym62} \xV{4} \xR {1FA70} {1FAFF} \xN{Symbols and Pictographs Extended-A}\par +\xI{sym63} \xV{4} \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{4} \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 +\xI{spc10} \xV{1} \xR{100000}{10FFFF} \xN{Supplementary Private Use Area-B}\par +%///////////////////////////// +\end{quote} + +\paragraph{ブロックIDの命名規則\<(参考)} +\mbox{} +\begin{itemize} +\item Unicodeブロック名にスクリプト(用字系)の名前が含まれるものは、 + それに対するISO 15924のコード(4文字)を用いた。 + 単一のスクリプトのブロックが複数ある場合は、 + 名前が“Extended-A,B,……”のものは|A|,|B|,……を、 + それ以外のものは|1|,|2|,…… + (一部符号値順でない)を末尾に付加した。 + \begin{quote} + “Arabic”→ |arab|; “Latin Extended-C”→ |latnC| + \end{quote} + なお、“Hiragana”のコードは |hira| だが“Katakana”は |kana| で + あることに注意。 +\item それ以外は、CJK関係(|cjk|)、特殊用途(|spc|)、 + それ以外(|sym|)の3種類に恣意的に分類して、 + 後ろに2桁の番号を付けた(|cjk12| など)。 +\end{itemize} + +%------------------- +\subsection{どのブロックが使用できるか} + +以下では、各モードCCVにおいてサポートされるブロックの全容に +ついて説明する。 + +\paragraph{モードCCVが1の場合} +CCV~1ではUnicodeブロックの再分割が存在しないので、 +サポートされるブロックの全体は以下のようになる。 + +\begin{itemize} +\item 前掲の通常ブロックの表で「CCV」欄が1の + ブロック全て。 +\end{itemize} + +\paragraph{モードCCVが2の場合} + +CCV~2では |cjk12|“Halfwidth and Fullwidth Forms”のブロックが +次の3つの下位ブロックに分割されている。 + +\begin{quotation} + \newcommand\xE[2]{\noindent + \makebox[4em][l]{\texttt{#1}}\textsl{#2}\par} + \xE{cjk1a}{Halfwidth and Fullwidth Forms/Other} + \xE{cjk1b}{Halfwidth and Fullwidth Forms/Latin} + \xE{cjk1c}{Halfwidth and Fullwidth Forms/Kana} +\end{quotation} + +\begin{itemize} +\item |cjk1b|\Means ASCII 英数字の全角互換形。\par + |U+FF10|~|U+FF19|,|U+FF21|~|U+FF3A|,|U+FF41|~|U+FF5A| +\item |cjk1c|\Means カタカナの半角互換形。 + 句読点等の記号は含まない。\par + |U+FF66|~|U+FF6F|,|U+FF71|~|U+FF9D| +\item |cjk1a|\Means |cjk12| から |cjk1b|、|cjk1c| を除いた残り。 +\end{itemize} + +従って、サポートされるブロックの全体は以下のようになる。 + +\begin{itemize} +\item 前掲の通常ブロックの表で「CCV」欄が2以下のブロック全て。 + \Note |cjk12| のブロックも使用可能で、これは + “Halfwidth and Fullwidth Forms”の全体を表す。 +\item |cjk12| の下位ブロック\Means + |cjk1a|、|cjk1b|、|cjk1c| の3つ。 +\end{itemize} + + +\paragraph{モードCCVが3の場合} + +CCV~3では |latn1|“Latin-1 Supplement”のブロックが +次の2つの下位ブロックに分割されている。 + +\begin{quotation} + \newcommand\xE[2]{\noindent + \makebox[4em][l]{\texttt{#1}}\textsl{#2}\par} + \xE{latnx}{Latin-1 Supplement/Other} + \xE{latny}{Latin-1 Supplement/Latin} +\end{quotation} + +\begin{itemize} +\item |latny|\Means ラテン文字であるもの。\par + |U+FF10|~|U+FF19|,|U+FF21|~|U+FF3A|,|U+FF41|~|U+FF5A| +\item |latnx|\Means |latn1| から |latny| を除いた残り。 +\end{itemize} + +従って、サポートされるブロックの全体は以下のようになる。 + +\begin{itemize} +\item 前掲の通常ブロックの表にあるブロック全て。 + \Note |cjk12|、|latn1| のブロックも使用可能。 +\item |cjk12| の下位ブロック\Means + |cjk1a|、|cjk1b|、|cjk1c| の3つ。 +\item |latn1| の下位ブロック\Means + |latnx|、|latny| の2つ。 +\end{itemize} + +%=========================================================== +\section{各モードにおける和文カテゴリの設定} +\label{sec:Values} + +(やっぱりあとで書く) + +\end{document} + +■ 各モードでの 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 のものに従う。 + |