summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xcjk2uni
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/xcjk2uni
Initial commit
Diffstat (limited to 'macros/latex/contrib/xcjk2uni')
-rw-r--r--macros/latex/contrib/xcjk2uni/README.md71
-rw-r--r--macros/latex/contrib/xcjk2uni/xCJK2uni.dtx977
-rw-r--r--macros/latex/contrib/xcjk2uni/xCJK2uni.ins139
-rw-r--r--macros/latex/contrib/xcjk2uni/xCJK2uni.pdfbin0 -> 129732 bytes
4 files changed, 1187 insertions, 0 deletions
diff --git a/macros/latex/contrib/xcjk2uni/README.md b/macros/latex/contrib/xcjk2uni/README.md
new file mode 100644
index 0000000000..26676edd3f
--- /dev/null
+++ b/macros/latex/contrib/xcjk2uni/README.md
@@ -0,0 +1,71 @@
+xCJK2uni
+========
+
+The `xCJK2uni` package provides commands to convert CJK character to Unicode in
+non-UTF-8 encoding. It provides hooks for `hyperref` to get the correct bookmarks.
+It also provides some `/ToUnicode` mapping file for CJK subfont. They can be used
+with `cmap` package and make CJK character searchable and copyable in PDF files
+generated by pdfLaTeX.
+
+Basic Usage
+-----------
+
+The package provides the following macros:
+
+ \useCJKencmap{<encoding>}
+
+Set the current encoding. The default encoding is GBK.
+
+ \CJKchartouni{<character>}
+
+Convert a single CJK character to its Unicode.
+It requires two steps of expansion.
+
+ \CJKsfdtouni{<plane>}{<slot>}
+
+Convert the .sfd coordinate to its Unicode.
+It requires two steps of expansion.
+
+You can read the package manual (in Chinese) for more detailed explanations.
+
+Contributing
+------------
+
+This package is a part of the [ctex-kit](https://github.com/CTeX-org/ctex-kit) project.
+
+Issues and pull requests are welcome.
+
+Copyright and Licence
+---------------------
+
+ Copyright (C) 2013-2014, 2016, 2018 by Qing Lee <sobenlee@gmail.com>
+ ----------------------------------------------------------------------
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. This version of this license is in
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+ and the latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Qing Lee.
+
+ This package consists of the file xCJK2uni.dtx,
+ and the derived files xCJK2uni.pdf,
+ xCJK2uni.sty,
+ xCJK2uni.ins,
+ xCJK2uni-make.tex,
+ xCJK2uni-sfd.def,
+ xCJK2uni-UBg5plus.def,
+ xCJK2uni-UBig5.def,
+ xCJK2uni-UGB.def,
+ xCJK2uni-UGBK.def,
+ xCJK2uni-UJIS.def,
+ xCJK2uni-UKS.def,
+ c****.cmap, and
+ README.md (this file).
diff --git a/macros/latex/contrib/xcjk2uni/xCJK2uni.dtx b/macros/latex/contrib/xcjk2uni/xCJK2uni.dtx
new file mode 100644
index 0000000000..860d37f915
--- /dev/null
+++ b/macros/latex/contrib/xcjk2uni/xCJK2uni.dtx
@@ -0,0 +1,977 @@
+% \iffalse meta-comment
+% !TEX program = XeLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+xCJK2uni
+========
+
+The `xCJK2uni` package provides commands to convert CJK character to Unicode in
+non-UTF-8 encoding. It provides hooks for `hyperref` to get the correct bookmarks.
+It also provides some `/ToUnicode` mapping file for CJK subfont. They can be used
+with `cmap` package and make CJK character searchable and copyable in PDF files
+generated by pdfLaTeX.
+
+Basic Usage
+-----------
+
+The package provides the following macros:
+
+ \useCJKencmap{<encoding>}
+
+Set the current encoding. The default encoding is GBK.
+
+ \CJKchartouni{<character>}
+
+Convert a single CJK character to its Unicode.
+It requires two steps of expansion.
+
+ \CJKsfdtouni{<plane>}{<slot>}
+
+Convert the .sfd coordinate to its Unicode.
+It requires two steps of expansion.
+
+You can read the package manual (in Chinese) for more detailed explanations.
+
+Contributing
+------------
+
+This package is a part of the [ctex-kit](https://github.com/CTeX-org/ctex-kit) project.
+
+Issues and pull requests are welcome.
+
+Copyright and Licence
+---------------------
+
+ Copyright (C) 2013-2014, 2016, 2018-2019 by Qing Lee <sobenlee@gmail.com>
+ ----------------------------------------------------------------------
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. This version of this license is in
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+ and the latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Qing Lee.
+
+ This package consists of the file xCJK2uni.dtx,
+ and the derived files xCJK2uni.pdf,
+ xCJK2uni.sty,
+ xCJK2uni.ins,
+ xCJK2uni-make.tex,
+ xCJK2uni-sfd.def,
+ xCJK2uni-UBg5plus.def,
+ xCJK2uni-UBig5.def,
+ xCJK2uni-UGB.def,
+ xCJK2uni-UGBK.def,
+ xCJK2uni-UJIS.def,
+ xCJK2uni-UKS.def,
+ c****.cmap, and
+ README.md (this file).
+%</readme>
+%<*internal>
+\fi
+\begingroup
+ \def\temp{LaTeX2e}
+\expandafter\endgroup\ifx\temp\fmtname\else
+\csname fi\endcsname
+%</internal>
+%<*install>
+
+\input ctxdocstrip %
+
+\preamble
+
+ Copyright (C) 2013-2014, 2016, 2018-2019 by Qing Lee <sobenlee@gmail.com>
+--------------------------------------------------------------------------
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. This version of this license is in
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+ and the latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Qing Lee.
+
+--------------------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+ This package consists of the file xCJK2uni.dtx,
+ and the derived files xCJK2uni.pdf,
+ xCJK2uni.sty,
+ xCJK2uni.ins,
+ xCJK2uni-make.tex,
+ xCJK2uni-sfd.def,
+ xCJK2uni-UBg5plus.def,
+ xCJK2uni-UBig5.def,
+ xCJK2uni-UGB.def,
+ xCJK2uni-UGBK.def,
+ xCJK2uni-UJIS.def,
+ xCJK2uni-UKS.def,
+ c****.cmap, and
+ README.md.
+\endpostamble
+
+\generate
+ {
+%</install>
+%<*internal>
+ \usedir{source/latex/xcjk2uni}
+ \file{xCJK2uni.ins} {\from{\jobname.dtx}{install}}
+%</internal>
+%<*install>
+ \usedir{tex/latex/xcjk2uni}
+ \file{xCJK2uni.sty} {\from{\jobname.dtx}{package}}
+ \file{xCJK2uni-make.tex} {\from{\jobname.dtx}{make}}
+ \nopreamble\nopostamble
+ \usedir{doc/latex/xcjk2uni}
+ \file{README.md} {\from{\jobname.dtx}{readme}}
+ }
+
+\let\input\@@input
+\def\CJKtuend{\ExplSyntaxOff}
+\input xCJK2uni-make %
+\let\input\skip@input
+
+\generate
+ {
+ \usedir{tex/latex/xcjk2uni}
+ \usepostamble\emptypostamble
+ \file{xCJK2uni-UBig5.def}
+ {
+ \from{\jobname.dtx} {def,Bg5}
+ \from{xCJK2uni-sfd.def} {Bg5}
+ }
+ \file{xCJK2uni-UBg5plus.def}
+ {
+ \from{\jobname.dtx} {def,Bg5+}
+ \from{xCJK2uni-sfd.def} {Bg5+}
+ }
+ \file{xCJK2uni-UGB.def}
+ {
+ \from{\jobname.dtx} {def,GB}
+ \from{xCJK2uni-sfd.def} {GB}
+ }
+ \file{xCJK2uni-UGBK.def}
+ {
+ \from{\jobname.dtx} {def,GBK}
+ \from{xCJK2uni-sfd.def} {GBK}
+ }
+ \file{xCJK2uni-UJIS.def}
+ {
+ \from{\jobname.dtx} {def,JIS}
+ \from{xCJK2uni-sfd.def} {JIS}
+ }
+ \file{xCJK2uni-UKS.def}
+ {
+ \from{\jobname.dtx} {def,KS}
+ \from{xCJK2uni-sfd.def} {KS}
+ }
+ }
+
+\endbatchfile
+%</install>
+%<*internal>
+\fi
+%</internal>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\RequirePackage{expl3}
+%<make>\input expl3-generic %
+%<+package|make|def>\GetIdInfo$Id: xCJK2uni.dtx 21b29fd 2019-04-07 23:27:31 +0800 Qing Lee <sobenlee@gmail.com> $
+%<package|make|def> {Convert CJK character to Unicode.}
+%<*driver>
+\def\ctxaux#1#2#3{\def\ctxversion{v#2}}\ctxaux
+%</driver>
+%<package>\ProvidesExplPackage{\ExplFileName}
+%<make>\ExplSyntaxOn
+%<make>\cs_if_exist:NF \ProvidesExplFile
+%<make> {
+%<make> \group_begin:
+%<make> \cs_set_nopar:Npn \ProvidesExplFile #1#2#3#4
+%<make> { \iow_log:x { File:~#1~#2~v#3~#4 } }
+%<make> \exp_after:wN \group_end:
+%<make> }
+%<make>\ProvidesExplFile{xCJK2uni-make.tex}
+%<Bg5>\ProvidesExplFile{xCJK2uni-UBig5.def}
+%<Bg5+>\ProvidesExplFile{xCJK2uni-UBg5plus.def}
+%<GB>\ProvidesExplFile{xCJK2uni-UGB.def}
+%<GBK>\ProvidesExplFile{xCJK2uni-UGBK.def}
+%<JIS>\ProvidesExplFile{xCJK2uni-UJIS.def}
+%<KS>\ProvidesExplFile{xCJK2uni-UKS.def}
+%<*driver|package|make|def>
+ {\ExplFileDate}{0.8}{\ExplFileDescription}
+%</driver|package|make|def>
+%<*driver>
+\documentclass{ctxdoc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+ \IndexLayout
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{585}
+% \GetFileId{xCJK2uni.sty}
+%
+% \title{\bfseries\pkg{xCJK2uni} 宏包}
+% \author{李清\\ \path{sobenlee@gmail.com}}
+% \date{\ExplFileDate\qquad\ctxversion\thanks{\ctexkitrev{\ExplFileVersion}.}}
+% \maketitle
+%
+% \begin{documentation}
+%
+% \section{简介}
+%
+% \pkg{xCJK2uni} 是一个 \LaTeX 宏包,提供了将 CJK 文字转换成 Unicode 的功能。以
+% 宏包形式实现 \texttt{gbk2uni} 程序的功能,使得使用 \package{CJK} 和
+% \package{hyperref} 宏包时,可以得到正确的书签。并提供了 \texttt{/ToUnicode}
+% 映射文件,使得使用 GBK 等编码时,配合 \package{cmap} 宏包,用 \pdfLaTeX\ 编译
+% 得到的 pdf 文件支持查找、复制和粘贴。
+%
+% \pkg{xCJK2uni} 只适用于下一节说明的有效编码和以 \pdfTeX\ 作为编译引擎的工作方式。
+%
+% \pkg{xCJK2uni} 依赖 \package{l3kernel}。应该与 \package{CJK} 或
+% \href{http://lsec.cc.ac.cn/~zlb/}{\pkg{CCT}} 等配合使用,但
+% \pkg{xCJK2uni} 不会自动引入它们。
+%
+% \section{基本命令}
+%
+% \begin{function}{\useCJKencmap}
+% \begin{syntax}
+% \cs{useCJKencmap} \Arg{Bg5|Bg5+|GB|GBK|JIS|KS}
+% \end{syntax}
+% 设置当前的编码环境。以上是 \pkg{xCJK2uni} 支持的文字编码,缺省使用 GBK。
+% \pkg{xCJK2uni} 会在 \env{CJK} 环境内自动更新支持的编码。
+% \end{function}
+%
+% \begin{function}[EXP]{\CJKchartouni}
+% \begin{syntax}
+% \cs{CJKchartouni} \Arg{单个CJK文字}
+% \end{syntax}
+% 将文字转换成 $16$ 进制形式的 Unicode。例如 |\CJKchartouni{一}| 将得到 |4E00|。
+% 将它展开两次就可以得到结果。
+% \end{function}
+%
+% \begin{function}[EXP]{\CJKsfdtouni}
+% \begin{syntax}
+% \cs{CJKsfdtouni} \Arg{plane} \Arg{slot}
+% \end{syntax}
+% \meta{plane} 表示由 \file{.sfd} 文件定义的子字体的编号,\meta{slot} 表示在
+% 子字体中的位置,这个命令将得到该坐标位置的 Unicode。将它展开两次就可以得到结果。
+% 如果在当前编码下,该坐标位置不合法,将展开为空。
+% \end{function}
+%
+% \end{documentation}
+%
+% \StopEventually{}
+%
+% \begin{implementation}
+%
+% \section{代码实现}
+%
+% \subsection{\pkg{xCJK2uni}}
+%
+% \begin{macrocode}
+%<*package>
+%<@@=CJKtu>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\msg_new:nnn { xCJK2uni } { l3-too-old }
+ {
+ Support~package~'expl3'~too~old. \\\\
+ Please~update~an~up~to~date~version~of~the~bundles\\\\
+ 'l3kernel'~and~'l3packages'\\\\
+ using~your~TeX~package~manager~or~from~CTAN.
+ }
+\@ifpackagelater { expl3 } { 2019/03/05 } { }
+ { \msg_error:nn { xCJK2uni } { l3-too-old } }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\sys_if_engine_pdftex:F
+ {
+ \msg_new:nnn { xCJK2uni } { pdflatex }
+ { The~xCJK2uni~package~is~only~supported~in~pdfTeX. }
+ \msg_critical:nn { xCJK2uni } { pdflatex }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_sfd_tl
+\prop_new:N \c_@@_sfd_prop
+\seq_new:N \c_@@_encoding_seq
+\int_new:N \l_@@_i_min_int
+\int_new:N \l_@@_i_max_int
+\int_new:N \l_@@_ii_min_int
+\int_new:N \l_@@_ii_max_int
+\int_new:N \l_@@_gap_begin_int
+\int_new:N \l_@@_gap_end_int
+\int_new:N \l_@@_plane_int
+\int_set:Nn \l_@@_i_max_int { "FE }
+\int_set:Nn \l_@@_ii_max_int { "FE }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_set_enc:nnnnnn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_set_enc:nnnnnn #1#2#3#4#5#6
+ {
+ \seq_gput_right:Nn \c_@@_encoding_seq {#1}
+ \prop_gput:Nnn \c_@@_sfd_prop {#1} {#2}
+ \int_const:cn { c_@@_ #1 _i_min_int } {#3}
+ \int_const:cn { c_@@_ #1 _ii_min_int } {#4}
+ \tl_if_empty:nTF {#5}
+ {
+ \int_const:cn { c_@@_ #1 _gap_begin_int }
+ { \l_@@_ii_max_int + 1 }
+ \int_const:cn { c_@@_ #1 _gap_end_int }
+ { \use:c { c_@@_ #1 _gap_begin_int } }
+ \int_const:cn { c_@@_ #1 _plane_int }
+ { \l_@@_ii_max_int - (#4) + 1 }
+ }
+ {
+ \int_const:cn { c_@@_ #1 _gap_begin_int } { #5 + 1 }
+ \int_const:cn { c_@@_ #1 _gap_end_int } {#6}
+ \int_const:cn { c_@@_ #1 _plane_int }
+ { (#5) - (#4) + \l_@@_ii_max_int - (#6) + 2 }
+ }
+ \cs_if_exist_use:NTF \CJKaddEncHook
+ { {#1} { \@@_enc_map:nn {#1} {#2} } }
+ {
+ \AtBeginDocument
+ {
+ \cs_if_exist_use:NT \CJKaddEncHook
+ { {#1} { \@@_enc_map:nn {#1} {#2} } }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_enc_map:nn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_enc_map:nn #1#2
+ {
+ \int_set_eq:Nc \l_@@_i_min_int { c_@@_ #1 _i_min_int }
+ \int_set_eq:Nc \l_@@_ii_min_int { c_@@_ #1 _ii_min_int }
+ \int_set_eq:Nc \l_@@_gap_begin_int { c_@@_ #1 _gap_begin_int }
+ \int_set_eq:Nc \l_@@_gap_end_int { c_@@_ #1 _gap_end_int }
+ \int_set_eq:Nc \l_@@_plane_int { c_@@_ #1 _plane_int }
+ \cs_if_exist:cF { CJKtu_ #1 _sfd_map:nn }
+ { \group_begin: \file_input:n { xCJK2uni-#2.def } \group_end: }
+ \cs_set_eq:Nc \CJKtu_sfd_map:nn { CJKtu_ #1 _sfd_map:nn }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_use_enc_map:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_use_enc_map:n #1
+ {
+ \prop_get:NxNTF \c_@@_sfd_prop {#1} \l_@@_sfd_tl
+ { \@@_enc_map:nn {#1} { \l_@@_sfd_tl } }
+ { \msg_error:nnx { xCJK2uni } { invalid-encoding } {#1} }
+ }
+\msg_new:nnn { xCJK2uni } { invalid-encoding }
+ {
+ The~enconding~`#1'~is~invalid.\\
+ Only~\seq_use:Nnnn \c_@@_encoding_seq { ~and~ } { ,~ } { ,~and~ } ~
+ are~supported.
+ }
+\prg_generate_conditional_variant:Nnn \prop_get:NnN { Nx } { TF }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\@@_set_enc:nnnnnn { GB } { UGB } { "A1 } { "A1 } { } { }
+\@@_set_enc:nnnnnn { JIS } { UJIS } { "A1 } { "A1 } { } { }
+\@@_set_enc:nnnnnn { KS } { UKS } { "A1 } { "A1 } { } { }
+\@@_set_enc:nnnnnn { Bg5 } { UBig5 } { "A1 } { "40 } { "7E } { "A1 }
+\@@_set_enc:nnnnnn { Bg5+ } { UBg5plus } { "81 } { "40 } { "7E } { "80 }
+\@@_set_enc:nnnnnn { GBK } { UGBK } { "81 } { "40 } { "7E } { "80 }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_sfd_to_unicode:nn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_sfd_to_unicode:nn #1#2
+ {
+ \exp:w \exp_last_unbraced:Nf
+ \@@_get_unicode:w \CJKtu_sfd_map:nn {#1} {#2} \exp_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_get_unicode:w}
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_get_unicode:w #1 \exp_end:
+ {
+ \tl_if_empty:nTF {#1}
+ { \exp_end: }
+ { \@@_get_unicode_aux:w #1 \q_stop }
+ }
+\cs_new_nopar:Npn \@@_get_unicode_aux:w #1 \or: #2 \q_stop
+ { \or: #2 \exp_end: #1 }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_char_to_unicode:n}
+% \begin{macrocode}
+\group_begin:
+\char_set_catcode_active:n { "7F }
+\cs_new_nopar:Npn \@@_char_to_unicode:n #1
+ {
+ \exp:w
+ \int_compare:nNnTF { \tl_count:n {#1} } = 2
+ { \CJKtu_byte:NN #1 }
+ {
+ \tl_if_head_eq_meaning:nNTF {#1} ^^7f
+ { \@@_byte:wNwnw #1 }
+ { \@@_encoding_error: }
+ }
+ }
+\cs_new_nopar:Npn \@@_byte:wNwnw ^^7f #1 ^^7f #2 ^^7f
+ { \CJKtu_byte_map:nn { `#1 } {#2} }
+\cs_new_nopar:Npn \@@_byte:Nwnw #1 ^^7f #2 ^^7f
+ { \CJKtu_byte_map:nn { `#1 } {#2} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\CJKtu_bookmarks_hook:}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \CJKtu_bookmarks_hook:
+ {
+ \cs_set_eq:NN ^^7f \@@_byte:Nwnw
+ \cs_set_eq:NN \CJK@XX \CJKtu_byte:NN
+ \cs_set_eq:NN \CJKchar \@@_byte:wnn
+ \cs_set_eq:NN \CCTchar \CJKtu_byte:nn
+ \cs_set_eq:NN \@CCTSetChar \@@_CCT_byte:NNN
+ \cs_set_eq:NN \@@_get_unicode:n \@@_UTF_xvi_be:n
+ }
+\group_end:
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\CJKtu_byte:NN}
+% \begin{macro}{\@@_CCT_byte:NNN}
+% \begin{macrocode}
+\cs_new_nopar:Npn \CJKtu_byte:NN #1#2
+ { \CJKtu_byte:nn { `#1 } { `#2 } }
+\cs_new_nopar:Npn \@@_CCT_byte:NNN #1#2#3
+ { \CJKtu_byte:nn { `#1 } { `#3 } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_byte:wnn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_byte:wnn #1# { \CJKtu_byte:nn }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\CJKtu_byte:nn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \CJKtu_byte:nn #1#2
+ {
+ \int_compare:nTF { \l_@@_i_min_int <= #1 <= \l_@@_i_max_int }
+ {
+ \int_compare:nTF { \l_@@_ii_min_int <= #2 < \l_@@_gap_begin_int }
+ { \CJKtu_byte_map:nn {#1} {#2} }
+ {
+ \int_compare:nTF
+ { \l_@@_gap_end_int <= #2 <= \l_@@_ii_max_int }
+ { \CJKtu_byte_map:nn {#1} {#2} }
+ { \@@_encoding_error: }
+ }
+ }
+ { \@@_encoding_error: }
+ }
+\cs_new_nopar:Npn \@@_encoding_error:
+ {
+ \msg_expandable_error:nn { xCJK2uni } { encoding-error }
+ \exp_end:
+ }
+\msg_new:nnn { xCJK2uni } { encoding-error }
+ { Wrong~encoding~scheme. }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\CJKtu_byte_map:nn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \CJKtu_byte_map:nn #1#2
+ {
+ \exp_args:Nf \@@_index_map:n
+ {
+ \int_eval:n
+ {
+ ( #1 - \l_@@_i_min_int ) * \l_@@_plane_int
+ + (#2) - \l_@@_ii_min_int
+ \int_compare:nNnF {#2} < \l_@@_gap_begin_int
+ { + \l_@@_gap_begin_int - \l_@@_gap_end_int }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_index_map:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_index_map:n #1
+ {
+ \@@_get_unicode:n
+ {
+ \CJKtu_sfd_map:nn
+ { \int_div_truncate:nn {#1} { 256 } + 1 }
+ { \int_mod:nn {#1} { 256 } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_get_unicode:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_get_unicode:n #1
+ { \exp_last_unbraced:Nf \@@_get_unicode:w #1 \exp_end: }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_UTF_xvi_be:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_UTF_xvi_be:n #1
+ { \exp_args:Nf \@@_UTF_xvi_aux:n { \int_eval:n { "#1 } } }
+\cs_new_nopar:Npn \@@_UTF_xvi_aux:n #1
+ {
+ \HyPsd@DecimalToOctalFirst
+ { \int_div_truncate:nn {#1} { 256 } }
+ \HyPsd@DecimalToOctalSecond
+ { \int_mod:nn {#1} { 256 } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_if_exist_use:NTF \hypersetup { { unicode , CJKbookmarks = false } }
+ { \PassOptionsToPackage { unicode , CJKbookmarks = false } { hyperref } }
+\msg_new:nnn { xCJK2uni } { UTF-8-encoding }
+ { It~is~not~necessary~to~load~xCJK2uni~in~UTF-8~encoding. }
+\tl_if_exist:NF \pdfstringdefPreHook { \tl_new:N \pdfstringdefPreHook }
+\@ifpackageloaded { CJKutf8 }
+ { \msg_warning:nn { xCJK2uni } { UTF-8-encoding } }
+ {
+ \cs_new_eq:NN \CJKtu@bookmarks@hook \CJKtu_bookmarks_hook:
+ \tl_gput_right:Nn \pdfstringdefPreHook { \CJKtu@bookmarks@hook }
+ \AtBeginDocument
+ {
+ \@ifpackageloaded { CJKutf8 }
+ {
+ \cs_gset_eq:NN \CJKtu@bookmarks@hook \scan_stop:
+ \msg_warning:nn { xCJK2uni } { UTF-8-encoding }
+ }
+ { \cs_if_exist_use:NT \hypersetup { { CJKbookmarks = false } } }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\useCJKencmap,\CJKchartouni,\CJKsfdtouni}
+% \begin{macrocode}
+\cs_new_eq:NN \useCJKencmap \@@_use_enc_map:n
+\cs_new_eq:NN \CJKchartouni \@@_char_to_unicode:n
+\cs_new_eq:NN \CJKsfdtouni \@@_sfd_to_unicode:nn
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_initial:N}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_initial:N #1
+ {
+ \tl_if_exist:NTF #1
+ {
+ \prop_get:NxNTF \c_@@_sfd_prop {#1} \l_@@_sfd_tl
+ { \@@_enc_map:nn {#1} { \l_@@_sfd_tl } }
+ { \@@_use_enc_map:n { GBK } }
+ }
+ { \@@_use_enc_map:n { GBK } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\exp_args:Nc \@@_initial:N { CJK @ @ @ enc }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \subsection{\pkg{xCJK2uni-make}}
+%
+% \begin{macrocode}
+%<*make>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\msg_new:nnn { xCJK2uni } { file-not-found }
+ {
+ SFD file~`#2'~for~encoding~`#1'~not~found.\\
+ xCJK2uni~will~not~work!
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ior_new:N \g_@@_sfd_ior
+\str_new:N \g_@@_path_str
+\sys_if_engine_luatex:TF
+ {
+ \str_gset:Nx \g_@@_path_str
+ {
+ \lua_now:e
+ {
+ kpse.set_program_name("kpsewhich") ~
+ local ~ sfd = kpse.find_file("UGBK.sfd", "subfont~definition~files") ~
+ if ~ sfd ~ then ~
+ tex.write(sfd) ~
+ end
+ }
+ }
+ }
+ {
+ \sys_shell_get:nnNTF { kpsewhich ~ UGBK.sfd } { } \l_tmpa_str
+ { \str_gset_eq:NN \g_@@_path_str \l_tmpa_str }
+ { \msg_fatal:nnnn { xCJK2uni } { file-not-found } { GBK } { UGBK.sfd } }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_if_blank:oTF { \g_@@_path_str }
+ { \msg_fatal:nnnn { xCJK2uni } { file-not-found } { GBK } { UGBK.sfd } }
+ {
+ \exp_args:No \file_parse_full_name:nNNN { \g_@@_path_str }
+ \l_tmpa_str \l_tmpb_str \l_tmpb_str
+ \str_gset_eq:NN \g_@@_path_str \l_tmpa_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\str_const:Nx \c_@@_indent_str
+ { \c_catcode_other_space_tl \c_catcode_other_space_tl }
+\iow_new:N \g_@@_sfd_map_iow
+\iow_new:N \g_@@_sfd_cmap_iow
+\seq_new:N \l_@@_sfd_plane_seq
+\seq_new:N \l_@@_sfd_line_seq
+\tl_new:N \l_@@_sfd_plane_tl
+\tl_new:N \l_@@_cmap_block_tl
+\int_new:N \l_@@_sfd_index_int
+% \end{macrocode}
+%
+% \begin{variable}{\c_@@_sfd_map_prop}
+% \begin{macrocode}
+\prop_const_from_keyval:Nn \c_@@_sfd_map_prop
+ {
+ GB = { 10 } { UGB } ,
+ JIS = { 40 } { UJIS } ,
+ KS = { 60 } { UKS } ,
+ Bg5 = { 00 } { UBig5 } ,
+ Bg5+ = { 09 } { UBg5plus } ,
+ GBK = { 19 } { UGBK }
+ }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_write_file:nnn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_write_file:nnn #1#2#3
+ {
+ \group_begin:
+ \seq_put_right:No \l_file_search_path_seq { \g_@@_path_str }
+ \ior_open:NnTF \g_@@_sfd_ior { #3.sfd }
+ {
+ \group_end:
+ \seq_clear:N \l_@@_sfd_plane_seq
+ \@@_write_sfd_map_header:n {#1}
+ \ior_str_map_inline:Nn \g_@@_sfd_ior
+ { \str_if_eq:nnT {##1} { 00 ~ 0x0000_0x00FF } { \ior_map_break: } }
+ \ior_str_map_inline:Nn \g_@@_sfd_ior
+ {
+ \tl_if_blank:nTF {##1}
+ {
+ \ior_map_break:n
+ {
+ \@@_write_sfd_map_trailer:n {#1}
+ \@@_write_cmap_file:n {#2}
+ }
+ }
+ { \@@_read_sfd_line:nnn {##1} {#1} {#2} }
+ }
+ \iow_close:N \g_@@_sfd_cmap_iow
+ \ior_close:N \g_@@_sfd_ior
+ \seq_clear:N \l_@@_sfd_plane_seq
+ \seq_clear:N \l_@@_sfd_line_seq
+ }
+ {
+ \group_end:
+ \msg_critical:nnxx { xCJK2uni } { file-not-found } {#1} { #3.sfd }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_read_sfd_line:n,\@@_read_sfd_line:nn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npx \@@_read_sfd_line:nnn #1#2#3
+ {
+ \exp_not:N \@@_read_sfd_line:nwnn #1
+ \c_backslash_str \exp_not:N \q_nil \exp_not:N \q_stop {#2} {#3}
+ }
+\use:x
+ {
+ \cs_new_protected_nopar:Npn \exp_not:N \@@_read_sfd_line:nwnn
+ ##1 0 \token_to_str:N x ##2 \c_backslash_str ##3 \exp_not:N \q_stop
+ ##4##5
+ {
+ \exp_not:N \@@_read_sfd_line:nnnnn
+ {##1} { 0 \token_to_str:N x } {##2} {##4} {##5}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_read_sfd_line:nnnnn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_read_sfd_line:nnnnn #1#2#3#4#5
+ {
+ \tl_if_blank:nF {#1}
+ {
+ \seq_if_empty:NF \l_@@_sfd_plane_seq
+ {
+ \iow_now:Nx \g_@@_sfd_map_iow
+ {
+ \c_@@_indent_str \c_@@_indent_str
+ \token_to_str:N \fi: \iow_newline:
+ \c_@@_indent_str \c_right_brace_str
+ }
+ \@@_write_cmap_file:n {#5}
+ }
+ \@@_write_plane_map:nn {#1} {#4}
+ \tl_set:Nx \l_@@_sfd_plane_tl { \tl_trim_spaces:n {#1} }
+ }
+ \seq_set_split:Nnn \l_@@_sfd_line_seq {#2} {#3}
+ \seq_concat:NNN \l_@@_sfd_plane_seq
+ \l_@@_sfd_plane_seq \l_@@_sfd_line_seq
+ \iow_now:Nx \g_@@_sfd_map_iow
+ {
+ \c_@@_indent_str \c_@@_indent_str \c_@@_indent_str
+ \seq_use:Nn \l_@@_sfd_line_seq { ~ \or: } ~
+ \token_to_str:N \or:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_write_plane_map:nn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_write_plane_map:nn #1#2
+ {
+ \iow_now:Nx \g_@@_sfd_map_iow
+ {
+ \cs_new_nopar:cpn { ~ @@_ #2 _sfd_map_ \int_eval:n {#1} :n ~ } ~
+ \c_hash_str 1 \iow_newline:
+ \c_@@_indent_str \c_left_brace_str \iow_newline:
+ \c_@@_indent_str \c_@@_indent_str
+ \exp_not:N \if_case:w \tex_numexpr:D
+ \c_hash_str 1 ~ \token_to_str:N \scan_stop:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_write_cmap_file:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_write_cmap_file:n #1
+ {
+ \tl_clear:N \l_@@_cmap_block_tl
+ \int_zero:N \l_@@_sfd_index_int
+ \iow_open:Nn \g_@@_sfd_cmap_iow { c #1 \l_@@_sfd_plane_tl .cmap }
+ \@@_write_cmap_header:nn { C #1 } { \l_@@_sfd_plane_tl }
+ \iow_now:Nx \g_@@_sfd_cmap_iow
+ {
+ \iow_newline:
+ 1~begincodespacerange \iow_newline:
+ \c_@@_indent_str < 00 > ~
+ <
+ \int_to_Hex:n
+ { \seq_count:N \l_@@_sfd_plane_seq - 1 }
+ > \iow_newline:
+ endcodespacerange
+ }
+ \seq_map_function:NN \l_@@_sfd_plane_seq \@@_write_cmap_body:n
+ \tl_if_empty:NF \l_@@_cmap_block_tl
+ {
+ \iow_now:Nx \g_@@_sfd_cmap_iow
+ {
+ \iow_newline:
+ \int_mod:nn { \l_@@_sfd_index_int } { 100 } ~
+ beginbfchar \iow_newline:
+ \l_@@_cmap_block_tl
+ endbfchar
+ }
+ }
+ \@@_write_cmap_trailer:
+ \seq_clear:N \l_@@_sfd_plane_seq
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_write_cmap_body:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_write_cmap_body:n #1
+ {
+ \int_case:nnTF { \l_@@_sfd_index_int }
+ { { 99 } { } { 199 } { } }
+ {
+ \iow_now:Nx \g_@@_sfd_cmap_iow
+ {
+ \iow_newline:
+ 100 ~ beginbfchar \iow_newline:
+ \l_@@_cmap_block_tl
+ < \int_to_Hex:n { \l_@@_sfd_index_int } > ~
+ <#1> \iow_newline:
+ endbfchar
+ }
+ \tl_clear:N \l_@@_cmap_block_tl
+ }
+ {
+ \tl_put_right:Nx \l_@@_cmap_block_tl
+ {
+ <
+ \int_compare:nNnF \l_@@_sfd_index_int > { 15 } { 0 }
+ \int_to_Hex:n { \l_@@_sfd_index_int }
+ > ~ <#1> \iow_newline:
+ }
+ }
+ \int_incr:N \l_@@_sfd_index_int
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_write_sfd_map_header:n}
+% \begin{macrocode}
+\group_begin:
+\char_set_catcode_other:N \%
+\cs_new_protected_nopar:Npn \@@_write_sfd_map_header:n #1
+ {
+ \iow_now:Nx \g_@@_sfd_map_iow
+ {
+ %<*#1> \iow_newline:
+ \cs_new_nopar:cpn { ~ CJKtu_#1_sfd_map:nn ~ } ~ \c_hash_str 1
+ \iow_newline: \c_@@_indent_str \c_left_brace_str \iow_newline:
+ \c_@@_indent_str \c_@@_indent_str
+ \token_to_str:N \cs_if_exist_use:cF
+ \iow_newline: \c_@@_indent_str \c_@@_indent_str \c_@@_indent_str
+ { ~ @@_#1_sfd_map_ ~ \exp_not:N \int_eval:n { \c_hash_str 1 } ~ :n ~}
+ \iow_newline: \c_@@_indent_str \c_@@_indent_str \c_@@_indent_str
+ { ~ \exp_not:N \use_none:n } \iow_newline:
+ \c_@@_indent_str \c_right_brace_str
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_write_sfd_map_trailer:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_write_sfd_map_trailer:n #1
+ {
+ \iow_now:Nx \g_@@_sfd_map_iow
+ {
+ \c_@@_indent_str \c_@@_indent_str
+ \token_to_str:N \fi: \iow_newline:
+ \c_@@_indent_str \c_right_brace_str \iow_newline:
+ %</#1>
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_write_cmap_header:nn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_write_cmap_header:nn #1#2
+ {
+ \iow_now:Nx \g_@@_sfd_cmap_iow
+ {
+ %!PS-Adobe-3.0~Resource-CMap \iow_newline:
+ %%DocumentNeededResources:~ProcSet~(CIDInit) \iow_newline:
+ %%IncludeResource:~ProcSet~(CIDInit) \iow_newline:
+ %%BeginResource:~CMap~(TeX-#1-#2-0) \iow_newline:
+ %%Title:~(TeX-#1-#2-0~TeX~#1-#2~0) \iow_newline:
+ %%Version:~1.000 \iow_newline:
+ %%EndComments \iow_newline: \iow_newline:
+ /CIDInit~/ProcSet~findresource~begin \iow_newline: \iow_newline:
+ 12~dict~begin \iow_newline: \iow_newline:
+ begincmap \iow_newline: \iow_newline:
+ /CIDSystemInfo~3~dict~dup~begin \iow_newline:
+ \c_@@_indent_str /Registry~(TeX)~def \iow_newline:
+ \c_@@_indent_str /Ordering~(#1-#2)~def \iow_newline:
+ \c_@@_indent_str /Supplement~0~def \iow_newline:
+ end~def \iow_newline: \iow_newline:
+ /CMapName~/TeX-#1-#2-0~def \iow_newline:
+ /CMapVersion~1.000~def \iow_newline:
+ /CMapType~2~def \iow_newline: \iow_newline:
+ /WMode~0~def
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_write_cmap_trailer:}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npx \@@_write_cmap_trailer:
+ {
+ \iow_now:Nn \g_@@_sfd_cmap_iow
+ {
+ \iow_newline:
+ endcmap \iow_newline:
+ CMapName~currentdict~/CMap~defineresource~pop \iow_newline:
+ end \iow_newline:
+ end \iow_newline: \iow_newline:
+ %%EndResource \iow_newline:
+ %%EOF
+ }
+ }
+\group_end:
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\iow_open:Nn \g_@@_sfd_map_iow { xCJK2uni-sfd.def }
+\prop_map_inline:Nn \c_@@_sfd_map_prop
+ { \@@_write_file:nnn {#1} #2 }
+\iow_close:N \g_@@_sfd_map_iow
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_if_exist_use:NF \CJKtuend { \tex_end:D }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</make>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \Finale
+%
+\endinput
diff --git a/macros/latex/contrib/xcjk2uni/xCJK2uni.ins b/macros/latex/contrib/xcjk2uni/xCJK2uni.ins
new file mode 100644
index 0000000000..31967db2ee
--- /dev/null
+++ b/macros/latex/contrib/xcjk2uni/xCJK2uni.ins
@@ -0,0 +1,139 @@
+%%
+%% This is file `xCJK2uni.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xCJK2uni.dtx (with options: `install')
+%%
+%% Copyright (C) 2013-2014, 2016, 2018-2019 by Qing Lee <sobenlee@gmail.com>
+%% --------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%% http://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Qing Lee.
+%%
+%% --------------------------------------------------------------------------
+%%
+
+\input ctxdocstrip %
+
+\preamble
+
+ Copyright (C) 2013-2014, 2016, 2018-2019 by Qing Lee <sobenlee@gmail.com>
+--------------------------------------------------------------------------
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. This version of this license is in
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+ and the latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Qing Lee.
+
+--------------------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+ This package consists of the file xCJK2uni.dtx,
+ and the derived files xCJK2uni.pdf,
+ xCJK2uni.sty,
+ xCJK2uni.ins,
+ xCJK2uni-make.tex,
+ xCJK2uni-sfd.def,
+ xCJK2uni-UBg5plus.def,
+ xCJK2uni-UBig5.def,
+ xCJK2uni-UGB.def,
+ xCJK2uni-UGBK.def,
+ xCJK2uni-UJIS.def,
+ xCJK2uni-UKS.def,
+ c****.cmap, and
+ README.md.
+\endpostamble
+
+\generate
+ {
+ \usedir{tex/latex/xcjk2uni}
+ \file{xCJK2uni.sty} {\from{\jobname.dtx}{package}}
+ \file{xCJK2uni-make.tex} {\from{\jobname.dtx}{make}}
+ \nopreamble\nopostamble
+ \usedir{doc/latex/xcjk2uni}
+ \file{README.md} {\from{\jobname.dtx}{readme}}
+ }
+
+\let\input\@@input
+\def\CJKtuend{\ExplSyntaxOff}
+\input xCJK2uni-make %
+\let\input\skip@input
+
+\generate
+ {
+ \usedir{tex/latex/xcjk2uni}
+ \usepostamble\emptypostamble
+ \file{xCJK2uni-UBig5.def}
+ {
+ \from{\jobname.dtx} {def,Bg5}
+ \from{xCJK2uni-sfd.def} {Bg5}
+ }
+ \file{xCJK2uni-UBg5plus.def}
+ {
+ \from{\jobname.dtx} {def,Bg5+}
+ \from{xCJK2uni-sfd.def} {Bg5+}
+ }
+ \file{xCJK2uni-UGB.def}
+ {
+ \from{\jobname.dtx} {def,GB}
+ \from{xCJK2uni-sfd.def} {GB}
+ }
+ \file{xCJK2uni-UGBK.def}
+ {
+ \from{\jobname.dtx} {def,GBK}
+ \from{xCJK2uni-sfd.def} {GBK}
+ }
+ \file{xCJK2uni-UJIS.def}
+ {
+ \from{\jobname.dtx} {def,JIS}
+ \from{xCJK2uni-sfd.def} {JIS}
+ }
+ \file{xCJK2uni-UKS.def}
+ {
+ \from{\jobname.dtx} {def,KS}
+ \from{xCJK2uni-sfd.def} {KS}
+ }
+ }
+
+\endbatchfile
+%%
+%% This package consists of the file xCJK2uni.dtx,
+%% and the derived files xCJK2uni.pdf,
+%% xCJK2uni.sty,
+%% xCJK2uni.ins,
+%% xCJK2uni-make.tex,
+%% xCJK2uni-sfd.def,
+%% xCJK2uni-UBg5plus.def,
+%% xCJK2uni-UBig5.def,
+%% xCJK2uni-UGB.def,
+%% xCJK2uni-UGBK.def,
+%% xCJK2uni-UJIS.def,
+%% xCJK2uni-UKS.def,
+%% c****.cmap, and
+%% README.md.
+%%
+%% End of file `xCJK2uni.ins'.
diff --git a/macros/latex/contrib/xcjk2uni/xCJK2uni.pdf b/macros/latex/contrib/xcjk2uni/xCJK2uni.pdf
new file mode 100644
index 0000000000..d2ba50e042
--- /dev/null
+++ b/macros/latex/contrib/xcjk2uni/xCJK2uni.pdf
Binary files differ