summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/ctex/engine/ctex-engine-luatex.def
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/ctex/engine/ctex-engine-luatex.def')
-rw-r--r--Master/texmf-dist/tex/latex/ctex/engine/ctex-engine-luatex.def642
1 files changed, 323 insertions, 319 deletions
diff --git a/Master/texmf-dist/tex/latex/ctex/engine/ctex-engine-luatex.def b/Master/texmf-dist/tex/latex/ctex/engine/ctex-engine-luatex.def
index 351bb810745..6ccee7c96a2 100644
--- a/Master/texmf-dist/tex/latex/ctex/engine/ctex-engine-luatex.def
+++ b/Master/texmf-dist/tex/latex/ctex/engine/ctex-engine-luatex.def
@@ -6,9 +6,9 @@
%%
%% ctex.dtx (with options: `luatex')
%%
-%% Copyright (C) 2003--2019
+%% Copyright (C) 2003--2020
%% CTEX.ORG and any individual authors listed in the documentation.
-%% ------------------------------------------------------------------------------
+%% ---------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
@@ -20,16 +20,14 @@
%% 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'.
+%% This work has the LPPL maintenance status "maintained".
%%
-%% The Current Maintainers of this work are Leo Liu, Qing Lee and Liam Huang.
+%% ---------------------------------------------------------------------
%%
-%% ------------------------------------------------------------------------------
-%%
-\GetIdInfo$Id: ctex.dtx 735dfe2 2019-05-29 21:42:29 +0800 Qing Lee <sobenlee@gmail.com> $
+\GetIdInfo$Id: ctex.dtx 320df30 2020-05-02 06:45:05 +0800 Qing Lee <sobenlee@gmail.com> $
{LuaLaTeX adapter (CTEX)}
\ProvidesExplFile{ctex-engine-luatex.def}
- {\ExplFileDate}{2.4.16}{\ExplFileDescription}
+ {\ExplFileDate}{2.5.1}{\ExplFileDescription}
\msg_new:nnn { ctex } { luatexja-loaded }
{
Package~`luatexja'~can~not~be~loaded~before~`ctex'.\\
@@ -39,28 +37,29 @@
{ \msg_critical:nnx { ctex } { luatexja-loaded } { \g_file_curr_name_str } }
{ \tl_const:cn { ver@ltj-latex.\@pkgextension } { 9999/99/99 } }
\RequirePackage { luatexja }
-\@ifpackagelater { luatexja } { 2015/09/21 } { }
+\@ifpackagelater { luatexja } { 2020/04/12 } { }
{ \msg_error:nnn { ctex } { package-too-old } { luatexja } }
\RequirePackage { fontspec }
-\@ifpackagelater { fontspec } { 2014/05/25 } { }
+\@ifpackagelater { fontspec } { 2020/02/21 } { }
{ \msg_error:nnn { ctex } { package-too-old } { fontspec } }
\ExplSyntaxOff
\ltjdefcharrange{1}{"80-"36F, "1E00-"1EFF}
\ltjdefcharrange{2}{"370-"4FF, "1F00-"1FFF}
\ltjdefcharrange{3}{%
- "2000-"206F, "2070-"243F, "2460-"24FF, "2500-"27BF, "2900-"29FF,
- "2B00-"2BFF}
+ "2000-"243F, "2460-"24FF, "2500-"27BF, "2900-"29FF, "2B00-"2BFF}
\ltjdefcharrange{4}{%
"500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF,
- "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A82F, "A840-"ABFF, "FB00-"FE0F,
- "FE20-"FE2F, "FE70-"FEFF, "10000-"1FFFF, "E000-"F8FF} % non-Japanese
+ "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A95F, "A980-"ABFF, "E000-"F8FF,
+ "FB00-"FE0F, "FE20-"FE2F, "FE70-"FEFF, "10000-"1AFFF, "1B170-"1F0FF,
+ "1F300-"1FFFF, "2000-"206F}
\ltjdefcharrange{5}{"D800-"DFFF, "E0000-"E00FF, "E01F0-"10FFFF}
\ltjdefcharrange{6}{%
"2E80-"2EFF, "3000-"30FF, "3190-"319F, "31F0-"4DBF,
- "4E00-"9FFF, "F900-"FAFF, "FE10-"FE6F, "20000-"2FFFF, "E0100-"E01EF}
+ "4E00-"9FFF, "F900-"FAFF, "FE10-"FE1F, "FE30-"FE6F, "FF00-"FFEF,
+ "1B000-"1B16F, "1F100-"1F2FF, "20000-"3FFFF, "E0100-"E01EF}
\ltjdefcharrange{7}{%
- "1100-"11FF, "2F00-"2FFF, "3100-"31EF, "A000-"A4CF,
- "A830-"A83F, "AC00-"D7FF}
+ "1100-"11FF, "2F00-"2FFF, "3100-"318F, "31A0-"31EF, "A000-"A4CF,
+ "A960-"A97F, "AC00-"D7FF}
\ltjdefcharrange{8}{"A7, "A8, "B0, "B1, "B4, "B6, "D7, "F7}
\ltjdefcharrange{9}{%
"2018, "2019, "201C, "201D, "2013, "2014, "2025, "2026, "2027, "2E3A}
@@ -78,42 +77,112 @@
}
\ExplSyntaxOn
\RequirePackage { xunicode-addon }
-\AtBeginUTFCommand
+\AtBeginUTFCommand { \CTEX@beginallalchar }
+\AtEndUTFCommand { \CTEX@endallalchar }
+\cs_new_protected:Npn \CTEX@beginallalchar
{
\group_begin:
- \lua_now:e { tex.globaldefs = 0 }
- \ltj@allalchar
- }
-\AtEndUTFCommand { \group_end: }
-\cs_set_protected:Npn \fontspec_visible_space:
- {
- \tex_iffontchar:D \tex_font:D "2423 \exp_stop_f:
- \ltjalchar "2423 \exp_stop_f:
- \else:
- \fontspec_visible_space_fallback:
- \fi:
+ \ctex_ltj_zero_globaldefs:
+ \ltj@allalchar
}
+\cs_new_protected:Npn \CTEX@endallalchar
+ { \group_end: }
\ctex_at_end_package:nn { listings }
+ { \RequirePackage { lltjp-listings } }
+\group_begin:
+\char_set_catcode_space:n { 32 }
+\lua_now:e
{
- \use:x
- {
- \exp_not:N \RequirePackage { lltjp-listings }
- \tl_set:Nn \exp_not:N \lstlistingname
- { \exp_not:o { \lstlistingname } }
- \tl_set:Nn \exp_not:N \lstlistlistingname
- { \exp_not:o { \lstlistlistingname } }
- }
+ local func = lua.get_functions_table()
+ local ltjfont = luatexja.jfont
+ local getattribute = tex.getattribute
+ local set_lua = token.set_lua
+ local scan_int, scan_arg = token.scan_int, token.scan_argument
+ local new_luafunction = luatexbase.new_luafunction
+ local id = new_luafunction("ctex")
+ func[id] = ltjfont.add_kyenc_list
+ set_lua("ctex_ltj_add_kyenc:n", id, "global", "protected")
+ local id = new_luafunction("ctex")
+ func[id] = ltjfont.is_kenc
+ set_lua("ctex_ltj_is_kenc:n", id, "global")
+ local id = new_luafunction("ctex")
+ func[id] = function ()
+ local s = scan_arg()
+ local is_braced, is_quoted
+ if s:sub(1,1) == '{' and s:sub(-1)=='}' then
+ is_braced = true; s = s:sub(2,-2)
+ end
+ if s:sub(1,1) == '"' and s:sub(-1) == '"' then
+ is_quoted = true; s = s:sub(2,-2)
+ end
+ s = s .. ltjfont.print_aftl_address()
+ if is_braced then s = '{'..s..'}'
+ elseif is_quoted then s = '"'..s..'"'
+ end
+ tex.sprint(-2, s)
+ end
+ set_lua("ctex_ltj_patch_external_font:n", id, "global")
+ local id = new_luafunction("ctex")
+ func[id] = function ()
+ font.current(getattribute("ltj@curjfnt"))
+ end
+ set_lua("ctex_ltj_use_jfont:", id, "global", "protected")
+ local id = new_luafunction("ctex")
+ func[id] = function ()
+ local b = tonumber(scan_arg())
+ local e = tonumber(scan_arg())
+ local alt = scan_arg()
+ local base = scan_arg()
+ ltjfont.set_alt_font_latex(b, e, alt, base)
+ end
+ set_lua("ctex_ltj_set_alt_font:nnnn", id, "global", "protected")
+ local id = new_luafunction("ctex")
+ func[id] = function ()
+ local base = scan_arg()
+ ltjfont.clear_alt_font_latex(base)
+ end
+ set_lua("ctex_ltj_clear_alt_font:n", id, "global", "protected")
+ local id = new_luafunction("ctex")
+ func[id] = function ()
+ local base = scan_arg()
+ local size = scan_arg()
+ ltjfont.output_alt_font_cmd("y", base)
+ ltjfont.pickup_alt_font_a(size)
+ end
+ set_lua("ctex_ltj_pickup_alt_font:nn", id, "global", "protected")
+ local id = new_luafunction("ctex")
+ func[id] = function ()
+ local num = scan_int()
+ local base = scan_arg()
+ ltjfont.pickup_alt_font_b(num, base)
+ end
+ set_lua("__ctex_ltj_pickup_alt_font:Nn", id, "global", "protected")
+ local id = new_luafunction("ctex")
+ func[id] = \LuaTeXjaversion > 20200412.0
+ and ltjfont.does_alt_set
+ or function ()
+ local base = scan_arg()
+ ltjfont.does_alt_set(base)
+ end
+ set_lua("__ctex_ltj_if_alt_set:nT", id, "global")
+ local id = new_luafunction("ctex")
+ func[id] = function ()
+ tex.set("globaldefs", 0)
+ end
+ set_lua("ctex_ltj_zero_globaldefs:", id, "global", "protected")
}
-\cs_new_protected_nopar:Npn \ctex_ltj_select_font:
+\group_end:
+\cs_new_protected:Npn \ctex_ltj_select_font:
{
- \cs_if_exist_use:cF { \l__ctex_ltj_current_font_tl }
+ \group_begin: \exp_args:NNc \group_end:
+ \cs_if_exist_use:NF { \l__ctex_ltj_current_font_tl }
{ \tl_if_empty:NF \CJK@family { \__ctex_ltj_select_font_aux: } }
}
\tl_new:N \CJK@family
\tl_new:N \l__ctex_ltj_current_font_tl
\tl_set:Nn \l__ctex_ltj_current_font_tl
{ \CJK@encoding / \CJK@family / \f@series / \f@shape / \f@size }
-\cs_new_protected_nopar:Npn \__ctex_ltj_select_font_aux:
+\cs_new_protected:Npn \__ctex_ltj_select_font_aux:
{
\group_begin:
\tl_set_eq:NN \f@encoding \CJK@encoding
@@ -126,14 +195,18 @@
\cs_if_exist:cF { \l__ctex_ltj_current_font_tl }
{ \__ctex_ltj_select_font_aux: }
}
-\cs_new_protected_nopar:Npn \__ctex_ltj_push_fontname:n #1
+\cs_new_protected:Npn \__ctex_ltj_push_fontname:n #1
{
- \cs_gset_eq:NN \__ctex_ltj_save_fontname:w \font@name
+ \seq_gpush:No \g__ctex_ltj_fontname_seq { \font@name }
\cs_gset_nopar:Npx \font@name {#1}
}
-\cs_new_protected_nopar:Npn \__ctex_ltj_pop_fontname:
- { \cs_gset_eq:NN \font@name \__ctex_ltj_save_fontname:w }
-\cs_new_protected_nopar:Npn \ctex_ltj_pickup_font:
+\cs_new_protected:Npn \__ctex_ltj_pop_fontname:
+ {
+ \seq_gpop:NNT \g__ctex_ltj_fontname_seq \l__ctex_ltj_tmp_tl
+ { \cs_gset_eq:NN \font@name \l__ctex_ltj_tmp_tl }
+ }
+\seq_new:N \g__ctex_ltj_fontname_seq
+\cs_new_protected:Npn \ctex_ltj_pickup_font:
{
\exp_after:wN \cs_if_exist:NF \font@name
{
@@ -155,7 +228,7 @@
}
\exp_after:wN \globaljfont \font@name \external@font \scan_stop:
\font@name
- \lua_now:e { font.current(tex.getattribute('ltj@curjfnt')) }
+ \ctex_ltj_use_jfont:
\use:c { \f@encoding + \f@family }
\use:c { \curr@fontshape }
}
@@ -181,53 +254,46 @@
}
\prg_new_conditional:Npnn \ctex_ltj_if_alternate_shape_exist:n #1 { T , F , TF }
{
- \lua_now:e { luatexja.jfont.does_alt_set ('\lua_escape:e {#1}') }
- \prg_return_true: \else: \prg_return_false: \fi:
+ \__ctex_ltj_if_alt_set:nT {#1} { \prg_return_true: \use_none:n }
+ \prg_return_false:
}
-\cs_new_nopar:Npn \__ctex_ltj_patch_external_font:w #1 ~ at
- { #1 \lua_now:e { luatexja.jfont.print_aftl_address() } ~ at }
-\cs_new_protected_nopar:Npn \ctex_ltj_select_alternate_font:
+\cs_new:Npn \__ctex_ltj_patch_external_font:w #1 ~ at
+ { \ctex_ltj_patch_external_font:n {#1} ~ at }
+\cs_new_protected:Npn \ctex_ltj_select_alternate_font:
{
\ctex_ltj_if_alternate_shape_exist:nT { \l__ctex_ltj_current_shape_tl }
{
- \lua_now:e
- {
- luatexja.jfont.output_alt_font_cmd
- ('y', '\lua_escape:e { \l__ctex_ltj_current_shape_tl }')
- }
- \lua_now:e { luatexja.jfont.pickup_alt_font_a ('\f@size') }
+ \ctex_ltj_pickup_alt_font:nn
+ { \l__ctex_ltj_current_shape_tl } { \f@size }
}
}
\tl_new:N \l__ctex_ltj_current_shape_tl
\tl_set:Nn \l__ctex_ltj_current_shape_tl
{ \CJK@encoding / \CJK@family / \f@series / \f@shape }
-\cs_new_protected_nopar:Npn \ltj@pickup@altfont@auxy #1
+\cs_new_protected:Npn \ltj@pickup@altfont@auxy #1
{
\cs_if_exist:cF { #1/\f@size }
{
\group_begin:
- \use:x { \exp_not:N \split@name #1 / \f@size } \@nil
+ \use:e { \exp_not:N \split@name #1 / \f@size } \@nil
\__ctex_ltj_push_fontname:n { \use:c { \curr@fontshape / \f@size } }
\ctex_ltj_pickup_font:
\group_end:
\__ctex_ltj_pop_fontname:
}
}
-\cs_new_protected_nopar:Npn \ltj@pickup@altfont@copy #1#2
+\cs_new_protected:Npn \ltj@pickup@altfont@copy #1#2
{
\ltj@@getjfontnumber #1
- \lua_now:e
- {
- luatexja.jfont.pickup_alt_font_b
- ( \int_use:N \ltj@tempcntc, '\lua_escape:e {#2}' )
- }
+ \__ctex_ltj_pickup_alt_font:Nn \ltj@tempcntc {#2}
}
\cs_new:Npn \ctex_ltj_if_jfont:nTF #1
{
- \lua_now:e
- { luatexja.jfont.is_kenc( string.match('\lua_escape:e {#1}', '[^/]+') ) }
+ \ctex_ltj_is_kenc:n { \__ctex_ltj_ltj_if_jfont:w #1 / \q_stop }
\ifin@ \exp_after:wN \use_i:nn \else: \exp_after:wN \use_ii:nn \fi:
}
+\cs_new:Npn \__ctex_ltj_ltj_if_jfont:w #1 / #2 \q_stop
+ {#1}
\cs_new:Npn \ctex_ltj_if_jfont_math:NTF #1
{ \exp_after:wN \__ctex_ltj_if_jfont_math:w \token_to_str:N #1 \q_stop }
\group_begin:
@@ -235,16 +301,16 @@
\cs_new:Npn \__ctex_ltj_if_jfont_math:w #1 M #2#3 \q_stop
{ \ctex_ltj_if_jfont:nTF {#3} }
\group_end:
-\cs_new_protected_nopar:Npn \ctex_ltj_get_and_define_fonts:nN #1#2
+\cs_new_protected:Npn \ctex_ltj_get_and_define_fonts:nN #1#2
{
- \ctex_ltj_if_jfont:nTF { \token_to_str:N #2 }
+ \exp_args:No \ctex_ltj_if_jfont:nTF { \token_to_str:N #2 }
{ \ctex_ltj_get_and_define_fonts_ja:nN }
{ \ctex_ltj_get_and_define_fonts_al:nN }
{#1} #2
}
\cs_new_eq:NN \ctex_ltj_get_and_define_fonts_al:nN \getanddefine@fonts
\cs_set_eq:NN \getanddefine@fonts \ctex_ltj_get_and_define_fonts:nN
-\cs_new_protected_nopar:Npn \ctex_ltj_get_and_define_fonts_ja:nN #1#2
+\cs_new_protected:Npn \ctex_ltj_get_and_define_fonts_ja:nN #1#2
{
\tl_gset:Nx \font@name { \use:c { \token_to_str:N #2 / \tf@size } }
\ctex_ltj_pickup_font: \tl_set_eq:NN \textfont@name \font@name
@@ -260,7 +326,7 @@
\ltj@@set@stackfont #1 , \font@name \c_colon_str { MJSS }
}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_use_math_group:Nn #1#2
+\cs_new_protected:Npn \ctex_ltj_use_math_group:Nn #1#2
{
\mode_if_math:T
{
@@ -292,14 +358,14 @@
}
{
\cs_set_eq:NN \use@mathgroup \ctex_ltj_use_math_group:Nn
- \cs_set_protected_nopar:Npn \ctex_ltj_math_group_hook:
+ \cs_set_protected:Npn \ctex_ltj_math_group_hook:
{ \__um_switchto_literal: }
\ctex_ltj_set_math_letter:NN
\__um_sym:nnn
\__um_input_math_symbol_table:
}
}
-\cs_new_protected_nopar:Npn \ctex_mono_jfm:n #1
+\cs_new_protected:Npn \ctex_mono_jfm:n #1
{
\str_if_eq:nnTF {#1} { plain }
{ \tl_set:Nn \l__ctex_ltj_jfm_tl { mono } }
@@ -310,24 +376,22 @@
\ctex_mono_jfm:o { \l__ctex_punct_tl }
\tl_const:Nn \CJK@encoding { LTJY3 }
\DeclareFontEncoding { \CJK@encoding } { } { }
-\use:x
+\use:e
{
\exp_not:N \DeclareFontSubstitution
- { \CJK@encoding } { song } { \mddefault } { \updefault }
+ { \CJK@encoding } { song } { \mddefault } { \shapedefault }
}
-\lua_now:e { luatexja.jfont.add_kyenc_list('\CJK@encoding') }
-\cs_new_protected_nopar:Npn \__ctex_ltj_change_encoding:
- { \tl_set_eq:NN \g_fontspec_encoding_tl \CJK@encoding }
+\ctex_ltj_add_kyenc:n { \CJK@encoding }
\DeclareFontFamily { \CJK@encoding } { song } { }
-\DeclareFontShape { \CJK@encoding } { song } { \mddefault } { \updefault }
+\DeclareFontShape { \CJK@encoding } { song } { \mddefault } { \shapedefault }
{ <-> psft:SimSun:cid=Adobe-GB1-5;jfm=\l__ctex_ltj_jfm_tl } { }
-\DeclareFontShape { \CJK@encoding } { song } { \bfdefault } { \updefault }
+\DeclareFontShape { \CJK@encoding } { song } { \bfdefault } { \shapedefault }
{ <-> psft:SimHei:cid=Adobe-GB1-5;jfm=\l__ctex_ltj_jfm_tl } { }
\tl_const:Nn \c__ctex_ltj_math_tl { CJKmath }
\DeclareSymbolFont { \c__ctex_ltj_math_tl }
- { \CJK@encoding } { song } { \mddefault } { \updefault }
+ { \CJK@encoding } { song } { \mddefault } { \shapedefault }
\SetSymbolFont { \c__ctex_ltj_math_tl } { bold }
- { \CJK@encoding } { song } { \bfdefault } { \updefault }
+ { \CJK@encoding } { song } { \bfdefault } { \shapedefault }
\int_const:Nn \c__ctex_ltj_math_fam_int { \use:c { sym \c__ctex_ltj_math_tl } }
\jfam \c__ctex_ltj_math_fam_int
\newfontfeature { CID } { cid = #1 }
@@ -343,7 +407,7 @@
{
\group_begin:
\clist_clear:N \l__ctex_ltj_char_range_clist
- \seq_clear:N \l__ctex_ltj_alternate_seq
+ \prop_clear:N \l__ctex_ltj_alternate_prop
\tl_set:Nn \l__ctex_ltj_base_CJKfamily_tl {#1}
\keys_set_known:nnN { ctex_ltj / fontspec } {#2} \l__ctex_ltj_tmp_tl
\clist_set:No \l__ctex_ltj_font_options_clist { \l__ctex_ltj_tmp_tl }
@@ -360,15 +424,16 @@
}
\tl_new:N \l__ctex_ltj_base_CJKfamily_tl
\clist_new:N \l__ctex_ltj_font_options_clist
-\cs_new_protected_nopar:Npn \__ctex_ltj_use_global_options:N #1
+\cs_new_protected:Npn \__ctex_ltj_use_global_options:N #1
{
\clist_concat:NNN #1 \g__ctex_ltj_default_features_clist #1
- \clist_put_left:Nx #1 { JFM = \l__ctex_ltj_jfm_tl }
+ \clist_put_left:Nx #1
+ { NFSSEncoding = \CJK@encoding , JFM = \l__ctex_ltj_jfm_tl }
}
\prop_new:N \g__ctex_ltj_family_name_prop
\prop_new:N \g__ctex_ltj_family_font_name_prop
\prop_new:N \g__ctex_ltj_family_font_options_prop
-\cs_new_protected_nopar:Npn \__ctex_ltj_check_family:n #1
+\cs_new_protected:Npn \__ctex_ltj_check_family:n #1
{
\prop_gpop:NnNT \g__ctex_ltj_family_font_name_prop {#1} \l__ctex_ltj_tmp_tl
{
@@ -387,28 +452,24 @@
\tl_new:N \l__ctex_ltj_tmp_tl
\msg_new:nnn { ctex } { redefine-family }
{ Redefining~CJKfamily~`\__ctex_ltj_msg_family_map:n {#1}'~(#2). }
-\cs_new_protected_nopar:Npn \__ctex_ltj_gset_family_cs:nn #1#2
+\cs_new_protected:Npn \__ctex_ltj_gset_family_cs:nn #1#2
{
- \cs_gset_protected_nopar:cpx { \__ctex_ltj_family_csname:n {#1} }
+ \cs_gset_protected:cpx { \__ctex_ltj_family_csname:n {#1} }
{
\group_begin:
- \__ctex_ltj_change_encoding:
\exp_not:n { \cs_set_eq:NN \CJKfamily \use_none:n }
- \exp_not:n { \cs_set_eq:NN \CTEX@fontfamily \use_none:n }
- \exp_not:n { \fontspec_set_family:Nnn \g__ctex_ltj_fontspec_family_tl }
+ \exp_not:n { \fontspec_gset_family:Nnn \g__ctex_ltj_fontspec_family_tl }
{ \exp_not:o { \l__ctex_ltj_font_options_clist } } {#2}
\prop_gput:Nno \exp_not:N \g__ctex_ltj_family_name_prop {#1}
{ \exp_not:N \g__ctex_ltj_fontspec_family_tl }
- \tl_gset_eq:NN \exp_not:N \g__ctex_ltj_fontspec_family_tl
- \exp_not:N \g__ctex_ltj_fontspec_family_tl
\__ctex_ltj_set_alternate_family:n {#1}
\group_end:
}
}
\tl_new:N \l__ctex_ltj_base_family_tl
\tl_new:N \g__ctex_ltj_fontspec_family_tl
-\cs_new_nopar:Npn \__ctex_ltj_family_csname:n #1 { ctex_ltj/family/#1 }
-\cs_new_protected_nopar:Npn \__ctex_ltj_set_alternate_family:n #1
+\cs_new:Npn \__ctex_ltj_family_csname:n #1 { ctex_ltj/family/#1 }
+\cs_new_protected:Npn \__ctex_ltj_set_alternate_family:n #1
{
\tl_set:Nn \l__ctex_ltj_base_CJKfamily_tl {#1}
\tl_set_eq:NN \l__ctex_ltj_base_family_tl \g__ctex_ltj_fontspec_family_tl
@@ -418,7 +479,7 @@
\cs_new:Npn \__ctex_ltj_alternate_cs:n #1 { ctex_ltj/alternate_family/#1 }
\NewDocumentCommand \CJKfamily { m }
{ \ctex_ltj_switch_family:x {#1} \tex_ignorespaces:D }
-\cs_new_protected_nopar:Npn \ctex_ltj_switch_family:n #1
+\cs_new_protected:Npn \ctex_ltj_switch_family:n #1
{
\ctex_ltj_family_if_exist:nNTF {#1} \CJK@family
{
@@ -443,7 +504,7 @@
}
}
\prg_generate_conditional_variant:Nnn \ctex_ltj_family_if_exist:nN { x } { T , F , TF }
-\cs_new_protected_nopar:Npn \__ctex_ltj_family_unknown_warning:n #1
+\cs_new_protected:Npn \__ctex_ltj_family_unknown_warning:n #1
{
\prop_if_empty:NF \g__ctex_ltj_family_font_name_prop
{
@@ -460,7 +521,7 @@
Unknown~CJK~family~`\__ctex_ltj_msg_family_map:n {#1}'~is~being~ignored.\\
Try~to~use~`\__ctex_ltj_msg_def_family_map:n {#1}'~to~define~it.
}
-\cs_new_nopar:Npn \__ctex_ltj_msg_def_family_map:n #1
+\cs_new:Npn \__ctex_ltj_msg_def_family_map:n #1
{
\str_case_e:nnF {#1}
{
@@ -471,7 +532,7 @@
{ \token_to_str:N \setCJKfamilyfont \{ #1 \} }
[...]\{...\}
}
-\cs_new_nopar:Npn \__ctex_ltj_msg_family_map:n #1
+\cs_new:Npn \__ctex_ltj_msg_family_map:n #1
{
\str_case_e:nnF {#1}
{
@@ -481,21 +542,21 @@
}
{#1}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_fontspec:nn #1#2
+\cs_new_protected:Npn \ctex_ltj_fontspec:nn #1#2
{
\prop_get:NnNTF \g__ctex_ltj_fontspec_prop
{ CJKfontspec/#1/#2/id } \l_ctex_ltj_family_tl
{ \ctex_ltj_switch_family:x { \l_ctex_ltj_family_tl } }
{
\int_gincr:N \g__ctex_ltj_family_int
- \__ctex_ltj_fontspec:xnn
+ \__ctex_ltj_fontspec:enn
{ CJKfontspec ( \int_use:N \g__ctex_ltj_family_int ) }
{#1} {#2}
}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_fontspec:xx #1#2
- { \use:x { \ctex_ltj_fontspec:nn {#1} {#2} } }
-\cs_new_protected_nopar:Npn \__ctex_ltj_fontspec:nnn #1#2#3
+\cs_new_protected:Npn \ctex_ltj_fontspec:ee #1#2
+ { \use:e { \ctex_ltj_fontspec:nn {#1} {#2} } }
+\cs_new_protected:Npn \__ctex_ltj_fontspec:nnn #1#2#3
{
\bool_if:NT \l__ctex_ltj_add_alternate_bool
{
@@ -515,11 +576,11 @@
\ctex_ltj_set_family:nnn {#1} {#2} {#3}
\ctex_ltj_switch_family:n {#1}
}
-\cs_generate_variant:Nn \__ctex_ltj_fontspec:nnn { x }
+\cs_generate_variant:Nn \__ctex_ltj_fontspec:nnn { e }
\prop_new:N \g__ctex_ltj_fontspec_prop
-\cs_new_protected_nopar:Npn \ctex_ltj_add_font_features:n #1
+\cs_new_protected:Npn \ctex_ltj_add_font_features:n #1
{ \ctex_ltj_add_font_features:xn { \l_ctex_ltj_family_tl } {#1} }
-\cs_new_protected_nopar:Npn \ctex_ltj_add_font_features:nn #1#2
+\cs_new_protected:Npn \ctex_ltj_add_font_features:nn #1#2
{
\prop_get:NnNTF \g__ctex_ltj_family_font_name_prop
{#1} \l__ctex_ltj_tmp_tl
@@ -528,7 +589,7 @@
{#1} \l__ctex_ltj_font_options_clist
\clist_put_right:Nn \l__ctex_ltj_font_options_clist {#2}
\bool_set_true:N \l__ctex_ltj_add_alternate_bool
- \ctex_ltj_fontspec:xx
+ \ctex_ltj_fontspec:ee
{ \exp_not:o { \l__ctex_ltj_font_options_clist } }
{ \exp_not:o { \l__ctex_ltj_tmp_tl } }
}
@@ -544,16 +605,16 @@
}
\cs_new_protected:Npn \__ctex_ltj_pass_args:nnnn #1#2#3#4
{
- \IfNoValueTF {#2}
+ \tl_if_novalue:nTF {#2}
{ \__ctex_ltj_post_arg:w {#1} {#3} {#4} }
{
- \use:x { #1 {#2} {#3} }
+ \use:e { #1 {#2} {#3} }
#4
}
}
\NewDocumentCommand \__ctex_ltj_post_arg:w { m m m O { } }
{
- \use:x { #1 {#4} {#2} }
+ \use:e { #1 {#4} {#2} }
#3
}
\NewDocumentCommand \setCJKfamilyfont { m o m }
@@ -565,8 +626,8 @@
\NewDocumentCommand \newCJKfontfamily { o m o m }
{
\tl_set:Nx \l__ctex_ltj_tmp_tl
- { \IfNoValueTF {#1} { \cs_to_str:N #2 } {#1} }
- \cs_new_protected_nopar:Npx #2
+ { \tl_if_novalue:nTF {#1} { \cs_to_str:N #2 } {#1} }
+ \cs_new_protected:Npx #2
{ \ctex_ltj_switch_family:n { \l__ctex_ltj_tmp_tl } }
\__ctex_ltj_pass_args:nnnn
{ \ctex_ltj_set_family:nnn { \l__ctex_ltj_tmp_tl } } {#3} {#4}
@@ -623,29 +684,12 @@
\tl_if_exist:NF \CJKrmdefault { \tl_const:Nn \CJKrmdefault { rm } }
\tl_if_exist:NF \CJKsfdefault { \tl_const:Nn \CJKsfdefault { sf } }
\tl_if_exist:NF \CJKttdefault { \tl_const:Nn \CJKttdefault { tt } }
-\RenewDocumentCommand \fontfamily { m }
- {
- \tl_set:Nx \f@family {#1}
- \CTEX@fontfamily {#1}
- }
-\cs_new_protected_nopar:Npn \CTEX@fontfamily #1
- {
- \str_if_eq:nnTF {#1} { \familydefault }
- { \CJKfamily { \CJKfamilydefault } }
- { \__ctex_ltj_update_family_aux: }
- }
-\cs_new_protected_nopar:Npn \__ctex_ltj_update_family_aux:
- {
- \str_case_e:nn { \f@family }
- {
- { \rmdefault } { \CJKfamily { \CJKrmdefault } }
- { \sfdefault } { \CJKfamily { \CJKsfdefault } }
- { \ttdefault } { \CJKfamily { \CJKttdefault } }
- { \familydefault } { \CJKfamily { \CJKfamilydefault } }
- }
- }
+\g@addto@macro \@rmfamilyhook { \CJKfamily { \CJKrmdefault } }
+\g@addto@macro \@sffamilyhook { \CJKfamily { \CJKsfdefault } }
+\g@addto@macro \@ttfamilyhook { \CJKfamily { \CJKttdefault } }
+\g@addto@macro \@defaultfamilyhook { \CJKfamily { \CJKfamilydefault } }
\ctex_at_end_preamble:n { \ctex_update_default_family: }
-\cs_new_protected_nopar:Npn \ctex_ltj_ensure_default_family:
+\cs_new_protected:Npn \ctex_ltj_ensure_default_family:
{
\prop_if_empty:NF \g__ctex_ltj_family_font_name_prop
{
@@ -670,7 +714,7 @@
\ctex_ltj_update_mathfont:
}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_update_mathfont:
+\cs_new_protected:Npn \ctex_ltj_update_mathfont:
{
\ctex_ltj_family_if_exist:xNTF { \c__ctex_ltj_math_tl } \l__ctex_ltj_tmp_tl
{ \ctex_ltj_update_mathfont:n { \l__ctex_ltj_tmp_tl } }
@@ -679,91 +723,93 @@
{ \ctex_ltj_update_mathfont:n { \l__ctex_ltj_tmp_tl } }
}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_update_mathfont:n #1
+\cs_new_protected:Npn \ctex_ltj_update_mathfont:n #1
{
\tl_const:Nx \c__ctex_ltj_math_family_tl {#1}
\DeclareSymbolFont { \c__ctex_ltj_math_tl } { \CJK@encoding }
- { \c__ctex_ltj_math_family_tl } { \mddefault } { \updefault }
+ { \c__ctex_ltj_math_family_tl } { \mddefault } { \shapedefault }
\cs_if_free:cTF
- { \CJK@encoding/\c__ctex_ltj_math_family_tl/\bfdefault/\updefault }
+ { \CJK@encoding/\c__ctex_ltj_math_family_tl/\bfdefault/\shapedefault }
{
\SetSymbolFont { \c__ctex_ltj_math_tl } { bold } { \CJK@encoding }
- { \c__ctex_ltj_math_family_tl } { \mddefault } { \updefault }
+ { \c__ctex_ltj_math_family_tl } { \mddefault } { \shapedefault }
}
{
\SetSymbolFont { \c__ctex_ltj_math_tl } { bold } { \CJK@encoding }
- { \c__ctex_ltj_math_family_tl } { \bfdefault } { \updefault }
+ { \c__ctex_ltj_math_family_tl } { \bfdefault } { \shapedefault }
}
}
\keys_define:nn { ctex_ltj / fontspec }
{
- AlternateFont .code:n = \ctex_ltj_set_alternate_seq:n {#1} ,
+ AlternateFont .code:n = \ctex_ltj_set_alternate_prop:n {#1} ,
AlternateFont .value_required:n = true ,
CharRange .clist_set:N = \l__ctex_ltj_char_range_clist ,
CharRange .value_required:n = true
}
-\group_begin:
- \char_set_catcode_other:N \|
- \cs_set:Npn \__ctex_ltj_tmp:w #1
- {
- \cs_new_protected:Npn \ctex_ltj_set_alternate_seq:n ##1
- {
- \clist_if_empty:NT \l__ctex_ltj_char_range_clist
- {
- \tl_set:Nn \l__ctex_ltj_tmp_tl { ##1 }
- \tl_replace_all:Nnn \l__ctex_ltj_tmp_tl {#1} { || }
- \seq_set_split:NnV \l__ctex_ltj_tmp_seq { || } \l__ctex_ltj_tmp_tl
- \seq_set_filter:NNn \l__ctex_ltj_tmp_seq \l__ctex_ltj_tmp_seq
- { ! \tl_if_blank_p:n { ####1 } }
- \seq_concat:NNN \l__ctex_ltj_alternate_seq
- \l__ctex_ltj_alternate_seq \l__ctex_ltj_tmp_seq
- }
- }
- }
- \char_set_catcode_active:N \|
- \__ctex_ltj_tmp:w { || }
-\group_end:
-\seq_new:N \l__ctex_ltj_tmp_seq
-\seq_new:N \l__ctex_ltj_alternate_seq
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_family:nnF #1#2#3
+\cs_new_protected:Npn \ctex_ltj_set_alternate_prop:n #1
+ { \clist_map_function:nN {#1} \__ctex_ltj_push_alternate_prop:n }
+\cs_new_protected:Npn \__ctex_ltj_push_alternate_prop:n #1
+ {
+ \clist_set:Nx \l__ctex_ltj_tmp_clist { \tl_head:n {#1} }
+ \tl_remove_all:Nn \l__ctex_ltj_tmp_clist { ~ }
+ \exp_args:No \__ctex_ltj_push_alternate_prop:nn
+ { \l__ctex_ltj_tmp_clist } {#1}
+ }
+\cs_new_protected:Npn \__ctex_ltj_push_alternate_prop:nn #1
+ {
+ \prop_remove:Nn \l__ctex_ltj_alternate_prop {#1}
+ \prop_put:Nnn \l__ctex_ltj_alternate_prop {#1}
+ }
+\clist_new:N \l__ctex_ltj_tmp_clist
+\prop_new:N \l__ctex_ltj_alternate_prop
+\cs_new_protected:Npn \ctex_ltj_set_alternate_family:nnF
{
\clist_if_empty:NTF \l__ctex_ltj_char_range_clist
- {
- \__ctex_ltj_check_family:n {#1}
- \seq_if_empty:NF \l__ctex_ltj_alternate_seq
- { \ctex_ltj_save_alternate_seq:cn { \__ctex_ltj_alternate_cs:n {#1} } {#2} }
- #3
- }
- { \ctex_ltj_set_alternate_family:nn {#1} {#2} }
+ { \__ctex_ltj_set_family_aux:nnn }
+ { \__ctex_ltj_set_alternate_family_aux:nnn }
}
-\cs_new_protected_nopar:Npn \ctex_ltj_save_alternate_seq:Nn #1#2
+\cs_new_protected:Npn \__ctex_ltj_set_family_aux:nnn #1#2#3
{
- \seq_map_inline:Nn \l__ctex_ltj_alternate_seq
- { \ctex_ltj_save_alternate_seq:Nnnwnw #1 {#2} ##1 { } \q_stop }
+ \__ctex_ltj_check_family:n {#1}
+ \prop_if_empty:NF \l__ctex_ltj_alternate_prop
+ { \ctex_ltj_save_alternate_seq:cn { \__ctex_ltj_alternate_cs:n {#1} } {#2} }
+ #3
}
-\cs_generate_variant:Nn \ctex_ltj_save_alternate_seq:Nn { c }
-\NewDocumentCommand \ctex_ltj_save_alternate_seq:Nnnwnw
- { m m m +O{ } m u{ \q_stop } }
+\cs_new_protected:Npn \__ctex_ltj_set_alternate_family_aux:nnn #1#2#3
+ { \ctex_ltj_set_alternate_family:nn {#1} {#2} }
+\cs_new_protected:Npn \ctex_ltj_save_alternate_seq:Nn #1#2
+ {
+ \prop_map_inline:Nn \l__ctex_ltj_alternate_prop
+ { \__ctex_ltj_save_alternate_auxi:w ##2 { } \q_mark #1 {#2} }
+ }
+\cs_new_protected:Npn \__ctex_ltj_save_alternate_auxi:w #1#2#
{
- \clist_set:Nn \l__ctex_ltj_char_range_clist {#3}
- \clist_set:Nn \l__ctex_ltj_alternate_options_clist {#4}
+ \tl_if_blank:nTF {#2}
+ { \__ctex_ltj_save_alternate_auxii:w {#1} }
+ { \__ctex_ltj_save_alternate_auxii:w {#1} {#2} }
+ }
+\cs_new_protected:Npn \__ctex_ltj_save_alternate_auxii:w #1#2#3 #4 \q_mark #5#6
+ {
+ \clist_set:Nn \l__ctex_ltj_char_range_clist {#1}
+ \clist_set:Nn \l__ctex_ltj_alternate_options_clist {#3}
\__ctex_ltj_use_global_options:N \l__ctex_ltj_alternate_options_clist
- \tl_if_blank:nTF {#5}
- { \tl_set:Nn \l__ctex_ltj_tmp_tl {#2} }
+ \tl_if_blank:nTF {#2}
+ { \tl_set:Nn \l__ctex_ltj_tmp_tl {#6} }
{
- \tl_set:Nn \l__ctex_ltj_tmp_tl {#5}
- \tl_replace_all:Nnn \l__ctex_ltj_tmp_tl { * } {#2}
+ \tl_set:Nx \l__ctex_ltj_tmp_tl { \tl_trim_spaces:n {#2} }
+ \tl_replace_all:Nnn \l__ctex_ltj_tmp_tl { * } {#6}
}
- \use:x
+ \use:e
{
- \ctex_ltj_save_alternate_family:Nnnn \exp_not:N #1
+ \ctex_ltj_save_alternate_family:Nnnn \exp_not:N #5
{ \exp_not:o { \l__ctex_ltj_char_range_clist } }
{ \exp_not:o { \l__ctex_ltj_alternate_options_clist } }
{ \exp_not:o { \l__ctex_ltj_tmp_tl } }
}
}
\clist_new:N \l__ctex_ltj_alternate_options_clist
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_family:nn #1#2
+\cs_generate_variant:Nn \ctex_ltj_save_alternate_seq:Nn { c }
+\cs_new_protected:Npn \ctex_ltj_set_alternate_family:nn #1#2
{
\__ctex_ltj_update_family_uid:N \l__ctex_ltj_font_options_clist
\__ctex_ltj_use_global_options:N \l__ctex_ltj_font_options_clist
@@ -772,23 +818,22 @@
{ \l__ctex_ltj_char_range_clist }
{ \l__ctex_ltj_font_options_clist } {#2} {#1}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_family:Nnnnn #1#2#3#4#5
+\cs_new_protected:Npn \ctex_ltj_set_alternate_family:Nnnnn #1#2#3#4#5
{
\prop_get:NnNT \g__ctex_ltj_family_name_prop {#5} \l__ctex_ltj_base_family_tl
{ \ctex_ltj_set_alternate_family:nnn {#2} {#3} {#4} }
\ctex_ltj_save_alternate_family:Nnnn #1 {#2} {#3} {#4}
}
\cs_generate_variant:Nn \ctex_ltj_set_alternate_family:Nnnnn { coo }
-\cs_new_protected_nopar:Npn \ctex_ltj_save_alternate_family:Nnnn #1#2#3#4
+\cs_new_protected:Npn \ctex_ltj_save_alternate_family:Nnnn #1#2#3#4
{
\cs_if_exist:NF #1 { \cs_set_eq:NN #1 \prg_do_nothing: }
- \cs_gset_protected_nopar:Npx #1
+ \cs_gset_protected:Npx #1
{ \exp_not:o { #1 \ctex_ltj_set_alternate_family:nnn {#2} {#3} {#4} } }
}
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_family:nnn #1#2#3
+\cs_new_protected:Npn \ctex_ltj_set_alternate_family:nnn #1#2#3
{
\group_begin:
- \__ctex_ltj_change_encoding:
\cs_set_eq:NN \CJKfamily \use_none:n
\ctex_ltj_swap_cs:NN
\DeclareFontShape@ \ctex_ltj_declare_alternate_shape:nnnnnn
@@ -805,7 +850,7 @@
\cs_undefine:N \__ctex_ltj_tmp:w
}
\keys_define:nn { fontspec } { LTJFONTUID .code:n = }
-\cs_new_protected_nopar:Npn \__ctex_ltj_update_family_uid:N #1
+\cs_new_protected:Npn \__ctex_ltj_update_family_uid:N #1
{
\int_gincr:N \g__ctex_ltj_family_int
\clist_put_right:Nx #1 { LTJFONTUID = \int_use:N \g__ctex_ltj_family_int }
@@ -815,10 +860,9 @@
{
\ctex_ltj_declare_alternate_shape:nnnnnn {#1} {#2} {#3} {#4} {#5} {#6}
\ctex_ltj_set_alternate_shape:Nnnnnnn \l__ctex_ltj_char_range_clist
- { \l__ctex_ltj_base_family_tl } {#3} {#4}
- { \l_fontspec_family_tl } {#3} {#4}
+ { \l__ctex_ltj_base_family_tl } {#3} {#4} {#2} {#3} {#4}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_shape:Nnnnnnn #1#2#3#4#5#6#7
+\cs_new_protected:Npn \ctex_ltj_set_alternate_shape:Nnnnnnn #1#2#3#4#5#6#7
{
\clist_map_inline:Nn #1
{
@@ -829,73 +873,67 @@
}
{ \ctex_ltj_set_alternate_shape:nnn { #2/#3/#4 } { #5/#6/#7 } { ##1 } }
}
- \__ctex_ltj_save_alternate_shape:cnn
+ \__ctex_ltj_save_alternate_shape:cn
{ \__ctex_ltj_alternate_cs:n { clear / \l__ctex_ltj_base_CJKfamily_tl } }
- { luatexja.jfont.clear_alt_font_latex }
- { '\lua_escape:e { \CJK@encoding/#2/#3/#4 }' }
+ { \ctex_ltj_clear_alt_font:n { \CJK@encoding/#2/#3/#4 } }
}
\NewDocumentCommand \ctex_ltj_set_alternate_shape:nnn
{ m m > { \SplitArgument { 1 } { -> } } m }
{ \ctex_ltj_set_alternate_shape:nnnn {#1} {#2} #3 }
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_shape:nnnn #1#2#3#4
+\cs_new_protected:Npn \ctex_ltj_set_alternate_shape:nnnn #1#2#3#4
{
- \ctex_ltj_set_alternate_shape:n
+ \ctex_ltj_set_alternate_shape:e
{
- \IfNoValueTF {#4}
- { \int_eval:n {#3} , \int_eval:n {#3} , }
- {
- \int_eval:n { \tl_if_blank:nTF {#3} { "80 } {#3} } ,
- \int_eval:n { \tl_if_blank:nTF {#4} { "10FFFF } {#4} } ,
- }
- '\lua_escape:e { \CJK@encoding/#2 }' ,
- '\lua_escape:e { \CJK@encoding/#1 }'
+ \__ctex_ltj_range_normalization:nn {#3} {#4}
+ { \CJK@encoding / \exp_not:n {#2} }
+ { \CJK@encoding / \exp_not:n {#1} }
}
}
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_shape:n #1
+\cs_new_protected:Npn \ctex_ltj_set_alternate_shape:n #1
{
- \lua_now:e { luatexja.jfont.set_alt_font_latex ( #1 ) }
- \__ctex_ltj_save_alternate_shape:cnn
+ \ctex_ltj_set_alt_font:nnnn #1
+ \__ctex_ltj_save_alternate_shape:cn
{ \__ctex_ltj_alternate_cs:n { reset / \l__ctex_ltj_base_CJKfamily_tl } }
- { luatexja.jfont.set_alt_font_latex } {#1}
+ { \ctex_ltj_set_alt_font:nnnn #1 }
}
-\cs_new_protected_nopar:Npn \ctex_ltj_set_alternate_shape:nnN #1#2#3
+\cs_generate_variant:Nn \ctex_ltj_set_alternate_shape:n { e }
+\cs_new_protected:Npn \ctex_ltj_set_alternate_shape:nnN #1#2#3
{
\tl_map_inline:Nn #3
{
\ctex_ltj_set_alternate_shape:n
{
- ##1 ,
- '\lua_escape:e { \CJK@encoding/#2 }' ,
- '\lua_escape:e { \CJK@encoding/#1 }'
+ ##1
+ { \CJK@encoding/#2 }
+ { \CJK@encoding/#1 }
}
}
}
-\cs_new_protected_nopar:Npn \__ctex_ltj_save_alternate_shape:Nnn #1#2#3
+\cs_new_protected:Npn \__ctex_ltj_save_alternate_shape:Nn #1#2
{
\group_begin:
- \cs_if_exist:NF #1 { \cs_set_eq:NN #1 \prg_do_nothing: }
- \cs_set_eq:NN \l__ctex_ltj_base_family_tl \scan_stop:
- \cs_set_eq:NN \lua_escape:e \scan_stop:
- \cs_gset_protected_nopar:Npx #1
- { \exp_not:o {#1} \exp_not:N \lua_now:e { #2 ( #3 ) } }
+ \cs_if_exist:NF #1 { \cs_set_eq:NN #1 \prg_do_nothing: }
+ \cs_set_eq:NN \l__ctex_ltj_base_family_tl \scan_stop:
+ \cs_gset_protected:Npx #1 { \exp_not:o {#1} #2 }
\group_end:
}
-\cs_generate_variant:Nn \__ctex_ltj_save_alternate_shape:Nnn { c }
-\keys_define:nn { ctex }
+\cs_generate_variant:Nn \__ctex_ltj_save_alternate_shape:Nn { c }
+\ctex_define:n
{
clearalternatefont .code:n =
- { \clist_map_function:xN {#1} \ctex_ltj_clear_alternate_font:n } ,
+ { \clist_map_function:eN {#1} \ctex_ltj_clear_alternate_font:n } ,
resetalternatefont .code:n =
- { \clist_map_function:xN {#1} \ctex_ltj_reset_alternate_font:n } ,
+ { \clist_map_function:eN {#1} \ctex_ltj_reset_alternate_font:n } ,
clearalternatefont .default:n = \l_ctex_ltj_family_tl ,
resetalternatefont .default:n = \l_ctex_ltj_family_tl
}
-\cs_new_protected_nopar:Npn \ctex_ltj_clear_alternate_font:n #1
+\cs_new_protected:Npn \ctex_ltj_clear_alternate_font:n #1
{
\group_begin:
\ctex_ltj_family_if_exist:xNTF {#1} \l__ctex_ltj_base_family_tl
{
- \cs_if_exist_use:cT { \__ctex_ltj_alternate_cs:n { clear / #1 } }
+ \cs_if_exist_use:cT
+ { \__ctex_ltj_alternate_cs:n { clear / #1 } }
{
\prop_gput:Nno \g__ctex_ltj_reset_alternate_prop
{#1} { \l__ctex_ltj_base_family_tl }
@@ -906,7 +944,7 @@
{ \__ctex_ltj_family_unknown_warning:n {#1} }
\group_end:
}
-\cs_new_protected_nopar:Npn \ctex_ltj_reset_alternate_font:n #1
+\cs_new_protected:Npn \ctex_ltj_reset_alternate_font:n #1
{
\group_begin:
\prop_gpop:NnNT \g__ctex_ltj_reset_alternate_prop {#1} \CJK@family
@@ -918,18 +956,18 @@
\group_end:
}
\prop_new:N \g__ctex_ltj_reset_alternate_prop
-\cs_generate_variant:Nn \clist_map_function:nN { x }
-\keys_define:nn { ctex }
+\cs_generate_variant:Nn \clist_map_function:nN { e }
+\ctex_define:n
{
- declarecharrange .code:n = \ctex_ltj_declare_char_range:x {#1} ,
+ declarecharrange .code:n = \ctex_ltj_declare_char_range:e {#1} ,
declarecharrange .value_required:n = true
}
-\cs_new_protected_nopar:Npn \ctex_ltj_declare_char_range:n #1
+\cs_new_protected:Npn \ctex_ltj_declare_char_range:n #1
{ \clist_map_inline:nn {#1} { \__ctex_ltj_declare_char_range:nn ##1 } }
-\cs_generate_variant:Nn \ctex_ltj_declare_char_range:n { x }
-\cs_new_protected_nopar:Npn \__ctex_ltj_declare_char_range:nn #1#2
- { \use:x { \ctex_ltj_declare_char_range:nn { \tl_trim_spaces:n {#1} } } {#2} }
-\cs_new_protected_nopar:Npn \ctex_ltj_declare_char_range:nn #1#2
+\cs_generate_variant:Nn \ctex_ltj_declare_char_range:n { e }
+\cs_new_protected:Npn \__ctex_ltj_declare_char_range:nn #1
+ { \exp_args:Ne \ctex_ltj_declare_char_range:nn { \tl_trim_spaces:n {#1} } }
+\cs_new_protected:Npn \ctex_ltj_declare_char_range:nn #1#2
{
\tl_clear:N \l__ctex_ltj_char_range_tl
\clist_map_function:nN {#2} \ctex_ltj_save_char_range:n
@@ -942,19 +980,26 @@
\NewDocumentCommand \ctex_ltj_save_char_range:n
{ > { \SplitArgument { 1 } { -> } } m }
{ \ctex_ltj_save_char_range:nn #1 }
-\cs_new_protected_nopar:Npn \ctex_ltj_save_char_range:nn #1#2
+\cs_new_protected:Npn \ctex_ltj_save_char_range:nn #1#2
{
\tl_put_right:Nx \l__ctex_ltj_char_range_tl
- { {
- \IfNoValueTF {#2}
- { \int_eval:n {#1} , \int_eval:n {#1} }
- {
- \int_eval:n { \tl_if_blank:nTF {#1} { "80 } {#1} } ,
- \int_eval:n { \tl_if_blank:nTF {#2} { "10FFFF } {#2} }
- }
- } }
+ { { \__ctex_ltj_range_normalization:nn {#1} {#2} } }
+ }
+\cs_new:Npn \__ctex_ltj_range_normalization:nn #1#2
+ {
+ \tl_if_novalue:nTF {#2}
+ {
+ { \int_eval:n {#1} }
+ { \int_eval:n {#1} }
+ }
+ {
+ { \int_eval:n { \tl_if_blank:nTF {#1} { \c__ctex_ltj_range_min_int } {#1} } }
+ { \int_eval:n { \tl_if_blank:nTF {#2} { \c__ctex_ltj_range_max_int } {#2} } }
+ }
}
-\cs_new_protected_nopar:Npn \ctex_ltj_def_char_range_key:n #1
+\int_const:Nn \c__ctex_ltj_range_min_int { "80 }
+\int_const:Nn \c__ctex_ltj_range_max_int { \c_max_char_int }
+\cs_new_protected:Npn \ctex_ltj_def_char_range_key:n #1
{
\keys_if_exist:nnF { ctex_ltj / fontspec } {#1}
{
@@ -965,28 +1010,8 @@
\cs_new_protected:Npn \ctex_ltj_char_range_key:nn #1#2
{
\tl_if_blank:nTF {#2}
- { \tl_set:Nn \l__ctex_ltj_char_range_clist {#1} }
- {
- \clist_if_empty:NT \l__ctex_ltj_char_range_clist
- {
- \tl_set:Nn \l__ctex_ltj_tmp_tl { {#1} }
- \__ctex_ltj_char_range_parse_feature:w #2 \q_stop
- }
- }
- }
-\NewDocumentCommand \__ctex_ltj_char_range_parse_feature:w
- { +o o u { \q_stop } }
- {
- \exp_args:NNf \tl_put_right:Nn \l__ctex_ltj_tmp_tl
- {
- \IfNoValueTF {#1} { {#3} }
- {
- \IfNoValueTF {#2}
- { \tl_if_blank:nTF {#3} { { [#1] } } { [ {#1} ] {#3} } }
- { [ {#1} ] { [#2] } }
- }
- }
- \seq_put_right:No \l__ctex_ltj_alternate_seq { \l__ctex_ltj_tmp_tl }
+ { \clist_set:Nn \l__ctex_ltj_char_range_clist {#1} }
+ { \__ctex_ltj_push_alternate_prop:nn {#1} { {#1} #2 } }
}
\AtBeginDocument
{
@@ -996,14 +1021,14 @@
{ }
{ \ctex_patch_failure:N \verbatim@font }
}
-\cs_new_protected_nopar:Npn \CTEX@verbatim@font@hook
+\cs_new_protected:Npn \CTEX@verbatim@font@hook
{ \ltjsetparameter { autospacing = false , autoxspacing = false } }
\cs_set_eq:NN \@@italiccorr \/
-\cs_new_protected_nopar:Npn \ctex_ltj_set_kanjiskip:N
+\cs_new_protected:Npn \ctex_ltj_set_kanjiskip:N
{ \ltj@setpar@global \ltjsetkanjiskip }
-\cs_new_protected_nopar:Npn \ctex_ltj_set_xkanjiskip:N
+\cs_new_protected:Npn \ctex_ltj_set_xkanjiskip:N
{ \ltj@setpar@global \ltjsetxkanjiskip }
-\cs_new_protected_nopar:Npn \ctex_update_default_family:
+\cs_new_protected:Npn \ctex_update_default_family:
{
\tl_if_eq:NNT \CJKfamilydefault \l__ctex_family_default_init_tl
{
@@ -1031,35 +1056,11 @@
{ \exp_not:o { \CJKfamilydefault } }
}
\tl_gset_eq:NN \CJKfamilydefault \l__ctex_family_default_init_tl
-\cs_new_protected_nopar:Npn \ctex_detected_platform:
- {
- \tl_gset:Nx \g__ctex_fontset_tl
- {
- \lua_now:e
- {
- if ~ os.name == 'windows' then ~
- tex.sprint ( 'windows' )
- elseif ~ os.name == 'macosx' then ~
- tex.sprint ( 'mac' )
- else ~
- tex.sprint ( 'fandol' )
- end
- }
- }
- }
\ctex_hypersetup:n { pdfencoding = unicode }
-\msg_new:nnn { ctex } { fntef-not-available }
- { Functions~ of~ `CJKfntef'~ is~ not~ available~ in~ LuaLaTeX. }
-\msg_warning:nn { ctex } { fntef-not-available }
-\clist_map_inline:nn
- { underdot , underline , underdblline , underwave , sout , xout }
- { \cs_new_eq:cN { CTEX#1 } \use:n }
-\cs_new_eq:NN \CTEXfilltwosides \use_none:n
-\cs_new_eq:NN \endCTEXfilltwosides \prg_do_nothing:
-\cs_new_protected_nopar:Npn \ctex_update_ccwd:
+\cs_new_protected:Npn \ctex_update_ccwd:
{ \skip_set:Nn \ccwd { \ltjgetparameter { kanjiskip } + \zw } }
\dim_new:N \ccwd
-\cs_new_protected_nopar:Npn \ctex_update_ccglue:
+\cs_new_protected:Npn \ctex_update_ccglue:
{ \ctex_ltj_set_kanjiskip:N \l__ctex_ccglue_skip }
\skip_new:N \l__ctex_ccglue_skip
\prg_new_conditional:Npnn \ctex_if_ccglue_touched: { TF }
@@ -1067,11 +1068,11 @@
\skip_if_eq:nnTF { \l__ctex_ccglue_skip } { \ltjgetparameter { kanjiskip } }
{ \prg_return_false: } { \prg_return_true: }
}
-\cs_new_protected_nopar:Npn \ctex_update_em_unit:
+\cs_new_protected:Npn \ctex_update_em_unit:
{ \dim_set:Nn \ccwd { \zw } }
\cs_new_protected:Npn \ctex_add_to_selectfont:n #1
{
- \cs_set_protected_nopar:Npx \CTEX@selectfont@hook
+ \cs_set_protected:Npx \CTEX@selectfont@hook
{ \exp_not:o { \CTEX@selectfont@hook #1 } }
}
\cs_new_eq:NN \CTEX@selectfont@hook \prg_do_nothing:
@@ -1081,10 +1082,15 @@
{
\tl_set:Nn \l__ctex_tmp_tl {#1}
\cs_new_eq:NN \CTEX@selectfont@save #1
- \cs_new_protected_nopar:Npn \__ctex_restore_selectfont:
+ \cs_new_protected:Npn \__ctex_restore_selectfont:
{
+ \cs_if_free:NF \scr@new@selectfont
+ {
+ \cs_set_eq:NN \scr@new@selectfont #1
+ \cs_set_eq:NN \CTEX@selectfont@save \scr@selectfont
+ }
\tl_put_left:Nn \@EverySelectfont@Init
- { \let #1 \CTEX@selectfont@save }
+ { \cs_set_eq:NN #1 \CTEX@selectfont@save }
\cs_undefine:N \__ctex_restore_selectfont:
}
}
@@ -1105,7 +1111,7 @@
}
\tl_set:Nn \CJK@family { song } \selectfont
\tl_clear:N \CJK@family
-\cs_new_protected_nopar:Npn \ctex_update_xkanjiskip:
+\cs_new_protected:Npn \ctex_update_xkanjiskip:
{
\skip_if_eq:nnT
{ \ltjgetparameter { xkanjiskip } } { \l__ctex_xkanjiskip_skip }
@@ -1124,44 +1130,42 @@
\dim_new:N \cht
\dim_new:N \cdp
\dim_new:N \cwd
-\newluafunction \g__ctex_kanjisize_func
\group_begin:
\char_set_catcode_space:n { 32 }
\lua_now:e
{
local nulltable = { }
- local t = lua.get_functions_table()
local fmt = luatexja.jfont.font_metric_table
local getattribute = tex.getattribute
local setdimen = tex.setdimen
- t[\int_use:N \g__ctex_kanjisize_func] = function ()
- local ft = fmt[getattribute('ltj@curjfnt')] or nulltable
+ local func = lua.get_functions_table()
+ local id = luatexbase.new_luafunction("ctex")
+ func[id] = function ()
+ local ft = fmt[getattribute("ltj@curjfnt")] or nulltable
local ft = ft and ft.char_type or nulltable
local fk = ft and ft[0] or nulltable
- setdimen('cht', fk.height or 0)
- setdimen('cdp', fk.depth or 0)
- setdimen('cwd', fk.width or ft.zw or 0)
+ setdimen("cht", fk.height or 0)
+ setdimen("cdp", fk.depth or 0)
+ setdimen("cwd", fk.width or ft.zw or 0)
end
+ token.set_lua("ctex_update_kanjisize:", id, "global", "protected")
}
\group_end:
-\cs_new_protected_nopar:Npn \ctex_update_kanjisize:
- { \tex_luafunction:D \g__ctex_kanjisize_func }
\ctex_add_to_selectfont:n { \ctex_update_kanjisize: }
-\keys_define:nn { ctex }
+\ctex_define:n
{
space .code:n =
{ \msg_warning:nn { ctex } { invalid-option } }
}
-\keys_define:nn { ctex }
+\ctex_define:n
{
punct .code:n =
{
- \tl_set:Nx \l__ctex_punct_tl { #1 }
+ \tl_set:Nx \l__ctex_punct_tl {#1}
\ctex_mono_jfm:o { \l__ctex_punct_tl }
} ,
punct .default:n = { quanjiao } ,
}
-\tl_set:Nn \l__ctex_encoding_tl { UTF8 }
%%
%%
%% End of file `ctex-engine-luatex.def'.