diff options
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty | 136 |
1 files changed, 106 insertions, 30 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty index 9bafa15d860..501f65e5be8 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `listings') %% -%% $Id: xeCJK.dtx 438 2013-06-11 14:17:42Z sobenlee $ +%% $Id: xeCJK.dtx 465 2013-07-06 10:30:24Z sobenlee $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 438 2013-06-11 14:17:42Z sobenlee $ +\GetIdInfo$Id: xeCJK.dtx 465 2013-07-06 10:30:24Z sobenlee $ {xeCJK patch file for listings} \ProvidesExplPackage {xeCJK-listings} - {\ExplFileDate}{3.2.3}{\ExplFileDescription} + {\ExplFileDate}{3.2.4}{\ExplFileDescription} \DeclareOption* { \PassOptionsToPackage { \CurrentOption } { xeCJK } } \ProcessOptions \scan_stop: \RequirePackage { xeCJK } @@ -46,6 +46,7 @@ \lst@AddToHook { SelectCharTable } { \__xeCJK_listings_toks_hook: } \lst@AddToHook { OutputBox } { + \tl_set_eq:NN \l_xeCJK_punct_style_tl \c__xeCJK_punct_style_plain_tl \l__xeCJK_restore_listings_toks_tl \__xeCJK_listings_output_IVS: } @@ -62,6 +63,9 @@ \exp_after:wN \use:n \tex_the:D \tex_output:D } + \lst@ifbreaklines + \cs_set_eq:NN \__xeCJK_listings_CJK_toks: \__xeCJK_listings_breaklines_toks: + \fi: } \cs_new_protected_nopar:Npn \__xeCJK_listings_toks_hook: { @@ -80,10 +84,20 @@ } \xeCJK_inter_class_toks:nnn { Boundary } { Default } { \__xeCJK_listings_process_Default:N } - \xeCJK_inter_class_toks:nnn { Boundary } { CJK } - { \__xeCJK_listings_process_CJK:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { IVS } { \__xeCJK_listings_process_IVS:nN { \c_zero } } + \__xeCJK_listings_CJK_toks_hook: + } +\tl_new:N \l__xeCJK_restore_listings_toks_tl +\cs_new_nopar:Npn \__xeCJK_backup_inter_class_toks:nn #1#2 + { + \xeCJK_inter_class_toks:nnn {#1} {#2} + { \xeCJK_get_inter_class_toks:nn {#1} {#2} } + } +\cs_new_protected_nopar:Npn \__xeCJK_listings_CJK_toks_hook: + { + \xeCJK_inter_class_toks:nnn { Boundary } { CJK } + { \__xeCJK_listings_process_CJK:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullLeft } { \__xeCJK_listings_process_CJK:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullRight } @@ -94,11 +108,19 @@ { \__xeCJK_listings_process_CJK:nN { \c_two } } } } -\tl_new:N \l__xeCJK_restore_listings_toks_tl -\cs_new_nopar:Npn \__xeCJK_backup_inter_class_toks:nn #1#2 +\cs_new_protected_nopar:Npn \__xeCJK_listings_breaklines_toks: { - \xeCJK_inter_class_toks:nnn {#1} {#2} - { \xeCJK_get_inter_class_toks:nn {#1} {#2} } + \xeCJK_inter_class_toks:nnn { Boundary } { CJK } + { \__xeCJK_listings_process_breaklines_CJK:nN { \c_two } } + \xeCJK_inter_class_toks:nnn { Boundary } { FullLeft } + { \__xeCJK_listings_process_FullLeft:nN { \c_two } } + \xeCJK_inter_class_toks:nnn { Boundary } { FullRight } + { \__xeCJK_listings_process_FullRight:nN { \c_two } } + \seq_map_inline:Nn \g__xeCJK_CJK_sub_class_seq + { + \xeCJK_inter_class_toks:nnn { Boundary } { CJK/##1 } + { \__xeCJK_listings_process_breaklines_CJK:nN { \c_two } } + } } \cs_new_protected_nopar:Npn \__xeCJK_listings_process_Default:N #1 { @@ -123,12 +145,7 @@ \bool_if:NTF \l__xeCJK_listings_letter_bool { \lst@lettertrue } { - \lst@ifletter - \lst@Output - \else: - \lst@OutputOther - \lst@lettertrue - \fi: + \lst@ifletter \lst@Output \else: \lst@OutputOther \lst@lettertrue \fi: \bool_set_true:N \l__xeCJK_listings_letter_bool } \__xeCJK_listings_append:nN @@ -138,35 +155,90 @@ \lst@whitespacefalse \bool_if:NTF \l__xeCJK_listings_letter_bool { - \lst@Output + \lst@Output \lst@letterfalse \bool_set_false:N \l__xeCJK_listings_letter_bool - \lst@letterfalse } { \lst@ifletter \lst@Output \lst@letterfalse \fi: } \cs_set_eq:NN \lst@lastother #2 \__xeCJK_listings_append:nN {#1} #2 } -\bool_new:N \l__xeCJK_listings_letter_bool +\cs_new_protected_nopar:Npn \__xeCJK_listings_process_breaklines_CJK:nN + { + \lst@whitespacefalse + \bool_if:NTF \l__xeCJK_listings_letter_bool + { + \int_compare:nNnF \l__xeCJK_listings_flag_int = \c_two { \lst@Output } + \lst@lettertrue + } + { + \lst@ifletter \lst@Output \else: \lst@OutputOther \lst@lettertrue \fi: + \bool_set_true:N \l__xeCJK_listings_letter_bool + } + \int_set_eq:NN \l__xeCJK_listings_flag_int \c_one + \__xeCJK_listings_append:nN + } +\cs_new_protected_nopar:Npn \__xeCJK_listings_process_FullLeft:nN #1#2 + { + \lst@whitespacefalse + \bool_if:NTF \l__xeCJK_listings_letter_bool + { + \bool_if:nF + { + \int_compare_p:nNn \l__xeCJK_listings_flag_int = \c_two || + ( \int_compare_p:nNn \l__xeCJK_listings_flag_int = \c_three && + ! \l__xeCJK_punct_breakable_bool ) + } + { \lst@Output } + \lst@lettertrue + } + { + \lst@ifletter \lst@Output \else: \lst@OutputOther \lst@lettertrue \fi: + \bool_set_true:N \l__xeCJK_listings_letter_bool + } + \int_set_eq:NN \l__xeCJK_listings_flag_int \c_two + \__xeCJK_listings_append:nN {#1} #2 + } +\cs_new_protected_nopar:Npn \__xeCJK_listings_process_FullRight:nN #1#2 + { + \lst@whitespacefalse + \bool_if:NTF \l__xeCJK_listings_letter_bool + { + \bool_if:nT + { + \int_compare_p:nNn \l__xeCJK_listings_flag_int < \c_two && + \__xeCJK_punct_if_long_p:N #2 + } + { \lst@Output } + \lst@lettertrue + } + { + \lst@ifletter \lst@Output \else: \lst@OutputOther \lst@lettertrue \fi: + \bool_set_true:N \l__xeCJK_listings_letter_bool + } + \int_set_eq:NN \l__xeCJK_listings_flag_int \c_three + \__xeCJK_listings_append:nN {#1} #2 + } +\int_new:N \l__xeCJK_listings_flag_int \cs_set_protected_nopar:Npn \lst@AppendLetter { \bool_if:NTF \l__xeCJK_listings_letter_bool { - \lst@Output + \lst@Output \lst@lettertrue \bool_set_false:N \l__xeCJK_listings_letter_bool - \lst@lettertrue } { \reverse_if:N \lst@ifletter \lst@OutputOther \lst@lettertrue \fi: } + \lst@ifbreaklines \int_zero:N \l__xeCJK_listings_flag_int \fi: \lst@Append } \cs_set_protected_nopar:Npn \lst@AppendOther { \bool_if:NTF \l__xeCJK_listings_letter_bool { - \lst@Output + \lst@Output \lst@letterfalse \bool_set_false:N \l__xeCJK_listings_letter_bool - \lst@letterfalse } { \lst@ifletter \lst@Output \lst@letterfalse \fi: } + \lst@ifbreaklines \int_zero:N \l__xeCJK_listings_flag_int \fi: \tex_futurelet:D \lst@lastother \lst@Append } \cs_new_protected_nopar:Npn \__xeCJK_listings_process_IVS:nN @@ -205,9 +277,9 @@ \cs_set_eq:NN \lst@IfNextCharActive \__xeCJK_listings_peek_active_loop:TF \cs_new_protected:Npn \__xeCJK_listings_inside_convert:nw #1 ~ \@empty { - \tl_set_rescan:Nnn \l__xeCJK_tmpa_tl { } {#1} + \tl_set_rescan:Nnn \l__xeCJK_tmp_tl { } {#1} \__xeCJK_set_listings_escape: - \tl_put_right:NV \lst@arg \l__xeCJK_tmpa_tl + \tl_put_right:NV \lst@arg \l__xeCJK_tmp_tl } \cs_set_eq:NN \lst@InsideConvert@ \__xeCJK_listings_inside_convert:nw \cs_new_protected_nopar:Npn \__xeCJK_listings_inline_group:w @@ -223,16 +295,20 @@ \lst@InlineGJEnd } \group_begin: -\char_set_catcode_active:N \/ -\char_set_lccode:nn { `\/ } { `\\ } -\tl_to_lowercase:n +\cs_set:Npn \__xeCJK_tmp:w #1 { \group_end: \cs_new_protected:Npn \__xeCJK_set_listings_escape: - { \xeCJK_swap_cs:NN / \__xeCJK_listings_escape:N } - \cs_new_protected:Npn \__xeCJK_listings_escape:N #1 - { \cs_if_eq:NNTF / #1 { \__xeCJK_listings_escape:N } {#1} } + { \xeCJK_swap_cs:NN #1 \__xeCJK_listings_escape:N } + \cs_new_protected:Npn \__xeCJK_listings_escape:N ##1 + { \cs_if_eq:NNTF #1 ##1 { \__xeCJK_listings_escape:N } {##1} } + } +\use:n + { + \char_set_catcode_active:N \\ + \__xeCJK_tmp:w } + { \ } %% %% This package consists of the file xeCJK.dtx %% and the derived files xeCJK.pdf, |