From 21fc82e7b49584f4d7cb67b8f88a28f6f49634aa Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 16 Jun 2015 21:22:36 +0000 Subject: l3experimental (1jun15) git-svn-id: svn://tug.org/texlive/trunk@37574 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/l3experimental/xgalley/l3galley.sty | 401 ++++++++++----------- 1 file changed, 200 insertions(+), 201 deletions(-) (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index 3da7fd80bfc..b18798c22a8 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -14,7 +14,7 @@ %% Do not distribute a modified version of this file. %% %% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach -%% (C) 2010-2014 The LaTeX3 Project +%% (C) 2010-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -60,15 +60,17 @@ }% \endinput } -\GetIdInfo$Id: l3galley.dtx 5437 2014-10-17 12:24:43Z joseph $ +\GetIdInfo$Id: l3galley.dtx 5624 2015-05-31 19:22:46Z joseph $ {L3 Experimental galley code} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} -\cs_generate_variant:Nn \seq_map_function:NN { Nc } \int_new:N \l__galley_tmp_int -\seq_new:N \l__galley_tmpa_seq -\seq_new:N \l__galley_tmpb_seq +\seq_new:N \g__galley_tmpa_seq +\seq_new:N \g__galley_tmpb_seq +\seq_new:N \l__galley_tmp_seq \tl_new:N \l__galley_tmp_tl +\seq_new:N \l__galley_cutout_left_indent_seq +\seq_new:N \l__galley_cutout_right_indent_seq \bool_new:N \l__galley_parshape_multipar_bool \seq_new:N \l__galley_parshape_left_indent_seq \seq_new:N \l__galley_parshape_right_indent_seq @@ -129,6 +131,9 @@ \__galley_initialise_variables: \cs_new_protected_nopar:Npn \__galley_initialise_settings: { + \bool_set_true:N \l__galley_parshape_multipar_bool + \seq_clear:N \l__galley_parshape_left_indent_seq + \seq_clear:N \l__galley_parshape_right_indent_seq \dim_set_eq:NN \l_galley_text_width_dim \l_galley_width_dim \dim_zero:N \l_galley_total_left_margin_dim \dim_zero:N \l_galley_total_right_margin_dim @@ -243,18 +248,50 @@ } { \g_galley_par_end_hook_tl + \__galley_par_set_cutout: \group_begin: \tex_par:D \group_end: \int_gset:Nn \g_galley_previous_par_lines_int { \tex_prevgraf:D + \g__galley_current_par_lines_int } - \__galley_parshape_reset: \int_gzero:N \g__galley_current_par_lines_int + \bool_if:NF \l__galley_parshape_multipar_bool + { + \seq_clear:N \l__galley_parshape_left_indent_seq + \seq_clear:N \l__galley_parshape_right_indent_seq + \bool_set_true:N \l__galley_parshape_multipar_bool + \__galley_parshape_set: + } + \__galley_par_update_cutout: } \g_galley_par_reset_hook_tl \tl_gclear:N \g_galley_par_reset_hook_tl \tex_penalty:D \c_ten_thousand } +\cs_new_protected_nopar:Npn \__galley_par_set_cutout: + { + \bool_if:nF + { + \seq_if_empty_p:N \g__galley_cutout_left_seq + && \seq_if_empty_p:N \g__galley_cutout_right_seq + } + { \__galley_parshape_set: } + } +\cs_new_protected_nopar:Npn \__galley_par_update_cutout: + { + \bool_if:nF + { + \seq_if_empty_p:N \g__galley_cutout_left_seq + && \seq_if_empty_p:N \g__galley_cutout_right_seq + } + { + \prg_replicate:nn \tex_prevgraf:D + { + \seq_gpop_left:NN \g__galley_cutout_left_seq \l__galley_tmp_tl + \seq_gpop_left:NN \g__galley_cutout_right_seq \l__galley_tmp_tl + } + } + } \cs_new_protected:Npn \galley_par:n #1 { \s__par_omit @@ -328,10 +365,13 @@ \__galley_display_vspace:N \l_galley_display_end_par_vspace_tl } { + \__galley_par_set_cutout: \group_begin: \tex_par:D \group_end: \int_gadd:Nn \g__galley_current_par_lines_int \tex_prevgraf:D + \bool_set_false:N \l__galley_tmp_bool + \__galley_par_update_cutout: \__galley_display_penalty:N \l_galley_display_end_penalty_tl \__galley_display_vspace:N \l_galley_display_end_vspace_tl } @@ -427,7 +467,6 @@ \dim_new:N \l__galley_total_right_margin_dim \cs_new_protected:Npn \galley_margins_set_absolute:nn #1#2 { - \__galley_save_margins: \dim_set:Nn \l_galley_total_left_margin_dim {#1} \dim_set:Nn \l_galley_total_right_margin_dim {#2} \dim_set:Nn \l_galley_text_width_dim @@ -436,11 +475,10 @@ - \l_galley_total_left_margin_dim - \l_galley_total_right_margin_dim } - \__galley_set_measure: + \__galley_parshape_set: } \cs_new_protected:Npn \galley_margins_set_relative:nn #1#2 { - \__galley_save_margins: \dim_add:Nn \l_galley_total_left_margin_dim {#1} \dim_add:Nn \l_galley_total_right_margin_dim {#2} \dim_set:Nn \l_galley_text_width_dim @@ -449,74 +487,7 @@ - \l_galley_total_left_margin_dim - \l_galley_total_right_margin_dim } - \__galley_set_measure: - } -\cs_new_protected_nopar:Npn \__galley_save_margins: - { - \dim_set_eq:NN \l__galley_total_left_margin_dim - \l_galley_total_left_margin_dim - \dim_set_eq:NN \l__galley_total_right_margin_dim - \l_galley_total_right_margin_dim - } -\cs_new_protected_nopar:Npn \__galley_set_measure: - { - \int_compare:nNnTF \tex_parshape:D = \c_zero - { \__galley_parshape_measure: } - { - \dim_sub:Nn \l__galley_total_left_margin_dim - \l_galley_total_left_margin_dim - \dim_sub:Nn \l__galley_total_right_margin_dim - \l_galley_total_right_margin_dim - \tex_parshape:D - \tex_parshape:D - \int_step_function:nnnN - \c_one \c_one \tex_parshape:D - \__galley_set_measure_aux:n - } - } -\cs_new:Npn \__galley_set_measure_aux:n #1 - { - \__dim_eval:w - \etex_parshapeindent:D #1 - \l__galley_total_left_margin_dim - \__dim_eval_end: - \__dim_eval:w - \etex_parshapelength:D #1 - + \l__galley_total_left_margin_dim + \l__galley_total_right_margin_dim - \__dim_eval_end: - } -\cs_new_protected_nopar:Npn \__galley_parshape_reset: - { - \int_compare:nNnF \tex_parshape:D = \c_zero - { - \bool_if:nTF - { - \seq_if_empty_p:N \g__galley_cutout_left_seq - && \seq_if_empty_p:N \g__galley_cutout_right_seq - } - { - \bool_if:NF \l__galley_parshape_multipar_bool - { \__galley_parshape_measure: } - } - { - \prg_replicate:nn \g_galley_previous_par_lines_int - { - \seq_gpop:NN \g__galley_cutout_left_seq \l__galley_tmp_tl - \seq_gpop:NN \g__galley_cutout_right_seq \l__galley_tmp_tl - } - \bool_if:NTF \l__galley_parshape_multipar_bool - { \__galley_parshape_set: } - { \__galley_parshape_measure: } - \__galley_cutout_set:Nn \g__galley_cutout_left_seq { left } - \__galley_cutout_set:Nn \g__galley_cutout_right_seq { right } - } - } - } -\cs_new_protected_nopar:Npn \__galley_parshape_measure: - { - \tex_parshape:D - \c_one - \l_galley_total_left_margin_dim - \l_galley_text_width_dim + \__galley_parshape_set: } \cs_new_protected_nopar:Npn \galley_parshape_set_multi:nnnN { @@ -536,159 +507,173 @@ \seq_set_from_clist:Nn \l__galley_parshape_right_indent_seq {#3} \prg_replicate:nn {#1} { - \seq_put_left:Nn \l__galley_parshape_left_indent_seq { 0 pt } - \seq_put_left:Nn \l__galley_parshape_right_indent_seq { 0 pt } + \seq_put_left:Nn \l__galley_parshape_left_indent_seq { 0pt } + \seq_put_left:Nn \l__galley_parshape_right_indent_seq { 0pt } } \bool_if:NT #4 { - \seq_put_right:Nn \l__galley_parshape_left_indent_seq { 0 pt } - \seq_put_right:Nn \l__galley_parshape_right_indent_seq { 0 pt } + \seq_put_right:Nn \l__galley_parshape_left_indent_seq { 0pt } + \seq_put_right:Nn \l__galley_parshape_right_indent_seq { 0pt } } \__galley_parshape_set: } -\cs_new_protected_nopar:Npn \__galley_parshape_set: - { - \tex_parshape:D - \__int_eval:w - \int_min:nn - { \seq_count:N \l__galley_parshape_left_indent_seq } - { \seq_count:N \l__galley_parshape_right_indent_seq } - \__int_eval_end: - \seq_mapthread_function:NNN - \l__galley_parshape_left_indent_seq - \l__galley_parshape_right_indent_seq - \__galley_parshape_set:nn - } -\cs_new:Npn \__galley_parshape_set:nn #1#2 - { - \__dim_eval:w \l_galley_total_left_margin_dim + ( #1 ) \__dim_eval_end: - \__dim_eval:w - \l_galley_text_width_dim - ( ( #1 ) + ( #2 ) ) - \__dim_eval_end: - } \cs_new_protected_nopar:Npn \galley_cutout_left:nn { \__galley_cutout:nnn { left } } \cs_new_protected_nopar:Npn \galley_cutout_right:nn { \__galley_cutout:nnn { right } } \cs_new_protected:Npn \__galley_cutout:nnn #1#2#3 { - \seq_set_from_clist:Nn \l__galley_tmpa_seq {#3} + \seq_gset_from_clist:Nn \g__galley_tmpa_seq {#3} \prg_replicate:nn {#2} - { \seq_put_left:Nn \l__galley_tmpa_seq { 0 pt } } - \__galley_cutout_set:Nn \l__galley_tmpa_seq {#1} - \seq_clear:N \l__galley_tmpb_seq - \int_compare:nNnTF - { \seq_count:N \l__galley_tmpa_seq } > - { \seq_count:c { g__galley_cutout_ #1 _ seq } } - { - \seq_map_inline:Nn \l__galley_tmpa_seq - { - \__galley_cutout_store:nn - { \seq_gpop:cNF { g__galley_cutout_ #1 _ seq } } - {##1} - } + { \seq_gput_left:Nn \g__galley_tmpa_seq { 0pt } } + \seq_if_empty:cTF { g__galley_cutout_ #1 _seq } + { \seq_gset_eq:cN { g__galley_cutout_ #1 _seq } \g__galley_tmpa_seq } + { + \int_compare:nNnTF + { \seq_count:c { g__galley_cutout_ #1 _seq } } > + { \seq_count:N \g__galley_tmpa_seq } + { \__galley_cutout:cN { g__galley_cutout_ #1 _seq } \g__galley_tmpa_seq } + { \__galley_cutout:Nc \g__galley_tmpa_seq { g__galley_cutout_ #1 _seq } } + \seq_gset_eq:cN { g__galley_cutout_ #1 _seq } \l__galley_tmp_seq } + } +\cs_new_protected:Npn \__galley_cutout:NN #1#2 + { + \seq_clear:N \l__galley_tmp_seq + \seq_map_inline:Nn #1 { - \seq_map_inline:cn { g__galley_cutout_ #1 _ seq } - { - \__galley_cutout_store:nn - { \seq_pop:NNF \l__galley_tmpa_seq } - {##1} - } + \seq_gpop_left:NNF #2 \l__galley_tmp_tl + { \tl_set:Nn \l__galley_tmp_tl { 0pt } } + \seq_put_right:Nx \l__galley_tmp_seq + { \dim_eval:n { ##1 + \l__galley_tmp_tl } } } - \seq_gset_eq:cN { g__galley_cutout_ #1 _ seq } \l__galley_tmpb_seq } -\cs_new_protected:Npn \__galley_cutout_store:nn #1#2 +\cs_generate_variant:Nn \__galley_cutout:NN { c , Nc } +\cs_new_protected_nopar:Npn \__galley_parshape_set: { - #1 \l__galley_tmp_tl - { \tl_set:Nn \l__galley_tmp_tl { 0 pt } } - \seq_put_right:Nx \l__galley_tmpb_seq - { \dim_eval:n { \l__galley_tmp_tl + #2 } } + \__galley_parshape_set_margins: + \__galley_parshape_set_indents: + \__galley_parshape_set_cutouts: + \tl_set:Nx \l__galley_tmp_tl + { + \int_use:N \tex_parshape:D + \int_step_function:nnnN \c_one \c_one \tex_parshape:D + \tmp + } } -\cs_new_protected:Npn \__galley_cutout_set:Nn #1#2 + \def\tmp#1{% + \c_space_tl + \int_use:N \etex_parshapeindent:D #1 \c_space_tl \c_space_tl + \int_use:N \etex_parshapelength:D #1 \c_space_tl + } +\cs_new_protected_nopar:Npn \__galley_parshape_set_margins: { - \int_zero:N \l__galley_tmp_int - \tl_clear:N \l__galley_tmp_tl - \seq_map_function:Nc #1 { __galley_cutout_ #2 :n } - \int_compare:nNnTF \tex_parshape:D > \l__galley_tmp_int + \bool_if:nTF { - \int_step_function:nnnN - { \l__galley_tmp_int + \c_one } + \dim_compare_p:nNn \l_galley_total_left_margin_dim = \c_zero_dim + && \dim_compare_p:nNn \l_galley_total_right_margin_dim = \c_zero_dim + } + { \tex_parshape:D \c_zero } + { + \tex_parshape:D \c_one - \tex_parshape:D - \__galley_cutout_end:n + \l_galley_total_left_margin_dim + \l_galley_text_width_dim } + } +\cs_new_protected_nopar:Npn \__galley_parshape_set_indents: + { + \bool_if:nF { - \int_incr:N \l__galley_tmp_int - \int_compare:nNnTF \tex_parshape:D = \c_zero - { - \tl_put_right:Nn \l__galley_tmp_tl - { \l__galley_total_left_margin_dim \l_galley_text_width_dim } - } - { - \tl_put_right:Nx \l__galley_tmp_tl - { - \dim_eval:n { \etex_parshapeindent:D \tex_parshape:D } - \c_space_tl - \dim_eval:n { \etex_parshapelength:D \tex_parshape:D } - \c_space_tl - } - } + \seq_if_empty_p:N \l__galley_parshape_left_indent_seq + && \seq_if_empty_p:N \l__galley_parshape_right_indent_seq + } + { + \__galley_parshape_set_indents:NN + \l__galley_parshape_left_indent_seq + \l__galley_parshape_right_indent_seq } + } +\cs_new_protected:Npn \__galley_parshape_set_indents:NN #1#2 + { \tex_parshape:D - \l__galley_tmp_int - \l__galley_tmp_tl + \__int_eval:w + \int_min:nn { \seq_count:N #1 } { \seq_count:N #2 } + \__int_eval_end: + \seq_mapthread_function:NNN #1 #2 + \__galley_parshape_set_indents:nn } -\cs_new_protected:Npn \__galley_cutout_left:n #1 +\cs_new:Npn \__galley_parshape_set_indents:nn #1#2 { - \int_incr:N \l__galley_tmp_int - \tl_put_right:Nx \l__galley_tmp_tl + \__dim_eval:w \l_galley_total_left_margin_dim + ( #1 ) \__dim_eval_end: + \__dim_eval:w + \l_galley_text_width_dim - ( ( #1 ) + ( #2 ) ) + \__dim_eval_end: + } +\cs_new_protected_nopar:Npn \__galley_parshape_set_cutouts: + { + \bool_if:nF { - \int_compare:nNnTF \l__galley_tmp_int > \tex_parshape:D - { - \dim_eval:n { \l__galley_total_left_margin_dim + ( #1 ) } - \c_space_tl - \dim_eval:n { \l_galley_text_width_dim - ( #1 ) } - \c_space_tl - } + \seq_if_empty_p:N \g__galley_cutout_left_seq + && \seq_if_empty_p:N \g__galley_cutout_right_seq + } + { + \__galley_parshape_set_cutouts:n { left } + \__galley_parshape_set_cutouts:n { right } + \int_set:Nn \l__galley_tmp_int { - \dim_eval:n { \etex_parshapeindent:D \l__galley_tmp_int + ( #1 ) } - \c_space_tl - \dim_eval:n { \etex_parshapelength:D \l__galley_tmp_int - ( #1 ) } - \c_space_tl + \seq_count:N \l__galley_cutout_left_indent_seq + - \seq_count:N \l__galley_cutout_right_indent_seq } + \int_compare:nNnTF \l__galley_tmp_int > \c_zero + { \__galley_parshape_set_cutouts:N \l__galley_cutout_right_indent_seq } + { \__galley_parshape_set_cutouts:N \l__galley_cutout_left_indent_seq } + \__galley_parshape_set_indents:NN + \l__galley_cutout_left_indent_seq + \l__galley_cutout_right_indent_seq } } -\cs_new_protected:Npn \__galley_cutout_right:n #1 +\cs_new_protected:Npn \__galley_parshape_set_cutouts:n #1 { - \int_incr:N \l__galley_tmp_int - \tl_put_right:Nx \l__galley_tmp_tl + \seq_if_empty:cTF { g__galley_cutout_ #1 _seq } { - \int_compare:nNnTF \l__galley_tmp_int > \tex_parshape:D + \seq_set_eq:cc { l__galley_cutout_ #1 _indent_seq } + { l__galley_parshape_ #1 _indent_seq } + } + { + \seq_gset_eq:Nc \g__galley_tmpa_seq { g__galley_cutout_ #1 _seq } + \seq_gset_eq:Nc \g__galley_tmpb_seq { l__galley_parshape_ #1 _indent_seq } + \tl_set:Nx \l__galley_tmp_tl { - \dim_use:N \l__galley_total_left_margin_dim - \c_space_tl - \dim_eval:n { \l_galley_text_width_dim - ( #1 ) } - \c_space_tl + \seq_item:Nn \g__galley_tmpb_seq + { \seq_count:N \g__galley_tmpb_seq } } + \tl_if_empty:NT \l__galley_tmp_tl + { \tl_set:Nn \l__galley_tmp_tl { 0pt } } + \int_set:Nn \l__galley_tmp_int { - \dim_eval:n { \etex_parshapeindent:D \l__galley_tmp_int } - \c_space_tl - \dim_eval:n { \etex_parshapelength:D \l__galley_tmp_int - ( #1 ) } - \c_space_tl + \seq_count:N \g__galley_tmpa_seq + - \seq_count:N \g__galley_tmpb_seq + + \c_one + } + \int_compare:nNnT \l__galley_tmp_int > \c_zero + { + \prg_replicate:nn + { \l__galley_tmp_int } + { \seq_gput_right:NV \g__galley_tmpb_seq \l__galley_tmp_tl } } + \__galley_cutout:NN \g__galley_tmpb_seq \g__galley_tmpa_seq + \seq_set_eq:cN { l__galley_cutout_ #1 _indent_seq } \l__galley_tmp_seq } } -\cs_new_protected:Npn \__galley_cutout_end:n #1 +\cs_new_protected:Npn \__galley_parshape_set_cutouts:N #1 { - \int_incr:N \l__galley_tmp_int - \tl_put_right:Nx \l__galley_tmp_tl - { - \dim_eval:n { \etex_parshapeindent:D #1 } - \c_space_tl - \dim_eval:n { \etex_parshapelength:D #1 } - \c_space_tl - } + \tl_set:Nx \l__galley_tmp_tl + { \seq_item:Nn #1 { \seq_count:N #1 } } + \tl_if_empty:NT \l__galley_tmp_tl + { \tl_set:Nn \l__galley_tmp_tl { 0pt } } + \prg_replicate:nn { \int_abs:n \l__galley_tmp_int } + { \seq_put_right:NV #1 \l__galley_tmp_tl } } \cs_new_protected:Npn \galley_penalty_set_single:n #1 { \tl_gset:Nx \g__galley_interpar_penalty_user_tl { \int_eval:n {#1} } } @@ -908,7 +893,7 @@ { \int_use:N \etex_interlinepenalties:D \etex_interlinepenalties:D \c_zero } \__msg_kernel_new:nnn { galley } { no-line-to-end } { There's~no~line~here~to~end. } -\RenewDocumentCommand \clearpage { } +\cs_set_nopar:Npn \clearpage { \mode_if_vertical:T { @@ -924,25 +909,39 @@ \tex_vbox:D { } \galley_penalty_set_single:n { -\@Mi } } -\RenewDocumentCommand \nobreak { } +\cs_set_nopar:Npn \nobreak { \bool_gset_true:N \g_galley_no_break_next_bool } -\RenewDocumentCommand \noindent { } +\cs_set_protected_nopar:Npn \noindent { \tex_noindent:D \bool_gset_false:N \g_galley_omit_next_indent_bool } -\RenewDocumentCommand \vspace { s m } +\DeclareRobustCommand \vspace + { + \@ifstar + \@vspace + \@vspace + } +\cs_set:Npn \@vspace #1 { \galley_vspace_set_single:n {#1} } +\DeclareRobustCommand \\ + { + \@ifstar + { \cs_set_eq:NN \reserved@e \c_true_bool } + { \cs_set_eq:NN \reserved@e \c_false_bool } + \@xnewline + } +\cs_set:Npn \@xnewline { - \IfBooleanTF #1 - { \galley_vspace_set_single:n {#2} } - { \galley_vspace_set_single:n {#2} } + \@ifnextchar [ % ] + { \@newline } + { \@newline [ 0pt ] } } -\RenewDocumentCommand \\ { s O { 0 pt } } - { \galley_break_line:Nn #1 {#2} } -\RenewDocumentCommand \newline { } - { \galley_break_line:Nn \c_true_bool { 0 pt } } +\cs_set:Npn \@newline [ #1 ] + { \galley_break_line:Nn \reserved@e {#1} } +\DeclareRobustCommand \newline + { \galley_break_line:Nn \c_true_bool { 0pt } } \cs_set_eq:cN { @ @ par } \galley_par: -\cs_set_protected_nopar:Npn \@afterheading +\cs_set_nopar:Npn \@afterheading { \bool_gset_true:N \g_galley_no_break_next_bool \if@afterindent @@ -950,7 +949,7 @@ \bool_gset_true:N \g_galley_omit_next_indent_bool \fi } -\cs_set_protected:Npn \@hangfrom #1 +\cs_set:Npn \@hangfrom #1 { \bool_gset_true:N \g_galley_omit_next_indent_bool \leavevmode -- cgit v1.2.3