summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-07-26 19:41:08 +0000
committerKarl Berry <karl@freefriends.org>2022-07-26 19:41:08 +0000
commitb097d4a5b14944af0b31fe710a220899b8483754 (patch)
tree0a6769f68828442f02ece3ec8e3313e9bf27ed54 /Master/texmf-dist/tex
parent4a551552a1959e00b13554bab025d6d880183f6d (diff)
wrapstuff (26jul22)
git-svn-id: svn://tug.org/texlive/trunk@63981 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty1198
1 files changed, 706 insertions, 492 deletions
diff --git a/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty b/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty
index 4262f9debe2..ad2e4ad87bc 100644
--- a/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty
+++ b/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty
@@ -25,12 +25,12 @@
%%
%% -----------------------------------------------------------------
%%
-\NeedsTeXFormat{LaTeX2e}
+\NeedsTeXFormat{LaTeX2e}[2021-06-01]
\@ifundefined{ExplLoaderFileDate}{\RequirePackage{expl3}}{}
-\GetIdInfo$Id: wrapstuff.dtx 564fe9d 2022-07-20 19:55:58 +0800 Qing Lee <sobenlee@gmail.com> $
+\GetIdInfo$Id: wrapstuff.dtx e891159 2022-07-26 19:00:31 +0800 Qing Lee <sobenlee@gmail.com> $
{Wrapping text around stuff}
\ProvidesExplPackage{\ExplFileName}
- {\ExplFileDate}{0.1}{\ExplFileDescription}
+ {\ExplFileDate}{0.2}{\ExplFileDescription}
\@ifl@t@r \fmtversion { 2021-06-01 }
{ }
{
@@ -53,6 +53,217 @@
\msg_critical:nn { wrapstuff } { latex3-too-old }
}
\prop_gput:Nnn \g_msg_module_name_prop { wstf } { wrapstuff }
+\tl_const:Nn \c__wstf_global_tl_tl
+ { \g__wstf_main_setting_tl }
+\tl_const:Nn \c__wstf_global_dim_tl
+ {
+ \g__wstf_hang_ht_dim
+ \g__wstf_total_ht_dim
+ \g__wstf_stuff_ht_dim
+ \g__wstf_stuff_wd_dim
+ \g__wstf_first_dp_dim
+ \g__wstf_first_sep_dim
+ \g__wstf_prevdepth_dim
+ \g__wstf_column_ht_dim
+ \g__wstf_window_ht_dim
+ \g__wstf_remaining_dim
+ \g__wstf_column_room_dim
+ \g__wstf_parshape_indent_dim
+ \g__wstf_parshape_length_dim
+ }
+\tl_const:Nn \c__wstf_global_int_tl
+ {
+ \g__wstf_top_int
+ \g__wstf_column_int
+ \g__wstf_window_int
+ }
+\tl_const:Nn \c__wstf_global_bool_tl
+ {
+ \g__wstf_next_bool
+ \g__wstf_leqno_bool
+ \g__wstf_column_bool
+ \g__wstf_entire_bool
+ \g__wstf_display_bool
+ \g__wstf_move_hang_bool
+ \g__wstf_next_hang_bool
+ \g__wstf_first_set_bool
+ \g__wstf_first_save_bool
+ \g__wstf_right_move_bool
+ }
+\cs_new_protected:Npn \__wstf_tl_init:N #1
+ {
+ \tl_new:N #1
+ \tl_gput_right:Nn \g__wstf_var_clear_tl
+ { \tl_gclear:N #1 }
+ \tl_gput_right:Nn \g__wstf_var_push_tl
+ { \tl_gset:Nn \exp_not:N #1 { \exp_not:o {#1} } }
+ }
+\cs_new_protected:Npn \__wstf_dim_init:N #1
+ {
+ \dim_new:N #1
+ \tl_gput_right:Nn \g__wstf_var_clear_tl
+ { \dim_gzero:N #1 }
+ \tl_gput_right:Nn \g__wstf_var_push_tl
+ { \dim_gset:Nn #1 { \dim_use:N #1 } }
+ }
+\cs_new_protected:Npn \__wstf_int_init:N #1
+ {
+ \int_new:N #1
+ \tl_gput_right:Nn \g__wstf_var_clear_tl
+ { \int_gzero:N #1 }
+ \tl_gput_right:Nn \g__wstf_var_push_tl
+ { \int_gset:Nn #1 { \int_use:N #1 } }
+ }
+\cs_new_protected:Npn \__wstf_bool_init:N #1
+ {
+ \bool_new:N #1
+ \tl_gput_right:Nn \g__wstf_var_clear_tl
+ { \bool_gset_false:N #1 }
+ \tl_gput_right:Nn \g__wstf_var_push_tl
+ {
+ \bool_if:NTF #1
+ { \bool_gset_true:N #1 }
+ { \bool_gset_false:N #1 }
+ }
+ }
+\tl_new:N \g__wstf_var_clear_tl
+\tl_new:N \g__wstf_var_push_tl
+\tl_map_function:NN \c__wstf_global_tl_tl \__wstf_tl_init:N
+\tl_map_function:NN \c__wstf_global_dim_tl \__wstf_dim_init:N
+\tl_map_function:NN \c__wstf_global_int_tl \__wstf_int_init:N
+\tl_map_function:NN \c__wstf_global_bool_tl \__wstf_bool_init:N
+\int_gdecr:N \g__wstf_top_int
+\tl_gput_right:Nn \g__wstf_var_clear_tl
+ { \int_gdecr:N \g__wstf_top_int }
+\cs_new_protected_nopar:Npn \__wstf_clear:
+ {
+ \__wstf_clear_para_hook:
+ \__wstf_clear_kludge:
+ \__wstf_clear_variable:
+ }
+\cs_new_protected_nopar:Npn \__wstf_clear_variable:
+ {
+ \tl_use:N \g__wstf_var_clear_tl
+ \box_gclear:N \g__wstf_stuff_box
+ }
+\cs_new_protected_nopar:Npn \__wstf_clear_kludge:
+ {
+ \bool_if:NTF \g__wstf_next_bool
+ {
+ \skip_vertical:n
+ { \tex_baselineskip:D * \g__wstf_window_int }
+ }
+ {
+ \box_if_empty:NF \g__wstf_stuff_box
+ { \__wstf_clear_stuff_box: }
+ }
+ }
+\cs_new_protected_nopar:Npn \__wstf_clear_stuff_box:
+ {
+ \__wstf_ignore_depth:
+ \skip_set:Nn \l__wstf_last_skip
+ { \box_dp:N \strutbox }
+ \skip_vertical:N \l__wstf_last_skip
+ \box_use_drop:N \g__wstf_stuff_box
+ \skip_vertical:N \l__wstf_last_skip
+ \__wstf_ignore_depth:
+ }
+\cs_new_protected_nopar:Npn \__wstf_status_push:
+ {
+ \tl_clear:N \l__wstf_status_tl
+ \int_gincr:N \g__wstf_status_int
+ \exp_args:Ne \__wstf_status_push_aux:n
+ { \int_use:N \g__wstf_status_int }
+ \seq_gpush:No \g__wstf_status_seq { \l__wstf_status_tl }
+ }
+\cs_new_protected:Npn \__wstf_status_push_aux:n #1
+ {
+ \__wstf_push_cs:nN {#1} \__wstf_para_before:
+ \__wstf_push_cs:nN {#1} \__wstf_para_begin:
+ \__wstf_push_cs:nN {#1} \__wstf_para_end:
+ \__wstf_push_cs:nN {#1} \__wstf_display_hook:
+ \__wstf_push_box:N \g__wstf_stuff_box
+ \__wstf_push_var:
+ }
+\cs_new_protected:Npn \__wstf_push_cs:nN #1#2
+ {
+ \exp_args:NNc \__wstf_push_cs_aux:NN #2
+ { __wstf_ #1 _ \token_to_str:N #2 }
+ }
+\cs_new_protected:Npn \__wstf_push_cs_aux:NN #1#2
+ {
+ \cs_gset_eq:NN #2#1
+ \tl_put_right:Nn \l__wstf_status_tl
+ {
+ \cs_gset_eq:NN #1#2
+ \cs_undefine:N #2
+ }
+ }
+\cs_new_protected:Npn \__wstf_push_box:N #1
+ {
+ \hbox_gset:Nn \g__wstf_stauts_box
+ {
+ \hbox_unpack_drop:N \g__wstf_stauts_box
+ \box_use:N #1
+ }
+ \tl_put_right:Nn \l__wstf_status_tl
+ { \__wstf_pop_box:N #1 }
+ }
+\cs_new_protected:Npn \__wstf_pop_box:N #1
+ {
+ \hbox_gset:Nw \g__wstf_stauts_box
+ \hbox_unpack_drop:N \g__wstf_stauts_box
+ \box_gset_to_last:N #1
+ \__wstf_if_last_hlist:TF
+ { \hbox_gset_end: }
+ {
+ \hbox_gset_end:
+ \box_gclear:N \g__wstf_stauts_box
+ }
+ }
+\cs_new_protected_nopar:Npn \__wstf_push_var:
+ {
+ \tl_put_right:Nx \l__wstf_status_tl
+ { \g__wstf_var_push_tl }
+ }
+\cs_new_protected_nopar:Npn \__wstf_status_pop:
+ {
+ \seq_gpop:NNT \g__wstf_status_seq \l__wstf_status_tl
+ {
+ \int_gdecr:N \g__wstf_status_int
+ \tl_use:N \l__wstf_status_tl
+ }
+ }
+\cs_new_protected_nopar:Npn \__wstf_status_restore:
+ {
+ \__wstf_status_push:
+ \__wstf_clear_para_hook:
+ \__wstf_clear_display_hook:
+ \__wstf_clear_variable:
+ \group_insert_after:N \__wstf_status_pop:
+ }
+\cs_new_protected_nopar:Npn \__wstf_status_clear:
+ {
+ \bool_if:NT \g__wstf_next_bool
+ {
+ \__wstf_clear_para_hook:
+ \__wstf_clear_variable:
+ }
+ }
+\tl_new:N \l__wstf_status_tl
+\box_new:N \g__wstf_stauts_box
+\int_new:N \g__wstf_status_int
+\seq_new:N \g__wstf_status_seq
+\cs_new_protected_nopar:Npn \wrapstuff@parboxrestore
+ { \group_insert_after:N \__wstf_status_clear: }
+\cs_new_protected_nopar:Npn \__wstf_parbox_restore:
+ {
+ \cs_set_eq:NN
+ \wrapstuff@parboxrestore
+ \__wstf_status_restore:
+ }
+\g@addto@macro \@arrayparboxrestore
+ { \wrapstuff@parboxrestore }
\group_begin:
\cs_set:Npn \__wstf_tmp:nn #1
{
@@ -82,6 +293,10 @@
{ \hook_gput_code:nnn {#1} { wrapstuff } }
\cs_new_protected:Npn \__wstf_package_hook:nn #1
{ \hook_gput_code:nnn { package/#1/after } { wrapstuff } }
+\cs_new_protected_nopar:Npn \__wstf_para_raw_end:
+ { \group_begin: \para_raw_end: \group_end: }
+\cs_new_protected:Npn \__wstf_gadd_ht:Nn #1#2
+ { \box_gset_ht:Nn #1 { \box_ht:N #1 + \dim_eval:n {#2} } }
\NewDocumentEnvironment { wrapstuff } { O { } }
{
\__wstf_clear:
@@ -179,15 +394,10 @@
\box_gset_dp:Nn \g__wstf_stuff_box { \c_zero_dim }
}
\tl_new:N \l__wstf_main_kv_tl
-\tl_new:N \g__wstf_main_setting_tl
\box_new:N \g__wstf_stuff_box
-\dim_new:N \g__wstf_stuff_ht_dim
-\dim_new:N \g__wstf_stuff_wd_dim
\dim_new:N \l__wstf_shift_dim
\dim_new:N \l__wstf_width_dim
\dim_new:N \l__wstf_height_dim
-\dim_new:N \g__wstf_prevdepth_dim
-\dim_new:N \g__wstf_remaining_dim
\cs_new_protected_nopar:Npn \__wstf_attach_label:
{
\stepcounter { wrapstuff }
@@ -199,20 +409,26 @@
}
\cs_new_protected_nopar:Npn \__wstf_write_label:
{
- \iow_shipout_x:Nx \@auxout
+ \exp_args:Nee \__wstf_write_label_aux:nn
+ { \__wstf_counter:n { wrapstuff } }
+ { \__wstf_counter:n { page } }
+ }
+\cs_new_protected:Npx \__wstf_write_label_aux:nn #1#2
+ {
+ \prop_gput_if_new:Nnn \exp_not:N \g__wstf_page_prop {#1} {#2}
+ \iow_shipout_x:Nn \exp_not:N \@auxout
{
\c_backslash_str wrapstuff@label
- { \__wstf_counter:n { wrapstuff } }
+ {#1}
{ \exp_not:N \wrapstuff@counter { page } }
}
}
+\newcounter { wrapstuff }
\cs_new:Npn \__wstf_counter:n #1
{ \int_value:w \value {#1} }
\cs_new_eq:NN \wrapstuff@counter \__wstf_counter:n
\cs_new_protected_nopar:Npn \wrapstuff@label
- { \@newl@bel { wrapstuff@label } }
-\tl_const:Nn \c__wstf_label_tl
- { wrapstuff@label@ \int_value:w \value { wrapstuff } }
+ { \prop_gput:Nnn \g__wstf_page_prop }
\__wstf_gadd_hook:nn { begindocument }
{
\legacy_if:nTF { @filesw }
@@ -225,7 +441,35 @@
}
{ \cs_gset_eq:NN \__wstf_write_label: \__wstf_empty: }
}
-\newcounter { wrapstuff }
+\__wstf_gadd_hook:nn { enddocument/afterlastpage }
+ {
+ \legacy_if:nT { @filesw }
+ { \prop_gclear:N \g__wstf_page_prop }
+ }
+\__wstf_gadd_hook:nn { enddocument/info }
+ {
+ \prop_if_empty:NF \g__wstf_rerun_prop
+ { \__wstf_rerun_check: }
+ }
+\cs_new_protected_nopar:Npn \__wstf_rerun_check:
+ {
+ \prop_map_inline:Nn \g__wstf_rerun_prop
+ {
+ \prop_get:NnN \g__wstf_page_prop { ##1 } \l__wstf_page_tl
+ \int_if_even:nF { \l__wstf_page_tl - ##2 }
+ { \prop_map_break:n { \__wstf_rerun_warning: } }
+ }
+ }
+\cs_new_protected_nopar:Npn \__wstf_rerun_warning:
+ { \msg_warning:nn { wstf } { rerun-required } }
+\msg_new:nnn { wstf } { rerun-required }
+ {
+ Page(s)~may~have~changed.\\
+ Rerun~to~get~i/o~setting~right.
+ }
+\tl_new:N \l__wstf_page_tl
+\prop_new:N \g__wstf_page_prop
+\prop_new:N \g__wstf_rerun_prop
\cs_new_protected_nopar:Npn \__wstf_save_main_setting:
{
\exp_args:Nnno
@@ -254,8 +498,10 @@
\keys_precompile:nnN
{ wrapstuff }
{ \l__wstf_main_kv_tl } \l__wstf_main_kv_tl
- \tl_gconcat:NNN \g__wstf_main_setting_tl
- \g__wstf_main_setting_tl \l__wstf_main_kv_tl
+ \tl_gconcat:NNN
+ \g__wstf_main_setting_tl
+ \g__wstf_main_setting_tl
+ \l__wstf_main_kv_tl
}
\cs_new_protected_nopar:Npn \__wstf_set_top_line:
{
@@ -270,71 +516,28 @@
}
\cs_new_protected_nopar:Npn \__wstf_swap_ratio:
{
+ \exp_args:Ne \__wstf_swap_ratio_aux:n
+ { \__wstf_counter:n { wrapstuff } }
+ }
+\cs_new_protected:Npn \__wstf_swap_ratio_aux:n #1
+ {
\fp_compare:nF
{ \c_zero_fp < \l__wstf_ratio_fp < \c_one_fp }
{ \fp_zero:N \l__wstf_ratio_fp }
- \int_if_odd:nTF
- {
- \exp_args:Ne \cs_if_exist_use:cF
- { \c__wstf_label_tl }
- { \__wstf_counter:n { page } }
- }
+ \prop_get:NnNF \g__wstf_page_prop {#1} \l__wstf_page_tl
+ { \tl_set:Nx \l__wstf_page_tl { \__wstf_counter:n { page } } }
+ \int_if_odd:nTF { \l__wstf_page_tl }
{ \bool_if:NTF \l__wstf_inner_bool }
{ \bool_if:NTF \l__wstf_outer_bool }
{ \__wstf_set_ratio:N \l__wstf_ratio_fp }
{ \__wstf_set_ratio:n { \c_one_fp - \l__wstf_ratio_fp } }
+ \prop_gput:Nno \g__wstf_rerun_prop {#1} { \l__wstf_page_tl }
}
\bool_new:N \l__wstf_swap_bool
\bool_new:N \l__wstf_inner_bool
\bool_new:N \l__wstf_outer_bool
-\cs_new_protected:Npn \__wstf_gadd_ht:Nn #1#2
- { \box_gset_ht:Nn #1 { \box_ht:N #1 + \dim_eval:n {#2} } }
-\cs_new_protected:Npn \__wstf_gsub_ht:Nn #1#2
- { \box_gset_ht:Nn #1 { \box_ht:N #1 - \dim_eval:n {#2} } }
-\cs_new_protected_nopar:Npn \__wstf_clear:
- {
- \__wstf_clear_para_hook:
- \__wstf_clear_kludge:
- \__wstf_clear_variable:
- }
-\cs_new_protected_nopar:Npn \__wstf_clear_variable:
- {
- \int_gset:Nn \g__wstf_top_int { -1 }
- \int_gzero:N \g__wstf_window_int
- \dim_gzero:N \g__wstf_total_ht_dim
- \dim_gzero:N \g__wstf_column_left_dim
- \tl_gclear:N \g__wstf_main_setting_tl
- \bool_gset_false:N \g__wstf_next_bool
- \bool_gset_false:N \g__wstf_hoffset_bool
- \bool_gset_false:N \g__wstf_next_hang_bool
- \bool_gset_false:N \g__wstf_first_save_bool
- \bool_gset_false:N \g__wstf_right_move_bool
- \bool_gset_false:N \g__wstf_column_right_bool
- }
-\cs_new_protected_nopar:Npn \__wstf_clear_kludge:
- {
- \bool_if:NTF \g__wstf_next_bool
- {
- \box_gclear:N \g__wstf_stuff_box
- \skip_vertical:n
- { \tex_baselineskip:D * \g__wstf_window_int }
- }
- {
- \box_if_empty:NF \g__wstf_stuff_box
- { \__wstf_clear_stuff_box: }
- }
- }
-\cs_new_protected_nopar:Npn \__wstf_clear_stuff_box:
- {
- \__wstf_ignore_depth:
- \skip_set:Nn \l__wstf_last_skip
- { \box_dp:N \strutbox }
- \skip_vertical:N \l__wstf_last_skip
- \box_use_drop:N \g__wstf_stuff_box
- \skip_vertical:N \l__wstf_last_skip
- \__wstf_ignore_depth:
- }
\__wstf_gadd_hook:nn { para/before } { \__wstf_para_before: }
+\__wstf_gadd_hook:nn { para/after } { \__wstf_para_after: }
\__wstf_gadd_hook:nn { para/begin } { \__wstf_para_begin: }
\__wstf_gadd_hook:nn { para/end } { \__wstf_para_end: }
\cs_new_protected_nopar:Npn \__wstf_next_para:
@@ -352,12 +555,14 @@
\cs_new_protected_nopar:Npn \__wstf_clear_para_hook:
{
\cs_gset_eq:NN \__wstf_para_before: \__wstf_empty:
+ \cs_gset_eq:NN \__wstf_para_after: \__wstf_empty:
\cs_gset_eq:NN \__wstf_para_begin: \__wstf_empty:
\cs_gset_eq:NN \__wstf_para_end: \__wstf_empty:
}
\cs_new_protected_nopar:Npn \__wstf_empty:
{ }
\cs_new_eq:NN \__wstf_para_before: \__wstf_empty:
+\cs_new_eq:NN \__wstf_para_after: \__wstf_empty:
\cs_new_eq:NN \__wstf_para_begin: \__wstf_empty:
\cs_new_eq:NN \__wstf_para_end: \__wstf_empty:
\NewDocumentEnvironment { wrapstuff@par } { }
@@ -396,14 +601,15 @@
\int_set:Nn \l__wstf_window_int { \l__wstf_window_int * 2 }
\int_set:Nn \l__wstf_window_line_int
{
- \bool_if:NTF \g__wstf_column_right_bool
- { \l__wstf_window_int / 2 + \g__wstf_column_window_int }
+ \bool_if:NTF \g__wstf_column_bool
+ { \l__wstf_window_int / 2 + \g__wstf_column_int }
{ \l__wstf_window_int }
}
}
\cs_gset_eq:NN \__wstf_para_before: \__wstf_empty:
\cs_gset_eq:NN \__wstf_para_begin: \__wstf_empty:
\__wstf_save_parshape:
+ \__wstf_parbox_restore:
\vbox_set:Nw \l__wstf_body_box
\__wstf_set_prevdepth:N \g__wstf_prevdepth_dim
\__wstf_save_tex_skip:
@@ -423,7 +629,8 @@
\int_gset_eq:NN \g__wstf_line_int \tex_prevgraf:D
\vbox_set_end:
\__wstf_adjust_tex_skip:
- \cs_gset_eq:NN \__wstf_para_end: \__wstf_empty:
+ \cs_gset_eq:NN \__wstf_para_end: \__wstf_empty:
+ \cs_gset_eq:NN \__wstf_para_after: \__wstf_empty:
\int_compare:nNnTF \g__wstf_line_int > \l__wstf_top_int
{ \__wstf_build_par: }
{ \__wstf_put_par: }
@@ -431,10 +638,8 @@
\box_new:N \l__wstf_body_box
\box_new:N \l__wstf_window_box
\int_new:N \l__wstf_window_int
-\int_new:N \g__wstf_window_int
\int_new:N \g__wstf_line_int
\int_new:N \l__wstf_window_line_int
-\int_new:N \g__wstf_column_window_int
\dim_new:N \l__wstf_l_dim
\dim_new:N \l__wstf_r_dim
\dim_new:N \l__wstf_min_dim
@@ -444,17 +649,12 @@
\dim_new:N \l__wstf_voffset_dim
\dim_new:N \l__wstf_leftsep_dim
\dim_new:N \l__wstf_rightsep_dim
-\dim_new:N \g__wstf_window_ht_dim
\dim_new:N \l__wstf_main_width_dim
-\int_new:N \g__wstf_top_int
-\int_gdecr:N \g__wstf_top_int
\bool_new:N \l__wstf_hang_bool
\cs_new_protected_nopar:Npn \__wstf_set_hang_left:
{
\bool_set_true:N \l__wstf_hang_bool
- \bool_if:NF \g__wstf_hoffset_bool
- { \__wstf_set_hoffset:NN \l__wstf_rightsep_dim \use:nn }
- \dim_sub:Nn \l__wstf_window_dim { \l__wstf_rightsep_dim }
+ \__wstf_set_hoffset:N \l__wstf_rightsep_dim
\dim_zero:N \l__wstf_l_dim
\dim_set_eq:NN \l__wstf_r_dim \l__wstf_window_dim
\cs_set_eq:NN \__wstf_build_box: \__wstf_build_hang:
@@ -462,9 +662,7 @@
\cs_new_protected_nopar:Npn \__wstf_set_hang_right:
{
\bool_set_true:N \l__wstf_hang_bool
- \bool_if:NF \g__wstf_hoffset_bool
- { \__wstf_set_hoffset:NN \l__wstf_leftsep_dim \use_ii_i:nn }
- \dim_sub:Nn \l__wstf_window_dim { \l__wstf_leftsep_dim }
+ \__wstf_set_hoffset:N \l__wstf_leftsep_dim
\dim_zero:N \l__wstf_r_dim
\dim_set_eq:NN \l__wstf_l_dim \l__wstf_window_dim
\cs_set_eq:NN \__wstf_build_box: \__wstf_build_hang:
@@ -482,28 +680,16 @@
{ \cs_set_eq:NN \__wstf_build_box: \__wstf_build_column: }
{ \cs_set_eq:NN \__wstf_build_box: \__wstf_build_block: }
}
-\cs_new_protected:Npn \__wstf_set_hoffset:NN #1#2
+\cs_new_protected:Npn \__wstf_set_hoffset:N #1
{
- \bool_gset_true:N \g__wstf_hoffset_bool
- \dim_set:Nn \l__wstf_hoffset_width_dim
- { #1 + \g__wstf_stuff_wd_dim }
+ \dim_sub:Nn \l__wstf_window_dim {#1}
\group_begin:
- \cs_set_eq:NN \width \l__wstf_hoffset_width_dim
- \dim_gset:Nn \g__wstf_hoffset_dim { \l__wstf_hoffset_tl }
- \group_end:
- \int_compare:nNnF \g__wstf_hoffset_dim = \c_zero_dim
- {
- \hbox_gset:Nn \g__wstf_stuff_box
- {
- #2 { \tex_kern:D - \g__wstf_hoffset_dim }
- { \box_use_drop:N \g__wstf_stuff_box }
- }
- \dim_add:Nn \l__wstf_window_dim { \g__wstf_hoffset_dim }
- }
+ \dim_set:Nn \l__wstf_width_dim { #1 + \g__wstf_stuff_wd_dim }
+ \cs_set_eq:NN \width \l__wstf_width_dim
+ \exp_args:NNNx \group_end:
+ \dim_add:Nn \l__wstf_window_dim
+ { \dim_eval:n { \l__wstf_hoffset_tl } }
}
-\dim_new:N \g__wstf_hoffset_dim
-\dim_new:N \l__wstf_hoffset_width_dim
-\bool_new:N \g__wstf_hoffset_bool
\cs_new_protected_nopar:Npn \__wstf_set_lines:
{
\bool_if:NTF \g__wstf_next_bool
@@ -526,9 +712,9 @@
}
\cs_new_protected_nopar:Npn \__wstf_window_init:
{
- \int_gset_eq:NN \g__wstf_column_window_int \l__wstf_window_int
+ \int_gset_eq:NN \g__wstf_column_int \l__wstf_window_int
\dim_gset:Nn \g__wstf_window_ht_dim
- { \tex_baselineskip:D * \g__wstf_column_window_int }
+ { \tex_baselineskip:D * \g__wstf_column_int }
\tl_if_empty:NF \l__wstf_lines_tl
{
\dim_gset:Nn \g__wstf_remaining_dim
@@ -579,7 +765,8 @@
\int_compare:nNnTF \g__wstf_parshape_int = \c_one_int
{
\tex_parshape:D \g__wstf_parshape_int
- \g__wstf_parshape_indent_dim \g__wstf_parshape_length_dim
+ \g__wstf_parshape_indent_dim
+ \g__wstf_parshape_length_dim
}
{ \__wstf_restore_hangfrom: }
}
@@ -618,8 +805,6 @@
\int_new:N \g__wstf_parshape_int
\int_new:N \g__wstf_hangafter_int
\dim_new:N \g__wstf_hangindent_dim
-\dim_new:N \g__wstf_parshape_indent_dim
-\dim_new:N \g__wstf_parshape_length_dim
\cs_new_protected_nopar:Npn \__wstf_group_kludge:
{
\scan_stop:
@@ -644,16 +829,15 @@
{ \fp_to_dim:n { #1 \dim_to_fp:n {#2} } }
\cs_new:Npn \__wstf_unit:n #1
{
- \fp_eval:n
+ \int_eval:n
{
- ceil
- (
- \dim_to_decimal_in_unit:nn
- {#1}
- { \tex_baselineskip:D }
- )
+ \exp_last_unbraced:Ne \__wstf_unit_aux:w
+ { \dim_to_decimal_in_unit:nn {#1} { \tex_baselineskip:D } }
+ \s_stop
}
}
+\cs_new:Npn \__wstf_unit_aux:w #1 . #2 \s_stop
+ { #1 + 1 }
\cs_new_protected_nopar:Npn \__wstf_save_tex_skip:
{
\skip_gset_eq:NN \g__wstf_left_skip \tex_leftskip:D
@@ -683,6 +867,7 @@
\skip_set_eq:NN \tex_leftskip:D \g__wstf_left_skip
\skip_set_eq:NN \tex_rightskip:D \g__wstf_right_skip
\skip_set_eq:NN \tex_parfillskip:D \g__wstf_parfill_skip
+ \skip_set_eq:NN \tex_baselineskip:D \g__wstf_baseline_skip
}
\skip_new:N \g__wstf_left_skip
\skip_new:N \g__wstf_right_skip
@@ -695,16 +880,27 @@
\tex_everydisplay:D \exp_after:wN
{
\tex_the:D \tex_everydisplay:D
- \__wstf_test_leqno:
- \dim_compare:nNnF \tex_displaywidth:D < \c_max_dim
- {
- \bool_gset_true:N \g__wstf_display_bool
- \dim_set_eq:NN \tex_displaywidth:D \l__wstf_display_dim
- }
+ \__wstf_display_hook:
+ }
+ }
+\cs_new_protected_nopar:Npn \__wstf_display_hook:
+ {
+ \__wstf_test_leqno:
+ \dim_compare:nNnF \tex_displaywidth:D < \c_max_dim
+ {
+ \bool_gset_true:N \g__wstf_display_bool
+ \dim_set_eq:NN \tex_displaywidth:D \l__wstf_display_dim
}
}
\cs_new_eq:NN \__wstf_test_leqno: \__wstf_empty:
-\bool_new:N \g__wstf_display_bool
+\cs_new_protected_nopar:Npn \__wstf_clear_display_hook:
+ { \cs_gset_eq:NN \__wstf_display_hook: \__wstf_empty: }
+\cs_new_protected_nopar:Npn \__wstf_split_parameter:
+ {
+ \skip_zero:N \tex_splittopskip:D
+ \dim_set_eq:NN \tex_vfuzz:D \c_max_dim
+ \int_set_eq:NN \tex_vbadness:D \c_max_int
+ }
\cs_new_protected_nopar:Npn \__wstf_build_par:
{
\bool_if:NTF \g__wstf_hangfrom_bool
@@ -739,7 +935,7 @@
}
\cs_new_protected_nopar:Npn \__wstf_put_body_box:
{
- \para_raw_end:
+ \__wstf_para_raw_end:
\dim_compare:nNnTF { \box_wd:N \l__wstf_body_box } < \c_max_dim
{ \__wstf_put_body_aux:N \l__wstf_body_box }
{
@@ -747,14 +943,34 @@
\__wstf_put_body_aux:N \l__wstf_body_box
\box_set_eq_drop:NN \l__wstf_body_box \l__wstf_bottom_box
}
- \para_raw_end:
+ \__wstf_para_raw_end:
}
\cs_new_protected_nopar:Npn \__wstf_put_body_aux:N #1
{
\dim_gset:Nn \g__wstf_prevdepth_dim { \box_dp:N #1 }
+ \dim_compare:nNnT \g__wstf_prevdepth_dim = \c_zero_dim
+ { \__wstf_extract_depth:N #1 }
\vbox_unpack_drop:N #1
\__wstf_set_prevdepth:N \g__wstf_prevdepth_dim
}
+\cs_new_protected_nopar:Npn \__wstf_extract_depth:N #1
+ {
+ \vbox_set:Nn \l__wstf_last_box
+ {
+ \vbox_unpack:N #1
+ \__wstf_if_last_hlist:F
+ {
+ \tex_unskip:D \tex_unpenalty:D
+ \tex_unskip:D \tex_unpenalty:D
+ }
+ \__wstf_if_last_hlist:T
+ {
+ \box_set_to_last:N \l__wstf_last_box
+ \dim_gset:Nn \g__wstf_prevdepth_dim
+ { \box_dp:N \l__wstf_last_box }
+ }
+ }
+ }
\cs_new_protected_nopar:Npn \__wstf_put_next_par:
{
\int_gzero:N \g__wstf_top_int
@@ -775,20 +991,24 @@
}
\cs_new_protected_nopar:Npn \__wstf_build_display_amsmath:
{
- \vbox_gset:Nn \g__wstf_equation_box
- {
- \skip_vertical:n { - \g__wstf_display_pre_skip }
- \vbox_unpack_drop:N \g__wstf_display_box
- \skip_gset_eq:NN \g__wstf_pos_skip \tex_lastskip:D
- \tex_unskip:D
- \int_gset_eq:NN \g__wstf_pos_int \tex_lastpenalty:D
- \tex_unpenalty:D
- \skip_gadd:Nn \g__wstf_pos_skip { \tex_lastskip:D }
- \tex_unskip:D
- \tex_unpenalty:D
- }
- \box_gset_wd:Nn \g__wstf_equation_box
- { \l__wstf_display_dim }
+ \group_begin:
+ \vbox_gset:Nn \g__wstf_equation_box
+ {
+ \__wstf_break:
+ \vbox_unpack_drop:N \g__wstf_display_box
+ \skip_gset_eq:NN \g__wstf_pos_skip \tex_lastskip:D
+ \tex_unskip:D
+ \int_gset_eq:NN \g__wstf_pos_int \tex_lastpenalty:D
+ \tex_unpenalty:D
+ \skip_gadd:Nn \g__wstf_pos_skip { \tex_lastskip:D }
+ \tex_unskip:D
+ \tex_unpenalty:D
+ }
+ \__wstf_split_parameter:
+ \vbox_set_split_to_ht:NNn \l__wstf_last_box \g__wstf_equation_box
+ { \c_zero_dim }
+ \group_end:
+ \box_gset_wd:Nn \g__wstf_equation_box { \l__wstf_display_dim }
\vbox_gset:Nn \g__wstf_display_box
{
\tex_penalty:D \g__wstf_display_pre_int
@@ -866,35 +1086,57 @@
\cs_new_protected_nopar:Npn \__wstf_build_display_auxiii:
{
\bool_set_true:N \l__wstf_attach_equation_bool
- \bool_if:NTF \g__wstf_amsmath_bool
- { \box_set_eq_drop:NN \l__wstf_display_box \g__wstf_display_box }
+ \box_gclear:N \g__wstf_display_box
+ \bool_if:NF \g__wstf_amsmath_bool
+ { \__wstf_adjust_equation: }
+ \__wstf_build_body_box:
+ }
+\bool_new:N \l__wstf_display_bool
+\bool_new:N \l__wstf_attach_equation_bool
+\cs_new_protected:Npn \__wstf_attach_left:N #1
+ {
+ \__wstf_attach_equation:Nn #1
+ { \g__wstf_parshape_indent_dim }
+ }
+\cs_new_protected:Npn \__wstf_attach_right:N #1
+ {
+ \__wstf_attach_equation:Nn #1
{
- \box_gclear:N \g__wstf_display_box
- \__wstf_adjust_equation:
+ \l__wstf_line_dim
+ - \l__wstf_display_dim
+ + \g__wstf_parshape_indent_dim
}
- \__wstf_build_body_box:
}
-\cs_new_protected_nopar:Npn \__wstf_attach_equation:N
+\cs_new_protected:Npn \__wstf_attach_equation:Nn #1#2
{
- \bool_if:NTF \g__wstf_amsmath_bool
- { \__wstf_attach_equation_amsmath:N }
- { \__wstf_attach_equation_normal:N }
+ \vbox_set:Nn \l__wstf_last_box
+ {
+ \vbox_unpack:N #1
+ \box_set_to_last:N \l__wstf_last_box
+ \bool_if:NTF \g__wstf_amsmath_bool
+ { \__wstf_attach_equation_amsmath:Nn }
+ { \__wstf_attach_equation_normal:Nn }
+ \l__wstf_last_box {#2}
+ }
}
-\cs_new_protected:Npn \__wstf_attach_equation_amsmath:N #1
+\cs_new_protected:Npn \__wstf_attach_equation_amsmath:Nn #1#2
{
- \vbox_set:Nn #1
+ \vbox_gset:Nn \g__wstf_equation_box
{
- \box_use:N #1
- \__wstf_ignore_depth:
- \vbox_unpack_drop:N \l__wstf_display_box
+ \__wstf_nobreak:
\skip_vertical:n
- { \g__wstf_display_pre_dim - \box_dp:N #1 }
- \box_use_drop:N \g__wstf_equation_box
+ {
+ \g__wstf_display_pre_skip
+ + \g__wstf_display_pre_dim
+ - \box_dp:N #1
+ }
+ \box_move_right:nn {#2}
+ { \box_use_drop:N \g__wstf_equation_box }
}
}
-\cs_new_protected:Npn \__wstf_attach_equation_normal:N #1
+\cs_new_protected:Npn \__wstf_attach_equation_normal:Nn #1#2
{
- \vbox_set:Nn #1
+ \vbox_set:Nn \l__wstf_last_box
{
\__wstf_tex_parameter:
\dim_set_eq:NN \tex_hsize:D \l__wstf_display_dim
@@ -906,6 +1148,25 @@
\tex_unskip:D
\int_gset_eq:NN \g__wstf_pos_int \tex_lastpenalty:D
\tex_unpenalty:D
+ \box_set_to_last:N \l__wstf_last_box
+ \skip_set_eq:NN \l__wstf_last_skip \tex_lastskip:D
+ \tex_unskip:D
+ \skip_add:Nn \l__wstf_last_skip { \tex_lastskip:D }
+ \vbox_gset:Nn \g__wstf_equation_box
+ {
+ \__wstf_nobreak:
+ \skip_vertical:N \l__wstf_last_skip
+ \box_move_right:nn {#2}
+ {
+ \hbox_to_wd:nn
+ { \l__wstf_display_dim }
+ {
+ \tex_hss:D
+ \box_use_drop:N \l__wstf_last_box
+ \tex_hss:D
+ }
+ }
+ }
}
}
\cs_new_protected_nopar:Npn \__wstf_insert_equation:
@@ -941,15 +1202,15 @@
{
\bool_gset_false:N \g__wstf_eqnum_bool
\hbox_unpack:N \g__wstf_equation_box
- \__wstf_if_last_hlist:F { \use_none_delimit_by_q_stop:w }
+ \__wstf_if_last_hlist:F { \use_none_delimit_by_s_stop:w }
\box_gset_to_last:N \g__wstf_eqnum_box
- \__wstf_if_last_kern:F { \use_none_delimit_by_q_stop:w }
+ \__wstf_if_last_kern:F { \use_none_delimit_by_s_stop:w }
\tex_unkern:D
- \__wstf_if_last_hlist:F { \use_none_delimit_by_q_stop:w }
+ \__wstf_if_last_hlist:F { \use_none_delimit_by_s_stop:w }
\box_gset_to_last:N \g__wstf_eqbody_box
- \__wstf_if_last_none:F { \use_none_delimit_by_q_stop:w }
+ \__wstf_if_last_none:F { \use_none_delimit_by_s_stop:w }
\bool_gset_true:N \g__wstf_eqnum_bool
- \use_none_delimit_by_q_stop:w \q_stop
+ \use_none_delimit_by_s_stop:w \s_stop
}
}
\cs_new_protected_nopar:Npn \__wstf_adjust_equation_width:
@@ -979,22 +1240,21 @@
\box_new:N \g__wstf_eqbody_box
\box_new:N \g__wstf_eqnum_box
\box_new:N \g__wstf_equation_box
-\box_new:N \l__wstf_display_box
\int_new:N \g__wstf_pos_int
\skip_new:N \g__wstf_pos_skip
\bool_new:N \g__wstf_eqnum_bool
-\bool_new:N \g__wstf_leqno_bool
-\bool_new:N \l__wstf_display_bool
-\bool_new:N \l__wstf_attach_equation_bool
-\cs_new_protected_nopar:Npn \__wstf_add_pos_skip:
+\cs_new_protected_nopar:Npn \__wstf_add_pos_kludge:
{
- \bool_lazy_or:nnTF
- { \g__wstf_right_move_bool }
- { \int_compare_p:nNn \g__wstf_window_int > \c_zero_int }
+ \dim_gset:Nn \g__wstf_prevdepth_dim
+ { \box_dp:N \l__wstf_window_box }
+ \bool_gset_false:N \g__wstf_equation_dp_bool
+ \bool_if:NTF \g__wstf_next_bool
{
\tex_vadjust:D
{
- \tex_penalty:D \c__wstf_nobreak_int
+ \box_if_empty:NF \g__wstf_equation_box
+ { \__wstf_output_equation_box: }
+ \__wstf_nobreak:
\bool_if:NT \l__wstf_display_bool
{ \skip_vertical:N \g__wstf_pos_skip }
}
@@ -1004,6 +1264,8 @@
{
\tex_vadjust:D
{
+ \box_if_empty:NF \g__wstf_equation_box
+ { \__wstf_output_equation_box: }
\tex_penalty:D \g__wstf_pos_int
\skip_vertical:N \g__wstf_pos_skip
}
@@ -1012,6 +1274,23 @@
\int_gzero:N \g__wstf_pos_int
\skip_gzero:N \g__wstf_pos_skip
}
+\cs_new_protected_nopar:Npn \__wstf_output_equation_box:
+ {
+ \cs_gset_eq:NN
+ \__wstf_para_after:
+ \__wstf_set_equation_depth:
+ \bool_gset_true:N \g__wstf_equation_dp_bool
+ \dim_gset:Nn \g__wstf_prevdepth_dim
+ { \box_dp:N \g__wstf_equation_box }
+ \vbox_unpack_drop:N \g__wstf_equation_box
+ }
+\cs_new_protected_nopar:Npn \__wstf_set_equation_depth:
+ {
+ \cs_gset_eq:NN \__wstf_para_after: \__wstf_empty:
+ \bool_gset_false:N \g__wstf_equation_dp_bool
+ \__wstf_set_prevdepth:N \g__wstf_prevdepth_dim
+ }
+\bool_new:N \g__wstf_equation_dp_bool
\cs_new_protected_nopar:Npn \__wstf_build_body_box:
{
\box_set_eq:NN \l__wstf_save_body_box \l__wstf_bottom_box
@@ -1029,9 +1308,6 @@
{
\vbox_set:Nn \l__wstf_body_box
{
- \__wstf_tex_parameter:
- \__wstf_make_parshape:
- \__wstf_column_penalties:
\dim_zero:N \tex_emergencystretch:D
\dim_set_eq:NN \tex_hfuzz:D \c_max_dim
\dim_set_eq:NN \tex_vfuzz:D \c_max_dim
@@ -1040,6 +1316,9 @@
\int_set:Nn \tex_tolerance:D { 1000 }
\para_raw_noindent:
\hbox_unpack_drop:N \l__wstf_bottom_box
+ \__wstf_tex_parameter:
+ \__wstf_make_parshape:
+ \__wstf_interline_penalties:
\para_raw_end:
\int_gset_eq:NN \g__wstf_line_int \tex_prevgraf:D
}
@@ -1062,8 +1341,8 @@
{ \c_zero_dim \l__wstf_l_dim }
\prg_replicate:nn
{
- \bool_if:NTF \g__wstf_column_right_bool
- { \g__wstf_column_window_int }
+ \bool_if:NTF \g__wstf_column_bool
+ { \g__wstf_column_int }
{ \l__wstf_window_int / 2 }
}
{ \c_zero_dim \l__wstf_r_dim }
@@ -1079,15 +1358,16 @@
}
\c_zero_dim \c_max_dim
}
-\cs_new_protected_nopar:Npn \__wstf_column_penalties:
+\cs_new_protected_nopar:Npn \__wstf_interline_penalties:
{
\bool_if:NF \l__wstf_hang_bool
{
- \bool_if:NT \l__wstf_column_bool
- { \__wstf_column_penalties_aux: }
+ \bool_if:NTF \l__wstf_column_bool
+ { \__wstf_column_penalties: }
+ { \__wstf_block_penalties: }
}
}
-\cs_new_protected_nopar:Npn \__wstf_column_penalties_aux:
+\cs_new_protected_nopar:Npn \__wstf_column_penalties:
{
\tex_interlinepenalties:D
\int_eval:n { \l__wstf_window_int / 2 + \c_one_int } ~
@@ -1097,90 +1377,70 @@
\c__wstf_break_int
\c_zero_int
}
+\cs_new_protected_nopar:Npn \__wstf_block_penalties:
+ {
+ \tex_interlinepenalties:D \l__wstf_window_int
+ \prg_replicate:nn
+ { \l__wstf_window_int - \c_one_int }
+ { \c__wstf_break_int }
+ \c_zero_int
+ }
+\cs_new_protected_nopar:Npn \__wstf_break:
+ { \tex_penalty:D \c__wstf_break_int }
+\cs_new_protected_nopar:Npn \__wstf_nobreak:
+ { \tex_penalty:D \c__wstf_nobreak_int }
+\int_const:Nn \c__wstf_break_int { -10000 }
+\int_const:Nn \c__wstf_nobreak_int { 10000 }
\cs_new_protected_nopar:Npn \__wstf_build_block:
{
- \__wstf_build_block_auxi:
\vbox_set:Nn \l__wstf_window_box
{
- \__wstf_tex_parameter:
- \dim_set_eq:NN \tex_hsize:D \l__wstf_line_dim
- \para_raw_noindent:
- \hbox_unpack_drop:N \g__wstf_line_box
- \para_raw_end:
- }
- \bool_if:NT \l__wstf_attach_equation_bool
- {
- \box_set_ht:Nn \l__wstf_window_box
- { \box_ht_plus_dp:N \l__wstf_window_box - \g__wstf_dp_dim }
- \box_set_dp:Nn \l__wstf_window_box { \g__wstf_dp_dim }
+ \__wstf_split_parameter:
+ \skip_set_eq:NN \tex_baselineskip:D \g__wstf_baseline_skip
+ \__wstf_build_line:
}
}
-\cs_new_protected_nopar:Npn \__wstf_build_block_auxi:
+\cs_new_protected_nopar:Npn \__wstf_build_line:
{
- \vbox_set:Nn \l__wstf_body_box
+ \vbox_set_split_to_ht:NNn \l__wstf_l_box \l__wstf_body_box
+ { \g__wstf_baseline_skip }
+ \vbox_set_split_to_ht:NNn \l__wstf_r_box \l__wstf_body_box
+ { \g__wstf_baseline_skip }
+ \__wstf_build_line_repack:
+ \box_if_empty:NTF \l__wstf_body_box
+ { \__wstf_put_last_line: }
{
- \vbox_unpack_drop:N \l__wstf_body_box
- \bool_lazy_and:nnTF
- { \box_if_empty_p:N \l__wstf_bottom_box }
- { \int_if_odd_p:n { \g__wstf_line_int } }
- { \box_set_eq:NN \l__wstf_r_box \l__wstf_empty_box }
- {
- \box_set_to_last:N \l__wstf_r_box
- \tex_unskip:D \tex_unpenalty:D
- }
- \box_set_to_last:N \l__wstf_l_box
- \tex_unskip:D \tex_unpenalty:D
- \hbox_gset:Nn \g__wstf_line_box
- {
- \bool_if:NT \l__wstf_attach_equation_bool
- { \__wstf_build_block_attach: }
- \box_use:N \l__wstf_l_box
- \tex_hfill:D
- \box_use:N \l__wstf_r_box
- }
- \__wstf_build_block_auxii:
+ \__wstf_put_line_box:
+ \__wstf_build_line:
}
}
-\cs_new_protected_nopar:Npn \__wstf_build_block_auxii:
+\cs_new_protected_nopar:Npn \__wstf_build_line_repack:
{
- \int_case:nnTF
- { \tex_lastnodetype:D }
+ \vbox_set:Nn \l__wstf_l_box
+ { \vbox_unpack_drop:N \l__wstf_l_box }
+ \box_if_empty:NF \l__wstf_r_box
{
- { \c__wstf_none_node } { }
- { \c__wstf_whatsit_node } { }
+ \vbox_set:Nn \l__wstf_r_box
+ { \vbox_unpack_drop:N \l__wstf_r_box }
}
- { \__wstf_build_block_finalise: }
- { \__wstf_build_block_auxiii: }
+ \__wstf_save_first_ht:
}
-\cs_new_protected_nopar:Npn \__wstf_build_block_auxiii:
+\cs_new_protected_nopar:Npn \__wstf_put_last_line:
{
- \box_set_to_last:N \l__wstf_r_box
- \tex_unskip:D \tex_unpenalty:D
- \box_set_to_last:N \l__wstf_l_box
- \tex_unskip:D \tex_unpenalty:D
- \hbox_gset:Nn \g__wstf_line_box
- {
- \box_use:N \l__wstf_l_box
- \tex_hfill:D
- \box_use:N \l__wstf_r_box
- \tex_penalty:D \c__wstf_break_int
- \hbox_unpack_drop:N \g__wstf_line_box
- }
- \__wstf_build_block_auxii:
+ \bool_if:NT \l__wstf_attach_equation_bool
+ { \__wstf_attach_left:N \l__wstf_l_box }
+ \__wstf_put_line_box:
}
-\cs_new_protected_nopar:Npn \__wstf_build_block_attach:
+\cs_new_protected_nopar:Npn \__wstf_put_line_box:
{
- \box_set_eq:NN \l__wstf_last_box \l__wstf_l_box
- \__wstf_attach_equation:N \l__wstf_last_box
- \dim_gset:Nn \g__wstf_dp_dim { \box_dp:N \l__wstf_last_box }
- \hbox_set:Nn \l__wstf_l_box
+ \hbox_to_wd:nn { \l__wstf_line_dim }
{
- \box_move_down:nn
- { \box_ht:N \l__wstf_last_box - \box_ht:N \l__wstf_l_box }
- { \box_use_drop:N \l__wstf_last_box }
+ \box_use_drop:N \l__wstf_l_box
+ \tex_hfil:D
+ \box_use_drop:N \l__wstf_r_box
}
}
-\cs_new_protected_nopar:Npn \__wstf_build_block_finalise:
+\cs_new_protected_nopar:Npn \__wstf_save_first_ht:
{
\dim_gset:Nn \g__wstf_ht_dim
{
@@ -1188,38 +1448,23 @@
{ \box_ht:N \l__wstf_l_box }
{ \box_ht:N \l__wstf_r_box }
}
+ \cs_set_eq:NN \__wstf_save_first_ht: \__wstf_empty:
}
-\dim_new:N \g__wstf_dp_dim
\dim_new:N \g__wstf_ht_dim
\box_new:N \l__wstf_l_box
\box_new:N \l__wstf_r_box
-\box_new:N \g__wstf_line_box
-\box_new:N \l__wstf_empty_box
-\hbox_set:Nn \l__wstf_empty_box { }
-\int_const:Nn \c__wstf_break_int { -10000 }
-\int_const:Nn \c__wstf_nobreak_int { 10000 }
\cs_new_protected_nopar:Npn \__wstf_build_column_fuzzy:
{
\hbox_set_to_wd:Nnn \l__wstf_window_box
{ \l__wstf_line_dim }
{
- \skip_zero:N \tex_splittopskip:D
- \dim_set_eq:NN \tex_vfuzz:D \c_max_dim
- \int_set_eq:NN \tex_vbadness:D \c_max_int
+ \__wstf_split_parameter:
\__wstf_build_column_aux:
\box_if_empty:NT \l__wstf_bottom_box
{ \__wstf_build_column_fuzzy_aux: }
- \dim_gset:Nn \g__wstf_ht_dim { \box_ht:N \l__wstf_l_box }
- \vbox_set:Nn \l__wstf_l_box
- {
- \vbox_unpack_drop:N \l__wstf_l_box
- \bool_if:NT \l__wstf_attach_equation_bool
- {
- \box_set_to_last:N \l__wstf_last_box
- \__wstf_attach_equation:N \l__wstf_last_box
- \vbox_unpack_drop:N \l__wstf_last_box
- }
- }
+ \__wstf_repack_left_box:
+ \bool_if:NT \l__wstf_attach_equation_bool
+ { \__wstf_attach_left:N \l__wstf_l_box }
\box_use:N \l__wstf_l_box
\tex_hfil:D
\box_move_up:nn
@@ -1230,7 +1475,7 @@
\cs_new_protected_nopar:Npn \__wstf_build_column_aux:
{
\vbox_set_split_to_ht:NNn \l__wstf_l_box \l__wstf_body_box
- { \c_zero_dim }
+ { \box_ht:N \l__wstf_body_box / 2 }
\vbox_set_top:Nn \l__wstf_l_box
{ \vbox_unpack_drop:N \l__wstf_l_box }
\box_set_eq_drop:NN \l__wstf_r_box \l__wstf_body_box
@@ -1256,23 +1501,25 @@
\cs_new_protected_nopar:Npn \__wstf_rebuild_window:
{
\int_compare:nNnT \l__wstf_window_int > { 2 }
- {
- \int_sub:Nn \l__wstf_window_int { 2 }
- \box_set_eq_drop:NN \l__wstf_last_l_box \l__wstf_l_box
- \box_set_eq_drop:NN \l__wstf_last_r_box \l__wstf_r_box
- \box_set_eq:NN \l__wstf_bottom_box \l__wstf_save_body_box
- \int_set_eq:NN \l__wstf_window_line_int \l__wstf_window_int
- \__wstf_build_window:
- \__wstf_build_column_aux:
- \__wstf_build_column_fuzzy_aux:
- }
+ { \__wstf_rebuild_window_aux: }
}
+\cs_new_protected_nopar:Npn \__wstf_rebuild_window_aux:
+ {
+ \int_sub:Nn \l__wstf_window_int { 2 }
+ \box_set_eq_drop:NN \l__wstf_last_l_box \l__wstf_l_box
+ \box_set_eq_drop:NN \l__wstf_last_r_box \l__wstf_r_box
+ \box_set_eq:NN \l__wstf_bottom_box \l__wstf_save_body_box
+ \int_set_eq:NN \l__wstf_window_line_int \l__wstf_window_int
+ \__wstf_build_window:
+ \__wstf_build_column_aux:
+ \__wstf_build_column_fuzzy_aux:
+ }
+\box_new:N \l__wstf_last_l_box
+\box_new:N \l__wstf_last_r_box
\cs_new_protected_nopar:Npn \__wstf_build_column_strict:
{
\group_begin:
- \skip_zero:N \tex_splittopskip:D
- \dim_set_eq:NN \tex_vfuzz:D \c_max_dim
- \int_set_eq:NN \tex_vbadness:D \c_max_int
+ \__wstf_split_parameter:
\__wstf_build_column_aux:
\box_if_empty:NTF \l__wstf_r_box
{ \__wstf_build_column_strict_auxi: }
@@ -1280,7 +1527,7 @@
\box_if_empty:NTF \l__wstf_bottom_box
{ \__wstf_build_column_strict_auxii: }
{
- \bool_if:NTF \g__wstf_column_right_bool
+ \bool_if:NTF \g__wstf_column_bool
{ \__wstf_build_column_strict_auxiii: }
{ \__wstf_build_column_strict_auxiv: }
}
@@ -1292,9 +1539,9 @@
{
\__wstf_repack_left_box:
\bool_if:NT \l__wstf_attach_equation_bool
- { \__wstf_column_attach:N \l__wstf_l_box }
+ { \__wstf_attach_left:N \l__wstf_l_box }
\box_gset_eq_drop:NN \g__wstf_window_box \l__wstf_l_box
- \bool_gset_true:N \g__wstf_column_right_bool
+ \bool_gset_true:N \g__wstf_column_bool
\bool_if:NF \g__wstf_first_save_bool
{
\bool_gset_true:N \g__wstf_first_save_bool
@@ -1319,12 +1566,12 @@
\dim_gsub:Nn \g__wstf_first_sep_dim
{ \box_dp:N \l__wstf_window_box }
\bool_gset_false:N \g__wstf_entire_bool
- \dim_gzero:N \g__wstf_column_right_ht_dim
+ \dim_gzero:N \g__wstf_column_ht_dim
\dim_gset_eq:NN \g__wstf_prevdepth_dim \g__wstf_first_dp_dim
\__wstf_column_right_move_set:nn
{ \g__wstf_stuff_ht_dim }
{ \g__wstf_window_ht_dim }
- \int_gset_eq:NN \g__wstf_window_int \g__wstf_column_window_int
+ \int_gset_eq:NN \g__wstf_window_int \g__wstf_column_int
}
\cs_new_protected:Npn \__wstf_column_right_move_set:nn #1#2
{
@@ -1343,7 +1590,7 @@
\__wstf_make_next_stuff:nn
{ \l__wstf_line_dim - \l__wstf_r_dim - \l__wstf_rightsep_dim }
{#1}
- \dim_gset:Nn \g__wstf_column_left_dim {#2}
+ \dim_gset:Nn \g__wstf_column_room_dim {#2}
\int_gzero:N \g__wstf_top_int
}
\cs_new_protected_nopar:Npn \__wstf_build_column_strict_auxii:
@@ -1351,11 +1598,12 @@
\bool_gset_false:N \g__wstf_entire_bool
\__wstf_repack_left_box:
\bool_if:NT \l__wstf_attach_equation_bool
- { \__wstf_column_attach:N \l__wstf_r_box }
+ { \__wstf_attach_right:N \l__wstf_r_box }
\dim_gset:Nn \g__wstf_hang_ht_dim
{
\g__wstf_stuff_ht_dim - \tex_baselineskip:D *
\__wstf_unit:n { \box_ht_plus_dp:N \l__wstf_r_box }
+ - \box_ht_plus_dp:N \g__wstf_equation_box
- \g__wstf_pos_skip
}
\dim_compare:nNnTF \g__wstf_hang_ht_dim > \c_zero_dim
@@ -1368,19 +1616,21 @@
{
\int_compare:nNnTF \g__wstf_window_int > \c_zero_int
{
- \dim_gset:Nn \g__wstf_column_left_dim
+ \dim_gset:Nn \g__wstf_column_room_dim
{
\g__wstf_window_ht_dim
- \g__wstf_first_sep_dim
- - \box_ht:N \l__wstf_r_box
+ - \box_ht_plus_dp:N \l__wstf_r_box
+ - \box_ht_plus_dp:N \g__wstf_equation_box
}
\__wstf_next_hang_para:
}
{
- \dim_gset:Nn \g__wstf_column_left_dim
+ \dim_gset:Nn \g__wstf_column_room_dim
{
\box_ht:N \l__wstf_l_box
- - \box_ht:N \l__wstf_r_box
+ - \box_ht_plus_dp:N \l__wstf_r_box
+ - \box_ht_plus_dp:N \g__wstf_equation_box
}
\dim_gset:Nn \g__wstf_first_sep_dim
{ \tex_baselineskip:D - \g__wstf_ht_dim }
@@ -1393,11 +1643,15 @@
\box_use:N \l__wstf_l_box
\tex_hfil:D
\box_move_up:nn
- { \g__wstf_column_left_dim }
+ { \g__wstf_column_room_dim }
{ \box_use:N \l__wstf_r_box }
}
- \dim_gset:Nn \g__wstf_column_right_ht_dim
- { \box_ht:N \l__wstf_r_box + \g__wstf_pos_skip }
+ \dim_gset:Nn \g__wstf_column_ht_dim
+ {
+ \box_ht_plus_dp:N \l__wstf_r_box
+ + \box_ht_plus_dp:N \g__wstf_equation_box
+ + \g__wstf_pos_skip
+ }
}
\cs_new_protected_nopar:Npn \__wstf_column_put_right:
{
@@ -1424,14 +1678,14 @@
{
\__wstf_column_right_move_set:nn
{ \g__wstf_hang_ht_dim }
- { \g__wstf_column_left_dim }
+ { \g__wstf_column_room_dim }
\int_gzero:N \g__wstf_window_int
}
\bool_gset_false:N \g__wstf_next_hang_bool
}
\cs_new_protected_nopar:Npn \__wstf_build_column_strict_auxiii:
{
- \bool_gset_false:N \g__wstf_column_right_bool
+ \bool_gset_false:N \g__wstf_column_bool
\__wstf_repack_left_box:
\hbox_gset_to_wd:Nnn \g__wstf_window_box
{ \l__wstf_line_dim }
@@ -1462,32 +1716,8 @@
\vbox_set:Nn \l__wstf_l_box
{ \vbox_unpack_drop:N \l__wstf_l_box }
}
-\cs_new_protected_nopar:Npn \__wstf_column_attach:N #1
- {
- \vbox_set:Nn #1
- {
- \vbox_unpack_drop:N #1
- \box_set_to_last:N \l__wstf_last_box
- \__wstf_attach_equation:N \l__wstf_last_box
- \vbox_unpack_drop:N \l__wstf_last_box
- }
- }
-\box_new:N \l__wstf_last_l_box
-\box_new:N \l__wstf_last_r_box
\box_new:N \g__wstf_window_box
-\dim_new:N \g__wstf_fake_wd_dim
-\dim_new:N \g__wstf_first_dp_dim
-\dim_new:N \g__wstf_first_sep_dim
-\dim_new:N \g__wstf_column_left_dim
-\dim_new:N \g__wstf_column_right_ht_dim
-\bool_new:N \g__wstf_entire_bool
-\bool_new:N \g__wstf_next_hang_bool
-\bool_new:N \g__wstf_first_save_bool
-\bool_new:N \g__wstf_column_right_bool
-\bool_new:N \l__wstf_column_strict_bool
-\bool_new:N \g__wstf_first_set_bool
\bool_new:N \l__wstf_first_move_bool
-\bool_new:N \g__wstf_right_move_bool
\bool_new:N \l__wstf_column_bool
\cs_new_eq:NN \__wstf_build_column: \__wstf_build_column_strict:
\cs_new_eq:NN \__wstf_build_box: \__wstf_build_column:
@@ -1500,38 +1730,39 @@
{ \vbox_unpack:N \l__wstf_body_box }
\dim_gset:Nn \g__wstf_ht_dim { \box_ht:N \l__wstf_window_box }
}
- \bool_if:NTF \l__wstf_attach_equation_bool
- {
- \vbox_set:Nn \l__wstf_window_box
- {
- \vbox_unpack_drop:N \l__wstf_window_box
- \box_set_to_last:N \l__wstf_last_box
- \__wstf_attach_equation:N \l__wstf_last_box
- \vbox_unpack_drop:N \l__wstf_last_box
- }
- }
- { \box_set_eq_drop:NN \l__wstf_window_box \l__wstf_body_box }
- \dim_compare:nNnTF \g__wstf_column_left_dim > \c_zero_dim
- { \__wstf_build_hang_aux: }
- { \bool_gset_false:N \g__wstf_move_hang_bool }
+ \box_set_eq_drop:NN \l__wstf_window_box \l__wstf_body_box
+ \bool_if:NT \l__wstf_attach_equation_bool
+ { \__wstf_build_hang_attach: }
+ \dim_compare:nNnT \g__wstf_column_room_dim > \c_zero_dim
+ { \__wstf_build_hang_move: }
}
-\cs_new_protected_nopar:Npn \__wstf_build_hang_aux:
+\cs_new_protected_nopar:Npn \__wstf_build_hang_attach:
+ {
+ \dim_compare:nNnTF \l__wstf_r_dim = \c_zero_dim
+ { \__wstf_attach_left:N \l__wstf_window_box }
+ { \__wstf_attach_right:N \l__wstf_window_box }
+ }
+\cs_new_protected_nopar:Npn \__wstf_build_hang_move:
{
\dim_set:Nn \l__wstf_shift_dim
{
\dim_max:nn
{ \box_ht:N \l__wstf_window_box }
{ \tex_baselineskip:D * \g__wstf_line_int }
+ + \box_ht_plus_dp:N \g__wstf_equation_box
+ \tex_parskip:D
}
- \dim_gsub:Nn \g__wstf_column_left_dim { \l__wstf_shift_dim }
- \dim_compare:nNnTF \g__wstf_column_left_dim > \c_zero_dim
+ \dim_gsub:Nn \g__wstf_column_room_dim { \l__wstf_shift_dim }
+ \dim_compare:nNnTF \g__wstf_column_room_dim > \c_zero_dim
{
\box_if_empty:NTF \l__wstf_bottom_box
{ \bool_if:NT \g__wstf_right_move_bool { \__wstf_set_next_hang: } }
- { \bool_gset_false:N \g__wstf_move_hang_bool }
}
- { \bool_gset_false:N \g__wstf_move_hang_bool }
+ { \use:n }
+ {
+ \bool_gset_false:N \g__wstf_move_hang_bool
+ \bool_gset_false:N \g__wstf_right_move_bool
+ }
}
\cs_new_protected_nopar:Npn \__wstf_set_next_hang:
{
@@ -1541,75 +1772,67 @@
\dim_gset_eq:NN \g__wstf_hang_ht_dim \g__wstf_remaining_dim
}
\dim_gsub:Nn \g__wstf_hang_ht_dim { \l__wstf_shift_dim }
- \dim_gset:Nn \g__wstf_dp_dim { \box_dp:N \l__wstf_window_box }
\__wstf_column_right_move_set:nn
{ \g__wstf_hang_ht_dim }
- { \g__wstf_column_left_dim }
+ { \g__wstf_column_room_dim }
\int_gzero:N \g__wstf_window_int
}
-\dim_new:N \g__wstf_hang_ht_dim
-\bool_new:N \g__wstf_move_hang_bool
\cs_new_protected_nopar:Npn \__wstf_build_hangfrom:
{
- \dim_compare:nNnTF \g__wstf_prevdepth_dim > \c__wstf_ignore_depth_dim
- { \__wstf_build_hangfrom_aux: }
- { \dim_gzero:N \g__wstf_ht_dim }
- }
-\cs_new_protected_nopar:Npn \__wstf_build_hangfrom_aux:
- {
\group_begin:
- \skip_zero:N \tex_splittopskip:D
- \vbox_gset:Nn \g__wstf_line_box
+ \vbox_gset:Nn \g__wstf_window_box
{
- \tex_penalty:D \c__wstf_break_int
+ \__wstf_break:
\vbox_unpack:N \l__wstf_body_box
}
- \vbox_set_split_to_ht:NNn \l__wstf_last_box \g__wstf_line_box
+ \__wstf_split_parameter:
+ \vbox_set_split_to_ht:NNn \l__wstf_last_box \g__wstf_window_box
{ \c_zero_dim }
\dim_gset:Nn \g__wstf_ht_dim
{
\g__wstf_baseline_skip
- \g__wstf_prevdepth_dim
- - \l__wstf_shift_dim
- \box_ht:N \l__wstf_body_box
- + \box_ht:N \g__wstf_line_box
+ + \box_ht:N \g__wstf_window_box
}
\group_end:
- \box_set_eq_drop:NN \l__wstf_body_box \g__wstf_line_box
+ \box_set_eq_drop:NN \l__wstf_body_box \g__wstf_window_box
}
\cs_new_protected_nopar:Npn \__wstf_put_box:
{
- \para_raw_end:
+ \__wstf_para_raw_end:
\dim_compare:nNnTF \g__wstf_prevdepth_dim > \c__wstf_ignore_depth_dim
{ \__wstf_add_vskip: }
- { \skip_gzero:N \g__wstf_pre_skip }
+ { \__wstf_set_vskip: }
\skip_set_eq:NN \l__wstf_par_skip \tex_parskip:D
\skip_zero:N \tex_parskip:D
+ \dim_set:Nn \l__wstf_window_ht_dim
+ { \box_ht_plus_dp:N \l__wstf_window_box }
\bool_if:NTF \g__wstf_right_move_bool
{ \__wstf_put_box_aux: }
{
\box_if_empty:NTF \l__wstf_bottom_box
- {
- \dim_compare:nNnTF
- { \g__wstf_remaining_dim }
- >
- { \box_ht_plus_dp:N \l__wstf_window_box }
- { \__wstf_set_next: }
- { \__wstf_put_box_aux: }
- }
+ { \__wstf_put_next_test: }
{ \__wstf_put_box_aux: }
}
}
+\dim_new:N \l__wstf_window_ht_dim
\skip_new:N \l__wstf_par_skip
-\cs_new_protected_nopar:Npn \__wstf_put_box_aux:
+\cs_new_protected_nopar:Npn \__wstf_put_next_test:
{
- \int_gzero:N \g__wstf_window_int
- \__wstf_hbox:n
+ \box_if_empty:NF \g__wstf_equation_box
{
- \__wstf_put_window_box:
- \bool_if:NF \g__wstf_next_bool
- { \__wstf_put_stuff_box: }
+ \dim_add:Nn \l__wstf_window_ht_dim
+ { \box_ht_plus_dp:N \g__wstf_equation_box + \g__wstf_pos_skip }
}
+ \dim_compare:nNnTF
+ { \g__wstf_remaining_dim + \g__wstf_pos_skip } > \l__wstf_window_ht_dim
+ { \__wstf_set_next: }
+ { \__wstf_put_box_aux: }
+ }
+\cs_new_protected_nopar:Npn \__wstf_put_box_aux:
+ {
+ \__wstf_output_window_box:
\box_if_empty:NTF \l__wstf_bottom_box
{ \__wstf_put_trailer_box: }
{ \__wstf_put_bottom_box: }
@@ -1625,31 +1848,48 @@
\bool_if:NTF \g__wstf_right_move_bool
{ \__wstf_next_para_trailer: }
{
- \__wstf_add_pos_skip:
- \box_if_empty:NF \g__wstf_pos_box
- {
- \__wstf_newline:
- \hbox_unpack_drop:N \g__wstf_pos_box
- }
+ \__wstf_add_pos_kludge:
+ \__wstf_put_pos_box:
+ \__wstf_clear_variable:
}
}
}
\cs_new_protected_nopar:Npn \__wstf_put_bottom_box:
{
- \__wstf_newline:
+ \__wstf_para_raw_end:
+ \para_raw_noindent:
\hbox_unpack_drop:N \l__wstf_bottom_box
\box_if_empty:NF \g__wstf_equation_box
{ \__wstf_insert_equation: }
+ \__wstf_put_pos_box:
+ \__wstf_clear_variable:
+ }
+\cs_new_protected_nopar:Npn \__wstf_output_window_box:
+ {
+ \__wstf_hbox:n
+ {
+ \__wstf_put_window_box:
+ \bool_if:NF \g__wstf_next_bool
+ { \__wstf_output_stuff_box: }
+ }
+ }
+\cs_new_protected_nopar:Npn \__wstf_put_pos_box:
+ {
\box_if_empty:NF \g__wstf_pos_box
- { \hbox_unpack_drop:N \g__wstf_pos_box }
- \bool_gset_false:N \g__wstf_right_move_bool
- \bool_gset_false:N \g__wstf_first_save_bool
+ { \__wstf_output_pos_box: }
}
-\cs_new_protected_nopar:Npn \__wstf_newline:
+\cs_new_protected_nopar:Npn \__wstf_output_pos_box:
{
- \tex_penalty:D \c__wstf_nobreak_int
- \tex_hfil:D
- \tex_penalty:D \c__wstf_break_int
+ \__wstf_if_last_none:F
+ { \__wstf_output_pos_box_aux: }
+ \hbox_unpack_drop:N \g__wstf_pos_box
+ }
+\cs_new_protected_nopar:Npn \__wstf_output_pos_box_aux:
+ {
+ \__wstf_para_raw_end:
+ \bool_if:NT \g__wstf_equation_dp_bool
+ { \__wstf_set_equation_depth: }
+ \para_raw_noindent:
}
\cs_new_protected:Npn \__wstf_hbox:n #1
{
@@ -1664,22 +1904,22 @@
{ \skip_horizontal:n { \l__wstf_line_dim - \l__wstf_r_dim } }
\box_use:N \l__wstf_window_box
}
-\cs_new_protected_nopar:Npn \__wstf_put_stuff_box:
+\cs_new_protected_nopar:Npn \__wstf_output_stuff_box:
{
- \__wstf_move_stuff_box:nn { up }
+ \hbox_gset:Nn \g__wstf_stuff_box
{
- \l__wstf_voffset_dim
- + ( \box_dp:N \g__wstf_stuff_box -
- \box_dp:N \l__wstf_window_box )
- + ( \box_ht_plus_dp:N \l__wstf_window_box -
- \g__wstf_stuff_ht_dim ) / 2
- \box_if_empty:NT \l__wstf_bottom_box
- { - \g__wstf_pos_skip / 2 }
+ \__wstf_parshape_kern:
+ \box_move_up:nn
+ {
+ + \box_ht:N \l__wstf_window_box
+ - ( \l__wstf_window_ht_dim
+ + \box_ht_plus_dp:N \g__wstf_stuff_box ) / 2
+ + \l__wstf_voffset_dim
+ }
+ { \box_use_drop:N \g__wstf_stuff_box }
}
- \__wstf_output_stuff_box:
- }
-\cs_new_protected_nopar:Npn \__wstf_output_stuff_box:
- {
+ \box_gset_ht:Nn \g__wstf_stuff_box { \c_zero_dim }
+ \box_gset_dp:Nn \g__wstf_stuff_box { \c_zero_dim }
\skip_horizontal:n
{
\dim_compare:nNnTF \l__wstf_r_dim > \c_zero_dim
@@ -1699,18 +1939,6 @@
}
\box_use_drop:N \g__wstf_stuff_box
}
-\cs_new_protected:Npn \__wstf_move_stuff_box:nn #1#2
- {
- \hbox_gset:Nn \g__wstf_stuff_box
- {
- \__wstf_parshape_kern:
- \use:c { box_move_ #1 :nn }
- {#2}
- { \box_use_drop:N \g__wstf_stuff_box }
- }
- \box_gset_ht:Nn \g__wstf_stuff_box { \c_zero_dim }
- \box_gset_dp:Nn \g__wstf_stuff_box { \c_zero_dim }
- }
\cs_new_protected_nopar:Npn \__wstf_add_vskip:
{
\box_if_empty:NTF \g__wstf_display_box
@@ -1719,6 +1947,7 @@
}
\cs_new_protected_nopar:Npn \__wstf_add_vskip_display:
{
+ \bool_set_true:N \l__wstf_display_pre_bool
\vbox_unpack_drop:N \g__wstf_display_box
\__wstf_ignore_depth:
}
@@ -1726,18 +1955,15 @@
{
\dim_compare:nNnTF \tex_pagegoal:D < \c_max_dim
{ \__wstf_add_vskip_auxii: }
- { \__wstf_add_vskip_auxiii: }
+ {
+ \bool_if:NTF \g__wstf_next_bool
+ { \__wstf_add_vskip_auxii: }
+ { \__wstf_add_vskip_auxiii: }
+ }
}
\cs_new_protected_nopar:Npn \__wstf_add_vskip_auxii:
{
- \skip_gset:Nn \g__wstf_pre_skip
- {
- \g__wstf_baseline_skip
- - \g__wstf_prevdepth_dim
- - \g__wstf_ht_dim
- }
- \dim_compare:nNnT \g__wstf_pre_skip < \tex_lineskiplimit:D
- { \skip_gset_eq:NN \g__wstf_pre_skip \tex_lineskip:D }
+ \__wstf_add_vskip_auxiv:
\bool_if:NTF \l__wstf_first_move_bool
{ \__wstf_first_move_skip: }
{ \skip_vertical:N \g__wstf_pre_skip }
@@ -1745,14 +1971,25 @@
}
\cs_new_protected_nopar:Npn \__wstf_add_vskip_auxiii:
{
+ \__wstf_add_vskip_auxiv:
+ \skip_vertical:N \g__wstf_pre_skip
\dim_compare:nNnTF \tex_topskip:D > \g__wstf_ht_dim
{
+ \skip_sub:Nn \tex_topskip:D { \g__wstf_ht_dim }
\tex_hrule:D height \c_zero_dim \scan_stop:
- \skip_gset:Nn \g__wstf_pre_skip
- { \tex_topskip:D - \g__wstf_ht_dim }
- \skip_vertical:n { \g__wstf_pre_skip - \tex_topskip:D }
}
- { \skip_gzero:N \g__wstf_pre_skip }
+ { \__wstf_ignore_depth: }
+ }
+\cs_new_protected_nopar:Npn \__wstf_add_vskip_auxiv:
+ {
+ \skip_gset:Nn \g__wstf_pre_skip
+ {
+ \g__wstf_baseline_skip
+ - \g__wstf_prevdepth_dim
+ - \g__wstf_ht_dim
+ }
+ \dim_compare:nNnT \g__wstf_pre_skip < \tex_lineskiplimit:D
+ { \skip_gset_eq:NN \g__wstf_pre_skip \tex_lineskip:D }
}
\cs_new_protected_nopar:Npn \__wstf_first_move_skip:
{
@@ -1761,11 +1998,21 @@
\g__wstf_first_sep_dim
- \g__wstf_window_ht_dim
- \tex_parskip:D
- \dim_compare:nNnT \g__wstf_column_right_ht_dim > \c_zero_dim
- { + \g__wstf_column_right_ht_dim + \g__wstf_pre_skip }
+ \dim_compare:nNnT \g__wstf_column_ht_dim > \c_zero_dim
+ { + \g__wstf_column_ht_dim + \g__wstf_pre_skip }
}
}
\skip_new:N \g__wstf_pre_skip
+\bool_new:N \l__wstf_display_pre_bool
+\cs_new_protected_nopar:Npn \__wstf_set_vskip:
+ {
+ \box_if_empty:NTF \g__wstf_display_box
+ {
+ \skip_gset:Nn \g__wstf_pre_skip
+ { \g__wstf_baseline_skip - \g__wstf_ht_dim }
+ }
+ { \__wstf_add_vskip_display: }
+ }
\cs_new_protected_nopar:Npn \__wstf_ignore_depth:
{ \dim_set_eq:NN \tex_prevdepth:D \c__wstf_ignore_depth_dim }
\cs_new_protected_nopar:Npn \__wstf_set_prevdepth:N
@@ -1775,24 +2022,19 @@
{
\dim_set:Nn \l__wstf_height_dim
{
- \g__wstf_pre_skip
- + \g__wstf_pos_skip
- + \box_ht_plus_dp:N \l__wstf_window_box
+ \bool_if:NT \g__wstf_next_bool { \l__wstf_par_skip }
+ + \g__wstf_pre_skip
+ + \l__wstf_window_ht_dim
}
\dim_gadd:Nn \g__wstf_total_ht_dim { \l__wstf_height_dim }
\dim_set:Nn \l__wstf_shift_dim
{ \g__wstf_remaining_dim - \l__wstf_height_dim }
- \dim_compare:nNnTF \l__wstf_shift_dim > \c_zero_dim
- { \__wstf_set_next_auxi: }
- {
- \dim_compare:nNnTF
- { - \l__wstf_shift_dim } > \l__wstf_min_dim
- { \__wstf_set_next_auxii: }
- { \__wstf_set_next_auxi: }
- }
+ \dim_compare:nNnTF
+ { - \l__wstf_shift_dim } < \l__wstf_min_dim
+ { \__wstf_set_next_para: }
+ { \__wstf_set_next_output: }
}
-\dim_new:N \g__wstf_total_ht_dim
-\cs_new_protected_nopar:Npn \__wstf_set_next_auxi:
+\cs_new_protected_nopar:Npn \__wstf_set_next_para:
{
\int_gset:Nn \g__wstf_window_int
{
@@ -1801,68 +2043,38 @@
{ \c_one_int }
}
\__wstf_set_next_verify:
- \bool_if:NF \g__wstf_next_bool
- { \__wstf_move_next_stuff_box: }
- \__wstf_set_next_output:
+ \__wstf_output_window_box:
\__wstf_make_next_stuff:nn
{ \g__wstf_stuff_wd_dim }
{ \l__wstf_shift_dim }
\int_gzero:N \g__wstf_top_int
\__wstf_next_para_trailer:
}
-\cs_new_protected_nopar:Npn \__wstf_move_next_stuff_box:
- {
- \__wstf_move_stuff_box:nn { down }
- {
- \box_ht:N \g__wstf_stuff_box
- - \box_ht:N \l__wstf_window_box
- + ( \g__wstf_window_ht_dim
- - \g__wstf_stuff_ht_dim
- - \g__wstf_pre_skip
- + \g__wstf_pos_skip
- + \l__wstf_par_skip ) / 2
- - \l__wstf_voffset_dim
- }
- }
-\cs_new_protected_nopar:Npn \__wstf_set_next_auxii:
- {
- \int_gzero:N \g__wstf_window_int
- \bool_if:NF \g__wstf_next_bool
- {
- \__wstf_move_stuff_box:nn { down }
- {
- \box_ht:N \g__wstf_stuff_box
- - \box_ht:N \l__wstf_window_box
- - \l__wstf_voffset_dim
- }
- }
- \__wstf_set_next_output:
- \__wstf_add_pos_skip:
- }
\cs_new_protected_nopar:Npn \__wstf_set_next_output:
{
- \__wstf_hbox:n
- {
- \__wstf_put_window_box:
- \bool_if:NF \g__wstf_next_bool
- { \__wstf_output_stuff_box: }
- }
+ \__wstf_output_window_box:
+ \__wstf_add_pos_kludge:
+ \__wstf_put_pos_box:
+ \__wstf_clear_variable:
}
\cs_new_protected_nopar:Npn \__wstf_set_next_verify:
{
\dim_set:Nn \l__wstf_height_dim
- { \g__wstf_window_ht_dim - \g__wstf_total_ht_dim }
- \dim_until_do:nNnn
+ { \g__wstf_window_ht_dim - \g__wstf_total_ht_dim - \l__wstf_min_dim }
+ \dim_while_do:nNnn
{ \tex_baselineskip:D * \g__wstf_window_int + \l__wstf_par_skip }
- >
+ <
{ \l__wstf_height_dim }
{ \int_gincr:N \g__wstf_window_int }
- \dim_gadd:Nn \g__wstf_total_ht_dim
- { \tex_baselineskip:D * \g__wstf_window_int + \l__wstf_par_skip }
+ \bool_if:NF \g__wstf_next_bool
+ {
+ \dim_add:Nn \l__wstf_window_ht_dim
+ { \tex_baselineskip:D * \g__wstf_window_int + \l__wstf_par_skip }
+ }
}
\cs_new_protected_nopar:Npn \__wstf_next_para_trailer:
{
- \__wstf_add_pos_skip:
+ \__wstf_add_pos_kludge:
\box_if_empty:NTF \g__wstf_pos_box
{ \__wstf_next_para: }
{
@@ -1877,7 +2089,6 @@
\dim_gset:Nn \g__wstf_stuff_wd_dim {#1}
\dim_gset:Nn \g__wstf_remaining_dim {#2}
}
-\bool_new:N \g__wstf_next_bool
\cs_new_protected:Npn \__wstf_extract_display_hbox:NN #1
{
\box_gclear:N \g__wstf_pos_box
@@ -1938,11 +2149,7 @@
\dim_new:N \g__wstf_display_pre_dim
\cs_new_protected_nopar:Npn \__wstf_test_display_math:
{
- \__wstf_if_last_hlist:T
- {
- \box_gset_to_last:N \g__wstf_pos_box
- \tex_unskip:D
- }
+ \__wstf_if_last_hlist:T { \__wstf_extract_pos_hbox: }
\box_clear:N \l__wstf_add_box
\box_gclear:N \g__wstf_display_box
\skip_gzero:N \g__wstf_last_skip
@@ -1954,14 +2161,21 @@
\__wstf_add_last_skip:w
\__wstf_add_last_skip:w
\__wstf_add_last_penalty:w
- \__wstf_add_last_finalise:w \q_stop
+ \__wstf_add_last_finalise:w \s_stop
+ }
+\cs_new_protected_nopar:Npn \__wstf_extract_pos_hbox:
+ {
+ \box_gset_to_last:N \g__wstf_last_box
+ \__wstf_repack_hbox:N \l__wstf_last_box
+ \box_gset_eq_drop:NN \g__wstf_pos_box \l__wstf_last_box
+ \tex_unskip:D
}
\box_new:N \l__wstf_add_box
\box_new:N \g__wstf_pos_box
\cs_new_protected_nopar:Npn \__wstf_add_last_stop:w
{
\vbox_unpack_drop:N \l__wstf_add_box
- \use_none_delimit_by_q_stop:w
+ \use_none_delimit_by_s_stop:w
}
\cs_new_protected_nopar:Npn \__wstf_add_last_skip:w
{
@@ -2027,7 +2241,7 @@
}
{ \box_gset_eq_drop:NN \g__wstf_display_box \l__wstf_add_box }
{ \vbox_unpack_drop:N \l__wstf_add_box }
- \use_none_delimit_by_q_stop:w
+ \use_none_delimit_by_s_stop:w
}
\int_new:N \g__wstf_display_pre_int
\skip_new:N \g__wstf_display_pre_skip
@@ -2293,11 +2507,11 @@
}
\regex_const:Nn \c__wstf_integer_regex { \A \d+ \Z }
\cs_new_protected_nopar:Npn \__wstf_unknown_key_error:n
- { \msg_error:nnn { wrapstuff } { unknown-key } }
-\msg_new:nnnn { wrapstuff } { unknown-key }
- { The~key~'#1'~is~unknown~and~is~being~ignored. }
+ { \msg_error:nnn { wstf } { unknown-key } }
+\msg_new:nnnn { wstf } { unknown-key }
+ { The~key~"#1"~is~unknown~and~is~being~ignored. }
{
- The~package~wrapstuff~does~not~have~a~key~called~'#1'.\\
+ The~package~wrapstuff~does~not~have~a~key~called~"#1".\\
Check~that~you~have~spelled~the~key~name~correctly.
}
\NewDocumentCommand \wrapstuffset { m }