%PDF- %PDF-
| Direktori : /proc/self/root/usr/share/texlive/texmf-dist/tex/latex/l3experimental/xgalley/ |
| Current File : //proc/self/root/usr/share/texlive/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty |
%%
%% This is file `l3galley.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3galley.dtx (with options: `package')
%%
%% EXPERIMENTAL CODE
%%
%% Do not distribute this file without also distributing the
%% source files specified above.
%%
%% Do not distribute a modified version of this file.
%%
%% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach
%% (C) 2010-2012 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
%% license or (at your option) any later version. The latest version
%% of this license is in the file
%%
%% http://www.latex-project.org/lppl.txt
%%
%% This file is part of the "l3experimental bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%% http://www.latex-project.org/svnroot/experimental/trunk/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%% Snapshots taken from the repository represent work in progress and may
%% not work or may contain conflicting material! We therefore ask
%% people _not_ to put them into distributions, archives, etc. without
%% prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
%%
\RequirePackage{xparse}
\GetIdInfo$Id: l3galley.dtx 4402 2013-01-08 08:59:44Z bruno $
{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
\tl_new:N \l__galley_tmp_tl
\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
\cs_new_eq:NN \l_galley_text_width_dim \linewidth
\cs_new_eq:NN \l_galley_total_left_margin_dim \@totalleftmargin
\dim_new:N \l_galley_total_right_margin_dim
\int_new:N \l_galley_interpar_penalty_int
\skip_new:N \l_galley_interpar_vspace_skip
\cs_new_eq:NN \l_galley_width_dim \tex_hsize:D
\bool_new:N \g__galley_begin_level_bool
\bool_new:N \l__galley_begin_level_bool
\seq_new:N \g__galley_cutout_left_seq
\seq_new:N \l__galley_cutout_left_seq
\seq_new:N \g__galley_cutout_right_seq
\seq_new:N \l__galley_cutout_right_seq
\bool_new:N \g_galley_omit_next_indent_bool
\bool_new:N \l__galley_omit_next_indent_bool
\bool_new:N \g_galley_no_break_next_bool
\bool_new:N \l__galley_no_break_next_bool
\tl_new:N \g_galley_par_begin_hook_tl
\tl_new:N \l__galley_par_begin_hook_tl
\tl_new:N \g_galley_par_end_hook_tl
\tl_new:N \l__galley_par_end_hook_tl
\tl_new:N \g_galley_par_reset_hook_tl
\tl_new:N \l__galley_par_reset_hook_tl
\int_new:N \g_galley_previous_par_lines_int
\int_new:N \l__galley_previous_par_lines_int
\int_new:N \g__galley_current_par_lines_int
\int_new:N \l__galley_current_par_lines_int
\tl_new:N \g_galley_restore_running_tl
\tl_new:N \l__galley_restore_running_tl
\tl_new:N \g_galley_whatsit_next_tl
\tl_new:N \l__galley_whatsit_next_tl
\tl_new:N \g_galley_whatsit_previous_tl
\tl_new:N \l__galley_whatsit_previous_tl
\tl_new:N \g__galley_interpar_penalty_user_tl
\tl_new:N \l__galley_interpar_penalty_user_tl
\tl_new:N \g__galley_interpar_vspace_user_tl
\tl_new:N \l__galley_interpar_vspace_user_tl
\cs_new_protected_nopar:Npn \__galley_initialise_variables:
{
\bool_gset_true:N \g__galley_begin_level_bool
\seq_gclear:N \g__galley_cutout_left_seq
\seq_gclear:N \g__galley_cutout_right_seq
\tl_gclear:N \g__galley_interpar_penalty_user_tl
\tl_gclear:N \g__galley_interpar_vspace_user_tl
\bool_gset_true:N \g_galley_omit_next_indent_bool
\bool_gset_false:N \g_galley_no_break_next_bool
\tl_gclear:N \g_galley_par_begin_hook_tl
\tl_gclear:N \g_galley_par_end_hook_tl
\tl_gclear:N \g_galley_par_reset_hook_tl
\int_gzero:N \g__galley_current_par_lines_int
\int_gzero:N \g_galley_previous_par_lines_int
\tl_gclear:N \g_galley_restore_running_tl
\tl_gclear:N \g_galley_whatsit_previous_tl
\tl_gclear:N \g_galley_whatsit_next_tl
}
\__galley_initialise_variables:
\cs_new_protected_nopar:Npn \__galley_initialise_settings:
{
\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
}
\cs_new_protected_nopar:Npn \__galley_save_parameters:
{
\bool_set_eq:NN \l__galley_begin_level_bool
\g__galley_begin_level_bool
\seq_set_eq:NN \l__galley_cutout_left_seq
\g__galley_cutout_left_seq
\seq_set_eq:NN \l__galley_cutout_right_seq
\g__galley_cutout_right_seq
\tl_set_eq:NN \l__galley_interpar_penalty_user_tl
\g__galley_interpar_penalty_user_tl
\tl_set_eq:NN \l__galley_interpar_vspace_user_tl
\g__galley_interpar_vspace_user_tl
\bool_set_eq:NN \l__galley_omit_next_indent_bool
\g_galley_omit_next_indent_bool
\bool_set_eq:NN \l__galley_no_break_next_bool
\g_galley_no_break_next_bool
\tl_set_eq:NN \l__galley_par_begin_hook_tl
\g_galley_par_begin_hook_tl
\tl_set_eq:NN \l__galley_par_end_hook_tl
\g_galley_par_end_hook_tl
\tl_set_eq:NN \l__galley_par_reset_hook_tl
\g_galley_par_reset_hook_tl
\int_set_eq:NN \l__galley_current_par_lines_int
\g__galley_current_par_lines_int
\int_set_eq:NN \l__galley_previous_par_lines_int
\g_galley_previous_par_lines_int
\tl_set_eq:NN \l__galley_restore_running_tl
\g_galley_restore_running_tl
\tl_set_eq:NN \l__galley_whatsit_previous_tl
\g_galley_whatsit_previous_tl
\tl_set_eq:NN \l__galley_whatsit_next_tl
\g_galley_whatsit_next_tl
}
\cs_new_protected_nopar:Npn \__galley_restore_parameters:
{
\bool_gset_eq:NN \g__galley_begin_level_bool
\l__galley_begin_level_bool
\seq_gset_eq:NN \g__galley_cutout_left_seq
\l__galley_cutout_left_seq
\seq_gset_eq:NN \g__galley_cutout_right_seq
\l__galley_cutout_right_seq
\tl_gset_eq:NN \g__galley_interpar_penalty_user_tl
\l__galley_interpar_penalty_user_tl
\tl_gset_eq:NN \g__galley_interpar_vspace_user_tl
\l__galley_interpar_vspace_user_tl
\bool_gset_eq:NN \g_galley_omit_next_indent_bool
\l__galley_omit_next_indent_bool
\bool_gset_eq:NN \g_galley_no_break_next_bool
\l__galley_no_break_next_bool
\tl_gset_eq:NN \g_galley_par_begin_hook_tl
\l__galley_par_begin_hook_tl
\tl_gset_eq:NN \g_galley_par_end_hook_tl
\l__galley_par_end_hook_tl
\tl_gset_eq:NN \g_galley_par_reset_hook_tl
\l__galley_par_reset_hook_tl
\int_gset_eq:NN \g__galley_current_par_lines_int
\l__galley_current_par_lines_int
\int_gset_eq:NN \g_galley_previous_par_lines_int
\l__galley_previous_par_lines_int
\tl_gset_eq:NN \g_galley_restore_running_tl
\l__galley_restore_running_tl
\tl_gset_eq:NN \g_galley_whatsit_previous_tl
\l__galley_whatsit_previous_tl
\tl_gset_eq:NN \g_galley_whatsit_next_tl
\l__galley_whatsit_next_tl
}
\cs_new_protected_nopar:Npn \galley_level:
{
\__galley_save_parameters:
\group_begin:
\__galley_initialise_variables:
\__galley_initialise_settings:
\group_insert_after:N \__galley_level_end:
}
\cs_new_protected_nopar:Npn \__galley_level_end:
{
\par
\__galley_restore_parameters:
\group_end:
}
\__scan_new:N \s__par_omit
\cs_new_protected_nopar:Npn \galley_par:
{
\s__par_omit
\exp_after:wN \__galley_par_auxi: \tex_romannumeral:D - `0
}
\cs_new_protected:Npn \__galley_par_auxi:
{
\peek_meaning:NTF \s__par_omit
{ \__galley_par_aux:N }
{ \__galley_par_auxii: }
}
\cs_new_protected:Npn \__galley_par_aux:N #1
{
\str_if_eq_x:nnF {#1} { \s__par_omit }
{
\__galley_par_auxii:
#1
}
}
\cs_new_protected_nopar:Npn \__galley_par_auxii:
{
\mode_if_vertical:TF
{
\group_begin:
\tex_par:D
\group_end:
}
{
\g_galley_par_end_hook_tl
\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
}
\g_galley_par_reset_hook_tl
\tl_gclear:N \g_galley_par_reset_hook_tl
\tex_penalty:D \c_ten_thousand
}
\cs_new_protected:Npn \galley_par:n #1
{
\s__par_omit
\bool_if:nF \g__galley_begin_level_bool
{
#1
\galley_par:
}
}
\cs_set_protected_nopar:Npn \par { \galley_par: }
\tl_set:Nn \@par { \galley_par: }
\cs_new_protected_nopar:Npn \galley_display_begin:
{
\group_begin:
\__galley_save_parameters:
\mode_if_vertical:TF
{
\__galley_display_penalty:N \l_galley_display_begin_par_penalty_tl
\__galley_display_vspace:N \l_galley_display_begin_par_vspace_tl
}
{
\__galley_display_penalty:N \l_galley_display_begin_penalty_tl
\__galley_display_vspace:N \l_galley_display_begin_vspace_tl
}
\par
}
\cs_new_protected:Npn \__galley_display_penalty:N #1
{
\tl_if_empty:NF #1
{
\tl_gput_right:Nx \g_galley_restore_running_tl
{
\int_gset:Nn \exp_not:N \g_galley_penalty_int
{ \int_use:N \g_galley_penalty_int }
}
\int_gset:Nn \g_galley_penalty_int {#1}
}
}
\cs_new_protected:Npn \__galley_display_vspace:N #1
{
\tl_if_empty:NF #1
{
\tl_gput_right:Nx \g_galley_restore_running_tl
{
\skip_gset:Nn \exp_not:N \g_galley_vspace_skip
{ \skip_use:N \g_galley_vspace_skip }
}
\skip_gset:Nn \g_galley_vspace_int {#1}
}
}
\cs_new_protected_nopar:Npn \galley_display_end:
{
\par
\__galley_restore_parameters:
\group_end:
\group_insert_after:N \__galley_display_par_setup:
}
\cs_new_protected_nopar:Npn \__galley_display_par_setup:
{
\bool_gset_false:N \g_galley_omit_next_indent_bool
\cs_set_eq:NN \par \__galley_display_par:
}
\cs_new_protected_nopar:Npn \__galley_display_par:
{
\cs_set_eq:NN \par \galley_par:
\mode_if_vertical:TF
{
\par
\bool_gset_false:N \g_galley_omit_next_indent_bool
\__galley_display_penalty:N \l_galley_display_end_par_penalty_tl
\__galley_display_vspace:N \l_galley_display_end_par_vspace_tl
}
{
\group_begin:
\tex_par:D
\group_end:
\int_gadd:Nn \g__galley_current_par_lines_int \tex_prevgraf:D
\__galley_display_penalty:N \l_galley_display_end_penalty_tl
\__galley_display_vspace:N \l_galley_display_end_vspace_tl
}
}
\cs_undefine:N \everypar
\newtoks \everypar
\AtBeginDocument
{
\tex_everypar:D
{
\bool_if:NTF \g__galley_begin_level_bool
{ \__galley_start_paragraph_first: }
{ \__galley_start_paragraph_std: }
\tex_the:D \everypar
}
}
\box_new:N \g__galley_last_box
\cs_new_protected_nopar:Npn \__galley_start_paragraph_std:
{
\group_begin:
\box_gset_to_last:N \g__galley_last_box
\tex_par:D
\__galley_insert_vertical_items:
\tex_everypar:D { }
\tex_noindent:D
\group_end:
\__galley_insert_horizontal_items:
\__galley_restore_running_parameters:
}
\cs_new_protected_nopar:Npn \__galley_start_paragraph_first:
{
\bool_gset_false:N \g__galley_begin_level_bool
\mode_if_horizontal:TF
{
\group_begin:
\box_gset_to_last:N \g__galley_last_box
\tex_par:D
\__galley_insert_vspace:
\tex_everypar:D { }
\tex_noindent:D
\group_end:
}
{ \__galley_insert_vspace: }
\__galley_insert_horizontal_items:
\__galley_restore_running_parameters:
}
\cs_new_protected_nopar:Npn \__galley_insert_vertical_items:
{
\g_galley_whatsit_previous_tl
\tl_gclear:N \g_galley_whatsit_previous_tl
\tl_if_empty:NTF \g__galley_interpar_penalty_user_tl
{
\bool_if:NTF \g_galley_no_break_next_bool
{ \tex_penalty:D \c_ten_thousand }
{ \tex_penalty:D \l_galley_interpar_penalty_int }
}
{
\tex_penalty:D
\__int_eval:w \g__galley_interpar_penalty_user_tl \__int_eval_end:
\tl_gclear:N \g__galley_interpar_penalty_user_tl
}
\bool_gset_false:N \g_galley_no_break_next_bool
\__galley_insert_vspace:
}
\cs_new_protected_nopar:Npn \__galley_insert_vspace:
{
\tl_if_empty:NTF \g__galley_interpar_vspace_user_tl
{ \skip_vertical:N \l_galley_interpar_vspace_skip }
{
\skip_vertical:n { \g__galley_interpar_vspace_user_tl }
\tl_gclear:N \g__galley_interpar_vspace_user_tl
}
}
\cs_new_protected_nopar:Npn \__galley_insert_horizontal_items:
{
\g_galley_whatsit_next_tl
\tl_gclear:N \g_galley_whatsit_next_tl
\bool_if:NF \g_galley_omit_next_indent_bool
{
\box_if_empty:NF \g__galley_last_box
{ \hbox_to_wd:nn \l_galley_par_indent_dim { } }
}
\skip_horizontal:N \l_galley_par_begin_skip
\g_galley_par_begin_hook_tl
\bool_gset_false:N \g_galley_omit_next_indent_bool
}
\cs_new_protected_nopar:Npn \__galley_restore_running_parameters:
{
\g_galley_restore_running_tl
\tl_gclear:N \g_galley_restore_running_tl
}
\dim_new:N \l__galley_total_left_margin_dim
\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
{
\l_galley_width_dim
- \l_galley_total_left_margin_dim
- \l_galley_total_right_margin_dim
}
\__galley_set_measure:
}
\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
{
\l_galley_width_dim
- \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
}
\cs_new_protected_nopar:Npn \galley_parshape_set_multi:nnnN
{
\bool_set_true:N \l__galley_parshape_multipar_bool
\__galley_parshape_set:nnnN
}
\cs_new_protected_nopar:Npn \galley_parshape_set_single:nnnN
{
\bool_set_false:N \l__galley_parshape_multipar_bool
\__galley_parshape_set:nnnN
}
\cs_generate_variant:Nn \galley_parshape_set_multi:nnnN { nVV }
\cs_generate_variant:Nn \galley_parshape_set_single:nnnN { nVV }
\cs_new_protected:Npn \__galley_parshape_set:nnnN #1#2#3#4
{
\seq_set_from_clist:Nn \l__galley_parshape_left_indent_seq {#2}
\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 }
}
\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 }
}
\__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}
\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_map_inline:cn { g__galley_cutout_ #1 _ seq }
{
\__galley_cutout_store:nn
{ \seq_pop:NNF \l__galley_tmpa_seq }
{##1}
}
}
\seq_gset_eq:cN { g__galley_cutout_ #1 _ seq } \l__galley_tmpb_seq
}
\cs_new_protected:Npn \__galley_cutout_store:nn #1#2
{
#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 } }
}
\cs_new_protected:Npn \__galley_cutout_set:Nn #1#2
{
\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
{
\int_step_function:nnnN
{ \l__galley_tmp_int + \c_one }
\c_one
\tex_parshape:D
\__galley_cutout_end:n
}
{
\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
}
}
}
\tex_parshape:D
\l__galley_tmp_int
\l__galley_tmp_tl
}
\cs_new_protected:Npn \__galley_cutout_left:n #1
{
\int_incr:N \l__galley_tmp_int
\tl_put_right:Nx \l__galley_tmp_tl
{
\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
}
{
\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
}
}
}
\cs_new_protected:Npn \__galley_cutout_right:n #1
{
\int_incr:N \l__galley_tmp_int
\tl_put_right:Nx \l__galley_tmp_tl
{
\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
}
}
\cs_new_protected:Npn \__galley_cutout_end: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
}
}
\cs_new_protected:Npn \galley_penalty_set_single:n #1
{ \tl_gset:Nx \g__galley_interpar_penalty_user_tl { \int_eval:n {#1} } }
\cs_new_protected:Npn \galley_vspace_set_single:n #1
{ \tl_gset:Nx \g__galley_interpar_vspace_user_tl { \skip_eval:n {#1} } }
\dim_set:Nn \parskip \c_zero_dim
\cs_undefine:N \parskip
\skip_new:N \parskip
\cs_new_eq:NN \l_galley_line_left_skip \tex_leftskip:D
\cs_new_eq:NN \l_galley_line_right_skip \tex_rightskip:D
\dim_new:N \l_galley_par_begin_skip
\cs_new_eq:NN \l_galley_par_end_skip \tex_parfillskip:D
\cs_new_eq:NN \l_galley_par_indent_dim \tex_parindent:D
\cs_new_eq:NN \l_galley_last_line_fit_int \etex_lastlinefit:D
\cs_new_protected:Npn \galley_interword_spacing_set:N #1
{
\bool_if:NTF #1
{ % TODO Hook for font changes required!
\dim_compare:nNnTF { \tex_fontdimen:D \c_three \tex_font:D }
= \c_zero_dim
{ \tex_spaceskip:D \c_zero_dim }
{ \tex_spaceskip:D \tex_fontdimen:D \c_two \tex_font:D }
}
{ \tex_spaceskip:D \c_zero_dim }
}
\int_new:N \l_galley_hyphen_left_int
\int_set:Nn \l_galley_hyphen_left_int { \tex_lefthyphenmin:D }
\cs_new_eq:NN \l_galley_binop_penalty_int \tex_binoppenalty:D
\cs_new_eq:NN \l_galley_double_hyphen_demerits_int \tex_doublehyphendemerits:D
\cs_new_eq:NN \l_galley_emergency_stretch_skip \tex_emergencystretch:D
\cs_new_eq:NN \l_galley_final_hyphen_demerits_int \tex_finalhyphendemerits:D
\cs_new_eq:NN \l_galley_linebreak_badness_int \tex_hbadness:D
\cs_new_eq:NN \l_galley_linebreak_fuzz_dim \tex_hfuzz:D
\cs_new_eq:NN \l_galley_linebreak_penalty_int \tex_linepenalty:D
\cs_new_eq:NN \l_galley_linebreak_pretolerance_int \tex_pretolerance:D
\cs_new_eq:NN \l_galley_mismatch_demerits_int \tex_adjdemerits:D
\cs_new_eq:NN \l_galley_relation_penalty_int \tex_relpenalty:D
\cs_new_eq:NN \l_galley_linebreak_tolerance_int \tex_tolerance:D
\cs_new_protected:Npn \galley_break_line:Nn #1#2
{
\mode_if_vertical:TF
{ \__msg_kernel_error:nn { galley } { no-line-to-end } }
{
\tex_unskip:D
\bool_if:NF #1
{ \tex_vadjust:D { \tex_penalty:D \c_ten_thousand } }
\dim_compare:nNnF {#2} = \c_zero_dim
{ \tex_vadjust:D { \skip_vertical:n {#2} } }
\tex_penalty:D \c_ten_thousand
\tex_hfil:D
\tex_penalty:D -\c_ten_thousand
}
}
\cs_new_eq:NN \l_galley_broken_penalty_int \tex_brokenpenalty:D
\cs_new_eq:NN \l_galley_interline_penalty_int \tex_interlinepenalty:D
\cs_new_eq:NN \l_galley_parbreak_badness_int \tex_vbadness:D
\cs_new_eq:NN \l_galley_parbreak_fuzz_dim \tex_vfuzz:D
\cs_new_eq:NN \l_galley_post_display_penalty_int \tex_postdisplaypenalty:D
\cs_new_eq:NN \l_galley_pre_display_penalty_int \tex_predisplaypenalty:D
\clist_new:N \l_galley_club_penalties_clist
\clist_new:N \l_galley_line_penalties_clist
\cs_new_protected:Npn \galley_display_widow_penalties_set:n #1
{
\etex_displaywidowpenalties:D
\__int_eval:w \clist_count:n {#1} + \c_one \__int_eval_end:
\clist_map_function:nN {#1} \__galley_set_aux:n
\c_zero
}
\cs_generate_variant:Nn \galley_display_widow_penalties_set:n { V , v }
\cs_new_protected:Npn \galley_widow_penalties_set:n #1
{
\etex_widowpenalties:D
\__int_eval:w \clist_count:n {#1} + \c_one \__int_eval_end:
\clist_map_function:nN {#1} \__galley_set_aux:n
\c_zero
}
\cs_generate_variant:Nn \galley_widow_penalties_set:n { V , v }
\cs_new:Npn \__galley_set_aux:n #1 { \int_eval:n {#1} ~ }
\cs_new_protected:Npn \galley_club_penalties_set:n #1
{
\clist_set:Nn \l_galley_club_penalties_clist {#1}
\__galley_calc_interline_penalties:
}
\cs_generate_variant:Nn \galley_club_penalties_set:n { V , v }
\cs_new_protected:Npn \galley_interline_penalties_set:n #1
{
\clist_set:Nn \l_galley_line_penalties_clist {#1}
\__galley_calc_interline_penalties:
}
\cs_generate_variant:Nn \galley_interline_penalties_set:n { V , v }
\cs_new_protected:Npn \galley_display_club_penalties_set:n #1
{
\etex_clubpenalties:D
\__int_eval:w \clist_count:n {#1} + \c_one \__int_eval_end:
\clist_map_function:nN {#1} \__galley_set_aux:n
\c_zero
\__galley_calc_interline_penalties:
}
\cs_generate_variant:Nn \galley_display_club_penalties_set:n { V , v }
\cs_new_protected:Npn \galley_interline_penalty_set:n #1
{
\int_compare:nNnTF { \etex_interlinepenalties:D \c_zero } = \c_zero
{
\etex_interlinepenalties:D \c_one \__int_eval:w #1 \__int_eval_end:
\__galley_calc_interline_penalties:
}
{
\cs_set:Npn \__galley_set_interline_penalty_auxii:n ##1
{
\__int_eval:w
\etex_interlinepenalties:D ##1
- \etex_interlinepenalties:D \etex_interlinepenalties:D \c_zero
+ #1
\__int_eval_end:
}
\exp_args:Nf \__galley_set_interline_penalty:nn
{ \clist_count:N \l_galley_line_penalties_clist } {#1}
}
}
\cs_new_protected:Npn \__galley_set_interline_penalty:nn #1#2
{
\etex_interlinepenalties:D
\etex_interlinepenalties:D \c_zero
\int_step_function:nnnN \c_one \c_one {#1}
\__galley_set_interline_penalty_auxi:n
\int_step_function:nnnN { #1 + \c_one } \c_one
{ \etex_interlinepenalties:D \c_zero - \c_one }
\__galley_set_interline_penalty_auxii:n
\__int_eval:w #2 \__int_eval_end:
}
\cs_new:Npn \__galley_set_interline_penalty_auxi:n #1
{ \etex_interlinepenalties:D \__int_eval:w #1 \__int_eval_end: }
\cs_new:Npn \__galley_set_interline_penalty_auxii:n #1 { }
\cs_new_protected_nopar:Npn \__galley_calc_interline_penalties:
{
\exp_args:Nff \__galley_calc_interline_penalties:nn
{
\int_max:nn
{
\clist_count:N \l_galley_club_penalties_clist
+ \c_one
}
{
\int_max:nn
{
\clist_count:N \l_galley_line_penalties_clist
+ \c_one
}
{ \etex_clubpenalties:D \c_zero }
}
}
{ \clist_count:N \l_galley_line_penalties_clist }
}
\cs_new_protected:Npn \__galley_calc_interline_penalties:nn #1#2
{
\etex_interlinepenalties:D #1 ~
\int_step_function:nnnN \c_one \c_one {#2}
\__galley_calc_interline_penalties_auxi:n
\int_step_function:nnnN { #2 + \c_one } \c_one { #1 - \c_one }
\__galley_calc_interline_penalties_auxii:n
\etex_interlinepenalties:D \etex_interlinepenalties:D \c_zero
}
\cs_new:Npn \__galley_calc_interline_penalties_auxi:n #1
{
\__int_eval:w
\clist_item:Nn \l_galley_line_penalties_clist {#1}
+ 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
- \etex_clubpenalties:D #1 ~
\__int_eval_end:
}
\cs_new:Npn \__galley_calc_interline_penalties_auxii:n #1
{
\__int_eval:w
\etex_interlinepenalties:D \etex_interlinepenalties:D \c_zero
+ 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
- \etex_clubpenalties:D #1 ~
\__int_eval_end:
}
\cs_new_protected:Npn \galley_save_club_penalties:N #1
{ \clist_set_eq:NN #1 \l_galley_club_penalties_clist }
\cs_new_protected:Npn \galley_save_interline_penalties:N #1
{ \clist_set_eq:NN #1 \l_galley_line_penalties_clist }
\cs_new_protected:Npn \galley_save_display_club_penalties:N #1
{
\clist_set:Nx #1
{
\int_step_function:nnnN \c_one \c_one
{ \etex_clubpenalties:D \c_zero - \c_one }
\__galley_save_display_club_penalties:n
}
}
\cs_new:Npn \__galley_save_display_club_penalties:n #1
{ \int_use:N \etex_clubpenalties:D \__int_eval:w #1 \__int_eval_end: , }
\cs_new_protected:Npn \galley_save_display_widow_penalties:N #1
{
\clist_set:Nx #1
{
\int_step_function:nnnN \c_one \c_one
{ \etex_displaywidowpenalties:D \c_zero - \c_one }
\__galley_save_display_widow_penalties:n
}
}
\cs_new:Npn \__galley_save_display_widow_penalties:n #1
{ \int_use:N \etex_displaywidowpenalties:D \__int_eval:w #1 \__int_eval_end: , }
\cs_new_protected:Npn \galley_save_widow_penalties:N #1
{
\clist_set:Nx #1
{
\int_step_function:nnnN \c_one \c_one
{ \etex_widowpenalties:D \c_zero - \c_one }
\__galley_save_widow_penalties:n
}
}
\cs_new:Npn \__galley_save_widow_penalties:n #1
{ \int_use:N \etex_widowpenalties:D \__int_eval:w #1 \__int_eval_end: , }
\cs_new_protected_nopar:Npn \galley_interline_penalty:
{ \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 { }
{
\mode_if_vertical:T
{
\int_compare:nNnT \@dbltopnum = \c_minus_one
{
\dim_compare:nNnT \tex_pagetotal:D < \topskip
{ \tex_hbox:D { } }
}
}
\newpage
\tl_gput_right:Nn \g_galley_whatsit_next_tl
{ \iow_shipout:Nx \c_minus_one { } }
\tex_vbox:D { }
\galley_penalty_set_single:n { -\@Mi }
}
\RenewDocumentCommand \nobreak { }
{ \bool_gset_true:N \g_galley_no_break_next_bool }
\RenewDocumentCommand \noindent { }
{
\tex_noindent:D
\bool_gset_false:N \g_galley_omit_next_indent_bool
}
\RenewDocumentCommand \vspace { s m }
{
\IfBooleanTF #1
{ \galley_vspace_set_single:n {#2} }
{ \galley_vspace_set_single:n {#2} }
}
\RenewDocumentCommand \\ { s O { 0 pt } }
{ \galley_break_line:Nn #1 {#2} }
\RenewDocumentCommand \newline { }
{ \galley_break_line:Nn \c_true_bool { 0 pt } }
\cs_set_eq:cN { @ @ par } \galley_par:
\cs_set_protected_nopar:Npn \@afterheading
{
\bool_gset_true:N \g_galley_no_break_next_bool
\if@afterindent
\else
\bool_gset_true:N \g_galley_omit_next_indent_bool
\fi
}
\cs_set_protected:Npn \@hangfrom #1
{
\bool_gset_true:N \g_galley_omit_next_indent_bool
\leavevmode
\setbox \@tempboxa = \hbox { {#1} }
\galley_parshape_set_single:nnnN
\c_one
{ \box_wd:N \@tempboxa }
\c_zero_dim
\c_false_bool
\bool_gset_true:N \g_galley_no_break_next_bool
\bool_gset_true:N \g_galley_omit_next_indent_bool
\box \@tempboxa
}
\cs_set_eq:Nc \@normalcr { \token_to_str:N \\ }
%%
%%
%% End of file `l3galley.sty'.