summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-block-tagging.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-block-tagging.sty')
-rw-r--r--Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-block-tagging.sty1426
1 files changed, 1426 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-block-tagging.sty b/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-block-tagging.sty
new file mode 100644
index 00000000000..c65c155fc5c
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-block-tagging.sty
@@ -0,0 +1,1426 @@
+%%
+%% This is file `latex-lab-testphase-block-tagging.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-block-tagging.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2021-2023 LaTeX Project
+%%
+%% This file was generated from file(s) of the `LaTeX-lab Bundle'.
+%% ------------------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/latex3/latex2e/required/latex-lab
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%% File: latex-lab-block-tagging.dtx (C) Copyright 2021-2023 LaTeX Project
+
+\def\ltblocksversion{v0.8d}
+\def\ltblocksdate{2023/06/07}
+
+\ProvidesPackage {latex-lab-testphase-block-tagging}
+ [\ltblocksdate\space \ltblocksversion\space
+ blockenv implementation]
+\RequirePackage{xtemplate}
+\RequirePackage{latex-lab-kernel-changes}
+\ExplSyntaxOn
+\tl_new:N \l__block_item_align_tl
+\tl_new:N\l__block_legacy_env_params_tl
+
+\def\@doendpe{\@endpetrue
+ \def\par
+ {
+ \@restorepar
+ \clubpenalty\@clubpenalty
+ \__kernel_displayblock_doendpe:
+ \@endpefalse
+ \everypar{}
+ \par
+ }
+ \everypar{{\setbox\z@\lastbox}
+ \everypar{}
+ \@endpefalse
+ }
+}
+\cs_new_eq:NN \__kernel_displayblock_doendpe: \prg_do_nothing:
+\def\@endpetrue {\global\let\if@endpe\iftrue}
+\def\@endpefalse{\global\let\if@endpe\iffalse}
+\DeclareObjectType{blockenv}{1}
+\DeclareObjectType{block}{1}
+\DeclareObjectType{para}{1}
+\DeclareObjectType{list}{1}
+\DeclareObjectType{item}{1}
+\DeclareTemplateInterface{blockenv}{display}{1}
+{
+ env-name : tokenlist ,
+ tag-name : tokenlist ,
+ tag-class : tokenlist ,
+ tagging-recipe : tokenlist = standard,
+ level-increase : boolean = true ,
+ setup-code : tokenlist ,
+ block-instance : tokenlist = displayblock ,
+ para-instance : tokenlist ,
+ inner-level-counter : tokenlist,
+ max-inner-levels : tokenlist = 4,
+ inner-instance-type : tokenlist = list ,
+ inner-instance : tokenlist ,
+ para-flattened : boolean = false ,
+ final-code : tokenlist = \ignorespaces ,
+}
+\DeclareTemplateInterface{block}{display}{1}
+{
+ heading : tokenlist = , %??
+ beginsep : skip = \topsep ,
+ begin-par-skip : skip = \partopsep ,
+ par-skip : skip = \parsep ,
+ end-skip : skip = \KeyValue{beginsep} , % conflict with name below
+ end-par-skip : skip = \KeyValue{begin-par-skip} ,
+ beginpenalty : integer = \UseName{@beginparpenalty} ,
+ endpenalty : integer = \UseName{@endparpenalty} ,
+ leftmargin : length = \leftmargin ,
+ rightmargin : length = \rightmargin ,
+ parindent : length = \listparindent ,
+}
+\DeclareTemplateInterface{para}{std}{1}
+{
+ indent-width : length = \parindent ,
+ start-skip : skip = 0pt ,
+ left-skip : skip = 0pt ,
+ right-skip : skip = 0pt ,
+ end-skip : skip = \@flushglue ,
+ fixed-word-spaces : boolean = false ,
+ final-hyphen-demerits : integer = 5000 ,
+ cr-cmd : tokenlist = \@normalcr ,
+ para-class : tokenlist = justify ,
+}
+\DeclareTemplateInterface{list}{std}{1} % optional
+{
+ counter : tokenlist = ,
+ item-label : tokenlist = ,
+ start : integer = 1 ,
+ resume : boolean = false ,
+ item-instance : instance{item} = basic ,
+ item-skip : skip = \itemsep ,
+ item-penalty : integer = \UseName{@itempenalty} ,
+ item-indent : length = 0pt , % was \itemindent
+ label-width : length = \labelwidth ,
+ label-sep : length = \labelsep ,
+ legacy-support : boolean = false ,
+}
+\DeclareTemplateInterface{item}{std}{1}
+ {
+ counter-label : function{1} = \arabic{#1} ,
+ counter-ref : function{1} = \KeyValue{counter-label} ,
+ label-ref : function{1} = #1 ,
+ label-autoref : function{1} = item~#1 ,
+ label-format : function{1} = #1 ,
+ label-strut : boolean = false ,
+ label-align : choice {left,center,right,parleft} = right ,
+ label-boxed : boolean = true ,
+ next-line : boolean = false ,
+ text-font : tokenlist ,
+ compatibility : boolean = true ,
+ }
+\cs_new_protected:Npn \__block_skip_set_to_last:N #1 {
+ \skip_set:Nn #1 { \tex_lastskip:D }
+}
+\cs_new_eq:NN \__block_skip_remove_last: \tex_unskip:D
+\cs_generate_variant:Nn \tl_if_novalue:nTF { o }
+\cs_if_exist:NF \tag_if_active:T
+ { \cs_new_eq:NN \tag_if_active:T \use_none:n }
+\bool_new:N \g__block_debug_bool
+\cs_new_eq:NN \__block_debug:n \use_none:n
+\cs_new_eq:NN \__block_debug_typeout:n \use_none:n
+\cs_new_protected:Npn \block_debug_on:
+ {
+ \bool_gset_true:N \g__block_debug_bool
+ \__block_debug_gset:
+ }
+\cs_new_protected:Npn \block_debug_off:
+ {
+ \bool_gset_false:N \g__block_debug_bool
+ \__block_debug_gset:
+ }
+\cs_new_protected:Npn \__block_debug_gset:
+ {
+ \cs_gset_protected:Npx \__block_debug:n ##1
+ { \bool_if:NT \g__block_debug_bool {##1} }
+ \cs_gset_protected:Npx \__block_debug_typeout:n ##1
+ { \bool_if:NT \g__block_debug_bool { \typeout{==>~ ##1} } }
+ }
+\cs_new_protected:Npn \DebugBlocksOn { \block_debug_on: }
+\cs_new_protected:Npn \DebugBlocksOff { \block_debug_off: }
+\DebugBlocksOff
+\NewDocumentEnvironment{displayblock}{ !O{} }
+ { \UseInstance{blockenv}{displayblock} {#1} }
+ { \endblockenv }
+\NewDocumentEnvironment{displayblockflattened}{ !O{} }
+ { \UseInstance{blockenv}{displayblockflattened} {#1} }
+ { \endblockenv }
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{center} { !O{} }
+ { \UseInstance{blockenv}{center}{#1} }
+ { \endblockenv }
+ \RenewDocumentEnvironment{flushright} { !O{} }
+ { \UseInstance{blockenv}{flushright}{#1} }
+ { \endblockenv }
+ \RenewDocumentEnvironment{flushleft} { !O{} }
+ { \UseInstance{blockenv}{flushleft}{#1} }
+ { \endblockenv }
+}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{quote}{ !O{} }
+ { \UseInstance{blockenv}{quote} {#1} }
+ { \endblockenv }
+ \RenewDocumentEnvironment{quotation}{ !O{} }
+ { \UseInstance{blockenv}{quotation} {#1} }
+ { \endblockenv }
+}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{verbatim}{ !O{} }
+ { \UseInstance{blockenv}{verbatim} {#1}
+ \@setupverbinvisiblespace\frenchspacing\@vobeyspaces
+ \@xverbatim
+ }
+ { \endblockenv }
+ \RenewDocumentEnvironment{verbatim*}{ !O{} }
+ { \UseInstance{blockenv}{verbatim} {#1}
+ \@setupverbvisiblespace\frenchspacing\@vobeyspaces
+ \@sxverbatim
+ }
+ { \endblockenv }
+}
+\def\legacyverbatimsetup{%
+ \language\l@nohyphenation
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null {\@@par}\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode{\@@par}\penalty\interlinepenalty\fi
+ \fi}%
+ \let\do\@makeother \dospecials
+ \obeylines \verbatim@font \@noligs
+ \everypar \expandafter{\the\everypar \unpenalty}%
+ \tl_set:Nn \l__tag_para_main_tag_tl {codeline}
+ \tagtool{paratag=Code}% oder faster: \tl_set:Nn\l__tag_para_tag_tl{Code}
+}
+\newcommand\@setupverbinvisiblespace{}
+\tag_if_active:T {
+ \bool_if:NF\g__tag_mode_lua_bool
+ {
+ \renewcommand\@setupverbinvisiblespace{\def\@xobeysp{\nobreakspace\pdffakespace}}
+ }
+}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{itemize}{!O{}}
+ { \UseInstance{blockenv}{itemize} {#1} }
+ { \endblockenv }
+ \RenewDocumentEnvironment{enumerate}{!O{}}
+ { \UseInstance{blockenv}{enumerate} {#1} }
+ { \endblockenv }
+ \RenewDocumentEnvironment{description}{!O{}}
+ { \UseInstance{blockenv}{description} {#1} }
+ { \endblockenv }
+}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{list}{O{} m m }
+ {
+ \tl_set:Nn \@itemlabel {#2}
+ \tl_set:Nn \l__block_legacy_env_params_tl {#3}
+ \UseInstance{blockenv}{list} {#1}
+ }
+ { \endblockenv }
+}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=list,role=L}}
+}
+\tl_new:N \l__block_env_params_tl
+\cs_new:Npn \legacylistsetupcode {
+ \dim_zero:N \listparindent
+ \dim_zero:N \rightmargin
+ \dim_zero:N \itemindent
+ \tl_set:Nn \@listctr {}
+ \legacy_if_set_false:n { @nmbrlist } % needed if lists are nested
+ \let\makelabel\@mklab % TODO: customize
+ \l__block_legacy_env_params_tl
+ \legacy_if:nTF { @nmbrlist }
+ { \tl_set:Nn \l__tag_L_attr_class_tl {enumerate} } % numbered list
+ { \tl_if_empty:NTF \@itemlabel
+ { \tl_set:Nn \l__tag_L_attr_class_tl {list} } % no label
+ { \tl_set:Nn \l__tag_L_attr_class_tl {itemize} } % unnumbered, unordered
+ }
+}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{trivlist}{ !O{} }
+ { \list[#1]{}
+ {
+ \dim_zero:N \leftmargin
+ \dim_zero:N \labelwidth
+ \cs_set_eq:NN \makelabel \use:n
+ }
+ }
+ { \endblockenv }
+}
+\RenewDocumentCommand \newtheorem { m O{#1} m o }
+{
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {
+ \str_if_eq:nnTF{#1}{#2}
+ {
+ \@definecounter {#2}
+ \IfNoValueTF {#4}
+ { % @ynthm
+ \tl_gset:cx { the #2 }
+ {
+ \@thmcounter{#2}
+ }
+ }
+ { % @xnthm
+ \@newctr{#1}[#4]
+ \tl_gset:cx { the #2 }
+ {
+ \expandafter\noexpand\csname the#4\endcsname
+ \@thmcountersep
+ \@thmcounter{#2}
+ }
+ }
+ }
+ { % @othm
+ \@ifundefined{c@#2}
+ { \@nocounterr{#2} }
+ {
+ \tl_gset:cn { the #1 }
+ { \UseName { the #2 } }
+ }
+ }
+ \global\@namedef{#1} { \@thm{#2}{#3} }
+ \global\@namedef{end#1}{ \@endtheorem }
+ }
+}
+\def\@begintheorem#1#2{
+ \UseInstance{blockenv}{theorem}{}
+ \tagpdfparaOff
+ \mode_leave_vertical:
+ \tag_struct_begin:n{tag=Caption}
+ \group_begin:
+ \bfseries
+ \tag_mc_begin:n {}
+ #1\
+ \tag_mc_end:
+ \tag_struct_begin:n{tag=Lbl}
+ \tag_mc_begin:n {}
+ #2
+ \tag_mc_end:
+ \tag_struct_end:
+ \group_end:
+ \tag_struct_end:
+ \tagpdfparaOn
+ \__block_start_para_structure_unconditionally:n { \PARALABEL }
+ \itshape
+ \hskip\labelsep
+ \ignorespaces
+}
+\def\@opargbegintheorem#1#2#3{
+ \UseInstance{blockenv}{theorem}{}
+ \tagpdfparaOff
+ \mode_leave_vertical:
+ \tag_struct_begin:n{tag=Caption}
+ \group_begin:
+ \bfseries
+ \tag_mc_begin:n {}
+ #1\
+ \tag_mc_end:
+ \tag_struct_begin:n{tag=Lbl}
+ \tag_mc_begin:n {}
+ #2
+ \tag_mc_end:
+ \tag_struct_end:
+ \tag_mc_begin:n {}
+ \ (#3)
+ \tag_mc_end:
+ \group_end:
+ \tag_struct_end:
+ \tagpdfparaOn
+ \__block_start_para_structure_unconditionally:n { \PARALABEL }
+ \itshape
+ \hskip\labelsep
+ \ignorespaces
+}
+\def\@endtheorem{\endblockenv}
+\cs_new:Npn \g_block_nesting_depth_int { \@listdepth } % a fake int
+ % for now
+\DeclareTemplateCode{blockenv}{display}{1}
+{
+ env-name = \l__block_env_name_tl ,
+ tag-name = \l__block_tag_name_tl ,
+ tag-class = \l__block_tag_class_tl ,
+ tagging-recipe = \l__block_tagging_recipe_tl ,
+ level-increase = \l__block_level_incr_bool ,
+ setup-code = \l__block_setup_code_tl ,
+ block-instance = \l__block_block_instance_tl ,
+ para-instance = \l__block_para_instance_tl ,
+ inner-level-counter = \l__block_inner_level_counter_tl ,
+ max-inner-levels = \l__block_max_inner_levels_tl ,
+ inner-instance-type = \l__block_inner_instance_type_tl ,
+ inner-instance = \l__block_inner_instance_tl ,
+ para-flattened = \l__tag_para_flattened_bool ,
+ final-code = \l__block_final_code_tl ,
+}
+{
+ \__block_debug_typeout:n{\l__block_env_name_tl -env-start}
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{blockenv}{display}{#1} }
+ % \begin{macrocode}
+ \int_compare:nNnTF \l__block_flattened_level_int > 0
+ {
+ \int_incr:N \l__block_flattened_level_int
+ }
+ {
+ \bool_if:NT \l__tag_para_flattened_bool
+ {
+ \int_incr:N \l__block_flattened_level_int
+ }
+ }
+ \tl_if_empty:NF \l__block_inner_level_counter_tl
+ {
+ \int_compare:nNnTF \l__block_inner_level_counter_tl >
+ { \l__block_max_inner_levels_tl - 1 }
+ { \@toodeep }
+ { \int_incr:N \l__block_inner_level_counter_tl } % not clean "o"?
+ }
+ \bool_if:NT \l__block_level_incr_bool
+ {
+ \int_compare:nNnTF \g_block_nesting_depth_int >
+ { \c@maxblocklevels - 1 }
+ { \@toodeep }
+ {
+ \int_gincr:N \g_block_nesting_depth_int
+ \use:c { @list \int_to_roman:n { \g_block_nesting_depth_int } }
+ }
+ }
+ \tag_if_active:T { \use:c { __block_recipe_ \l__block_tagging_recipe_tl : } }
+ \l__block_setup_code_tl
+ \__block_debug_typeout:n{use~ instance:~
+ \l__block_block_instance_tl - \int_use:N \g_block_nesting_depth_int }
+ \UseInstance{block}
+ { \l__block_block_instance_tl - \int_use:N
+ \g_block_nesting_depth_int }
+ {#1}
+ \tl_if_empty:NF \l__block_para_instance_tl
+ {
+ \__block_debug_typeout:n{use~ para~ instance:~ \l__block_para_instance_tl }
+ \UseInstance{para}{ \l__block_para_instance_tl } {}
+ }
+ \tl_if_empty:NF \l__block_inner_instance_tl
+ {
+ \__block_debug_typeout:n{use~ instance:~ \l__block_inner_instance_tl
+ \tl_if_empty:NF \l__block_inner_level_counter_tl
+ { - \int_use:N \l__block_inner_level_counter_tl }}
+ \UseInstance{ \l__block_inner_instance_type_tl }
+ { \l__block_inner_instance_tl
+ \tl_if_empty:NF \l__block_inner_level_counter_tl
+ { - \int_use:N \l__block_inner_level_counter_tl } % not clean
+ % use "o"?
+ }
+ {#1}
+ }
+ \l__block_final_code_tl
+}
+\int_new:N \l__block_flattened_level_int
+\newcounter{maxblocklevels}
+\setcounter{maxblocklevels}{6}
+\cs_new:Npn \endblockenv {
+ \__block_debug_typeout:n{blockenv~ common~ ending \on@line}
+ \bool_if:NT \l__block_level_incr_bool
+ { \int_gdecr:N \g_block_nesting_depth_int }
+ \legacy_if:nT { @inlabel }
+ {
+ \mode_leave_vertical:
+ \legacy_if_gset_false:n { @inlabel }
+ }
+ \legacy_if:nT { @newlist }
+ {
+ \@noitemerr
+ \legacy_if_gset_false:n { @newlist }
+ }
+ \mode_if_horizontal:TF
+ { \__block_skip_remove_last: \__block_skip_remove_last: \par }
+ { \@inmatherr{\end{\@currenvir}} }
+ \__kernel_displayblock_end:
+ \legacy_if:nF { @noparlist }
+ {
+ \__block_skip_set_to_last:N \l_tmpa_skip
+ \dim_compare:nNnT \l_tmpa_skip > \c_zero_dim
+ {
+ \skip_vertical:n { - \l_tmpa_skip }
+ \skip_vertical:n { \l_tmpa_skip + \parskip - \@outerparskip }
+ }
+ \addpenalty \@endparpenalty
+ \addvspace \l__block_topsepadd_skip
+ }
+ % \begin{macrocode}
+ \bool_if:NTF \l__block_standalone_bool
+ { \legacy_if_gset_false:n { @endpe } }
+ { \legacy_if_gset_true:n { @endpe } }
+}
+\cs_new:Npn \__kernel_displayblock_end: {
+ \__block_debug_typeout:n{\detokenize{__kernel_displayblock_end:}}
+}
+\bool_new:N \l__block_standalone_bool
+\bool_set_false:N \l__block_standalone_bool
+\DeclareTemplateCode{para}{std}{1}
+{
+ indent-width = \parindent ,
+ start-skip = \l__par_start_skip , % name??
+ left-skip = \leftskip ,
+ right-skip = \rightskip ,
+ end-skip = \parfillskip ,
+ fixed-word-spaces = \l__par_fixed_word_spaces_bool , % name??
+ final-hyphen-demerits = \finalhyphendemerits ,
+ cr-cmd = \\ ,
+ para-class = \l_tag_para_attr_class_tl ,
+}
+{
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{para}{std}{#1} }
+ \skip_set:Nn \@rightskip \rightskip
+}
+\DeclareTemplateCode{block}{display}{1}
+{
+ heading = \l__block_heading_tl ,
+ beginsep = \topsep ,
+ begin-par-skip = \partopsep ,
+ par-skip = \parsep ,
+ end-skip = \l__block_botsep_skip ,
+ end-par-skip = \l__block_parbotsep_skip ,
+ beginpenalty = \@beginparpenalty ,
+ endpenalty = \@endparpenalty ,
+ rightmargin = \rightmargin ,
+ leftmargin = \leftmargin ,
+ parindent = \listparindent ,
+}
+{
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{block}{display}{#1} }
+ \tl_if_blank:oF \l__block_heading_tl
+ { \mode_leave_vertical: \textbf{\l__block_heading_tl} } % TODO customize
+ \legacy_if:nT { @noskipsec } { \mode_leave_vertical: }
+ \skip_set:Nn \l__block_topsepadd_skip { \topsep }
+ \mode_if_vertical:TF
+ {
+ \skip_add:Nn \l__block_topsepadd_skip { \partopsep }
+ \__kernel_displayblock_beginpar_vmode:
+ }
+ {
+ \__block_skip_remove_last: \__block_skip_remove_last:
+ \__kernel_displayblock_beginpar_hmode:w \par
+ }
+ \legacy_if:nTF { @inlabel }
+ {
+ \legacy_if_set_true:n { @noparitem }
+ \legacy_if_set_true:n { @noparlist }
+ }
+ {
+ \legacy_if:nT { @newlist } { \@noitemerr }
+ \legacy_if_set_false:n { @noparlist }
+ \skip_set_eq:NN \l__block_effective_top_skip \l__block_topsepadd_skip
+ }
+ \skip_add:Nn \l__block_effective_top_skip { \parskip }
+ \skip_zero:N \leftskip
+ \skip_set_eq:NN \rightskip \@rightskip
+ \skip_set_eq:NN \parfillskip \@flushglue
+ \int_zero:N \par@deathcycles
+ \@setpar
+ {
+ \legacy_if:nTF { @newlist }
+ {
+ \int_incr:N \par@deathcycles
+ \int_compare:nNnTF \par@deathcycles > { 1000 }
+ { \@noitemerr
+ { \para_end: }
+ }
+ }
+ {
+ { \para_end: }
+ }
+ }
+ \skip_set_eq:NN \@outerparskip \parskip
+ \skip_set_eq:NN \parskip \parsep
+ \dim_set_eq:NN \parindent \listparindent
+ \dim_add:Nn \linewidth { - \rightmargin - \leftmargin }
+ \dim_add:Nn \@totalleftmargin { \leftmargin }
+ \tex_parshape:D 1 ~ \@totalleftmargin \linewidth
+ \__kernel_displayblock_begin:
+ \legacy_if:nTF { @noparitem }
+ {
+ \legacy_if_set_false:n { @noparitem }
+ \hbox_gset:Nn \g__block_labels_box
+ {
+ \skip_horizontal:n { - \leftmargin }
+ \hbox_unpack_drop:N \g__block_labels_box
+ \skip_horizontal:n { \leftmargin }
+ }
+ \legacy_if:nF { @minipage } % Why this chunk of code?
+ {
+ \__block_skip_set_to_last:N \l__block_tmpa_skip
+ \skip_vertical:n { - \l__block_tmpa_skip }
+ \skip_vertical:n { \l__block_tmpa_skip + \@outerparskip - \parskip }
+ }
+ }
+ {
+ \legacy_if:nTF { @nobreak }
+ { \addvspace{\skip_eval:n{\@outerparskip-\parskip}} }
+ {
+ \addpenalty \@beginparpenalty
+ \addvspace \l__block_effective_top_skip
+ \addvspace{-\parskip}
+ }
+ }
+}
+\keys_define:nn { template/block/display }
+{
+ ,topsep .skip_set:N = \topsep
+ ,partopsep .skip_set:N = \partopsep
+ ,listparindent .skip_set:N = \listparindent
+}
+\cs_new:Npn \__kernel_displayblock_begin: {
+ \__block_debug_typeout:n{\detokenize{__kernel_displayblock_begin:}}
+}
+\cs_new:Npn \__kernel_displayblock_beginpar_hmode:w {
+ \__block_debug_typeout:n{\detokenize{__kernel_displayblock_beginpar_hmode:w}}
+}
+\cs_new:Npn \__kernel_displayblock_beginpar_vmode: {
+ \__block_debug_typeout:n{\detokenize{__kernel_displayblock_beginpar_vmode:}}
+}
+\tl_new:N \@itemlabel % should have a top-level definition
+\tl_new:N \@listctr % should have a top-level definition
+\DeclareTemplateCode{list}{std}{1}
+{
+ counter = \l__block_counter_tl,
+ item-label = \l__block_item_label_tl,
+ start = \l__block_counter_start_int ,
+ resume = \l__block_resume_bool ,
+ item-instance = \__block_item_instance:n ,
+ item-skip = \itemsep ,
+ item-penalty = \@itempenalty ,
+ item-indent = \itemindent ,
+ label-width = \labelwidth ,
+ label-sep = \labelsep ,
+ legacy-support = \l__block_legacy_support_bool , % FMi questionable
+}
+{
+ \__block_debug_typeout:n{template:list:std}
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{list}{std}{#1} }
+ \tl_if_empty:NTF \l__block_counter_tl
+ {
+ \tl_if_blank:oF \@listctr
+ {
+ \bool_if:NF \l__block_resume_bool
+ {
+ \int_gset:cn{ c@ \@listctr }
+ { \l__block_counter_start_int - 1 }
+ }
+ }
+ { \@nmbrlistfalse }
+ }
+ {
+ \@nmbrlisttrue
+ \tl_set_eq:NN \@listctr \l__block_counter_tl
+ \bool_if:NF \l__block_resume_bool
+ {
+ \int_gset:cn{ c@ \@listctr }
+ { \l__block_counter_start_int - 1 }
+ }
+ }
+ \tl_if_empty:NF \l__block_item_label_tl
+ {
+ \tl_set_eq:NN \@itemlabel \l__block_item_label_tl
+ }
+ \legacy_if_gset_true:n { @newlist }
+ \__block_debug_typeout:n{template:list:std~end}
+}
+\keys_define:nn { template/list/std }
+{
+ ,nosep .code:n =
+ \dim_zero:N \itemsep
+ \dim_zero:N \parsep
+ \dim_zero:N \topsep
+ \dim_zero:N \l__block_botsep_skip
+ \dim_zero:N \l__block_parbotsep_skip
+ ,midsep .skip_set:N = \topsep
+}
+\keys_define:nn { template/item/std }
+ { label .tl_set:N = \l__block_label_given_tl }
+\DeclareTemplateCode{item}{std}{1}
+ {
+ counter-label = \__block_counter_label:n ,
+ counter-ref = \__block_counter_ref:n ,
+ label-ref = \__block_label_ref:n ,
+ label-autoref = \__block_label_autoref:n ,
+ label-format = \__block_label_format:n ,
+ label-strut = \l__block_label_strut_bool ,
+ label-boxed = \l__block_label_boxed_bool ,
+ next-line = \l__block_next_line_bool ,
+ text-font = \l__block_text_font_tl ,
+ compatibility = \l__block_item_compatibility_bool ,
+ label-align = {
+ left = \tl_set:Nn \l__block_item_align_tl { \relax \hss } ,
+ center = \tl_set:Nn \l__block_item_align_tl { \hss \hss } ,
+ right = \tl_set:Nn \l__block_item_align_tl { \hss \relax } ,
+ parleft = \NOT_IMPLEMENTED ,
+ } ,
+ }
+ {
+ \__block_debug_typeout:n{template:item:std}
+ \tl_set_eq:NN \l__block_label_given_tl \c_novalue_tl
+ \tl_if_empty:nF{#1}{ \SetTemplateKeys{item}{std}{#1} }
+ \tl_if_novalue:oTF \l__block_label_given_tl
+ {
+ \tl_if_blank:oF \@listctr { \@kernel@refstepcounter \@listctr }
+ \bool_if:NTF \l__block_item_compatibility_bool % not sure that conditional
+ % makes sense
+ { \__block_make_label_box:n { \MakeLinkTarget[\@listctr]{}\@itemlabel } } % TODO ?
+ { \__block_make_label_box:n { \MakeLinkTarget[\@listctr]{}\__block_counter_label:n { \@listctr } } }
+ }
+ {
+ \__block_debug_typeout:n{item~ with~ optional}
+ \__block_make_label_box:n { \l__block_label_given_tl } }
+ \bool_if:nT
+ {
+ \l__block_label_boxed_bool
+ && \dim_compare_p:n { \box_wd:N \l__block_one_label_box <= \linewidth } % TODO: is \linewidth correct?
+ }
+ {
+ \dim_compare:nNnT
+ { \box_wd:N \l__block_one_label_box } < \labelwidth
+ {
+ \hbox_set_to_wd:Nnn \l__block_one_label_box { \labelwidth }
+ {
+ \exp_after:wN \use_i:nn \l__block_item_align_tl
+ \box_use_drop:N \l__block_one_label_box
+ \exp_after:wN \use_ii:nn \l__block_item_align_tl
+ }
+ }
+ \hbox_set:Nn \l__block_one_label_box
+ { \box_use_drop:N \l__block_one_label_box }
+ }
+ \dim_compare:nNnTF { \box_wd:N \l__block_one_label_box } > \labelwidth
+ { \bool_set_true:N \l__block_long_label_bool }
+ { \bool_set_false:N \l__block_long_label_bool }
+ \hbox_gset:Nn \g__block_labels_box
+ {
+ \hbox_unpack_drop:N \g__block_labels_box
+ \skip_horizontal:n { \itemindent - \labelsep - \labelwidth }
+ \hbox_unpack_drop:N \l__block_one_label_box
+ \skip_horizontal:n { \labelsep }
+ \bool_if:NT \l__block_next_line_bool
+ { \bool_if:NT \l__block_long_label_bool { \nobreak \hfil \break } }
+ % version of \newline inside an hbox that will be unpacked
+ }
+ % \skip_set_eq:NN \parsep \l__block_item_parsep_skip TODO??? FMi
+ % what's that?
+ \dim_set_eq:NN \parindent \listparindent
+ \cs_set_eq:NN \__block_item_everypar: \__block_item_everypar_std:
+ }
+\box_new:N \l__block_one_label_box
+\box_new:N \g__block_labels_box
+\bool_new:N \l__block_long_label_bool
+\cs_new_protected:Npn \__block_make_label_box:n #1
+ {
+ \hbox_set:Nn \l__block_one_label_box
+ {
+ \__kernel_list_label_begin:
+ \__block_label_format:n
+ {
+ \bool_if:NT \l__block_label_strut_bool { \strut }
+ \bool_if:NTF \l__block_legacy_support_bool
+ \makelabel
+ \use:n
+ {#1}
+ }
+ \__kernel_list_label_end:
+ }
+ }
+\cs_new_eq:NN \__kernel_list_label_begin: \prg_do_nothing:
+\cs_new_eq:NN \__kernel_list_label_end: \prg_do_nothing:
+\cs_new_eq:NN \__block_item_everypar: \prg_do_nothing:
+\AddToHook{para/begin}[lists]{\__block_item_everypar:}
+\DeclareHookRule{para/begin}{lists}{after}{tagpdf}
+\cs_new_protected:Npn \__block_item_everypar_std: {
+ \__block_debug_typeout:n{item~ everypar \on@line }
+ \legacy_if_set_false:n { @minipage }
+ \legacy_if_gset_false:n { @newlist }
+ \legacy_if:nT { @inlabel }
+ {
+ \legacy_if_gset_false:n { @inlabel }
+ \box_if_empty:NT \g_para_indent_box { \kern - \itemindent }
+ \para_omit_indent:
+ \box_use_drop:N \g__block_labels_box
+ \__kernel_list_label_after:
+ \penalty \c_zero_int
+ }
+ \legacy_if:nTF { @nobreak }
+ {
+ \legacy_if_gset_false:n { @nobreak }
+ \int_set:Nn \clubpenalty { 10000 }
+ }
+ {
+ \int_set_eq:NN \clubpenalty \@clubpenalty
+ \cs_set_eq:NN \__block_item_everypar: \prg_do_nothing:
+ }
+}
+\cs_new_eq:NN \__kernel_list_label_after: \prg_do_nothing:
+\skip_new:N \l__block_tmpa_skip
+\skip_new:N \l__block_topsepadd_skip
+\skip_new:N \l__block_effective_top_skip
+\AddToHook{begindocument/before}{
+ \RenewDocumentCommand{\item}{ ={label}o }
+ {
+ \@inmatherr \item
+ \tl_if_empty:oTF \__block_item_instance:n %%FMi?
+ { \msg_error:nnn { __block } { item-in-nonlist } { \item[{#1}] } }
+ {
+ \legacy_if:nTF { @newlist }
+ { \__kernel_list_item_begin: }
+ { \__block_inter_item: }
+ \tl_if_novalue:nTF {#1} % avoids reparsing label={}
+ { \__block_item_instance:n { } }
+ { \__block_item_instance:n {#1} }
+ \legacy_if_gset_true:n { @inlabel }
+ \ignorespaces
+ }
+ }
+}
+\cs_new_protected:Npn \__block_inter_item: {
+ \legacy_if:nT { @inlabel }
+ { \indent \par } % case of \item\item
+ \mode_if_horizontal:T { \__block_skip_remove_last:
+ \__block_skip_remove_last: \par }
+ \__kernel_list_item_end:
+ \__kernel_list_item_begin:
+ \addpenalty \@itempenalty
+ \addvspace \itemsep
+}
+\cs_new_eq:NN \__kernel_list_item_begin: \prg_do_nothing:
+\cs_new_eq:NN \__kernel_list_item_end: \prg_do_nothing:
+\cs_new:Npn \__block_recipe_basic: {
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w
+ \__block_beginpar_hmode:N
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode:
+ \__block_beginpar_vmode:
+ \let \__kernel_displayblock_begin: \prg_do_nothing:
+ \let \__kernel_displayblock_end: \prg_do_nothing:
+}
+\cs_new:Npn \__block_recipe_standalone: {
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w
+ \prg_do_nothing:
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode:
+ \prg_do_nothing:
+ \cs_set_eq:NN \__kernel_displayblock_begin: \__block_inner_begin:
+ \cs_set_eq:NN \__kernel_displayblock_end: \__block_inner_end:
+ \bool_set_true:N \l__block_standalone_bool
+ \tl_if_empty:NTF \l__block_tag_name_tl
+ { \tl_set:Nn \l__block_tag_inner_tag_tl {Sect} }
+ { \tl_set_eq:NN \l__block_tag_inner_tag_tl \l__block_tag_name_tl }
+}
+\cs_new:Npn \__block_recipe_standard:
+{
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w
+ \__block_beginpar_hmode:N
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode:
+ \__block_beginpar_vmode:
+ \cs_set_eq:NN \__kernel_displayblock_begin: \__block_inner_begin:
+ \cs_set_eq:NN \__kernel_displayblock_end: \__block_inner_end:
+ \tl_if_empty:NTF \l__block_tag_name_tl
+ { \tl_set:Nn \l__block_tag_inner_tag_tl {Figure} }
+ { \tl_set_eq:NN \l__block_tag_inner_tag_tl \l__block_tag_name_tl }
+}
+\tl_new:N \l__block_tag_inner_tag_tl
+\cs_new:Npn \__block_recipe_list:
+{
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w
+ \__block_beginpar_hmode:N
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode:
+ \__block_beginpar_vmode:
+ \cs_set_eq:NN \__kernel_displayblock_begin: \__block_list_begin:
+ \cs_set_eq:NN \__kernel_displayblock_end: \__block_list_end:
+ \cs_set_eq:NN \__kernel_list_item_begin: \__block_list_item_begin:
+ \cs_set_eq:NN \__kernel_list_item_end: \__block_list_item_end:
+ \tl_if_empty:NTF \l__block_tag_name_tl
+ { \tl_set:Nn \l__tag_L_tag_tl {L} }
+ { \tl_set_eq:NN \l__tag_L_tag_tl \l__block_tag_name_tl }
+ \tl_if_empty:NTF \l__block_tag_class_tl
+ { \tl_set:Nn \l__tag_L_attr_class_tl {} }
+ { \tl_set_eq:NN \l__tag_L_attr_class_tl \l__block_tag_class_tl }
+}
+
+\DeclareInstance{blockenv}{displayblock}{display}
+{
+ env-name = displayblock,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ inner-instance = ,
+}
+\DeclareInstance{blockenv}{displayblockflattened}{display}
+{
+ env-name = displayblockflattened,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ inner-instance = ,
+}
+\DeclareInstance{blockenv}{center}{display}
+{
+ env-name = center,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ para-instance = center ,
+ inner-instance = ,
+}
+\DeclareInstance{blockenv}{flushleft}{display}
+{
+ env-name = flushleft,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ para-instance = raggedright ,
+ inner-instance = ,
+}
+\DeclareInstance{blockenv}{flushright}{display}
+{
+ env-name = flushleft,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ para-instance = raggedleft ,
+ inner-instance = ,
+}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=quote,role=BlockQuote}}
+ \tagpdfsetup{add-new-tag={tag=quotation,role=BlockQuote}}
+}
+\DeclareInstance{blockenv}{quotation}{display}
+{
+ env-name = quotation,
+ tag-name = quotation,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = true,
+ setup-code = ,
+ block-instance = quotationblock ,
+ inner-instance = ,
+}
+\DeclareInstance{blockenv}{quote}{display}
+{
+ env-name = quote,
+ tag-name = quote,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = true,
+ setup-code = ,
+ block-instance = quoteblock ,
+ inner-instance = ,
+}
+
+\DeclareInstance{blockenv}{theorem}{display}
+{
+ env-name = theorem-like,
+ tag-name = theorem-like,
+ tag-class = ,
+ tagging-recipe = standalone,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=theorem-like,role=Sect}}
+}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=verbatim,role=P}}
+ \tagpdfsetup{add-new-tag={tag=codeline,role=Sub}}
+}
+\DeclareInstance{blockenv}{verbatim}{display}
+{
+ env-name = verbatim,
+ tag-name = verbatim,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = verbatimblock ,
+ inner-instance = ,
+ final-code = \legacyverbatimsetup ,
+}
+\DeclareInstance{blockenv}{itemize}{display}
+{
+ env-name = itemize,
+ tag-name = itemize,
+ tag-class = itemize,
+ tagging-recipe = list,
+ inner-level-counter = \@itemdepth,
+ level-increase = true,
+ max-inner-levels = 4,
+ setup-code = ,
+ block-instance = list ,
+ inner-instance = itemize ,
+}
+\DeclareInstance{blockenv}{enumerate}{display}
+{
+ env-name = enumerate,
+ tag-name = enumerate,
+ tag-class = enumerate,
+ tagging-recipe = list,
+ level-increase = true,
+ setup-code = ,
+ block-instance = list ,
+ inner-level-counter = \@enumdepth,
+ max-inner-levels = 4,
+ inner-instance = enum ,
+}
+
+\DeclareInstance{blockenv}{description}{display}
+{
+ env-name = description,
+ tag-name = description,
+ tag-class = description,
+ tagging-recipe = list,
+ inner-level-counter = ,
+ level-increase = true,
+ setup-code = ,
+ block-instance = list ,
+ inner-instance = description ,
+}
+\DeclareInstance{blockenv}{list}{display}
+{
+ env-name = list,
+ tag-name = list,
+ tag-class = ,
+ tagging-recipe = list,
+ level-increase = true,
+ setup-code = \legacylistsetupcode ,
+ block-instance = list ,
+ inner-level-counter = ,
+ inner-instance = legacy ,
+}
+\setcounter{maxblocklevels}{6}
+\DeclareInstance{block}{displayblock-0}{display}
+ {
+ leftmargin = 0pt ,
+ parindent = 0pt ,
+ }
+\DeclareInstanceCopy{block}{displayblock-1}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-2}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-3}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-4}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-5}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-6}{displayblock-0}
+\DeclareInstance{block}{verbatimblock-0}{display}
+ {
+ leftmargin = 0pt ,
+ parindent = 0pt ,
+ par-skip = 0pt ,
+ }
+\DeclareInstanceCopy{block}{verbatimblock-1}{verbatimblock-0}
+\DeclareInstanceCopy{block}{verbatimblock-2}{verbatimblock-0}
+\DeclareInstanceCopy{block}{verbatimblock-3}{verbatimblock-0}
+\DeclareInstanceCopy{block}{verbatimblock-4}{verbatimblock-0}
+\DeclareInstanceCopy{block}{verbatimblock-5}{verbatimblock-0}
+\DeclareInstanceCopy{block}{verbatimblock-6}{verbatimblock-0}
+\DeclareInstance{block}{quoteblock-1}{display}
+ { rightmargin = \KeyValue{leftmargin} }
+\DeclareInstanceCopy{block}{quoteblock-2}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-3}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-4}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-5}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-6}{quoteblock-1}
+\DeclareInstance{block}{quotationblock-1}{display}
+ { parindent = 1.5em , rightmargin = \KeyValue{leftmargin} }
+\DeclareInstanceCopy{block}{quotationblock-2}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-3}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-4}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-5}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-6}{quotationblock-1}
+\DeclareInstance{block}{list-1}{display}{
+}
+\DeclareInstance{block}{list-2}{display}{}
+\DeclareInstance{block}{list-3}{display}{}
+\DeclareInstance{block}{list-4}{display}{}
+\DeclareInstance{block}{list-5}{display}{}
+\DeclareInstance{block}{list-6}{display}{}
+\DeclareInstance{list}{itemize-1}{std}{ item-label = \labelitemi }
+\DeclareInstance{list}{itemize-2}{std}{ item-label = \labelitemii }
+\DeclareInstance{list}{itemize-3}{std}{ item-label = \labelitemiii }
+\DeclareInstance{list}{itemize-4}{std}{ item-label = \labelitemiv }
+\DeclareInstance{list}{enum-1}{std}
+ { item-label = \labelenumi , counter = enumi }
+\DeclareInstance{list}{enum-2}{std}
+ { item-label = \labelenumii , counter = enumii }
+\DeclareInstance{list}{enum-3}{std}
+ { item-label = \labelenumiii , counter = enumiii }
+\DeclareInstance{list}{enum-4}{std}
+ { item-label = \labelenumiv , counter = enumiv }
+\DeclareInstance{list}{legacy}{std} {
+ item-instance = basic ,
+ legacy-support = true ,
+}
+\DeclareInstance{list}{description}{std} { item-instance = description }
+\DeclareInstance{item}{basic}{std}
+ {
+ label-align = right ,
+ }
+\DeclareInstance{item}{description}{std}
+ {
+ label-format = \normalfont\bfseries #1 ,
+ }
+\tag_if_active:T
+{
+ \tagpdfsetup
+ {
+ newattribute = {justify} {/O /Layout /TextAlign/Justify},
+ newattribute = {center} {/O /Layout /TextAlign/Center},
+ newattribute = {raggedright}{/O /Layout /TextAlign/Start},
+ newattribute = {raggedleft} {/O /Layout /TextAlign/End},
+ }
+}
+\DeclareInstance{para}{center}{std}
+{
+ indent-width = 0pt ,
+ start-skip = 0pt ,
+ left-skip = \@flushglue ,
+ right-skip = \@flushglue ,
+ end-skip = \z@skip ,
+ final-hyphen-demerits = 0 ,
+ cr-cmd = \@centercr ,
+ para-class = center ,
+}
+\DeclareInstance{para}{raggedright}{std}
+{
+ indent-width = 0pt ,
+ start-skip = 0pt ,
+ left-skip = \z@skip ,
+ right-skip = \@flushglue ,
+ end-skip = \z@skip ,
+ final-hyphen-demerits = 0 ,
+ cr-cmd = \@centercr ,
+ para-class = raggedright ,
+}
+\DeclareInstance{para}{raggedleft}{std}
+{
+ indent-width = 0pt ,
+ start-skip = 0pt ,
+ left-skip = \@flushglue ,
+ right-skip = \z@skip ,
+ end-skip = \z@skip ,
+ final-hyphen-demerits = 0 ,
+ cr-cmd = \@centercr ,
+ para-class = raggedleft ,
+}
+\DeclareInstance{para}{justify}{std}
+{
+ start-skip = 0pt ,
+ left-skip = \z@skip ,
+ right-skip = \z@skip ,
+ end-skip = \@flushglue ,
+ final-hyphen-demerits = 5000 ,
+ cr-cmd = \@normalcr ,
+ para-class = justify ,
+}
+\DeclareRobustCommand\centering {\UseInstance{para}{center}{}}
+\DeclareRobustCommand\raggedleft {\UseInstance{para}{raggedleft}{}}
+\DeclareRobustCommand\raggedright{\UseInstance{para}{raggedright}{}}
+\DeclareRobustCommand\justifying {\UseInstance{para}{justify}{}}
+
+\justifying
+\tag_if_active:T {
+ \cs_set:Npn \__block_beginpar_vmode: {
+ \__block_debug_typeout:n
+ { @endpe = \legacy_if:nTF { @endpe }{true}{false}
+ \on@line }
+ \legacy_if:nTF { @endpe }
+ {
+ \legacy_if_gset_false:n { @endpe }
+ }
+ {
+ \int_compare:nNnT \l__block_flattened_level_int < 2
+ {
+ \int_gincr:N \g__tag_para_main_begin_int
+ \tagstructbegin{tag=\l__tag_para_main_tag_tl}
+ }
+ }
+ }
+ \cs_set:Npn \__block_beginpar_hmode:N #1
+ {
+ \tag_mc_end:
+ \int_gincr:N \g__tag_para_end_int
+ \__block_debug_typeout:n{increment~ /P \on@line }
+ \bool_if:NT \l__tag_para_show_bool
+ { \tag_mc_begin:n{artifact}
+ \rlap{\color_select:n{red}\tiny\ \int_use:N\g__tag_para_end_int}
+ \tag_mc_end:
+ }
+ \tag_struct_end:
+ \tagpdfparaOff \par \tagpdfparaOn
+ }
+\cs_set:Npn \__kernel_displayblock_doendpe: {
+ \bool_if:NT \l__tag_para_bool
+ {
+ \legacy_if:nT { @endpe }
+ {
+ \__block_debug_typeout:n
+ { flattened= \bool_if:NTF
+ \l__tag_para_flattened_bool {true}{false}
+ \on@line }
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \__block_debug_typeout:n{Structure-end~
+ \l__tag_para_main_tag_tl\space after~ displayblock \on@line }
+ \int_gincr:N \g__tag_para_main_end_int
+ \tag_struct_end: %text-unit
+ }
+ }
+ }
+}
+\RemoveFromHook{para/begin}[tagpdf]
+\AddToHook{para/begin}[tagpdf]{
+ \bool_if:NT \l__tag_para_bool {
+ \legacy_if:nF { @inlabel }
+ {
+ \__block_start_para_structure:n { \PARALABEL }
+ }
+ }
+}
+\cs_new_protected:Npn \__block_start_para_structure:n #1 {
+ \__block_debug_typeout:n
+ { @endpe = \legacy_if:nTF { @endpe }{true}{false}
+ \on@line }
+ \legacy_if:nF { @endpe }
+ {
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \int_gincr:N \g__tag_para_main_begin_int
+ \tag_struct_begin:n{tag=\l__tag_para_main_tag_tl}
+ }
+ }
+ \int_gincr:N \g__tag_para_begin_int
+ \__block_debug_typeout:n{increment~ P \on@line }
+ \tag_struct_begin:n
+ {
+ tag=\l__tag_para_tag_tl
+ ,attribute-class=\l_tag_para_attr_class_tl
+ }
+ \__tag_check_para_begin_show:nn {green}{#1}
+ \tag_mc_begin:n {}
+}
+\cs_new_protected:Npn \__block_start_para_structure_unconditionally:n #1 {
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \int_gincr:N \g__tag_para_main_begin_int
+ \tag_struct_begin:n{tag=\l__tag_para_main_tag_tl}
+ }
+ \int_gincr:N \g__tag_para_begin_int
+ \__block_debug_typeout:n{increment~ P \on@line }
+ \tag_struct_begin:n
+ {
+ tag=\l__tag_para_tag_tl
+ ,attribute-class=\l_tag_para_attr_class_tl
+ }
+ \__tag_check_para_begin_show:nn {green}{#1}
+ \tag_mc_begin:n {}
+}
+\tag_if_active:T {
+}
+\RemoveFromHook{para/end}[tagpdf]
+\AddToHook{para/end}
+ {
+ \bool_if:NT \l__tag_para_bool
+ {
+ \int_gincr:N \g__tag_para_end_int
+ \__block_debug_typeout:n{increment~ /P \on@line }
+ \tag_mc_end:
+ \__tag_check_para_end_show:nn {red}{}
+ \tag_struct_end:
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tag_struct_end:
+ }
+ }
+ }
+\def\PARALABEL{NP-}
+\cs_set_protected:Npn \para_end: {
+ \scan_stop:
+ \mode_if_horizontal:TF {
+ \mode_if_inner:F {
+ \tex_unskip:D
+ \hook_use:n{para/end}
+ \@kernel@after@para@end
+ \mode_if_horizontal:TF {
+ \if_int_compare:w 11 = \tex_lastnodetype:D
+ \tex_hskip:D \c_zero_dim
+ \fi:
+ \tex_par:D
+ \hook_use:n{para/after}
+ \@kernel@after@para@after
+ }
+ { \msg_error:nnnn { hooks }{ para-mode }{end}{horizontal} }
+ }
+ }
+ {
+ \__kernel_endpe_vmode: % should do nothing if no tagging
+ \tex_par:D
+ }
+}
+\cs_set_eq:NN \par \para_end:
+\cs_set_eq:NN \__blockpar \para_end:
+\cs_set_eq:NN \endgraf \para_end:
+\DeclareRobustCommand*\begin[1]{%
+ \UseHook{env/#1/before}%
+ \@ifundefined{#1}%
+ {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
+ {\def\reserved@a{\def\@currenvir{#1}%
+ \edef\@currenvline{\on@line}%
+ \@execute@begin@hook{#1}%
+ \csname #1\endcsname}}%
+ \@ignorefalse
+ \begingroup
+ \__kernel_endpe_vmode:
+ \reserved@a}
+\cs_new:Npn \__kernel_endpe_vmode: {
+ \if@endpe \ifvmode
+ \bool_if:NT \l__tag_para_bool
+{
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tag_struct_end:
+ }
+ \@endpefalse
+}
+ \fi \fi
+}
+\cs_set:Npn \__kernel_list_label_after: {
+ \bool_if:NT \l__tag_para_bool
+ {
+ \__block_start_para_structure_unconditionally:n { LI- }
+ }
+}
+\cs_new:Npn \__block_inner_begin: {
+ \tagstructbegin{tag=\l__block_tag_inner_tag_tl}
+}
+\cs_new:Npn \__block_inner_end: {
+ \__block_debug_typeout:n{block-end \on@line}
+ \legacy_if:nT { @endpe }
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \__block_debug_typeout:n{close~ /text-unit \on@line}
+ \tagstructend
+ }
+ \tagstructend % end inner structure
+}
+\tl_new:N \l__tag_L_tag_tl
+\tl_set:Nn \l__tag_L_tag_tl {L}
+
+\tl_new:N\l__tag_L_attr_class_tl
+\tl_set:Nn \l__tag_L_attr_class_tl {list}
+\tag_if_active:T
+{
+ \tagpdfsetup
+ {
+ % default if unknown
+ newattribute = {list}{/O /List /ListNumbering/None},
+ newattribute = {itemize}{/O /List /ListNumbering/Unordered},
+ newattribute = {enumerate}{/O /List /ListNumbering/Ordered},
+ newattribute = {description}{/O /List /ListNumbering/Description},
+ }
+}
+\def\LItag{LI}
+\cs_set:Npn \__block_list_begin: {
+ \tagstructbegin
+ {
+ tag=\l__tag_L_tag_tl
+ ,attribute-class=\l__tag_L_attr_class_tl
+ }
+}
+\cs_set:Npn \__block_list_item_begin: { \tagstructbegin{tag=\LItag} }
+\cs_set:Npn \__kernel_list_label_begin: {
+ \tagstructbegin{tag=Lbl}
+ \tagmcbegin{tag=Lbl}
+}
+\cs_set:Npn \__kernel_list_label_end: {
+ \tagmcend % end mc-Lbl or artifact
+ \tagstructend % end Lbl
+ \tagstructbegin{tag=\LBody}
+}
+\def\LBody{LBody}
+\cs_set:Npn \__block_list_item_end: {
+ \legacy_if:nT { @endpe }
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tagstructend % text-unit
+ }
+ \tagstructend \tagstructend % end LBody, LI
+}
+\cs_set:Npn \__block_list_end: {
+ \legacy_if:nT { @endpe }
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tagstructend % text-unit
+ \__block_debug_typeout:n{Structure-end~ P~ at~ list-end \on@line }
+ }
+ \tagstructend\tagstructend % end LBody, LI
+ \tagstructend % end L
+}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+%%
+%% End of file `latex-lab-testphase-block-tagging.sty'.