texlive[62743] branches/branch2021.final/Master/texmf-dist:

commits+karl at tug.org commits+karl at tug.org
Wed Mar 16 22:02:08 CET 2022


Revision: 62743
          http://tug.org/svn/texlive?view=revision&revision=62743
Author:   karl
Date:     2022-03-16 22:02:08 +0100 (Wed, 16 Mar 2022)
Log Message:
-----------
latex-lab-dev (16mar22) (branch)

Modified Paths:
--------------
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/README.md
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf
    branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.dtx
    branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-testphase.dtx
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx

Added Paths:
-----------
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotemark.txt
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotetext.txt
    branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-kern-kern.txt
    branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx
    branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-new-or.dtx
    branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx
    branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx
    branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx

Removed Paths:
-------------
    branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.ins

Modified: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/README.md
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/README.md	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/README.md	2022-03-16 21:02:08 UTC (rev 62743)
@@ -1,5 +1,9 @@
 # LaTeX laboratory
 
+Release 2022-06-01 pre-release 2
+
+## Overview
+
 This bundle holds optional files that are loaded in certain situations
 by kernel code (if available). For example, the new (as of 2021/12)
 `\DocumentMetadata` command in the kernel loads a file from here holding
@@ -20,7 +24,11 @@
 
 ### Support for `\DocumentMetadata`
 
+### New output routine code (under development)
 
+ - so far there is a first implementation of footnote support
+
+
 ## License
 
 The license is LPPL 1.3c.
@@ -30,5 +38,5 @@
 
 This README file is
 
-Copyright (C) 2021
+Copyright (C) 2021-2022
 The LaTeX Project

Modified: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt	2022-03-16 21:02:08 UTC (rev 62743)
@@ -1,3 +1,9 @@
+2022-03-08 Joseph Wright <Joseph.Wright at latex-project.org>
+
+	* latex-lab-prototype.dtx
+	 New file re-implementing ideas from on xtemplate.dtx using updated
+	 keyval support
+
 2021-12-30 Ulrike Fischer <Ulrike.Fischer at latex-project.org>
 
 	* documentmeta-support.dtx:

Modified: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf
===================================================================
(Binary files differ)

Added: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf
===================================================================
(Binary files differ)

Index: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf	2022-03-16 21:02:08 UTC (rev 62743)

Property changes on: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf
===================================================================
(Binary files differ)

Index: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf	2022-03-16 21:02:08 UTC (rev 62743)

Property changes on: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf
===================================================================
(Binary files differ)

Index: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf	2022-03-16 21:02:08 UTC (rev 62743)

Property changes on: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Modified: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf
===================================================================
(Binary files differ)

Added: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotemark.txt
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotemark.txt	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotemark.txt	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,186 @@
+% packages that alter \@footnotemark ...
+
+
+% bibarts
+
+\let\ba at footnmark=\@footnotemark
+\def\@footnotemark{\ifhmode{\nobreak \hskip 0.04em plus 0.01em}\else\leavevmode\fi\ba at footnmark}%
+
+
+% ./bxjscls/bxjsja-minimal.def
+
+\def\bxjs at cjk@loaded{%
+  \def\@footnotemark{%
+    \leavevmode
+    \ifhmode
+      \edef\@x at sf{\the\spacefactor}%
+      \ifdim\lastkern>\z@\ifdim\lastkern<5sp\relax
+         \unkern\unkern
+         \ifdim\lastskip>\z@ \unskip \fi
+      \fi\fi
+      \nobreak
+    \fi
+    \@makefnmark
+    \ifhmode \spacefactor\@x at sf \fi
+    \relax}%
+  \let\bxjs at cjk@loaded\relax
+}
+
+% ./arabtex/afoot.sty
+
+\let \a@@footnotemark \@footnotemark
+
+\def \a at footnotemark {% inside Arabic environment
+\iftrans \unskip \unskip \nobreak \@makefnmark \fi 
+\ifarab \a at spacefalse \putwordb at x \@makefnmark \a at spacetrue \fi }
+
+% ./hyperref/hyperref.sty
+
+  \def\@footnotemark{%
+    \leavevmode
+    \ifhmode\edef\@x at sf{\the\spacefactor}\nobreak\fi
+    \stepcounter{Hfootnote}%
+    \global\let\Hy at saved@currentHref\@currentHref
+    \hyper at makecurrent{Hfootnote}%
+    \global\let\Hy at footnote@currentHref\@currentHref
+    \global\let\@currentHref\Hy at saved@currentHref
+    \hyper at linkstart{link}{\Hy at footnote@currentHref}%
+    \@makefnmark
+    \hyper at linkend
+    \ifhmode\spacefactor\@x at sf\fi
+    \relax
+  }%
+
+
+% ./hypdvips/hypdvips.sty
+
+  \def\@footnotemark{%
+    \leavevmode
+    \ifhmode\edef\@x at sf{\the\spacefactor}\nobreak\fi
+    \stepcounter{Hfootnote}%
+    \global\let\Hy at saved@currentHref\@currentHref
+    \hyper at makecurrent{Hfootnote}%
+    \global\let\Hy at footnote@currentHref\@currentHref
+    \global\let\@currentHref\Hy at saved@currentHref
+    \ifHy at draft%
+      \@makefnmark%
+    \else%
+      \pp at hyperfootnote%
+    \fi%
+    \ifhmode\spacefactor\@x at sf\fi
+    \relax
+    }
+
+  \newcommand{\pp at hyperfootnote}{%
+    \ifx\pp at activerect\pp at true%
+      \@makefnmark%
+    \else%
+      \ifpp at smallfootnotes%
+        \let\pp at backup@@thefnmark\@thefnmark%
+        \renewcommand{\@thefnmark}{\pdf at rect{\pp at backup@@thefnmark}}%
+        \Hy at colorlink\@footnotecolor%
+        \@makefnmark%
+        \Hy at endcolorlink%
+        \pdfmark{%
+          pdfmark=/ANN,%
+          linktype=footnote,%
+          Subtype=/Link,%
+          AcroHighlight=\@pdfhighlight,%
+          Border=\@pdfborder,%
+          BorderStyle=\@pdfborderstyle,%
+          Color=\@footnotebordercolor,%
+          Dest=\Hy at footnote@currentHref,%
+          Raw=H.B%
+          }%
+      \let\@thefnmark\pp at backup@@thefnmark%
+      \else%
+        \pdfmark[\@makefnmark]{%
+          pdfmark=/ANN,%
+          linktype=footnote,%
+          Subtype=/Link,%
+          AcroHighlight=\@pdfhighlight,%
+          Border=\@pdfborder,%
+          BorderStyle=\@pdfborderstyle,%
+          Color=\@footnotebordercolor,%
+          Dest=\Hy at footnote@currentHref%
+          }%
+      \fi%
+    \fi%
+    }
+
+
+% ./memoir/memhfixc.sty
+
+\ifHy at hyperfootnotes
+ \def\@footnotemark{%
+    \leavevmode
+    \ifhmode\edef\@x at sf{\the\spacefactor}%
+      \m at mmf@check% <--- added
+    \nobreak\fi
+    \stepcounter{Hfootnote}%
+    \global\let\Hy at saved@currentHref\@currentHref
+    \hyper at makecurrent{Hfootnote}%
+    \global\let\Hy at footnote@currentHref\@currentHref
+    \global\let\@currentHref\Hy at saved@currentHref
+    \hyper at linkstart{link}{\Hy at footnote@currentHref}%
+    \@makefnmark
+    \hyper at linkend
+    \m at mmf@prepare% <--- added
+    \ifhmode\spacefactor\@x at sf\fi
+    \relax
+  }%
+\fi
+
+
+% caption3.sty
+
+% this is altering the top-level when inside a float
+
+
+% ./koma-script/scrlttr2.cls
+
+\newcommand*{\scr at footnotemark}{%
+  \leavevmode
+  \ifhmode\edef\@x at sf{\the\spacefactor}\FN at mf@check\nobreak\fi
+  \@makefnmark
+  \csname FN at mf@prepare\endcsname
+  \ifhmode\spacefactor\@x at sf\fi
+  \relax}
+
+% tested against this ...
+
+\newcommand*{\scr at saved@footnotemark}{%
+  \leavevmode
+  \ifhmode\edef\@x at sf{\the\spacefactor}\nobreak\fi
+  \@makefnmark
+  \ifhmode\spacefactor\@x at sf\fi
+  \relax}
+
+
+% ./chextras/chextras.sty
+
+\ifstd at notes\else
+ \let\std at footnotemark\@footnotemark
+ \def\alt at footnotemark{\unskip\thinspace\std at footnotemark}
+ \let\@footnotemark\alt at footnotemark
+
+% footmisx.sty
+
+  \newcommand*\@footmisxnotemark{%
+    \leavevmode
+    \ifhmode
+      \edef\@x at sf{\the\spacefactor}%
+      \FN at mf@check
+      \nobreak
+    \fi
+    \@footmicx at makefnmark
+    \ifFN at pp@towrite
+      \FN at pp@writetemp
+      \FN at pp@towritefalse
+    \fi
+    \FN at mf@prepare
+    \ifhmode\spacefactor\@x at sf\fi
+    \relax
+  }
+ 
+


Property changes on: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotemark.txt
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotetext.txt
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotetext.txt	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotetext.txt	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,842 @@
+
+% ./bibarts/bibarts.sty
+
+\let\ba at footnotetext=\@footnotetext
+\long\def\@footnotetext#1{\ba at footnotetext{%
+   \global\let\thisto at ba=-%
+   \global\let\thisti at ba=-%
+   \global\let\thisp at ba=-%
+   \global\let\thisvol at ba=-%
+   \global\let\thiss at ba=-%
+   \global\let\thisn at ba=-%
+   \global\let\pos at ba=0%
+    \kern 0.1em\nulskip at ba{\@footnotetrue\ignorespaces
+    #1\nulskip at ba\ba at textmode}\global\let\lastto at ba=\thisto at ba
+   \global\let\lastti at ba=\thisti at ba
+   \global\let\lastp at ba=\thisp at ba
+   \global\let\lastvol at ba=\thisvol at ba
+   \global\let\lasts at ba=\thiss at ba
+   \global\let\lastn at ba=\thisn at ba}}%
+
+
+% ./fnbreak/fnbreak.sty
+
+  \let\fnb at orig@footnotetext\@footnotetext
+  \long\def\@footnotetext#1{\fnb at orig@footnotetext{\fnb at fnstart#1\fnb at fnend}}%
+
+
+% ./revtex4-1/revtex4-1.cls  ./revtex/ltxutil.sty ./revtex/revtex4-2.cls ...
+
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+  \make at footnotetext
+}%
+\long\def\@mpfootnotetext{%
+ \minipagefootnote at pick
+  \make at footnotetext
+}%
+\long\def\make at footnotetext#1{%
+  \set at footnotefont
+  \set at footnotewidth
+  \@parboxrestore
+  \protected at edef\@currentlabel{%
+   \csname p@\@mpfn\endcsname\@thefnmark
+  }%
+  \color at begingroup
+   \@makefntext{%
+    \rule\z@\footnotesep\ignorespaces#1%
+    \@finalstrut\strutbox\vadjust{\vskip\z at skip}%
+   }%
+  \color at endgroup
+ \minipagefootnote at drop
+}%
+
+
+% ./nrc/nrc1.cls  ./nrc/nrc2.cls
+
+% this is missing the \par at the end and \@currentcounter
+
+\long\def\@footnotetext#1{%
+  \insert\footins{%
+    \reset at font\smallt
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected at edef\@currentlabel{%
+       \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+      }%
+    \color at endgroup
+  }%
+}%
+
+%-------------------------------------
+
+% ./bigfoot/bigfoot.sty
+
+  \def\@footnotetext{\Footnotetextdefault{}}%
+
+%-------------------------------------
+
+
+% ./uafthesis/uafthesis.cls
+
+% this is missing the \par at the end and \@currentcounter
+
+%% this little gem provides for single-spaced footnotes
+\long\def\@footnotetext#1{\insert\footins{%
+    \ssp
+    \reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+   \edef\@currentlabel{\csname p at footnote\endcsname\@thefnmark}\@makefntext
+    {\rule{\z@}{\footnotesep}\ignorespaces
+      #1\strut}}}
+
+%-------------------------------------
+
+
+
+% ./resphilosophica/resphilosophica.cls
+
+% I wonder if this \, is really intended below ...
+
+\long\def\@footnotetext#1{%
+  \insert\footins{%
+    \normalfont\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep \splitmaxdepth \dp\strutbox
+    \floatingpenalty\@MM \hsize\columnwidth
+    \@parboxrestore \parindent\normalparindent \sloppy
+    \protected at edef\@currentlabel{%
+      \csname p at footnote\endcsname\@thefnmark}%
+    \@makefntext{%
+      \,\rule\z@\footnotesep\ignorespaces#1\unskip\strut\par}}}
+
+%-------------------------------------
+
+
+
+% ./setspace/setspace.sty
+
+% this is missing the \par at the end and \@currentcounter
+
+\long\def\@footnotetext#1{%
+  \insert\footins{%
+% GT:  Next line added.  Hook desired here!
+    \def\baselinestretch {\setspace at singlespace}%
+    \reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth
+    \@parboxrestore
+    \protected at edef\@currentlabel{%
+      \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color at endgroup}}
+
+%-------------------------------------
+
+
+
+% ./linguex/linguex.sty
+
+
+\let\predefinedfootnotetext=\@footnotetext
+\long\def\@footnotetext#1{\@noftnotefalse\predefinedfootnotetext{#1}%
+         \@noftnotetrue}
+
+
+%-------------------------------------
+
+
+% ./fnpara/fnpara.sty
+
+\long\def\@footnotetext#1{\insert\footins{%
+    \reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected at edef\@currentlabel{%
+       \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+    \setbox0=\hbox{%
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+        \penalty -10
+        \hskip\footglue
+      }%
+    }%
+    \dp0=0pt \ht0=\fudgefactor\wd0 \box0
+    \color at endgroup}}
+
+%-------------------------------------
+
+
+% ./footmisc/footmisc.sty (para option)
+
+% this is missing the \par at the end and \@currentcounter
+
+  \long\def\FN at footnotetext#1{%
+    \insert\footins{%
+      \ifFN at setspace
+        \let\baselinestretch\FN at baselinestretch
+      \fi
+      \reset at font\footnotesize
+      \interlinepenalty\interfootnotelinepenalty
+      \splittopskip\footnotesep
+      \splitmaxdepth \dp\strutbox
+      \floatingpenalty\@MM
+      \hsize\columnwidth
+      \@parboxrestore
+      \protected at edef\@currentlabel{\csname p at footnote\endcsname\@thefnmark}%
+      \color at begingroup
+        \setbox\FN at tempboxa\hbox{%
+          \@makefntext{\ignorespaces#1\strut
+            \penalty-10\relax
+            \hskip\footglue
+          }% end of \@makefntext parameter
+        }% end of \hbox
+        \dp\FN at tempboxa\z@
+        \ht\FN at tempboxa\dimexpr\wd\FN at tempboxa *%
+                        \footnotebaselineskip / \columnwidth\relax
+        \box\FN at tempboxa
+      \color at endgroup
+    }%
+    \FN at mf@prepare
+  }
+
+%-------------------------------------
+
+
+% ./footmisc/footmisc.sty (normal)
+
+% this is missing the \par at the end and \@currentcounter
+
+    \long\def\FN at footnotetext#1{%
+      \insert\footins{%
+        \ifFN at setspace
+          \let\baselinestretch\FN at baselinestretch
+        \fi
+        \reset at font\footnotesize
+        \interlinepenalty\interfootnotelinepenalty
+        \splittopskip\footnotesep
+        \splitmaxdepth \dp\strutbox
+        \floatingpenalty\@MM
+        \hsize\columnwidth
+        \@parboxrestore
+        \protected at edef\@currentlabel{%
+          \csname p at footnote\endcsname\@thefnmark
+        }%
+        \color at begingroup
+          \@makefntext{%
+            \rule\z@\footnotesep
+            \ignorespaces#1\@finalstrut\strutbox
+          }%
+        \color at endgroup
+      }%
+      \FN at mf@prepare
+    }%
+
+
+
+%-------------------------------------
+
+
+% ./footmisc/footmisc.sty (side option)
+
+    \long\def\FN at footnotetext#1{%
+      \marginpar{%
+        \ifFN at setspace
+          \let\baselinestretch\FN at baselinestretch
+        \fi
+        \reset at font\footnotesize
+        \protected at edef\@currentlabel{%
+          \csname p at footnote\endcsname\@thefnmark
+        }%
+        \color at begingroup
+          \@makefntext{%
+            \ignorespaces#1%
+          }%
+        \color at endgroup
+      }%
+      \FN at mf@prepare
+    }%
+
+
+
+%-------------------------------------
+
+
+
+% ./bxjscls/bxjsarticle.cls ./bxjscls/bxjsbook.cls ...
+
+\long\def\@footnotetext{%
+  \insert\footins\bgroup
+    \normalfont\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected at edef\@currentlabel{%
+       \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces}%
+      \futurelet\jsc at next\jsc at fo@t}
+\def\jsc at fo@t{\ifcat\bgroup\noexpand\jsc at next \let\jsc at next\jsc at f@@t
+                                \else \let\jsc at next\jsc at f@t\fi \jsc at next}
+\def\jsc at f@@t{\bgroup\aftergroup\jsc@@foot\let\jsc at next}
+\def\jsc at f@t#1{#1\jsc@@foot}
+\def\jsc@@foot{\@finalstrut\strutbox\color at endgroup\egroup
+  \ifx\pltx at foot@penalty\@undefined\else
+    \ifhmode\null\fi
+    \ifnum\pltx at foot@penalty=\z@\else
+      \penalty\pltx at foot@penalty
+      \pltx at foot@penalty\z@
+    \fi
+  \fi}
+
+
+not covered so far supports \footnote{ catcode changes ...} but also
+\foonote A  --- the latter is questionable I would say
+
+
+%-------------------------------------
+
+
+% ./fn2end/fn2end.sty
+
+obsolete I guess, ignored in evaluation
+
+
+%-------------------------------------
+
+
+% ./hyperref/hyperref.sty
+
+  \long\def\@footnotetext#1{%
+    \H@@footnotetext{%
+      \ifHy at nesting
+        \expandafter\ltx at firstoftwo
+      \else
+        \expandafter\ltx at secondoftwo
+      \fi
+      {%
+        \expandafter\hyper@@anchor\expandafter{%
+          \Hy at footnote@currentHref
+        }{\ignorespaces #1}%
+      }{%
+        \Hy at raisedlink{%
+          \expandafter\hyper@@anchor\expandafter{%
+            \Hy at footnote@currentHref
+          }{\relax}%
+        }%
+        \let\@currentHref\Hy at footnote@currentHref
+        \let\@currentlabelname\@empty
+        \ignorespaces #1%
+      }%
+    }%
+  }%
+
+
+Handling of anchors (in nested context) I guess. This needs to be
+married with the anchor setting that the tagging currently does and
+the latter improved/adjusted
+
+
+%-------------------------------------
+
+% ./biblatex-gb7714-2015/gb7714-2015ms.bbx ./biblatex-gb7714-2015/gb7714-2015mx.bbx ...
+
+    \long\def\@footnotetext##1{\insert\footins{%
+    \reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected at edef\@currentlabel{%
+       \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+    \leftskip \footbibmargin%增加的左侧缩进
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces##1\@finalstrut\strutbox%
+        }%
+    \color at endgroup}}%
+
+fits the structure
+%-------------------------------------
+
+
+% ./amscls/amsbook.cls ./amscls/amsproc.cls ./amscls/amsart.cls ...
+
+\long\def\@footnotetext#1{%
+  \insert\footins{%
+    \normalfont\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep \splitmaxdepth \dp\strutbox
+    \floatingpenalty\@MM \hsize\columnwidth
+    \@parboxrestore \parindent\normalparindent \sloppy
+    \protected at edef\@currentlabel{%
+      \csname p at footnote\endcsname\@thefnmark}%
+    \@makefntext{%
+      \rule\z@\footnotesep\ignorespaces#1\unskip\strut\par}}}
+
+fits the structure
+%-------------------------------------
+
+
+% ./umich-thesis/umich-thesis.cls
+
+% change LaTeX's footnotes to get vertical spacing correct
+\skip\footins \baselinestretch2\skip\footins
+\long\def\@footnotetext#1{%
+  \insert\footins{%
+    \def\baselinestretch {\setspace at singlespace}%
+    \reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth
+    \@parboxrestore
+    \vskip 1.2\baselineskip
+    \protected at edef\@currentlabel{%
+      \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color at endgroup}}
+
+fits the structure
+%-------------------------------------
+
+
+% ./nostarch/nostarch.cls
+
+\long\def\@footnotetext#1{\insert\footins{%
+    \reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected at edef\@currentlabel{%
+       \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@{13.5pt}\ignorespaces#1}%
+    \color at endgroup}}%
+
+fixed \footsep, probably very old
+fits the structure
+%-------------------------------------
+
+
+
+% ./coursepaper/coursepaper.cls
+
+\long\def\@footnotetext#1{%
+  \insert\footins{%
+    \def\baselinestretch {1}%
+    \reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth
+    \@parboxrestore
+    \protected at edef\@currentlabel{%
+      \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color at endgroup}}
+
+fits the structure
+%-------------------------------------
+
+
+
+% ./ucthesis/ucthesis.cls
+
+% Single-space footnotes.
+\long\def\@footnotetext#1{\insert\footins{\ssp\reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+   \edef\@currentlabel{\csname p at footnote\endcsname\@thefnmark}\@makefntext
+    {\rule{\z@}{\footnotesep}\ignorespaces
+      #1\strut}}}
+
+fits the structure
+%-------------------------------------
+
+
+
+% ./jura/jura.cls
+
+\long\def\@footnotetext#1{\insert\footins{%
+    \linespread{\J at FootnoteSpread}\reset at font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected at edef\@currentlabel{%
+       \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color at endgroup}}%
+
+fits the structure
+%-------------------------------------
+
+
+% ./asaetr/asaesub.sty
+
+2.09
+
+%-------------------------------------
+
+
+% ./lineno/fnlineno.sty
+
+%% |\FNLN@@text| stores the `\@footnotetext' found, 
+%% we might check if it is `\FNLN at ltx@fntext' ... %% TODO
+\let\FNLN@@text\@footnotetext
+\def\@footnotetext{%
+    \ifLineNumbers  \expandafter \FNLN at text
+    \else           \expandafter \FNLN@@text
+    \fi}
+
+
+\def \FNLN at text {%                      %% 2010/12/31 arg read later
+    \vadjust{\penalty-\FNLN at M@swap at codepen}%
+%% Standard \LaTeX's `\@footnotetext' expands `\@thefnmark' 
+%% to produce the footnote mark at the page bottom, 
+%% right after it has been determined for the mark 
+%% in the main text. \emph{Here} the footnote text 
+%% will be typeset only when \emph{other} footnote marks
+%% may have been formed for typesetting the main text 
+%% paragraph before. 
+%% %%% (TODO clearer wording)
+%% In the \strong{footnote list} 
+%% macro |\FNLN at list|, the (\dqtd{`&\protect'ed})
+%% \emph{current} expansion <mark> of `\@thefnmark' 
+%% is stored as an item preceding the footnote text 
+%% <text>. One footnote entry in `\FNLN at list' 
+%% thus has the form \lq`<mark>\@lt<text>\@lt'\rq.
+%% \LaTeX's internal `\g at addto@macro' is used to \emph{append} 
+%% an entry to the list (at the right). The OTR will later 
+%% take the entries from the left of the list. 
+%% 
+%% The argument of the auxiliary/temporary `\@tempa' 
+%% will contain the footnote text and thus must be able to 
+%% carry `\par' tokens. We therefore need a `\long' version of 
+%% `\protected at edef':
+   \let\@@protect\protect
+   \let\protect\@unexpandable at protect
+   \afterassignment\restore at protect
+   \long \edef \@tempa ##1{%
+        \noexpand\g at addto@macro \noexpand\FNLN at list {%
+            \@thefnmark \noexpand\@lt ##1\noexpand \@lt}}%
+%% ... issuing 
+%%     \lq`\g at addto@macro\FNLN at list{<mark>\elt<text>\@lt}'\rq\ ...
+   \@tempa                              %% reads arg
+}
+%% Here we initialize |\FNLN at list|:
+\let\FNLN at list\@empty
+
+
+
+probably continues working but needs separate checking
+
+%-------------------------------------
+
+
+
+% ./jurabib/jurabib.sty
+
+      \long\def\@footnotetext#1{%
+           \Orig at tabularx@footnotetext{%
+              \jb at fntrue
+              #1%
+              \setcounter{jb at cites@in at footnote}{0}%
+           }%
+      }%
+
+      \let\jbsaved at footnotetext\@footnotetext
+      \long\def\@footnotetext#1{%
+         \begingroup
+          \jb at fntrue
+          \jbsaved at footnotetext{#1}%
+          \setcounter{jb at cites@in at footnote}{0}%
+         \endgroup
+      }%
+
+
+first is table notes, second
+fits the structure
+%-------------------------------------
+
+
+
+% ./york-thesis/york-thesis.cls
+
+\long\def\@footnotetext#1{%
+ \insert\footins{%
+  \def\baselinestretch {1}%
+  \reset at font\footnotesize
+  \interlinepenalty\interfootnotelinepenalty
+  \splittopskip\footnotesep
+  \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+  \hsize\columnwidth
+  \@parboxrestore
+  \protected at edef\@currentlabel{%
+    \csname p at footnote\endcsname\@thefnmark}%
+  \color at begingroup
+    \@makefntext{%
+      \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+  \color at endgroup}}
+
+fits the structure
+%-------------------------------------
+
+
+% ./ucdavisthesis/ucdavisthesis.cls
+
+\long\def\@footnotetext#1{\insert\footins{\renewcommand\baselinestretch{1}
+    \footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+   \edef\@currentlabel{\csname p at footnote\endcsname\@thefnmark}\@makefntext
+    {\rule{\z@}{\footnotesep}\ignorespaces
+      #1\strut}\renewcommand\baselinestretch{\@spacing}}}
+
+looks old ...
+fits the structure
+%-------------------------------------
+
+
+% ./ledmac/afoot.sty
+
+fairly old and buggy in some aspects
+
+%%% Make the LaTeX \cs{footnote} catcode-safe, like in Plain TeX.
+
+\def \@footnotetext {%        new, do not yet read footnote text
+  \insert \footins \bgroup
+  \ifx \footglue \undefined %  prepare normal footnote
+    \interlinepenalty \interfootnotelinepenalty \floatingpenalty \@MM
+    \splittopskip \footnotesep \splitmaxdepth \dp \strutbox
+  \else
+    \global\long\def \@makefntext ##1{{$^{\@thefnmark }$}##1\nobreak }%
+    \setbox0=\hbox \bgroup % fnpara.sty is present
+    \floatingpenalty=20000 \footnotesize
+  \fi
+  \edef\@currentlabel{\csname p at footnote\endcsname\@thefnmark}%
+  \a at fntext }
+
+
+%-------------------------------------
+
+
+% ./toptesi/toptesi.sty
+
+
+\long\def\@footnotetext#1{\insert\footins{\linespread{1}\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+   \edef\@currentlabel{\csname p at footnote\endcsname\@thefnmark}%
+   \@makefntext{\rule{\z@}{\footnotesep}\ignorespaces#1\strut}}}
+
+
+fits the structure
+%-------------------------------------
+
+
+% ./gb4e/gb4e.sty
+
+\let\@gbsaved at footnotetext=\@footnotetext
+\long\def\@footnotetext#1{%
+    \@noftnotefalse\setcounter{fnx}{0}%
+    \@gbsaved at footnotetext{#1}%
+    \@noftnotetrue}
+
+fits the structure
+%-------------------------------------
+
+
+
+% ./koma-script/scrlttr2.cls ./koma-script/scrextend.sty ./koma-script/scrreprt.cls ...
+
+same bug as footmisc: the @prepare is in the wrong place
+
+fits the structure
+%-------------------------------------
+
+
+
+% ./tabu/tabu.sty
+
+not checked what that does
+
+
+%-------------------------------------
+
+
+% ./uwthesis/uwthesis.cls
+
+does chapter notes -- ignore for now
+
+%-------------------------------------
+
+
+% ./tools/multicol.sty
+
+\long\def\mult at footnotetext#1{\begingroup
+         \columnwidth\textwidth
+         \orig at footnotetext{#1}\endgroup}
+
+
+fits the structure, but need to think what makes sense here as this a
+temporary redefinition for the environment only
+
+%-------------------------------------
+
+
+% ./fancyvrb/fancyvrb.sty
+
+\long\def\V at footnotetext{%
+  \afterassignment\V@@footnotetext
+  \let\@tempa}
+\def\V@@footnotetext{%
+  \insert\footins\bgroup
+  \csname reset at font\endcsname
+  \footnotesize
+  \interlinepenalty\interfootnotelinepenalty
+  \splittopskip\footnotesep
+  \splitmaxdepth\dp\strutbox
+  \floatingpenalty \@MM
+  \hsize\columnwidth
+  \@parboxrestore
+  \def\@currentcounter{footnote}%
+  \edef\@currentlabel{\csname p at footnote\endcsname\@thefnmark}%
+  \@makefntext{}%
+  \rule{\z@}{\footnotesep}%
+  \bgroup
+  \aftergroup\V@@@footnotetext
+  \ignorespaces}
+\def\V@@@footnotetext{\strut\egroup}
+
+
+another one of the footnote commands that do not read they argument as an argument
+
+%-------------------------------------
+
+
+% ./savefnmark/savefnmark.sty
+
+obsolete
+
+%-------------------------------------
+
+
+% ./changebar/changebar.sty
+
+\let\ltx at footnotetext\@footnotetext
+\long\def\cb at footnotetext#1{%
+  \cb at trace@stack{end footnote on page \the\c at page}%
+  \cb at pop\cb at currentstack
+  \ifnum\cb at topleft=\cb at nil
+    \ltx at footnotetext{#1}%
+  \else
+    \cb at push\cb at currentstack
+    \edef\cb at temp{\the\cb at curbarwd}%
+    \ltx at footnotetext{\cb at start[\cb at temp]#1\cb at end}%
+  \fi}
+\let\@footnotetext\cb at footnotetext
+
+
+% ./eledmac/eledmac.sty
+
+\apptocmd{\@footnotetext}{\m at mmf@prepare}{}{}
+\pretocmd{\@footnotetext}{%
+  \ifnumberedpar@
+    \edtext{}{\l at dbfnote{#1}}%
+  \else
+  }{}{}
+\apptocmd{\@footnotetext}{\fi}{}{}%
+
+
+% ./yafoot/dblfnote.sty
+
+\long\def\dfn at footnotetext#1{{\setbox\dfn at boxa\vbox{
+        \let\insert\dfn at gobble
+        \columnwidth\DFNcolumnwidth \hbadness\c at DFNsloppiness
+        \def\@makefnmark{\smash{\dfn at makefnmark}}
+        \dfn at latex@footnotetext{#1}\par \boxmaxdepth\dfn at fnmaxdp}%
+        \dfn at dima\ht\dfn at boxa \advance\dfn at dima\dp\dfn at boxa
+        \ifdim\dfn at dima>\z@\else
+                \dfn at dima1sp\relax
+                \setbox\dfn at boxa\vbox{\vbox to1sp{\unvbox\dfn at boxa\vfil}}\fi
+        \global\setbox\dfn at ins\vbox{\boxmaxdepth\dfn at fnmaxdp
+                \ifvoid\dfn at ins\else
+                        \unvbox\dfn at ins \allowbreak \nointerlineskip \fi
+                \ifdfn at allowcbreak \unvbox \else \box \fi \dfn at boxa}%
+        \setbox\dfn at boxa\copy\dfn at ins
+        \dfn at split{.5\ht\dfn at boxa}\dfn at boxa\dfn at boxb\dfn at fnmaxdp\footnotesep
+        \advance\@tempdima\@tempdimb \@tempdimb\@tempdima
+        \advance\@tempdima-\dfn at fnht \global\dfn at fnht\@tempdimb
+        \insert\footins{\floatingpenalty\@MM \vbox to\@tempdima{}}%
+        \xdef\dfn at list{\dfn at list\@elt{\number\dfn at dima}{\number\@tempdima}}}}
+\let\dfn at latex@footnotetext\@footnotetext
+\let\@footnotetext\dfn at footnotetext
+
+
+% ./ftnxtra/ftnxtra.sty
+
+not checked what this does
+
+
+% ./acmart/acmart.cls
+
+\if at ACM@sigchiamode
+\long\def\@footnotetext#1{\marginpar{%
+    \reset at font\small
+    \interlinepenalty\interfootnotelinepenalty
+    \protected at edef\@currentlabel{%
+       \csname p at footnote\endcsname\@thefnmark
+    }%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color at endgroup}}%
+\fi
+
+
+% ./memoir/memoir.cls
+
+ this needs some further analysis
+


Property changes on: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-footnotetext.txt
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-kern-kern.txt
===================================================================
--- branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-kern-kern.txt	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-kern-kern.txt	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,80 @@
+
+      \ifdim\lastkern>\z@\ifdim\lastkern<5sp\relax
+./bxjscls/bxjsja-minimal.def
+
+
+
+    \ifdim\lastkern=-3sp \unkern
+      \ifdim\lastkern=3sp \kern-3sp
+    {\kern\MT at outer@kern\kern3sp\kern-3sp\relax}%
+./microtype/letterspace.sty
+
+
+    \ifdim\lastkern=-3sp \unkern
+      \ifdim\lastkern=3sp \kern-3sp
+    {\kern\MT at outer@kern\kern3sp\kern-3sp\relax}%
+./microtype/microtype-pdftex.def
+
+ 
+    \ifdim\lastkern=-3sp \unkern
+      \ifdim\lastkern=3sp \kern-3sp
+    {\kern\MT at outer@kern\kern3sp\kern-3sp\relax}%
+./microtype/microtype-luatex.def
+
+
+
+\providecommand*{\multiplefootnotemarker}{3sp}
+./eledmac/eledmac.sty
+
+
+
+\providecommand*{\multiplefootnotemarker}{3sp}
+./reledmac/reledmac.sty
+
+
+\edef\CJK at kern{\kern -2sp\kern 2sp}
+\edef\CJK at CJK{\kern -1sp\kern 1sp}
+./cjk/texinput/CJK.sty
+
+
+\edef\ruby at kern{\kern -5sp\kern 5sp}
+./cjk/texinput/ruby.sty
+
+
+%     hyphenation between pinyin syllables. Values 1sp-3sp are already used
+\edef\py at sp{\kern -4sp\kern 4sp}
+./cjk/texinput/pinyin.sty
+
+
+\providecommand*{\multiplefootnotemarker}{3sp}
+./tufte-latex/tufte-common.def
+
+
+
+\newcommand*{\multiplefootnotemarker}{3sp}
+./memoir/memoir.cls
+
+
+\providecommand*{\multiplefootnotemarker}{3sp}
+./parnotes/parnotes.sty
+
+
+\providecommand*{\multiplefootnotemarker}{3sp}
+./lwarp/lwarp-footmisc.sty
+
+
+  \bgroup \kern-3sp\kern3sp % kerns so I can test for beginning of list
+./examdesign/examdesign.cls
+
+
+    \kern-1sp \kern1sp }
+    \kern-2sp \kern2sp }
+    \kern-3sp \kern3sp }
+    \kern-4sp \kern4sp }
+./polyglossia/gloss-korean.ldf
+
+
+
+\NewDocumentCommand \@sidenotes at multisign { } {3sp}
+./sidenotes/sidenotes.sty
+


Property changes on: branches/branch2021.final/Master/texmf-dist/doc/latex-dev/latex-lab/usage-of-kern-kern.txt
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.dtx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.dtx	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.dtx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -126,7 +126,7 @@
 %    removed or when the code is moved into the kernel.
 %     \begin{description}
 %    \item[\texttt{phase-I}]
-%       This value loads code implementing the first phase of the project~\cite{blueprint}, i.e., it 
+%       This value loads code implementing the first phase of the project~\cite{blueprint}, i.e., it
 %       will load the tagpdf package. It will also activate tagging by issuing
 %       |\tagpdfsetup{activate,interwordspace}|. This phase
 %       is frozen.
@@ -336,9 +336,11 @@
       {
         \tl_gput_right:Nn\g_@@_testphase_tl
            {
+             \AddToDocumentProperties [document]{testphase/#1}{loaded}
              \file_if_exist_input:nF {#1-latex-lab-testphase.ltx}
               {
                  \msg_warning:nnn{meta}{latex-lab-pkg-missing}{#1}
+                 \AddToDocumentProperties [document]{testphase/#1}{missing}
               }
            }
       }

Deleted: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.ins
===================================================================
--- branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.ins	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/documentmetadata-support.ins	2022-03-16 21:02:08 UTC (rev 62743)
@@ -1,71 +0,0 @@
-%%
-%% This file will generate fast loadable files and documentation
-%% driver files from the dtx file(s) in this package when run through
-%% LaTeX or TeX.
-%%
-%% Copyright (C) 2021-2022 The LaTeX Project
-%%
-%%
-%% This file is part of the `LaTeX-lab Bundle' for LaTeX.
-%% -------------------------------------------------------------------
-%%
-%% 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.
-%%
-%% In particular, NO PERMISSION is granted to modify the contents of this
-%% file since it contains the legal notices that are placed in the files
-%% it generates.
-%%
-%%
-%%
-%% --------------- start of docstrip commands ------------------
-%%
-\input docstrip
-
-\keepsilent
-
-\usedir{tex/latex/contrib/latex-lab}
-
-\preamble
-
-This is a generated file.
-
-Copyright 2021 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.
-
-
-\endpreamble
-
-
-\generate{\file{documentmetadata-support.ltx}{\from{documentmetadata-support.dtx}{code}}}
-
-\generate{\file{tagpdf-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{tagpdf}}}
-\generate{\file{phase-I-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-I}}}
-\generate{\file{phase-II-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-II}}}
-
-\endbatchfile

Added: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,1822 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-footnotes.dtx
+% Copyright (C) 2022 The LaTeX 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
+%
+%    https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+%    https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+  \DocInput{latex-lab-footnotes.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \texttt{latex-lab-footnotes} code\thanks{}}
+% \author{Frank Mittelbach, \LaTeX{} Project}
+%
+% \maketitle
+%
+% \newcommand\fmi[1]{\begin{quote} TODO: \itshape #1\end{quote}}
+% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
+% \providecommand\class[1]{\texttt{#1.cls}}
+% \providecommand\pkg[1]{\texttt{#1}}
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+%   \emph{to be written}
+% \end{abstract}
+%
+% \tableofcontents
+%
+%
+% \section{Introduction}
+%
+%    This code reimplements the footnote interfaces for \LaTeX{}
+%    offering configurable methods for layout and functionality
+%    adjustments that avoid overwriting each other when used in
+%    classes as well as in packages (as far as possible --- obviously
+%    some adjustments are mutally exclusive). This is achieved by
+%    providing a a larger number of hooks (for areas where different
+%    packages/classes can easily coexist with their adjustments) and a
+%    number of configuration points to which only one class or package
+%    can write to successfully (in case of multiple changes the the
+%    last one wins). The latter are for special functionality, e.g.,
+%    if footnote text is typeset as a single paragraph, it can't be configured
+%    the same time to be typeset vertically with one footnote below
+%    each other.
+%
+%    The interfaces are  set up to support tagged PDF, but in order
+%    for this to work, all packages altering the fontnote setup should
+%    use the inferfaces provided here and not do it through the
+%    legacy methods (though there is some support for the latter as
+%    well, but if will not work in a cases).
+%
+% \subsection{Configuration methods}
+%
+%    Historically, the footnote setup in \LaTeX{} was done by
+%    providing definitions for \cs{@makefnmark} (format the footnote
+%    mark in running text and in front of the footnote text) and
+%    \cs{@makefntext} (formatting the footnote text and placing a mark
+%    in front of it).
+%
+%    There was a default definition for \cs{@makefnmark} in the format
+%    that was used by most document classes,
+%    but \cs{@makefntext} had to be defined in the class itself because
+%    the format didn't provide a default. As a result you will find
+%    definitions for the latter in all document classes and defintions
+%    for \cs{@makefnmark} only in very few.
+%
+%    Furthermore, to enable special footnote layouts or provide
+%    additional functionality a few packages (and a few classes)
+%    overwrote other internal commands of \LaTeX's footnote
+%    mechanism. The commands affected in this way are mainly
+%    \cs{@footnotemark} and \cs{@footnotetext}. These overwrites could
+%    not be used in combination, so either the packages/classes had to
+%    be aware of being loaded together (which they sometimes did or
+%    tried to) or they would fail by overwriting each other
+%    unconditionally.
+%
+%    The present rewrite is an attempt to improve this situation, but
+%    of course, it will only work if all packages/classes make use of
+%    the new interfaces. Fortunately, the number of problematical
+%    packages altering these internal commands are fairly small so
+%    arranging for updates is a realistic goal --- to achieve properly
+%    tagged PDF it is a requirement.
+%
+%
+%
+% \section{Hooks and configuration points}
+%
+%    Note: the configuration points do not have an interface mechanism
+%    yet and all their names are temporary right now.
+%    Also note that configuration points are of interest only to very
+%    few specialized packages, mainly \pkg{footmisc}, and packages
+%    providing similar functionality---the current documentation is
+%    therefore fairly sketchy.
+%
+%    In contrast the hooks are of interest to many classes to provide
+%    their layout alterations in a way that it works smoothly with
+%    other packages handling aspects of foonote formatting.
+%
+%
+% \subsection{Formatting the mark in the main text}
+%
+%    This implements formatting the mark\footnote{Like this one.} and
+%    its relation to surrounding text, e.g., if several marks appear
+%    in the same place, etc.
+%
+%
+% \subsubsection{Configuration points}
+%
+%    None: everything is implemented through a single definition for
+%    \cs{@footnotemark} that offers a number of hooks that can be used
+%    by packages to implement handling of multiple marks and the
+%    formatting of marks.
+%
+%
+% \subsubsection{Hooks}
+%
+%    The hooks to customize the marks in the text are the following:
+%    \begin{description}
+%    \item[\hook{fnmark/before}]
+%
+%      Executed at the very beginning of \cs{footnotemark}. Currently
+%      there are two packages (\pkg{bibarts} and \pkg{chextras}) that
+%      prepend material at this point (not ncessarily correctly, e.g.,
+%      they do not all check that they are in horizontal mode).
+%
+%      This hook is paired with hook \hook{fnmark/after}.
+%
+%    \item[\hook{fnmark}]
+%
+%      Executed in horizontal mode and after the current space factor
+%      has been saved away for reuse. This is where currently code for multiple
+%      marks does its preparation (as done by \pkg{footmisc} and
+%      others).
+%
+%      The hook is only executed in hmode, i.e., not if the mark is
+%      generated in math --- maybe that means the multiple handling
+%      should happen later?
+%
+%      After the hook \cs{nobreak} is executed, so any
+%      ``material'' added in the hook is tied to the following mark
+%      unless it contains its own permissible penalty.
+%
+%    \item[\hook{fnmark/begin}]
+%
+%      This hook is executed directly in front of the typeset mark.
+%      This is the place where \pkg{hyperref} adds part of its code,
+%      i.e., after the \cs{nobreak} mentioned above. With a closer
+%      integration of \pkg{hyperref} this hook may not be necessary at
+%      all.
+%
+%    \item[\hook{fnmark/end}]
+%
+%      This hook is executed directly after the typeset mark. It is
+%      used by \pkg{hyperref}, \pkg{memhfixc}, \pkg{scrlttr2}, and
+%      \pkg{footmisc}. Used, for example, to implement support for
+%      multiple marks in succession.
+%
+%      It is \emph{not} a reversed hook.
+%
+%
+%    \item[\hook{fnmark/after}]
+%
+%      This hook is executed at the very end of the \cs{footnotemark} command.
+%
+%      It is a reversed  hook to pair with \hook{fnmark/before}
+%    \end{description}
+%
+%
+%
+%
+% \subsubsection{Additional configuration possibilities}
+%
+%    The actual formatting is done through \cs{@makefnmark} --- no
+%    special customization support for now.
+%
+%
+%
+% \subsection{Formatting the footnote text}
+%
+%    This implements the formatting of the footnote text the way it
+%    appears at the bottom of the page (default case), or possibly
+%    elsewhere, e.g. in the margin.
+%
+% \subsubsection{Configuration points}
+%
+%    To cater for different layout configurations there are four
+%    configuration points which can be set only by one package or
+%    class, if two packages/classes set them they are mutually
+%    incompatible.
+%    These are:
+%    \begin{description}
+%    \item[\cs{@footnotetext at cfgpoint} (1 argument)]
+%
+%      This receives all material that is to be processed (or stored)
+%      including color protection code and what have you.  The default
+%      definition is to run \cs{insert}\cs{footins}.
+%
+%    \item[\cs{@footnotetext at cfgpointii}  (1 argument)]
+%
+%      The default definition runs \cs{@makefntext} which contains
+%      various hooks for customization. For most scenarios this is
+%      sufficient. However, when running all footnotes as a single
+%      paragraph at the bottom, then each footnote needs to be
+%      prepared prior to storing in the insert and this configuration
+%      point allows running extra code to do that.
+%
+%    \item[\cs{@footnotetext at cfgpointiii} (no argument)]
+%
+%      By default this configuration point adds a strut to the
+%      footnote material. so that consecutive footnotes are properly
+%      spaced vertically. In some use cases this is not appropriate
+%      (e.g., when running all footnotes s a single paragraph) and so
+%      this configuration point can cancel the action or do something
+%      else instead.
+%
+%      The configuration point is executed near the start of the
+%      argument for the configuration point
+%      \cs{@footnotetext at cfgpointii}.
+%
+%    \item[\cs{@footnotetext at cfgpointiv} (no argument)]
+%
+%      This configuration point is executed at the very end of the
+%      argument passed to  \cs{@footnotetext at cfgpointii}.
+%      By default it adds a final strut as long as we are still in
+%      horizontal mode (i.e., processing the footnote text paragraph.
+%      When running several footnotes in one paragraph some additional
+%      material (some horizontal glue) needs adding at this point.
+%
+%    \end{description}
+%    The configuration point \cs{@footnotetext at cfgpointii} runs
+%    \cs{@makefntext} and this command contains two further
+%    configuration points (and a few hooks):
+%    \begin{description}
+%    \item[\cs{@makefntext at cfgpoint} (1 argument)]
+%
+%      This configuration point receives the material to typeset the
+%      footnote mark. By default, all it does is running \cs{indent}
+%      to get a paragraph indentation (if one is set up---in most
+%      layouts it is 0~points)  and then typesets the mark, but in
+%      some designs it executes more elaborate code.
+%
+%      If tagging is produced this configuration point is also
+%      responsible for surrounding the mark with the appropriate tags
+%      marking the mark as an Lbl. It does this using the command \cs{tag at FELbl}.
+%
+%    \item[\cs{@makefntext at cfgpointii} (1 argument)]
+%
+%      This configuration point manages the formatting of the footnote
+%      text once the mark has been typeset. 
+%
+%      If tagging is produced this configuration point is also
+%      responsible for surrounding the mark with the appropriate tags
+%      marking the mark as an MC of type FENote. It does this using
+%      the command \cs{tag at FENote}.
+%
+%    \end{description}
+%
+%
+%    The above configuration points are sufficient to implement all
+%    commonly used footnote layouts assuming L-R typesetting. For R-L
+%    typesetting they or may or may not need some extension (though
+%    that is not clear right now).
+%
+%
+%
+% \subsubsection{Hooks}
+%
+%    \begin{description}
+%    \item[\hook{fntext/before}]
+%
+%      Executed at the very beginning of \cs{footnotetext}. Currently
+%      there is on package (\pkg{linguex}) that
+%      prepends material at this point.
+%
+%      This hook is paired with hook \hook{fnmark/after}.
+%
+%    \item[\hook{fntext}]
+%
+%      Executed at the beginning of the material passed to the first
+%      configuration point.  Typically used to set any baseline
+%      stretch for the footnote text, e.g., by \pkg{setspace},
+%      \pkg{footmisc}, \class{uathesis} and others. Could be done in a
+%      later hook but is a bit more efficient here.
+%
+%      After the hook has run, the font is established, i.e., it can't
+%      be used to set a different font size.
+%
+%    \item[\hook{fntext/para}]
+%
+%      After the font is set default paragraph parameters are set up
+%      including \cs{interlinepenalty}, \cs{hsize}, \cs{parindent} and
+%      a number of others, as some of them depend on the font
+%      size. Then the \hook{fntext/para} is run. If one wants to
+%      change the font size, it is probably necessary to reset these
+%      other parameters too, e.g., \cs{parindent}, which can be done
+%      here.
+%
+%      The configuration point \cs{@footnotetext at cfgpointii} normally
+%      runs the command \cs{@makefntext} or some code that eventually
+%      runs this command, and this then produces the footnote mark (in
+%      front of the footnote text) and the formatted footnote text. In
+%      front of both the mark and the footnote text some classes have
+%      placed paragraph parameter adjustments in their redefinition of
+%      \cs{@makefntext}. However, there is no need to place it there
+%      it could equally well go into the \hook{fntext/para} hook. We
+%      therefore do not provide another hook at this point.
+%
+%    \item[\hook{fntext/begin} \& \hook{fntext/end}]
+%
+%      The footnote text itself is surrounded by the hooks
+%      \hook{fntext/begin} and \hook{fntext/end}. The two hooks are
+%      not paired as they are typically used independently.
+%
+%    \item[\hook{fntext/after}]
+%
+%      At the very end of \cs{footnotetext} we execute the hook
+%      \hook{fntext/after} which is a reversed hook paired with
+%      \hook{fntext/before}. Some packages, e.g., \pkg{linuex}, have
+%      code in that position.
+%
+%    \end{description}
+%
+%
+%
+%
+% \subsubsection{Additional configuration possibilities}
+%
+%    The formatting of the footnote mark in front of the footnote
+%    texts is influenced by the setting of the dimen parameter
+%    \cs{footnotemargin}. By default its value is 1.8em in the current
+%    text font (or \texttt{-}\cs{maxdimen} when the para option is
+%    chosen). The following rules apply:
+%    \begin{itemize}
+%    \item
+%
+%      If it has the value \texttt{-}\cs{maxdimen} then the mark is
+%      generated by \cs{@makefnmark}.
+%
+%    \item
+%
+%      Otherwise, if the value is
+%      negative then the mark is placed into an \cs{llap} left aligned
+%      in a box of size \texttt{-}\cs{footnotemargin}.
+%
+%    \item
+%
+%      If the value is zero an \cs{llap} is used without an inner box.
+%
+%    \item
+%
+%      If the value is greater zero (but less than \cs{maxdimen}) the
+%      mark is placed right aligned into a box of size
+%      \cs{footnotemargin}.
+%
+%    \item
+%
+%      The value \cs{maxdimen} is used as a marker to indicate that
+%      no value was given and that the default should be used,
+%      i.e. 1.8em or \texttt{-}\cs{maxdimen} depending on the chosen
+%      option.
+%    \end{itemize}
+%
+%
+% \section{Tagging support}
+%
+%  \emph{To be documented}
+%
+%
+%
+%
+% \MaybeStop{\setlength\IndexMin{200pt}  \PrintIndex  }
+%
+%
+% \section{The Implementation}
+%
+%    All this is very rough and misses a lot of documentation.
+%
+%    \begin{macrocode}
+%<*kernel>
+%<@@=fnote>
+%    \end{macrocode}
+%
+% \subsection{File declaration}
+%    \begin{macrocode}
+\ProvidesFile{latex-lab-footnotes.ltx}
+        [2022-03-10 v0.6a changes to the footnote interfaces]
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+
+% latex.ltx
+
+        % not looked at yet
+
+\long\def\@mpfootnotetext#1{%
+  \global\setbox\@mpfootins\vbox{%
+    \unvbox\@mpfootins
+    \reset at font\footnotesize
+    \hsize\columnwidth
+    \@parboxrestore
+    \def\@currentcounter{mpfootnote}%
+    \protected at edef\@currentlabel
+         {\csname p at mpfootnote\endcsname\@thefnmark}%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \par
+    \color at endgroup}}
+
+
+\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
+
+
+
+\def\@mpfn{footnote}
+\def\thempfn{\thefootnote}
+
+
+
+%-------------------------------------
+
+
+\ExplSyntaxOn
+
+
+\cs_new_protected:Npn \fnote_step_fnmark:nn #1#2 {
+  \tl_if_novalue:nTF {#1}
+    {
+      \stepcounter {#2}
+      \protected at xdef \@thefnmark { \use:c { the#2 } }
+    }
+    {
+     \group_begin:
+%    \end{macrocode}
+%    Note that this is a local assignment even though \LaTeX{}
+%    counters are normally globally changed. This is the way it was in
+%    2e and so far we haven't changed it. The alternative would be to
+%    store the current value and restore it after \cs{@thefnmark} is
+%    altered.
+%    \begin{macrocode}
+        \int_set:cn { c@#2 }{ #1 }
+        \unrestored at protected@xdef \@thefnmark { \use:c { the#2 } }
+     \group_end:
+    }
+}
+
+\cs_new_protected:Npn \fnote_set_fnmark:nn #1#2 {
+  \tl_if_novalue:nTF {#1}
+    {
+      \protected at xdef \@thefnmark { \use:c { the#2 } }
+    }
+    {
+     \group_begin:
+        \int_set:cn { c@#2 }{ #1 }
+        \unrestored at protected@xdef \@thefnmark { \use:c { the#2 } }
+     \group_end:
+    }
+}
+
+%-------------------------------------
+
+% the debugging code is just temp
+\bool_new:N \g_fnote_debug_bool
+\bool_gset_true:N  \g_fnote_debug_bool   % for now we have debugging turned on by default
+
+%-------------------------------------
+
+
+
+\NewMirroredHookPair{fnmark/before}{fnmark/after}
+\NewHook{fnmark}
+\NewHook{fnmark/begin}
+\NewHook{fnmark/end}
+
+
+\cs_new:Npn \@@_debug_footnotemark: {
+  \bool_if:NT \g_fnote_debug_bool
+       {
+         \LogHook{fnmark/before}
+         \LogHook{fnmark}
+         \LogHook{fnmark/begin}
+         \LogHook{fnmark/end}
+         \LogHook{fnmark/after}
+         \cs_gset_eq:NN \@@_debug_footnotemark: \prg_do_nothing:
+       }
+}
+
+
+\cs_new_protected:Npn \fnote_footnotemark: {
+  \@@_debug_footnotemark:
+%-------
+% bibarts
+% chextras  --- actually in the wrong place does an \unskip
+  \UseHook{fnmark/before}
+%-------
+  \leavevmode
+  \ifhmode
+    \edef\@x at sf{\the\spacefactor}
+%-------
+% bxjsja-minimal.def   --- what they do could be done at ``bibarts''
+%                         (a bit less efficient)
+% memhfixc.sty
+% footmisc.sty
+    \UseHook{fnmark}
+%-------
+    \nobreak
+  \fi
+%-------
+% hyperref.sty
+  \UseHook{fnmark/begin}
+%-------
+  \@kernel at process@makefnmark
+     \@makefnmark
+%-------
+%    \end{macrocode}
+%    If a footnote mark is placed by its own then it should finish by
+%    executing \hook{fnmark/end}, resetting the space  factor, and
+%    finishing with \hook{fnmark/after}. However, inf a complete
+%    footnote these actions have to happen only after we have handled
+%    the footnote text (e.g., by placing it into an \cs{insert}. In
+%    such a situation \cs{_@@_footmark_finish:} below does nothing
+%    and the action is carried out later.
+%    \begin{macrocode}
+  \@@_footnotemark_finish:
+}
+
+
+\cs_new:Npn \@@_finish: {
+% hyperref.sty
+% memhfixc.sty  --- could move fnmark/after
+% scrlttr2.cls  --- could vanish if footmisc uses a hook
+% footmisc.sty
+  \UseHook{fnmark/end}
+%-------
+  \ifhmode
+    \spacefactor \@x at sf \relax
+  \fi
+%
+%-------
+  \UseHook{fnmark/after}
+%-------
+}
+
+
+\cs_new_eq:NN \@@_footnotemark_finish: \@@_finish:
+
+
+  
+% Not a public config point but the kernel hook to add tagging
+\def \@kernel at process@makefnmark { }
+
+
+% alterations not covered:
+%
+% ./arabtex/afoot.sty  --- too different (and probably too old)
+
+
+% Provide the name \LaTeXe{} is used to.
+
+\cs_set_eq:NN  \@footnotemark \fnote_footnotemark:
+
+
+
+%-------------------------------------
+
+\NewMirroredHookPair{fntext/before}{fntext/after}
+\NewHook{fntext}
+\NewHook{fntext/para}
+\NewHook{fntext/begin}
+\NewHook{fntext/end}
+
+
+\cs_new:Npn \@@_debug_footnotetext: {
+  \bool_if:NT \g_fnote_debug_bool
+       {
+         \cs_log:N\@footnotetext at cfgpoint
+         \cs_log:N\@footnotetext at cfgpointii
+         \cs_log:N\@footnotetext at cfgpointiii
+         \cs_log:N\@footnotetext at cfgpointiv
+         \cs_log:N\@makefntext at cfgpoint
+         \cs_log:N\@makefntext at cfgpointii
+         \LogHook{fntext/before}
+         \LogHook{fntext}
+         \LogHook{fntext/para}
+         \LogHook{fntext/begin}
+         \LogHook{fntext/end}
+         \LogHook{fntext/after}
+%    \end{macrocode}
+%    Show the info only once (if at all).
+%    \begin{macrocode}
+         \cs_gset_eq:NN \@@_debug_footnotetext: \prg_do_nothing:
+       }
+  }
+
+\cs_new_protected:Npn \fnote_footnotetext:n #1 {
+  \@@_debug_footnotetext:
+%-------
+% ./linguex/linguex.sty
+  \UseHook{fntext/before}
+%-------
+  \@kernel at process@footnotetext
+  \@footnotetext at cfgpoint {  % config point
+%-------
+% resetting baselinestretch ... (could be done further down)
+% ./uafthesis/uafthesis.cls
+% ./setspace/setspace.sty
+% ./footmisc/footmisc.sty (normal)
+    \UseHook{fntext}
+%-------
+    \reset at font
+    \footnotesize
+%-------
+% some classes use a different font size, e.g.,
+% ./nrc/nrc1.cls  ./nrc/nrc2.cls
+% but those could be done in fntext/para instead
+%-------
+%    \end{macrocode}
+%    In case of sidenotes the next settings are pointless, but as they
+%    do not hurt (except for the \cs{hsize} setting) and are needed
+%    for all other cases we make them here and overwrite them for side notes
+%    \begin{macrocode}
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox
+    \floatingpenalty \@MM
+    \hsize\columnwidth
+    \@parboxrestore
+    \parindent 1em     % typical default used in \@makefntext moved up here
+    \def\@currentcounter{footnote}
+    \protected at edef \@currentlabel { \p at footnote \@thefnmark }
+%-------
+% for altering para parameters ...
+% code for resphilosophica came earlier but it could go here.
+% Has the advantage that one can also overwrite \cs{@currentcounter}
+% and \cs{@currentlabel} is that is necessary.
+%
+% ./resphilosophica/resphilosophica.cls
+    \UseHook{fntext/para}
+%-------
+    \color at begingroup
+%-------
+% fnpara wants to replace \@makefntext{...} and para and side option of footmisc etc too ...
+% so we make this a config point
+%-------
+      \@footnotetext at cfgpointii       % config point
+        {
+%-------
+% ./resphilosophica/resphilosophica.cls
+%-------
+          \@footnotetext at cfgpointiii  % config point
+%-------
+% bibarts
+% fnbreak.sty
+          \UseHook{fntext/begin}
+%-------
+          \ignorespaces
+          #1
+%-------
+% bibarts
+% fnbreak.sty
+          \UseHook{fntext/end}
+%-------
+          \@footnotetext at cfgpointiv   % config point
+        }
+      \par
+    \color at endgroup
+  }
+%-------
+% ./linguex/linguex.sty
+  \UseHook{fntext/after}
+%-------
+}
+
+% default for config point (1 arg)
+\cs_new_protected:Npn \@footnotetext at cfgpoint    { \insert\footins }
+
+% default for config point (1 arg)
+\cs_new_protected:Npn \@footnotetext at cfgpointii  { \@makefntext }
+
+
+% default for config point (0 args)
+\cs_new_protected:Npn \@footnotetext at cfgpointiii { \rule\z@\footnotesep }
+
+% default for config point (0 args)
+\cs_new_protected:Npn \@footnotetext at cfgpointiv  { \@finalstrut\strutbox }
+
+
+% kernel hook for tagging (2 args)
+\cs_new_protected:Npn \@kernel at process@footnotetext {}
+
+% Provide the name \LaTeXe{} is used to and do this unconditionally
+%   (no patching of class code if any). This means that if a class provides it own
+%    definition that gets lost and if necessary needs to be handled
+%    with firstaid (or updating of the class.
+
+\AddToHook{begindocument}{
+  \cs_set_eq:NN \@footnotetext \fnote_footnotetext:n
+}
+
+% alterations not covered:
+%
+% ./revtex4-1/revtex4-1.cls  ./revtex/ltxutil.sty ./revtex/revtex4-2.cls ... (need analysis)
+% ./bigfoot/bigfoot.sty
+
+
+
+% \footnotemargin is the logic implemented by footmisc. Perhaps we
+% don't want to do this like that in the kernel but for now I have
+% used this interface unchanged.
+
+
+\newdimen\footnotemargin
+\footnotemargin\maxdimen         % no value given
+
+\AtBeginDocument{
+  \ifdim \footnotemargin=\maxdimen
+    \setlength\footnotemargin{1.8em}
+  \fi
+}     
+
+
+\cs_new_protected:Npn \fnote_makefntext:n #1 {
+%    \end{macrocode}
+%    Some classes in their redefinition for \cs{@makefntext} have
+%    places some paragraph parameters at this point, but those can
+%    equally well go into the hook \hook{fntext/para}. We therefore do
+%    not provide a further hook at this point.
+%    \begin{macrocode}
+  \@makefntext at cfgpoint
+      {
+        \ifdim\footnotemargin>\z@
+          \hb at xt@ \footnotemargin{\hss\@makefnmark}
+        \else
+          \ifdim\footnotemargin=\z@
+            \llap{\@makefnmark}
+          \else
+          \ifdim\footnotemargin=-\maxdimen
+               \@makefnmark
+            \else
+               \llap{\hb at xt@ -\footnotemargin{\@makefnmark\hss}}
+            \fi
+          \fi
+        \fi
+      }
+  \@makefntext at cfgpointii
+      { #1 }
+}
+
+
+
+
+% default for config point (1 arg)
+\cs_new_protected:Npn \@makefntext at cfgpoint { \noindent }
+
+% default for config point (1 arg)
+\cs_new_protected:Npn \@makefntext at cfgpointii #1 { #1 }
+%    \end{macrocode}
+%
+%
+%
+%    If the definition for \cs{@makefntext} is that of the standard
+%    classes then replace it with \cs{fnote_makefntext:n}, otherwise
+%    try to patch the definition.
+%
+%    Here is the the definition the way it is in
+%    \texttt{classes.dtx}. Notice that (for saving space) there is no
+%    space after \texttt{em} to terminate the assignment. We need to
+%    mimic that, otherwise a test would return false even if the
+%    definition has not been modified.
+%
+%    \begin{macrocode}
+\newcommand\old at std@class at makefntext[1]{%
+    \parindent 1em%
+    \noindent
+    \hb at xt@1.8em{\hss\@makefnmark}#1}
+
+%    \end{macrocode}
+%    Here is the messy code for patching. Note that this is only there
+%    to help classes along that aren't updated yet so it does some
+%    minimal patching to hopefully add configuration points in the
+%    right place.
+%
+%    What it does is roughly the
+%    following: It look for a definition of \cs{@makefntext} of the form
+%\begin{verbatim}
+%  {AAA \hbox BBB { CCC } DDD #1 EEE }
+%\end{verbatim}
+%    where ``BBB'' is something like \texttt{to 1em} or similar. It then
+%    replaces that with
+%\begin{verbatim}
+%  {AAA \@makefntext at cfgpoint{\hbox BBB { CCC }} DDD
+%       \@makefntext at cfgpointii{#1} EEE }
+%\end{verbatim}
+%    The patching is not very careful, i.e., it assumes there is only
+%    one \verb=#1= in the replacement text and that a \cs{hbox} found
+%    is the right one to patch. But that is enough to cater for all
+%    definitions of \cs{@makefntext} out there in the TL distribution.
+%
+%    If \cs{hbox} is not found it tries the same looking for
+%    \cs{hb at xt@} which is what some classes use and if that is not
+%    found either it assume that this is a version that uses
+%    \cs{@makefnmark} without surrounding it in a box and if that
+%    fails it gives up with an \cs{ERROR} (which needs to get a proper definition).
+%    \begin{macrocode}
+
+\tl_new:N \l_@@_patch_tl
+\cs_new_eq:NN \@@_tmp:w \ERROR
+
+\cs_new_protected:Npn \@@_patch:
+  {
+    \tl_set:No \l_@@_patch_tl { \@makefntext { \@makefntext at cfgpointii{##1} } }
+    \tl_if_in:NnTF \l_@@_patch_tl { \hbox }
+      { \cs_set_eq:NN \@@_tmp:w \@@_patch_hbox:w }
+      {
+        \tl_if_in:NnTF \l_@@_patch_tl { \hb at xt@ }
+          { \cs_set_eq:NN \@@_tmp:w \@@_patch_hb at xt@:w }
+          {
+            \tl_if_in:NnTF \l_@@_patch_tl { \@makefnmark }
+              { \cs_set_eq:NN \@@_tmp:w \@@_patch_ at makefnmark:w }
+              { \ERROR
+                \cs_set_eq:NN \@@_tmp:w \exp_stop_f: }
+          }
+      }
+    \tl_set:Nf \l_@@_patch_tl
+      { \exp_after:wN \@@_tmp:w \l_@@_patch_tl }
+    \cs_set:Npn \@@_tmp:w { \long \def \@makefntext ####1 }
+    \exp_after:wN \@@_tmp:w \exp_after:wN { \l_@@_patch_tl }
+  }
+%    \end{macrocode}
+%
+%    If \cs{@makefntext} contains \cs{hbox} then grab ``AAA'' as
+%    \verb=#1= and ``BBB'' (up to the open \verb={=)  and return it as
+%\begin{verbatim}
+%   AAA  \@makefntext at processX { \hbox BBB }
+%\end{verbatim}
+%    \begin{macrocode}
+\cs_new:Npn \@@_patch_hbox:w #1 \hbox #2 #
+  { \exp_stop_f: #1 \@makefntext at processX { \hbox #2 } }
+%    \end{macrocode}
+%    Same for the other cases.
+%    \begin{macrocode}
+\cs_new:Npn \@@_patch_hb at xt@:w #1 \hb at xt@ #2 #
+  { \exp_stop_f: #1 \@makefntext at processX { \hb at xt@ #2 } }
+\cs_new:Npn \@@_patch_ at makefnmark:w #1 \@makefnmark
+  { \exp_stop_f: #1 \@makefntext at processX { \use:n } { \@makefnmark } }
+%    \end{macrocode}
+%
+%    The code provided by Bruno above expects 2 arguments but we need a
+%    different structure so this is a simple reshuffling. Would be
+%    better if we can patch the right structure in directly, but I'm
+%    not a patch person, so this is the simple way out for now:
+%    
+%    \begin{macrocode}
+\cs_new:Npn \@makefntext at processX #1#2{\@makefntext at cfgpoint{#1{#2}}}
+%    \end{macrocode}
+%    At \verb=\begin{document}= check if the current definition is
+%    that of the standard classes and if so replace it by
+%    \cs{fnote_makefntext:n} otherwise try and patch the definition
+%    using the approach above.
+%    \begin{macrocode}
+
+\AddToHook{begindocument}{
+  \cs_if_eq:NNTF \@makefntext \old at std@class at makefntext
+     {
+       \cs_set_eq:NN \@makefntext \fnote_makefntext:n
+     }
+     {
+       \@@_patch:
+     }
+}
+
+
+% possibly add the following to check for multiple \hbox in
+% the definition:
+%
+% \seq_set_split:NnV \l_@@_patch_seq { \hbox } \l_@@_patch_tl
+% \int_compare:nT { \seq_count:N \l_@@_patch_seq } > 2 \ERROR
+%
+%    \end{macrocode}
+%
+%
+%
+%
+% \subsection{Document-level commands}
+%
+%    \begin{macrocode}
+
+\DeclareDocumentCommand\footnotetext {om} {
+  \fnote_set_fnmark:nn {#1} \@mpfn
+  \@footnotetext {#2}
+}
+
+
+%-------------------------------------
+
+
+\DeclareDocumentCommand\footnote {om} {
+  \fnote_step_fnmark:nn {#1} \@mpfn
+  \cs_set_eq:NN \@@_footnotemark_finish: \prg_do_nothing:
+  \@footnotemark
+  \cs_set_eq:NN \@@_footnotemark_finish: \@@_finish:
+  \@footnotetext {#2}
+  \@@_footnotemark_finish:
+}
+
+%-------------------------------------
+
+
+\DeclareDocumentCommand\footnotemark {o} {
+  \fnote_step_fnmark:nn {#1} { footnote }
+  \@footnotemark
+}
+
+
+%-------------------------------------
+
+\DeclareDocumentCommand\footref {m}{%
+  \begingroup
+    \unrestored at protected@xdef\@thefnmark{\ref{#1}}%
+  \endgroup
+  \@footnotemark
+}
+
+%    \end{macrocode}
+%    
+%    \begin{macrocode}
+%<@@=>
+%    \end{macrocode}
+%
+%
+%
+%
+%
+%
+% \subsection{Firstaid for packages and classes}
+%
+% \subsubsection{\pkg{setspace}}
+%
+%    It should not overwrite it any longer but use a hook, so for now we
+%    do just that here.
+%    \begin{macrocode}
+\AddToHook{package/setspace/after}
+   {\let \@footnotetext \fnote_footnotetext:n
+    \AddToHook{fntext}[setspace]{\let\baselinestretch\setspace at singlespace}}
+%    \end{macrocode}
+%
+%
+%
+%
+% \subsubsection{\pkg{hyperref}}
+%
+%    Prevent hyperref from redefining footnote stuff --- this is a
+%    temp solution.
+%    \begin{macrocode}
+\AddToHook{package/hyperref/after}{
+  \let\H@@footnotetext\fnote_footnotetext:n
+  \let\H@@footnotemark\fnote_footnotemark:
+  \let \@footnotetext \fnote_footnotetext:n
+  \let \@footnotemark \fnote_footnotemark:
+}
+
+
+
+%    \end{macrocode}
+%
+% \subsection{Stuff that needs cleanup and documentation}
+%
+%    \begin{macrocode}
+
+
+%-------------------------------------
+
+% use of kerns to mark h-mode positions (unit sp)
+%
+% 1 = CJK
+% 2 = CJK
+% 3 = multiple footnotes (footmisc, koma, eledmac, tufte, memoir,
+%    parnotes, sidenotes)
+% 3 = outer kern in letter spacing (letterspace)
+% 3 = beginning of list (examdesign.cls)
+% 4 = CJK pigin
+% 5 = CJK ruby
+
+% 1-4 = polyglossia for korean
+
+%-------------------------------------
+
+
+
+%-------------------------------------
+%  Tagging
+%-------------------------------------
+
+% hyperref support only when loaded (improve integration)
+
+\newcounter{absfootnote}
+\AddToHook{fnmark/begin}{\stepcounter{absfootnote}}  % too simple (fails with opt args)
+
+
+
+% this is rubbish and should be handled better:
+
+\cs_new_protected:Npn \tag_if_loaded:TF  { \cs_if_exist:NTF \tag_struct_begin:n }
+
+
+
+\cs_new_protected:Npn \tag at FEMark #1 {
+  \tag_if_loaded:TF
+     {
+       \tag_mc_end_push:
+       \exp_args:Nx
+       \tag_struct_begin:n{tag=Lbl,ref=fn.\the\c at absfootnote}
+       \tag_mc_begin:n{tag=Lbl}
+       \IfPackageLoadedTF{hyperref}{ \hyper at linkstart
+         {link}{fn.\the\c at absfootnote} }{}
+       #1
+      \IfPackageLoadedTF{hyperref}{ \hyper at linkend }{}
+      \tag_mc_end:
+      \tag_struct_end:
+      \tag_mc_begin_pop:n{}
+     }
+     { #1 }
+}
+
+% to be done next round around:
+%
+% \the\c at absfootnote should be replaced directly by some command with default meaning
+% \the\c at absfootnote so that the actual reference can be changed from the outside.
+%
+% there are several instances that are curently hardwired.
+
+\cs_set_eq:NN \@kernel at process@makefnmark \tag at FEMark
+
+
+
+% kernel hook for tagging (2 args)
+\cs_set:Npn \@kernel at process@footnotetext #1#2 {
+  \tag_if_loaded:TF
+    {
+      \tag_mc_end_push:
+      \tag_struct_begin:n { tag=FENote,label=fn.\the\c at absfootnote }
+      #1 {#2}
+      \tag_struct_end:
+      \tag_mc_begin_pop:n{}
+    }
+    { #1 {#2} }
+}
+
+
+
+\cs_set:Npn \@makefntext at cfgpoint #1 {
+  \noindent
+  \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_end_push: }
+  \tag at FELbl { #1 }
+}
+
+\cs_set:Npn \@makefntext at cfgpointii #1 {
+  \tag at FENote { #1 }
+  \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_begin_pop:n{} }
+}
+
+
+
+
+\cs_new_protected:Npn \tag at FELbl #1 {
+  \tag_if_loaded:TF
+    {
+      % target should perhaps be raised ...
+      \IfPackageLoadedTF{hyperref}{ \hypertarget{fn.\the\c at absfootnote}{} }{}
+      %\tag_struct_begin:n { tag=FENote,label=fn.\the\c at absfootnote } %alternativ location for structure
+      \tag_struct_begin:n { tag=Lbl }
+        \tag_mc_begin:n { tag=Lbl }
+          #1
+        \tag_mc_end:
+      \tag_struct_end:
+    }
+    { #1 }
+}
+
+\cs_new_protected:Npn \tag at FENote #1 {
+  \tag_if_loaded:TF
+    {
+      \tag_mc_begin:n{tag=FENote}
+      #1
+      \tag_mc_end:
+      %\tag_struct_end: %alternative location for structure end but ends inside a P
+    }
+    { #1 }
+}
+ 
+%-------------------------------------
+
+
+\ExplSyntaxOff
+%</kernel>
+%    \end{macrocode}
+%
+%
+% \section{Reimplementing the \pkg{footmisc} package}
+%
+%    \begin{macrocode}
+%<*footmisc>
+%%
+%% Copyright (c) 1995-2011 Robin Fairbairns
+%% Copyright (c) 2018-2022 Robin Fairbairns, Frank Mittelbach
+%%
+%% This file is part 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
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This work has the LPPL maintenance status 'maintained'.
+%%
+%%
+%% File: footmisc.dtx (C) Copyright 1995-2011 Robin Fairbairns
+%%                    (C) Copyright 2018-2022 Frank Mittelbach
+\NeedsTeXFormat{LaTeX2e}
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+
+\DeclareRelease{v5}{2011-06-06}{footmisc-2011-06-06.sty}
+\DeclareCurrentRelease{}{2022-02-14}
+\ProvidesPackage{latex-lab-footmisc}%
+        [2022/03/08 v6.0d
+     a miscellany of footnote facilities -- latex-lab version%
+                   ]
+
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\newtoks\FN at temptoken
+\providecommand\protected at writeaux{%
+  \protected at write\@auxout
+}
+\def\l at advance@macro{\@@dvance at macro\edef}
+\def\@@dvance at macro#1#2#3{\expandafter\@tempcnta#2\relax
+  \advance\@tempcnta#3\relax
+  #1#2{\the\@tempcnta}%
+}
+\let\@advance at macro\l at advance@macro
+\DeclareOption{symbol}{\renewcommand\thefootnote{\fnsymbol{footnote}}}
+\newif\ifFN at robust \FN at robustfalse
+\DeclareOption{symbol*}{%
+  \renewcommand\thefootnote{\@fnsymbol\c at footnote}%
+  \FN at robusttrue
+  \AtEndOfPackage{\setfnsymbol{lamport*-robust}}%
+}
+\newif\ifFN at para  \FN at parafalse
+\DeclareOption{para}{%
+%    \end{macrocode}
+%    Options are executed in the order of declaration, thus no point in
+%    checking for side option as footmisc did in the past
+%    \begin{macrocode}
+%    \PackageError{footmisc}{Option "\CurrentOption" incompatible with
+%                            option "side"}%
+%                 {I shall ignore "\CurrentOption"}%
+  \FN at paratrue
+  \setlength\footnotemargin{-\maxdimen}    % default when para is used
+}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareOption{side}{\ifFN at para
+    \PackageError{footmisc}{Option "\CurrentOption" incompatible with
+                            option "para"}%
+                 {I shall ignore "\CurrentOption"}%
+  \else
+    \def\@footnotetext at cfgpoint {\marginpar}
+    \AddToHook{fntext/para}{%
+      \hsize\marginparwidth     % correct the default \hsize
+      \footnotesep\z@           % don't add a default separation
+    }
+    \def\@footnotetext at cfgpointii  {\@makefntext}
+    \def\@footnotetext at cfgpointiii {}
+    \def\@footnotetext at cfgpointiv  {}
+  \fi
+}
+\let\footnotelayout\@empty
+\DeclareOption{ragged}{%
+  \@ifundefined{RaggedRight}%
+    {\renewcommand\footnotelayout{\linepenalty50 \raggedright}}%
+    {\renewcommand\footnotelayout{\linepenalty50 \RaggedRight}}%
+}
+\newif\ifFN at perpage
+\FN at perpagefalse
+\DeclareOption{perpage}{%
+  \FN at perpagetrue
+}
+\newif\ifFN at fixskip      \FN at fixskipfalse
+
+\let\FN at bottomcases\thr@@
+\newif\ifFN at abovefloats  \FN at abovefloatstrue
+\DeclareOption{bottom}{%
+  \let\FN at bottomcases\@ne
+  \FN at abovefloatsfalse
+  \FN at fixskiptrue
+}
+\DeclareOption{bottomfloats}{%
+  \let\FN at bottomcases\tw@
+  \FN at abovefloatstrue \FN at fixskiptrue
+}
+\DeclareOption{abovefloats}{\FN at abovefloatstrue  \FN at fixskiptrue}
+\DeclareOption{belowfloats}{\FN at abovefloatsfalse \FN at fixskiptrue}
+\DeclareOption{marginal}{%
+  \footnotemargin-0.8em\relax
+}
+\DeclareOption{flushmargin}{%
+  \footnotemargin0pt\relax
+}
+\newif\ifFN at hangfoot  \FN at hangfootfalse
+\DeclareOption{hang}{%
+  \FN at hangfoottrue
+}
+\newcommand*\hangfootparskip{0.5\baselineskip}
+\newcommand*\hangfootparindent{0em}%
+\DeclareOption{norule}{%
+  \renewcommand\footnoterule{}%
+  \advance\skip\footins 4\p@\@plus2\p@\relax
+}
+\DeclareOption{splitrule}{%
+  \gdef\split at prev{0}
+  \let\pagefootnoterule\footnoterule
+  \let\mpfootnoterule\footnoterule
+  \def\splitfootnoterule{\kern-3\p@ \hrule \kern2.6\p@}
+  \def\footnoterule{\relax
+    \ifx \@listdepth\@mplistdepth
+      \mpfootnoterule
+    \else
+      \ifnum\split at prev=\z@
+        \pagefootnoterule
+      \else
+        \splitfootnoterule
+      \fi
+      \xdef\split at prev{\the\insertpenalties}%
+    \fi
+  }%
+}
+\newif\ifFN at stablefootnote  \FN at stablefootnotefalse
+\DeclareOption{stable}{\FN at stablefootnotetrue}
+\newif\ifFN at multiplefootnote  \FN at multiplefootnotefalse
+\DeclareOption{multiple}{\FN at multiplefootnotetrue}
+\ProcessOptions
+%    \end{macrocode}
+%    This version of \pkg{footmisc} can assume that the new OR code is
+%    already available, thus nothing needs loading at this
+%    point. However, as long as we use this code also in a package
+%    version that can be loaded by other package while we are in a
+%    transition phase it is not clear whether not the kernel code is
+%    already available for other packages.
+%    \begin{macrocode}
+%\@ifundefined{@kernel at before@cclv}
+%  {\input{latex-lab-new-or.ltx}}{}
+%    \end{macrocode}
+%
+%    Footnote box layout for para footnotes;
+%    this would also be the hook to support dblfootnotes (from the
+%    \texttt{dblfnote} package if we integrate that).
+%    \begin{macrocode}
+\ifFN at para
+  \def\@makecol at cfgpointii {%
+     \global\setbox\footins\vbox{\FN at makefootnoteparagraph}%
+    }
+\fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ifFN at fixskip
+  \def\@outputbox at removebskip{%
+    \ifx\@textbottom\relax \else
+      \@outputbox at append{%
+        \@tempskipa\lastskip
+        \ifnum \gluestretchorder\@tempskipa>\z@
+          \vskip-\@tempskipa
+          \xdef\@outputbox at reinsertbskip
+              {\noexpand\@outputbox at append{\vskip\the\@tempskipa}}%
+        \else
+          \global\let\@outputbox at reinsertbskip\relax
+        \fi
+      }%
+   \fi
+  }
+\let\@outputbox at reinsertbskip\relax
+\else
+  \let\@outputbox at removebskip \relax
+  \let\@outputbox at reinsertbskip\relax
+\fi
+%    \end{macrocode}
+%
+%
+%
+%    \begin{macrocode}
+\ifcase \FN at bottomcases\relax
+\ERROR
+\or
+  \ifFN at abovefloats
+    \def\@makecol at cfgpoint {%
+       \@if at footnotes@TF
+          {\@outputbox at append{\vfill}}%
+          {\@if at bfloats@TF{\@outputbox at append{\vfill}}%
+                          {\@outputbox at reinsertbskip}}%
+       \@outputbox at appendfootnotes
+       \@outputbox at attachfloats
+      }
+  \else
+    \def\@makecol at cfgpoint {%
+       \@outputbox at attachfloats
+       \@if at footnotes@TF
+          {\@outputbox at append{\vfill}}%
+          {\@outputbox at reinsertbskip}%
+       \@outputbox at appendfootnotes
+    }
+  \fi
+\or
+  \ifFN at abovefloats
+     \def\@makecol at cfgpoint {%
+        \@outputbox at appendfootnotes
+        \@if at bfloats@TF
+            {\@outputbox at append{\vfill}}%
+            {\@outputbox at reinsertbskip}%
+        \@outputbox at attachfloats
+     }
+  \else
+     \def\@makecol at cfgpoint {%
+       \@if at footnotes@TF
+          {\@outputbox at append{\vfill}}%
+          {\@if at bfloats@TF{\@outputbox at append{\vfill}}%
+                          {\@outputbox at reinsertbskip}}%
+        \@outputbox at attachfloats
+        \@outputbox at appendfootnotes
+     }
+  \fi
+\or
+  \ifFN at abovefloats
+    \def\@makecol at cfgpoint {%
+       \@outputbox at appendfootnotes
+       \@outputbox at attachfloats
+       \@outputbox at reinsertbskip
+    }
+  \else
+    \def\@makecol at cfgpoint {%
+       \@outputbox at attachfloats
+       \@outputbox at appendfootnotes
+       \@outputbox at reinsertbskip
+}
+  \fi
+\else
+\ERROR
+\fi
+
+% next can be dropped when cleaned up
+\newif\ifFN at setspace
+\@ifpackageloaded{setspace}%
+ {%
+   \FN at setspacetrue
+   \@ifclassloaded{memoir}%
+     {%
+       \AddToHook{fntext}{\let\baselinestretch\m at m@singlespace}%
+       \let\FN at baselinestretch\m at m@singlespace
+     }%
+     {%
+%       \AddToHook{fntext}{\let\baselinestretch\setspace at singlespace}%
+       \let\FN at baselinestretch\setspace at singlespace
+     }%
+ }%
+ {%
+   \FN at setspacefalse
+ }
+
+
+
+\ifFN at para
+  \def\@footnotetext at cfgpoint {\insert\footins}
+
+  \long\def\@footnotetext at cfgpointii #1{%
+    \setbox\FN at tempboxa\hbox{\@makefntext{#1}}%
+    \dp\FN at tempboxa\z@
+    \ht\FN at tempboxa
+      \dimexpr\wd\FN at tempboxa *%
+              \footnotebaselineskip /\columnwidth\relax
+    \box\FN at tempboxa
+  }
+
+
+  \def\@footnotetext at cfgpointiii {}
+  \def\@footnotetext at cfgpointiv {% config point
+           \strut
+           \penalty-10\relax
+           \hskip\footglue
+  }
+\fi
+
+
+
+\ifFN at para
+  \let\FN at tempboxa\@tempboxa
+  \newbox\FN at tempboxb
+  \newbox\FN at tempboxc
+  \newskip\footglue \footglue=1em plus.3em minus.3em
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  \newdimen\footnotebaselineskip
+
+  % establish late:
+
+\AddToHook{begindocument/before} {%
+  {%
+    \footnotesize
+    \global\footnotebaselineskip=\normalbaselineskip
+  }%
+}
+%    \end{macrocode}
+%    The coding is based on David Kastrup's improvement to Don Knuth's
+%    original implementation. You find in the \TeX{}book if you own
+%    the latest edition.
+%    \begin{macrocode}
+
+  \long\def\FN at makefootnoteparagraph{%
+    \FN at setfootnoteparawidth
+    \@parboxrestore
+    \baselineskip=\footnotebaselineskip
+    \unvbox\footins \FN at removehboxes
+    \RawParEnd
+  }
+  \def\FN at removehboxes{\setbox\FN at tempboxa\lastbox
+    \ifhbox\FN at tempboxa{\FN at removehboxes}%
+      \unhbox\FN at tempboxa
+    \else
+      \RawNoindent
+      \rule\z@\footnotesep
+    \fi
+  }
+\fi
+
+
+\@ifpackageloaded{multicol}
+  {\def\FN at setfootnoteparawidth
+    {\hsize\ifnum\doublecol at number>\@ne
+                  \textwidth
+            \else \columnwidth \fi}}
+  {\def\FN at setfootnoteparawidth{\hsize\columnwidth}}
+
+\ifFN at perpage
+  \RequirePackage{perpage}
+  \MakePerPage{footnote}
+%    \end{macrocode}
+%    Fix a bug in perpage \ldots
+%    \begin{macrocode}
+  \def\@stpelt#1{\global\csname c@#1\endcsname \m at ne
+    \stepcounter{#1}%
+    \pp at fix@MakePerPage{#1}%
+  }
+  \def\pp at fix@MakePerPage#1{%
+      \ifnum \value{#1}>\z@
+        \addtocounter{#1}\m at ne\fi
+  }
+%    \end{macrocode}
+%    The above code may look a bit odd: the \cs{stepcounter} sets the
+%    counter to zero and then we alter it if it is not zero.  The
+%    reason is that \cs{stepcounter} resets other counters and when
+%    perpage is loaded this results in updating counters on the reset
+%    list to 1 (or to a higher starting value if \cs{MakePerPage} is
+%    used with an optional argument, which is precisely the problem
+%    here. By subtracting 1 in that case we set it back to 1 lower
+%    than the starting value.
+%
+%    But to make this fully work we also need to update a support
+%    command in \pkg{perpage}:
+%    \begin{macrocode}
+  \def\pp at cl@end at iii\stepcounter#1\pp at fix@MakePerPage#2{}
+\fi
+
+
+\ifFN at para
+
+% This can use the default interface, except that a negative value for
+% \footnotemargin makes little sense, so we test for this and warn if
+% necessary. But -\maxdimen is ok again, so would need to be a litte bit more elaborate.
+%
+
+%\AddToHook{fntext/para}{
+%  \ifdim \footnotemargin >\z@ \else
+%    \PackageWarningNoline{footmisc}{Option 'para' needs positive \noexpand\footnotemargin}%
+%    \footnotemargin 1.8em\relax
+%  \fi
+%}
+
+
+\AddToHook{fntext/begin}{\nobreak \hspace{.2em}}
+
+
+
+
+\else
+
+  \ifFN at hangfoot
+    \long\def\@makefntext#1{%
+      \bgroup
+        \setbox\@tempboxa\hbox{%
+          \ifdim\footnotemargin>\z@
+            \hb at xt@\footnotemargin{\@makefnmark\hss}%
+          \else
+            \@makefnmark
+          \fi
+        }%
+        \leftmargin\wd\@tempboxa
+        \rightmargin\z@
+        \linewidth \columnwidth
+        \advance \linewidth -\leftmargin
+        \parshape \@ne \leftmargin \linewidth
+        \footnotesize
+        \@setpar{{\@@par}}%
+        \leavevmode
+        \llap{\box\@tempboxa}%
+        \parskip\hangfootparskip\relax
+        \parindent\hangfootparindent\relax
+        \footnotelayout#1%
+        \par
+      \egroup
+    }
+
+ \else
+
+% This is now using the default interface:
+%
+% \long\def\@makefntext#1{%
+%      \parindent1em
+%      \noindent
+%      \ifdim\footnotemargin>\z@
+%        \hb at xt@ \footnotemargin{\hss\@makefnmark}%
+%      \else
+%        \ifdim\footnotemargin=\z@
+%          \llap{\@makefnmark}%
+%        \else
+%          \llap{\hb at xt@ -\footnotemargin{\@makefnmark\hss}}%
+%        \fi
+%      \fi
+%    \footnotelayout#1%
+%  }
+
+ \fi
+\fi
+
+
+
+
+\ifFN at multiplefootnote
+  \providecommand*{\multiplefootnotemarker}{3sp}
+  \providecommand*{\multfootsep}{,}
+  \AddToHook{fnmark}      {\FN at mf@check}
+  \AddToHook{fnmark/end}  {\FN at mf@prepare}
+%
+  \def\FN at mf@prepare{%
+    \kern-\multiplefootnotemarker
+    \kern\multiplefootnotemarker\relax
+  }
+  \def\FN at mf@check{%
+    \ifdim\lastkern=\multiplefootnotemarker\relax
+%?? is that necessary or even correct ??
+      \edef\@x at sf{\the\spacefactor}%
+%?? shouldn't that be 2 unkerns ?? (none would also be ok)
+      \unkern  % new
+      \unkern
+      \textsuperscript{\multfootsep}%
+      \spacefactor\@x at sf\relax
+    \fi
+  }
+\else
+  \let\FN at mf@prepare\relax
+\fi
+\ifFN at stablefootnote
+\let\FN at sf@@footnote\footnote
+\def\footnote{\ifx\protect\@typeset at protect
+    \expandafter\FN at sf@@footnote
+  \else
+    \expandafter\FN at sf@gobble at opt
+  \fi
+}
+\edef\FN at sf@gobble at opt{\noexpand\protect
+  \expandafter\noexpand\csname FN at sf@gobble at opt \endcsname}
+\expandafter\def\csname FN at sf@gobble at opt \endcsname{%
+  \@ifnextchar[%]
+    \FN at sf@gobble at twobracket
+    \@gobble
+}
+\def\FN at sf@gobble at twobracket[#1]#2{}
+\let\FN at sf@@footnotemark\footnotemark
+\def\footnotemark{\ifx\protect\@typeset at protect
+    \expandafter\FN at sf@@footnotemark
+  \else
+    \expandafter\FN at sf@gobble at optonly
+  \fi
+}
+\edef\FN at sf@gobble at optonly{\noexpand\protect
+  \expandafter\noexpand\csname FN at sf@gobble at optonly \endcsname}
+\expandafter\def\csname FN at sf@gobble at optonly \endcsname{%
+  \@ifnextchar[%]
+    \FN at sf@gobble at bracket
+    {}%
+}
+\def\FN at sf@gobble at bracket[#1]{}
+\fi
+\newcommand\setfnsymbol[1]{%
+  \@bsphack
+  \@ifundefined{FN at fnsymbol@#1}%
+  {%
+    \PackageError{footmisc}{Symbol style "#1" not known}%
+    \@eha
+  }{%
+    \expandafter\let\expandafter\@fnsymbol\csname
+                        FN at fnsymbol@#1\endcsname
+  }%
+  \@esphack
+}
+\let\FN at fnsymbol@lamport\@fnsymbol
+\newif\if at tempswb
+\DeclareDocumentCommand\DefineFNsymbols {smO{text}m}{%
+  \expandafter\ifx\csname FN at fnsymbol@#2\endcsname\relax
+    \PackageInfo{footmisc}{Declaring symbol style #2}%
+  \else
+    \PackageWarning{footmisc}{Redeclaring symbol style #2}%
+  \fi
+  \toks@{}%
+  \def\@tempb{\end}%
+  \FN at build@symboldef#4\end
+  \def\@tempc{math}%
+  \def\@tempd{#3}%
+  \expandafter\xdef\csname FN at fnsymbol@#2\endcsname##1{%
+    \ifx\@tempc\@tempd
+      \noexpand\ensuremath
+    \else
+      \noexpand\nfss at text
+    \fi
+    {%
+      \noexpand\ifcase##1%
+      \the\toks@
+      \noexpand\else
+      \IfBooleanTF#1{\noexpand\@ctrerr}%
+        {\noexpand\FN at orange##1}%
+      \noexpand\fi
+    }%
+  }%
+}
+\def\FN at build@symboldef#1{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\@tempb
+  \else
+    \toks@\expandafter{\the\toks@\or#1}%
+    \expandafter\FN at build@symboldef
+  \fi
+}
+\DeclareDocumentCommand\DefineFNsymbolsTM {smm}{%
+  \expandafter\ifx\csname FN at fnsymbol@#2\endcsname\relax
+    \PackageInfo{footmisc}{Declaring symbol style #2}%
+  \else
+    \PackageWarning{footmisc}{Redeclaring symbol style #2}%
+  \fi
+  \toks@{}%
+  \def\@tempb{\end}%
+  \FN at build@symboldefTM#3\end\@null
+  \expandafter\xdef\csname FN at fnsymbol@#2\endcsname##1{%
+    \noexpand\ifcase##1%
+      \the\toks@
+    \noexpand\else
+      \IfBooleanTF#1{\noexpand\@ctrerr}%
+        {\noexpand\FN at orange##1}%
+      \noexpand\fi
+  }%
+}
+\def\FN at build@symboldefTM#1#2{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\@tempb
+  \else
+    \toks@\expandafter{\the\toks@\or\TextOrMath{#1}{#2}}%
+    \expandafter\FN at build@symboldefTM
+  \fi
+}
+\def\FN at orange#1{%
+  \ifFN at robust
+    \@arabic#1%
+    \@bsphack
+    \PackageInfo{footmisc}{Footnote number \number#1 out of range}%
+    \protect\@fnsymbol at orange
+    \@esphack
+  \else \@ctrerr \fi
+}
+\global\let\@diagnose at fnsymbol@orange\relax
+\AtEndDocument{\@diagnose at fnsymbol@orange}
+\def\@fnsymbol at orange{%
+  \gdef\@diagnose at fnsymbol@orange{%
+    \PackageWarningNoLine{footmisc}{Some footnote number(s)
+      were out of range
+      \MessageBreak
+      see log for details%
+    }%
+  }%
+}
+\DefineFNsymbolsTM{bringhurst}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textbardbl    \|%
+  \textparagraph \mathparagraph
+}%
+\DefineFNsymbolsTM{chicago}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textbardbl    \|%
+  \#\#%
+}%
+\DefineFNsymbolsTM{wiley}{%
+  \textasteriskcentered *%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+}%
+\DefineFNsymbolsTM{lamport-robust}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  {\textdagger\textdagger}{\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+}
+\DefineFNsymbolsTM*{lamport*}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  {\textdagger\textdagger}{\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+  {\textsection\textsection}{\mathsection\mathsection}%
+  {\textparagraph\textparagraph}{\mathparagraph\mathparagraph}%
+  {\textasteriskcentered\textasteriskcentered\textasteriskcentered}{***}%
+  {\textdagger\textdagger\textdagger}{\dagger\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger\ddagger}%
+  {\textsection\textsection\textsection}%%
+    {\mathsection\mathsection\mathsection}%
+  {\textparagraph\textparagraph\textparagraph}%%
+    {\mathparagraph\mathparagraph\mathparagraph}%
+}
+\setfnsymbol{lamport*}
+\DefineFNsymbolsTM{lamport*-robust}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  {\textdagger\textdagger}{\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+  {\textsection\textsection}{\mathsection\mathsection}%
+  {\textparagraph\textparagraph}{\mathparagraph\mathparagraph}%
+  {\textasteriskcentered\textasteriskcentered\textasteriskcentered}{***}%
+  {\textdagger\textdagger\textdagger}{\dagger\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger\ddagger}%
+  {\textsection\textsection\textsection}%%
+    {\mathsection\mathsection\mathsection}%
+  {\textparagraph\textparagraph\textparagraph}%%
+    {\mathparagraph\mathparagraph\mathparagraph}%
+}
+\newcommand\mpfootnotemark{%
+  \@ifnextchar[%
+    \@xmpfootnotemark
+    {%
+      \stepcounter\@mpfn
+      \protected at xdef\@thefnmark{\thempfn}%
+      \@footnotemark
+    }%
+}
+\def\@xmpfootnotemark[#1]{%
+  \begingroup
+    \csname c@\@mpfn\endcsname #1\relax
+    \unrestored at protected@xdef\@thefnmark{\thempfn}%
+  \endgroup
+  \@footnotemark
+}
+%    \end{macrocode}
+%    TEMP PATCHES FOR TESTING
+%    \begin{macrocode}
+
+\endinput
+%</footmisc>
+%    \end{macrocode}
+% \Finale
+%


Property changes on: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-new-or.dtx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-new-or.dtx	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-new-or.dtx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,545 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-new-or.dtx
+% Copyright (C) 2022 The LaTeX 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
+%
+%    https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+%    https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+  \DocInput{latex-lab-new-or.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \texttt{latex-lab-new-or} code\thanks{}}
+% \author{Frank Mittelbach, \LaTeX{} Project}
+%
+% \maketitle
+%
+% \newcommand\fmi[1]{\begin{quote} TODO: \itshape #1\end{quote}}
+% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
+% \providecommand\pkg[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% \end{abstract}
+%
+% \section{Introduction}
+%
+%    This code implements changes to the output routine.
+%
+%
+%
+%
+% \section{Hooks and configuration points}
+%
+%    Note: the configuration points do not have an interface mechanism
+%    yet and all their names are temporary right now.
+%
+%
+% \subsubsection{Configuration points}
+%
+%    To cater for different layouts with respect to text, footnotes,
+%    and bottom-floats placements there are two configuration points for
+%    now.
+%    \begin{description}
+%    \item[\cs{@makecol at cfgpoint} (0 arguments)]
+%
+%      In this configuration point the \cs{@outputbox} (holding the
+%      galley text for the current column or page) is augmented by
+%      attaching floats and footnote areas together with appropriate
+%      spacing. Before the code is run any existing glue at the bottom
+%      of the \cs{@outputbox} is removed and stored in a safe
+%      place. If needed, it can be reinserted with one of the helper
+%      commands.
+%
+%      To support setting this up the following helper commands are available:
+%      \begin{description}
+%      \item[\cs{@outputbox at append} (1 argument)]
+%
+%        This general purpose command alters the \cs{@outputbox} box by
+%        appending material to it.
+%
+%      \item[\cs{@outputbox at appendfootnotes} (0 arguments)]
+%
+%        This command appends the footnotes to the \cs{@outputbox} (if
+%        there are any). If not, then it does nothing.
+%
+%      \item[\cs{@outputbox at attachfloats} (0 arguments)]
+%      \item[\cs{@outputbox at attachtopfloats} (0 arguments)]
+%      \item[\cs{@outputbox at attachbottomfloats} (0 arguments)]
+%   
+%        Attaching top and bottom floats can usually be done in one
+%        go, but for special layouts we might want more control so we
+%        provide also separate commands.
+%
+%      \item[\cs{@outputbox at reinsertbskip} (0 arguments)]
+%
+%        Reinsert the bottom skip of the \cs{@outputbox} that was
+%        saved before.   
+%   
+%      \item[Testing for existence of material]
+%
+%        There are a number of helpers to run conditional code
+%        depending on whether or not there are footnotes or bottom
+%        floats. They are \cs{@if at footnotes@TF} and
+%        \cs{@if at bfloats@TF}
+%        (names are likely to change).
+%   
+%      \end{description}
+%      This configuration point needs an appropriate definition; a
+%      default is already given in the kernel.
+%
+%    \item[\cs{@makecol at cfgpointii} (0 arguments)]
+%
+%       This configuration point is used to manipulate the footnote
+%        material inside \cs{box}\cs{footins}. It if contains code, it
+%        is supposed to do some processing of that box and then write
+%        the result back into it (and nothing else!). By default it
+%        does nothing.
+%
+%    \end{description}
+%
+% \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
+%
+%
+% \section{The Implementation}
+%
+%    \begin{macrocode}
+%<*code>
+%    \end{macrocode}
+%
+% \subsection{File declaration}
+%    \begin{macrocode}
+\ProvidesFile{latex-lab-new-or.ltx}
+        [2022-03-09 v0.1b changes to the output routine]
+%    \end{macrocode}
+% \subsection{\cs{@makecol} reimplementation}
+%
+%    In order for other packages to prepend or append code to
+%    \cs{@makecol}, they can use the generic command hooks
+%    \texttt{cmd/@makecol/before} and \texttt{cmd/@makecol/after}, so
+%    there is nothing we need to do here.
+%
+%
+%  \begin{macro}{\@makecol}
+%    \cs{@makecol} is shortened a lot, basically all the hardwired
+%    code in the middle has moved into a configuration point.
+%    \begin{macrocode}
+\def \@makecol {%
+  \@kernel at before@cclv
+  \setbox\@outputbox \box\@cclv
+%    \end{macrocode}
+%    The only real addition is the next command which either does
+%    nothing or removes an infinite glue from the bottom of the
+%    \cs{@outputbox}.
+%    \begin{macrocode}
+  \@outputbox at removebskip
+%    \end{macrocode}
+%    Any ``here'' floats in the \cs{@outputbox} are now handled so we
+%    recycle their registers and put them back to the \cs{@freelist}.
+%    \begin{macrocode}
+  \let\@elt\relax
+  \xdef\@freelist{\@freelist\@midlist}%
+  \global \let \@midlist \@empty
+%    \end{macrocode}
+%    Here we have the configurable part.
+% \fmi{Interface to configuration points will change in the future}
+%    \begin{macrocode}
+  \@makecol at cfgpoint
+%    \end{macrocode}
+%    The we deal with any \cs{enlargethispage} or run the normal code
+%    to build a column.
+%    \begin{macrocode}
+  \ifvbox\@kludgeins
+     \@makespecialcolbox
+  \else
+     \@makenormalcolbox
+  \fi
+  \global \maxdepth \@maxdepth
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@outputbox at depth}
+%    We need to know the depth of \cs{@outputbox} once in a
+%    while. Rather than using a temp dimen (as it was done in the
+%    past), we give it a proper register.
+%    \begin{macrocode}
+\newdimen\@outputbox at depth
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\@makenormalcolbox}
+%    Taken out of \cs{@makecol} for readability.
+%    \begin{macrocode}
+\def \@makenormalcolbox {%
+   \setbox\@outputbox \vbox to\@colht {%
+       \@texttop
+       \@outputbox at depth \dp\@outputbox
+       \unvbox \@outputbox
+       \vskip -\@outputbox at depth
+       \@textbottom
+      }%
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@makespecialcolbox}
+%    Make the colbox when \cs{enlargethispage} was used.
+%    \begin{macrocode}
+\def \@makespecialcolbox {%
+   \@outputbox at append {\vskip-\@outputbox at depth}%
+   \@tempdima \@colht
+   \ifdim \wd\@kludgeins>\z@
+     \advance \@tempdima -\ht\@outputbox
+     \advance \@tempdima \pageshrink
+     \setbox\@outputbox \vbox to \@colht {%
+       \unvbox\@outputbox
+       \vskip \@tempdima
+       \@textbottom
+       }%
+   \else
+     \advance \@tempdima -\ht\@kludgeins
+     \setbox \@outputbox \vbox to \@colht {%
+       \vbox to \@tempdima {%
+         \unvbox\@outputbox
+         \@textbottom}%
+       \vss}%
+   \fi
+   {\setbox \@tempboxa \box \@kludgeins}%
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@outputbox at removebskip}
+%
+%    This is really a bug fix for the kernel but one we only
+%    automatically make in new documents using \cs{DocumentMetadata}.
+%  \fmi{may make optional for legacy docs}
+%    If
+%    \cs{raggedbottom} is in force, footnotes get attached to the main
+%    galley at a distance of \cs{footskip} on all pages except on
+%    those that are ended by \cs{newpage} or \cs{clearpage} where the
+%    \cs{vfil} from \cs{newpage} pushes the footnotes to the very bottom.
+%
+%    This is kind of a weird difference to a page  ending with
+%    \cs{pagebreak}---in that case the page is also run
+%    short, but the footnotes are not pushed to the bottom.
+%
+%    In \pkg{footmisc} \cs{@outputbox at removebskip} is only applied when
+%    \pkg{footmisc} is called with with an option specifying the
+%    footnote placement, i.e., not  in the default case.
+%    In new documents we apply it always.
+%    \begin{macrocode}
+\def\@outputbox at removebskip{%
+%    \end{macrocode}
+%    We first test if we are in a \cs{raggedbottom} layout. If not we
+%    do nothing, but we don't disable the code because
+%    \cs{raggedbottom} may get used only for some parts of the
+%    document.
+%    \begin{macrocode}
+  \ifx\@textbottom\relax \else
+%    \end{macrocode}
+%    We then append some negative glue at the end of \cs{@outputbox}
+%    provided it has a glue stretch order of 1 or more (i.e., contains
+%    a \texttt{fil} or \texttt{fill} part).
+%    \begin{macrocode}
+    \@outputbox at append{%
+      \@tempskipa\lastskip
+      \ifnum \gluestretchorder\@tempskipa>\z@
+        \vskip-\@tempskipa
+%    \end{macrocode}
+%  \begin{macro}{\@outputbox at reinsertbskip}
+%    We also record the value so that it can be reinserted
+%    elsewhere. As we have to do this globally, we also need to
+%    explicitly reset it if we don't find any such glue.
+%    \begin{macrocode}
+        \xdef\@outputbox at reinsertbskip
+            {\noexpand\@outputbox at append{\vskip\the\@tempskipa}}%
+      \else
+        \global\let\@outputbox at reinsertbskip\relax
+      \fi
+    }%
+ \fi
+}
+%    \end{macrocode}
+%    We need a trivial top-level definition for
+%    \cs{@outputbox at reinsertbskip} in case the first page has no
+%    bottom glue and the command gets called.
+%    \begin{macrocode}
+\let\@outputbox at reinsertbskip\relax
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@kernel at before@cclv}
+%  \begin{macro}{\@kernel at before@footins}
+%    These two commands are internal kernel hooks intended for tagging
+%    support in case that is active. By default they do nothing (and
+%    may have been defined already by \cs{DocumentMetadata}).
+%    \begin{macrocode}
+\providecommand\@kernel at before@cclv{}
+\providecommand\@kernel at before@footins{}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%
+%
+% \subsection{The output routine configuration components}
+%
+%    Here we provide the components that are used to define
+%    \cs{@makecol at cfgpoint}.
+%
+%
+%  \begin{macro}{\@outputbox at append}
+%
+%    This general purpose command alters the \cs{@outputbox} box by
+%    appending material to it. As this is a box typesetting operation
+%    we make sure that the last line of the box reflects the true
+%    depth of the last line (in case that is needed later). We also
+%    expose the current depth of \cs{@outputbox} as
+%    \cs{@outputbox at depth} before unboxing so that its value can be
+%    used by \verb=#1= if wanted.
+%    \begin{macrocode}
+\def\@outputbox at append #1{%
+%  \if!\detokenize{#1}!\else
+     \setbox\@outputbox \vbox {%
+       \boxmaxdepth \@maxdepth
+       \@outputbox at depth\dp\@outputbox      % if needed in #1
+       \unvbox \@outputbox
+       #1%
+     }%
+%  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%
+%
+%  \begin{macro}{\@outputbox at appendfootnotes}
+%
+%    This command appends the footnotes to the \cs{@outputbox} (if
+%    there are any). If not then it does nothing.
+%    \begin{macrocode}
+\def\@outputbox at appendfootnotes {%
+   \ifvoid\footins \else
+%    \end{macrocode}
+%    First come two configuration points: what to do if we are in a split
+%    footnote situation and a second one that does some manipulation
+%    of the \cs{footins} box before it gets appended.
+% \fmi{this code will get revised as part of CP handling  in the future}
+%    \begin{macrocode}
+     \@makecol at handlesplitfootnotes
+     \@makecol at cfgpointii
+%    \end{macrocode}
+%    Then the footnotes are appended:
+%    \begin{macrocode}
+     \@outputbox at append{%
+       \vskip \skip\footins
+       \@kernel at before@footins
+       \color at begingroup
+         \normalcolor
+         \footnoterule
+%    \end{macrocode}
+%    Support for \pkg{pdfcolfoot}, eventually this can go once color
+%    is properly supported.
+%    \begin{macrocode}
+         \csname pdfcolfoot at current\endcsname
+         \unvbox \footins
+       \color at endgroup
+      }%
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@outputbox at attachfloats}
+%  \begin{macro}{\@outputbox at attachtopfloats}
+%  \begin{macro}{\@outputbox at attachbottomfloats}
+%    Attaching top and bottom floats can usually be done in one go,
+%    but for special layouts we might want more control so we provide
+%    also separate commands.
+%    \begin{macrocode}
+\let \@outputbox at attachfloats \@combinefloats
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def \@outputbox at attachtopfloats {%
+  \ifx \@toplist\@empty \else \@cflt \fi
+}
+\def \@outputbox at attachbottomfloats {%
+    \ifx \@botlist\@empty \else \@cflb \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%
+%
+%  \begin{macro}{\@makecol at handlesplitfootnotes}
+%  \begin{macro}{\@makecol at splitfootnotemessagehook}
+%    This is only an early draft and doesn't do much.
+%    Contains  incomplete preparation for tagging commented out.
+% \fmi{Interfaces and code will change in the future}
+%    \begin{macrocode}
+\def\@makecol at handlesplitfootnotes {%
+%  \ifx\splitfootnote at continuation\@empty \else
+%    \setbox\footins\vbox{\splitfootnote at continuation\unvbox\footins}%
+%    \global\let\splitfootnote at continuation\@empty
+%  \fi
+  \ifnum\insertpenalties>\z@
+    \@makecol at splitfootnotemessagehook
+%    \setbox\footins\vbox{\unvbox\footins --- END at split}%
+%    \gdef\splitfootnote at continuation    {--- START after split}%
+  \fi
+}
+%\def\splitfootnote at continuation{}
+%    \end{macrocode}
+%    This  could issue warning if split footnotes are encountered.
+%    \begin{macrocode}
+\let \@makecol at splitfootnotemessagehook \@empty
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\@makecol at cfgpointii}
+%
+%    Configuration point to support manipulation of footins box
+%    (result needs to be moved back in there). Used by the
+%    \texttt{para} option.
+% \fmi{Interface will change in the future}
+%    \begin{macrocode}
+\let \@makecol at cfgpointii \@empty
+%    \end{macrocode}
+%
+%  \end{macro}
+%
+%
+%
+% \fmi{Some temp interfaces until configuration points are available.}
+%
+%  \begin{macro}{\@if at flushbottom@TF}
+%    Test for \cs{flushbottom} (currently not used).
+%    \begin{macrocode}
+\def\@if at flushbottom@TF{%
+  \ifx\@textbottom\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@if at footnotes@TF}
+%    Test if footnotes are present on the current page.
+%    \begin{macrocode}
+\def\@if at footnotes@TF{%
+  \ifvoid\footins
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%  \begin{macro}{\@if at bfloats@TF}
+%    Test if bottom floats are around.
+%    \begin{macrocode}
+\def\@if at bfloats@TF{%
+  \ifx \@botlist\@empty
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+% \subsection{The \cs{@makecol} configuration}
+%
+%
+%  \begin{macro}{\@makecol at cfgpoint}
+%
+%    Here is only the configuration for the default case for now,
+%    others are provided by \pkg{footmisc}.
+%
+%    \begin{macrocode}
+    \def\@makecol at cfgpoint {%
+       \@outputbox at appendfootnotes
+       \@outputbox at attachfloats
+%    \end{macrocode}
+%    We do, however, reinsert the bottom skip from \cs{newpage} if it
+%    was taken out earlier. This is, strictly speaking, not necessary
+%    in most cases, but it is a \cs{vfil} while \cs{raggedbottom} is
+%    only generating \verb=\vspace{0pt plus .0001fil}=, so if you have
+%    several \cs{vfil} on the page before the \cs{newpage} you would
+%    alter the space distribution if one is taken out.
+%    \begin{macrocode}
+       \@outputbox at reinsertbskip
+    }
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+% \section  {Replacement for the \pkg{footmisc} package}
+%
+%    The replacement for \pkg{footmisc}. If the new code is used, we must replace
+%    the package if it is loaded by the user:
+%    \begin{macrocode}
+\declare at file@substitution{footmisc.sty}{latex-lab-footmisc.ltx}
+%    \end{macrocode}
+%
+%
+%
+% \section {Temp stuff that is related but should go to the kernel}
+%
+%    \begin{macrocode}
+\input{latex-lab-footnotes.ltx}
+%    \end{macrocode}
+%
+%
+%    \begin{macrocode}
+%</code>
+%    \end{macrocode}
+%
+% \Finale
+%


Property changes on: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-new-or.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,827 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-prototype.dtx
+%
+% Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle
+%           (C) 2004-2010 Frank Mittelbach, The LaTeX Project
+%           (C) 2011-2022 The LaTeX 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
+%
+%    https://www.latex-project.org/lppl.txt
+%
+% This file is part of the "latex-lab bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+%    https://github.com/latex3/latex2e
+%
+% for those people who are interested.
+%
+%<*driver>
+\documentclass[full]{l3doc}
+\begin{document}
+  \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+%   The \textsf{latex-lab-prototype} package\\ Prototype document functions^^A
+% }
+%
+% \author{^^A
+%  The \LaTeX{} Project\thanks
+%    {^^A
+%      E-mail:
+%        \href{mailto:latex-team at latex-project.org}
+%          {latex-team at latex-project.org}^^A
+%    }^^A
+% }
+%
+% \date{Released 2022-03-09}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+% \bigskip
+%
+% \begin{documentation}
+%
+% There are three broad \enquote{layers} between putting down ideas into
+% a source file and ending up with a typeset document. These layers of
+% document writing are
+% \begin{enumerate}
+%   \item authoring of the text with mark-up;
+%   \item document layout design;
+%   \item implementation (with \TeX{} programming) of the design.
+% \end{enumerate}
+% We write the text as an author, and we see the visual output of the design
+% after the document is generated; the \TeX{} implementation in the middle is
+% the glue between the two.
+%
+% \LaTeX{}'s greatest success has been to standardise a system of mark-up that
+% balances the trade-off between ease of reading and ease of writing to suit
+% almost all forms of technical writing. It's
+% other original strength was a good background in typographical design; while
+% the standard \LaTeXe{} classes look somewhat dated now in terms of their
+% visual design, their typography is generally sound. (Barring the occasional
+% minor faults.)
+%
+% However, \LaTeXe{} has always lacked a standard approach to customising
+% the visual design of a document. Changing the looks of the standard classes
+% involved either:
+% \begin{itemize}
+%   \item Creating a new version of the implementation code of the class and
+%     editing it.
+%   \item Loading one of the many packages to customise certain elements of
+%     the standard classes.
+%   \item Loading a completely different document class, such as
+%     \textsf{KOMA-Script} or \textsf{memoir}, that allows easy customisation.
+% \end{itemize}
+% All three of these approaches have their drawbacks and learning curves.
+%
+% The idea behind this module is to cleanly separate the three layers
+% introduced at the beginning of this section, so that document authors who
+% are not programmers can easily change the design of their documents.
+% The approach here also makes it easier for \LaTeX{} programmers to provide
+% their own customisations on top of a pre-existing class.
+%
+% \section{What is a document?}
+%
+% Besides the textual content of the words themselves, the source file
+% of a document contains mark-up elements that add structure to the
+% document. These elements include sectional divisions, figure/table
+% captions, lists of various sorts, theorems/proofs, and so on.
+% The list will be different for every document that can be written.
+%
+% Each element can be represented logically without worrying about the
+% formatting, with mark-up such as \cs{section}, \cs{caption},
+% |\begin{enumerate}| and so on. The output of each one of these
+% document elements will be a typeset representation of the information
+% marked up, and the visual arrangement and design of these elements
+% can vary widely in producing a variety of desired outcomes.
+%
+% For each type of document element, there may be design variations that
+% contain the same sort of information but present it in slightly
+% different ways. For example, the difference between a numbered and an
+% unnumbered section, \cs{section} and |\section*|, or the difference
+% between an itemised list or an enumerated list.
+%
+% There are three distinct layers in the definition of
+% \enquote{a document} at this level
+% \begin{enumerate}
+%   \item semantic elements such as the ideas of sections and lists;
+%   \item a set of design solutions for representing these elements
+%     visually;
+%   \item specific variations for these designs that represent the
+%     elements in the document.
+% \end{enumerate}
+% In the parlance of the template system, these are called object types,
+% templates, and instances, and they are discussed below in sections
+% \ref{sec:objects}, \ref{sec:templates}, and~\ref{sec:instances},
+% respectively.
+%
+% By formally declaring documents to be composed of mark-up elements
+% grouped into objects, which are interpreted and typeset with a set of
+% templates, each of which has one or more instances with which to
+% compose each and every semantic unit of the text, we can cleanly
+% separate the components of document construction.
+%
+% \section{Object types}
+% \label{sec:objects}
+%
+% An \emph{object type} (sometimes just \enquote{object}) is an
+% abstract idea of a document element that takes a fixed number of
+% arguments corresponding to the information from the document author
+% that it is representing. A sectioning object, for example, might take
+% three inputs: \enquote{title}, \enquote{short title}, and
+% \enquote{label}.
+%
+% Any given document class will define which object types are to be
+% used in the document, and any template of a given object type can be
+% used to generate an instance for the object. (Of course, different
+% templates will produce different typeset representations, but the
+% underlying content will be the same.)
+%
+% \begin{function}{\prototype_declare_object:nn}
+%   \begin{syntax}
+%     \cs{prototype_declare_object:nn} \Arg{object type} \Arg{no.~of args}
+%   \end{syntax}
+%  This function defines an \meta{object type} taking
+%  \meta{no.~of arguments}, where the \meta{object type} is an
+%  abstraction as discussed above. For example,
+%   \begin{verbatim}
+%     \prototype_declare_object:nn { sectioning } { 3 }
+%   \end{verbatim}
+%  creates an object type \enquote{sectioning}, where each use of that
+%  object type will need three arguments.
+%
+%  While not formally verified the semantics of all arguments are part
+%  of the object declaration and need to be carefully documented in
+%  order to make the use of different templates for the same object
+%  type meaningful.
+% \end{function}
+%
+% \section{Templates}
+% \label{sec:templates}
+%
+% A \emph{template} is a generalised design solution for representing
+% the information of a specified object type. Templates that do the same
+% thing, but in different ways, are grouped together by their object type
+% and given separate names. There are two important parts to a template:
+% \begin{itemize}
+%   \item the parameters it takes to vary the design it is producing;
+%   \item the implementation of the design.
+% \end{itemize}
+%
+% \begin{function}{\prototype_declare_template:nnnn}
+%   \begin{syntax}
+%     \cs{prototype_declare_template:nnnn}
+%     ~~\Arg{object type} \Arg{template}
+%     ~~\Arg{key definitions} \Arg{code}
+%   \end{syntax}
+%   A \meta{template} interface is declared for a particular
+%   \meta{object type}. The interface itself is
+%   defined by the \meta{key definitions}, which is itself a key--value list
+%   using the same interface as \cs{keys_define:nn}. (The keys created
+%   here \emph{are} managed \pkg{l3keys} in the tree
+%   \texttt{prototype/\meta{object}/\meta{template}}). As described below,
+%   the keys should be defined such that they can be set multiple times:
+%   first to a default value, then to a specific value for an instance
+%   and finally to a per-use override.
+%
+%   The \meta{code} argument of \cs{template_declare_template:nnnn} is used
+%   as the replacement text for the template when it is used, either
+%   directly or as an instance. This may therefore accept arguments
+%   |#1|, |#2|, \emph{etc}.~as detailed by the \meta{number of arguments}
+%   taken by the object type. The template and instance key values (see
+%   below) are assigned before the \meta{code} is inserted.
+% \end{function}
+%
+% \begin{function}{\prototype_declare_defaults:nnn}
+%   \begin{syntax}
+%     \cs{prototype_declare_template:nnnn}
+%     ~~\Arg{object type} \Arg{template} \Arg{defaults}
+%   \end{syntax}
+%   Sets the default values for each \meta{key} in a \meta{template}. When
+%   a template is used, these values are applied first \emph{before} those
+%   set by \cs{prototype_use_template:nnn} or
+%   \cs{prototype_declare_instance:nnnn}. If not default is given, the
+%   prevailing state when the template is used will apply.
+% \end{function}
+%
+% \section{Instances}
+% \label{sec:instances}
+%
+% After a template is defined it still needs to be put to use. The
+% parameters that it expects need to be defined before it can be used in
+% a document. Every time a template has parameters given to it, an
+% \emph{instance} is created, and this is the code that ends up in the
+% document to perform the typesetting of whatever pieces of information
+% are input into it.
+%
+% For example, a template might say \enquote{here is a section with or
+% without a number that might be centred or left aligned and print its
+% contents in a certain font of a certain size, with a bit of a gap
+% before and after it} whereas an instance declares \enquote{this is a
+% section with a number, which is centred and set in $12\,\text{pt}$
+% italic with a $10\,\text{pt}$ skip before and a
+% $12\,\text{pt}$ skip after it}. Therefore, an instance is just a
+% frozen version of a template with specific settings as chosen by the
+% designer.
+%
+% \begin{function}{\prototype_declare_instance:nnnn}
+%   \begin{syntax}
+%     \cs{prototype_declare_instance:nnnn}
+%     ~~\Arg{object type} \Arg{template} \Arg{instance} \Arg{parameters}
+%   \end{syntax}
+%   This function uses a \meta{template} for an \meta{object type}
+%   to create an \meta{instance}. The \meta{instance} will be set
+%   up using the \meta{parameters}, which will set some of the
+%   \meta{keys} in the \meta{template}.
+%
+%   As a practical example, consider an object type for document sections
+%   (which might include chapters, parts, sections, \emph{etc}.), which
+%   is called \texttt{sectioning}. One possible template for this
+%   object type might be called \texttt{basic}, and one instance of this
+%   template would be a numbered section. The instance declaration might
+%   read:
+%   \begin{verbatim}
+%     \prototype_declare_instance:nnnn { sectioning } { basic } { section-num }
+%       {
+%         numbered      = true ,
+%         justification = center ,
+%         font          = \normalsize\itshape ,
+%         before-skip   = 10pt ,
+%         after-skip    = 12pt ,
+%       }
+%   \end{verbatim}
+%   Of course, the key names here are entirely imaginary, but illustrate
+%   the general idea of fixing some settings.
+% \end{function}
+%
+% \section{Document interface}
+%
+% After the instances have been chosen, document commands must be
+% declared to use those instances in the document.
+% \cs{prototype_use_instance:nn}
+% calls instances directly, and this command should be used internally
+% in document-level mark-up.
+%
+% \begin{function}{\prototype_use_instance:nn, \prototype_use_instance:nnn}
+%   \begin{syntax}
+%     \cs{prototype_use_instance:nn}
+%     ~~\Arg{object type} \Arg{instance} \meta{arguments}
+%     \cs{prototype_use_instance:nn}n
+%     ~~\Arg{object type} \Arg{instance} \Arg{overrides} \meta{arguments}
+%   \end{syntax}
+%   Uses an \meta{instance} of the \meta{object type}, which will require
+%   \meta{arguments} as determined by the number specified for the
+%   \meta{object type}. The \meta{instance} must have been declared
+%   before it can be used, otherwise an error is raised. The \texttt{nnn}
+%   version allows for local overrides of the instance settings using the
+%   additional keyval argument.
+% \end{function}
+%
+% \begin{function}{\prototype_use_template:nnnn}
+%   \begin{syntax}
+%     \cs{prototype_use_template:nnnn} \Arg{object type} \Arg{template}
+%     ~~\Arg{settings} \meta{arguments}
+%   \end{syntax}
+%   Uses the \meta{template} of the specified \meta{object type},
+%   applying the \meta{settings} and absorbing \meta{arguments} as
+%   detailed by the \meta{object type} declaration. This in effect
+%   is the same as creating an instance using
+%   \cs{template_declare_instance:nnnn} and immediately using it with
+%   \cs{template_use_instance:nnn}, but without the instance having any
+%   further existence. It is therefore useful where a template needs to
+%   be used once.
+% \end{function}
+%
+% \section{Showing template information}
+%
+% \begin{function}
+%   {
+%     \prototype_show_template_code:nn     ,
+%     \prototype_show_template_defaults:nn ,
+%     \prototype_show_instance_values:nn
+%   }
+%   \begin{syntax}
+%     \cs{prototype_show_template_code:nn} \Arg{object type} \Arg{template}
+%     \cs{prototype_show_template_defaults:nn} \Arg{object type} \Arg{template}
+%     \cs{prototype_show_instance_values:nn} \Arg{object type} \Arg{instance}
+%   \end{syntax}
+%   Show information about a declare template or instance for
+%   debugging purposes.
+% \end{function}
+%
+% \section{Open questions and comparison with \pkg{xtemplate}}
+%
+% The approach here is modelled on that from \pkg{xtemplate}, but since it uses
+% \pkg{l3keys} rather than dedicated key handling, there are some differences.
+% There is also a simplification in that collections are not supported
+% (because we now think that they provided the wrong kind of abstraction).
+%
+% The various open questions, including those linked to \pkg{xtemplate}
+% concepts, are collected here.
+%
+% \subsection{Module name}
+%
+% This is currently open for ideas: traditionally \texttt{template} has
+% been used. This may link to the need for both templates and instances
+% (\emph{vide infra}).
+%
+% \subsection{Design-level names}
+%
+% These are currently not provided. That allows both this code and
+% \pkg{xtemplate} to be loaded in the same document. We will likely want
+% to decide on these names: they could for example include
+% \texttt{Prototype} or \texttt{Design}, or could use the existing
+% \pkg{xtemplate} if a compatibility approach can be designed.
+%
+% \subsection{Objects}
+%
+% Is this name clear? A possible alternative is `element'.
+%
+% \subsection{Efficiency and repetition of key setting}
+%
+% In the \pkg{xtemplate} implementation, keys values are stored in property
+% lists before being applied. This means that when creating an instance, the
+% template defaults can be replaced entirely by any instance values. In
+% contrast, the approach here simply precompiles all of the template defaults,
+% then appends the precompiled list from the instance. Some variables are
+% therefore set twice. More importantly, this means that arbitrary code
+% could be executed twice: authors need to be aware of this.
+%
+% \subsection{Key ordering}
+%
+% Linked to the previous idea, in \pkg{xtemplate} keys are set in the
+% order they are declared in the setup. In contrast, using \pkg{l3keys}
+% they are set in the order the keys are given in the input. Is this OK?
+%
+% \subsection{Setting defaults}
+%
+% The current approach requires setting the defaults separately from
+% the key creation. That means listing keys twice. However, it also
+% avoids further overloading of the keyval setup. Is this reasonable?
+%
+% \subsection{The need for templates and instances}
+%
+% In \pkg{xtemplate}, storing keys in a \texttt{prop} means that there
+% is a real efficiency when creating an instance. In contrast, using
+% precompiled keys here, creating a template and creating an instance
+% are almost identical. Could we drop the distinction? That would then
+% work well if we allowed instances to be derived from others: effectively
+% the same as instances from templates, but with a `flatter' approach.
+%
+% \subsection{Assignment of key values}
+%
+% The \pkg{xtemplate} approach uses \cs{AssignTemplateKeys} to
+% specify when keys are assigned. In contrast, here key assignment is
+% automatic. If you look over \TeX{} Live, the only places that
+% \cs{AssignTemplateKeys} is not the first thing in the code are in limited
+% use cases in \pkg{enotez} and \pkg{xgalley}. In both packages, that's because
+% they want to limit the scope of assignment. In \pkg{enotez} the key setting
+% is placed inside a group, whereas in \pkg{xgalley} there is a
+% save-and-restore approach as a group is not possible. Both of those use-cases
+% could be covered in other ways: it's a question of setting up the template
+% keys so they assign to an intermediate variable, then assigning those as
+% necessary to the live ones for these cases.
+%
+% The main reason for not using \cs{AssignTemplateKeys} is that the common
+% case doesn't need it. We could of course stick to an explicit-assignment
+% approach, or have two variants or template-creation, etc., where assignment
+% is manual in one of them. 
+%
+% \subsection{Values from other keys}
+%
+% The \pkg{xtemplate} approach offers \cs{KeyValue} to pass the value of
+% one key as the default for another. That relies on the fact that key
+% setting is ordered (\emph{vide supra}). It also means that there is
+% some code to check for this as part of key setting: it's non-trivial
+% to support. The current \pkg{l3keys}-based code doesn't offer this.
+% Instead one could use for example meta keys. That is a different
+% interface and might occasionally be awkward. We can add some
+% \texttt{.store-value:n} property to allow a \cs{keys_value:nn} approach,
+% but without key ordering it might still not work in the same way.
+%
+% \subsection{The nature of debugging data}
+%
+% Due to the differences in data storage, the \pkg{xtemplate} method offers
+% a richer ability to debug template internals than the one here. We can look
+% at \emph{e.g.}\ tracking all keys for a template to make this easier.
+% It is worth noting that much of this data is really something that
+% should be part of the documentation anyway. Also, it would be trivial
+% to save the raw defaults and do the `hard' processing only if asked
+% to show the values (\emph{i.e.}\ using code similar to that in
+% \pkg{xtemplate}).
+%
+% \subsection{Collections}
+%
+% These are not implemented at all: we likely want a new approach to
+% contexts.
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{latex-lab-prototype} Implementation}
+%
+% \subsection{File declaration}
+%    \begin{macrocode}
+%<*package>
+\ProvidesFile{latex-lab-prototype.sty}
+  [2022-03-09 v0.1b Experimental prototype document functions]
+%</package>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*2ekernel>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ExplSyntaxOn
+%    \end{macrocode}
+%
+% \subsection{\cs{keys_precompile:nnN}}
+%
+%    \begin{macrocode}
+%<@@=keys>
+%    \end{macrocode}
+%
+% This may not yet be available in \pkg{expl3} so we ensure it is set up
+% here: all temporary. We just redefine those internals that need it.
+%    \begin{macrocode}
+\tl_if_exist:NF \l_@@_precompile_tl
+  {
+    \bool_new:N \l_@@_precompile_bool
+    \tl_new:N \l_@@_precompile_tl
+  }
+\cs_gset_protected:Npn \@@_precompile:n #1
+  {
+    \bool_if:NTF \l_@@_precompile_bool
+      { \tl_put_right:Nn \l_@@_precompile_tl }
+      { \use:n }
+        {#1}
+  }
+\cs_gset_protected:Npn \@@_bool_set:Nnnn #1#2#3#4
+  {
+    \bool_if_exist:NF #1 { \bool_new:N #1 }
+    \@@_choice_make:
+    \@@_cmd_set:nx { \l_keys_path_str / true }
+      { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
+    \@@_cmd_set:nx { \l_keys_path_str / false }
+      { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
+    \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
+      {
+        \msg_error:nnx { keys } { boolean-values-only }
+          \l_keys_key_str
+      }
+    \@@_default_set:n { true }
+  }
+\cs_gset_protected:Npn \@@_choice_make_aux:N #1
+  {
+    \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str }
+      { choice }
+    \@@_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
+    \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
+      {
+        \msg_error:nnxx { keys } { choice-unknown }
+          \l_keys_path_str {##1}
+      }
+  }
+\cs_gset_protected:Npn \@@_cmd_set:nn #1#2
+  {  \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } }
+\cs_gset_protected:Npn \@@_cmd_set_direct:nn #1#2
+  { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} }
+\cs_gset_protected:Npn \@@_cs_set:NNpn #1#2#3#
+  {
+    \cs_set_protected:cpx { \c_@@_code_root_str \l_keys_path_str } ##1
+      {
+        \@@_precompile:n
+          { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+      }
+    \use_none:n
+  }
+\cs_gset_protected:Npn \@@_meta_make:n #1
+  {
+    \exp_args:NVo \@@_cmd_set_direct:nn \l_keys_path_str
+      {
+        \exp_after:wN \keys_set:nn \exp_after:wN 
+          { \l_@@_module_str } {#1}
+      }
+  }
+\cs_gset_protected:Npn \@@_meta_make:nn #1#2
+  {
+    \exp_args:NV \@@_cmd_set_direct:nn
+      \l_keys_path_str { \keys_set:nn {#1} {#2} }
+  }
+\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
+  {
+    \bool_set_true:N \l_@@_precompile_bool
+    \tl_clear:N \l_@@_precompile_tl
+    \keys_set:nn {#1} {#2}
+    \bool_set_false:N \l_@@_precompile_bool
+    \tl_set_eq:NN #3 \l_@@_precompile_tl
+  }
+\cs_gset_protected:Npn \@@_show:Nnn #1#2#3
+  {
+    #1 { keys } { show-key }
+      { \@@_trim_spaces:n { #2 / #3 } }
+      {
+        \keys_if_exist:nnT {#2} {#3}
+          {
+            \exp_args:Nnf \msg_show_item_unbraced:nn { code }
+              {
+                \exp_args:Ne \@@_show:n
+                  {
+                    \exp_args:Nc \cs_replacement_spec:N
+                    {
+                      \c_@@_code_root_str
+                      \@@_trim_spaces:n { #2 / #3 }
+                    }
+                  }
+              }
+          }
+      }
+      { } { }
+  }
+\cs_gset:Npx \@@_show:n #1
+  {
+    \exp_not:N \@@_show:w
+      #1
+      \tl_to_str:n { \@@_precompile:n }
+      #1
+      \tl_to_str:n { \@@_precompile:n }
+      \exp_not:N \s_@@_stop
+  }
+\use:x
+  {
+    \cs_gset:Npn \exp_not:N \@@_show:w
+      ##1 \tl_to_str:n { \@@_precompile:n }
+      ##2 \tl_to_str:n { \@@_precompile:n }
+      ##3 \exp_not:N \s_@@_stop
+  }
+  {
+    \tl_if_blank:nTF {#2}
+      {#1}
+      { \@@_show:Nw #2 \s_@@_stop }
+  }
+\use:x
+  {
+    \cs_gset:Npn \exp_not:N \@@_show:Nw ##1##2
+      \c_right_brace_str \exp_not:N \s_@@_stop
+  }
+  {#2}
+%    \end{macrocode}
+%
+% \subsection{Setup}
+%
+%    \begin{macrocode}
+%<@@=prototype>
+%    \end{macrocode}
+%
+% \begin{variable}{\l_@@_tmp_tl}
+%    \begin{macrocode}
+\tl_new:N \l_@@_tmp_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsection{Data structures}
+%
+% \begin{variable}{\l_@@_object_prop}
+%    \begin{macrocode}
+\prop_new:N \l_@@_object_prop
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsection{Creating objects}
+%
+% \begin{macro}{\prototype_declare_object:nn, \@@_declare_object:nn}
+%   Although the object type is the \enquote{top level} of the template
+%   system, it is actually very easy to implement. All that happens is that
+%   the number of arguments required is recorded, indexed by the name of the
+%   object type.
+%    \begin{macrocode}
+\cs_new_protected:Npn \prototype_declare_object:nn #1#2
+  {
+    \exp_args:Nx \@@_declare_object:nn { \int_eval:n {#2} } {#1}
+  }
+\cs_new_protected:Npn \@@_declare_object:nn #1#2
+  {
+    \int_compare:nTF { 0 <= #1 <= 9 }
+      {
+        \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
+        \prop_put:Nnn \l_@@_object_prop {#2} {#1}
+      }
+      { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Templates and instances}
+%
+% \begin{variable}{\l_@@_assignments_tl}
+%   Used to insert the set keys.
+%    \begin{macrocode}
+\tl_new:N \l_@@_assignments_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\prototype_declare_template:nnnn}
+% \begin{macro}{\prototype_declare_defaults:nnn}
+%   Creating a template means defining the keys, storing the defaults and
+%   creating the function. The defaults are done separately from the other
+%   parts as that fits the \pkg{l3keys} pattern but also makes it easy to
+%   alter that aspect without changing the core implementation.
+%    \begin{macrocode}
+\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
+  {
+    \prop_get:NnNTF \l_@@_object_prop {#1} \l_@@_tmp_tl
+      {
+        \keys_define:nn { prototype / #1 / #2 } {#3}
+        \tl_clear_new:c { l_@@_defaults_ #1 _ #2 _tl }
+        \cs_generate_from_arg_count:cNnn
+          { @@_template_ #1 _ #2 :w }
+          \cs_set_protected:Npn
+          { \l_@@_tmp_tl }
+          {
+            \tl_use:N \l_@@_assignments_tl
+            #4
+          }
+      }
+      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+  }
+\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
+  {
+    \cs_if_exist:cTF { @@_template_ #1 _ #2 :w }
+      { \tl_set:cn { l_@@_defaults_ #1 _ #2 _tl } {#3} }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
+%    \end{macrocode}
+%
+% \begin{macro}{\prototype_use_template:nnn}
+% \begin{macro}{\prototype_declare_instance:nnnn}
+% \begin{macro}{\@@_declare_aux:nnnn}
+%   Using a template and creating an instance are the same thing other
+%   than the final step: using the template or storing the key settings.
+%   We do not attempt to maximise efficiency in setting, rather we have
+%   a clear approach in which the final assignments may have multiple
+%   entries.
+%    \begin{macrocode}
+\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
+  {
+    \@@_declare_aux:nnnn {#1} {#2} {#3}
+      { \use:c { @@_template_ #1 _ #2 :w } }
+  }
+\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
+  {
+    \@@_declare_aux:nnnn {#1} {#2} {#4}
+      {
+        \tl_clear_new:c { l_@@_instance_ #1 _ #3 _pars_tl }
+        \tl_set_eq:cN { l_@@_instance_ #1 _ #3 _pars_tl }
+          \l_@@_assignments_tl
+         \tl_clear_new:c { l_@@_instance_ #1 _ #3 _template_tl }
+         \tl_set:cn { l_@@_instance_ #1 _ #3 _template_tl } {#2}
+      }
+  }
+\cs_new_protected:Npn \@@_declare_aux:nnnn #1#2#3#4
+  {
+    \cs_if_exist:cTF { @@_template_ #1 _ #2 :w }
+      {
+        \keys_precompile:nvN
+          { prototype / #1 / #2 }
+          { l_@@_defaults_ #1 _ #2 _tl }
+          \l_@@_assignments_tl
+        \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l_@@_tmp_tl
+        \tl_put_right:NV \l_@@_assignments_tl \l_@@_tmp_tl
+        #4
+      }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\prototype_use_instance:nn}
+% \begin{macro}{\prototype_use_instance:nnn}
+%   Recover the values and insert the code.
+%    \begin{macrocode}
+\cs_new_protected:Npn \prototype_use_instance:nn #1#2
+  { \prototype_use_instance:nnn {#1} {#2} { } }
+\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
+  {
+    \tl_if_exist:cTF { l_@@_instance_ #1 _ #2 _template_tl }
+      {
+        \tl_set_eq:Nc \l_@@_assignments_tl
+          { l_@@_instance_ #1 _ #2 _pars_tl }
+        \tl_if_blank:nF {#3}
+          {
+            \keys_precompile:vnN
+              {
+                prototype / #1 /
+                \tl_use:c { l_@@_instance_ #1 _ #2 _template_tl }
+              }
+              {#3}
+              \l_@@_tmp_tl
+            \tl_put_right:NV \l_@@_assignments_tl
+              \l_@@_tmp_tl
+          }
+        \use:c
+          {
+            @@_template_ #1 _
+            \tl_use:c { l_@@_instance_ #1 _ #2 _template_tl }
+            :w
+          }
+      }
+      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Showing information}
+%
+% \begin{macro}
+%   {
+%     \prototype_show_template_code:nn     ,
+%     \prototype_show_template_defaults:nn ,
+%     \prototype_show_instance_values:nn
+%   }
+%    \begin{macrocode}
+\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
+  {
+    \prop_if_in:NnTF \l_@@_object_prop {#1}
+      { \cs_show:c { @@_template_ #1 _ #2 :w } }
+      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+  }
+\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
+  {
+    \cs_if_exist:cTF { @@_template_ #1 _ #2 :w }
+      { \tl_show:c { l_@@_defaults_ #1 _ #2 _tl } }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
+  {
+    \tl_if_exist:cTF { l_@@_instance_ #1 _ #2 _template_tl }
+      { \tl_show:c { l_@@_instance_ #1 _ #2 _pars_tl } }
+      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Messages}
+%
+%    \begin{macrocode}
+\msg_new:nnnn { prototype } { bad-number-of-arguments }
+  { Bad~number~of~arguments~for~object~type~'#1'. }
+  {
+    An~object~may~accept~between~0~and~9~arguments.\\
+    You~asked~to~use~#2~arguments:~this~is~not~supported.
+  }
+\msg_new:nnnn { prototype } { unknown-instance }
+  { The~instance~'#2'~of~type~'#1'~is~unknown. }
+  {
+    You~have~asked~to~use~an~instance~'#2',~
+    but~this~has~not~been~created.
+  }
+\msg_new:nnnn { prototype } { unknown-object-type }
+  { The~object~type~'#1'~is~unknown. }
+  { An~object~type~needs~to~be~declared~prior~to~using~it. }
+\msg_new:nnnn { prototype } { unknown-template }
+  { The~template~'#2'~of~type~'#1'~is~unknown. }
+  {
+    No~interface~has~been~declared~for~a~template~
+    '#2'~of~object~type~'#1'.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\msg_new:nnn { prototype } { declare-object-type }
+  { Declaring~object~type~'#1'~taking~#2~argument(s). }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</2ekernel>
+%    \end{macrocode}
+%
+% \end{implementation}


Property changes on: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-testphase.dtx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-testphase.dtx	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-testphase.dtx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -41,18 +41,27 @@
 % \section{Introduction}
 %
 %    This code implements small files which can be loaded with the |testphase|
-%    key of \cs{DocumentMetadata}. Currently it only contains a
-%    wrapper for \pkg{tagpdf}, but this will be extended to allow user to load
+%    key of \cs{DocumentMetadata}. This will be extended to allow user to load
 %    well defined parts of the tagged PDF project.
+%    Currently the values |phase-I|, |phase-II| and |new-or| are provided.
+%    |tagpdf| is an undocumented alias for |phase-II| which is kept for compability.
 %
 %
-%
 % \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
 %
 % \section{The Implementation}
-%
+%  New output routine code is loaded in phase-II and new-or:
 %    \begin{macrocode}
+%<*tagpdf|phase-II|new-or>
+\IfFileExists{latex-lab-testphase-new-or.sty}
+ {
+   \RequirePackage{latex-lab-testphase-new-or}
+ }
+ {}
+%</tagpdf|phase-II|new-or>
+%    \end{macrocode}
+%    \begin{macrocode}
 %<*tagpdf|phase-I|phase-II>
 %    \end{macrocode}
 %

Added: branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins
===================================================================
--- branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,87 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the dtx file(s) in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright (C) 2021-2022 The LaTeX Project
+%%
+%%
+%% This file is part of the `LaTeX-lab Bundle' for LaTeX.
+%% -------------------------------------------------------------------
+%%
+%% 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.
+%%
+%% In particular, NO PERMISSION is granted to modify the contents of this
+%% file since it contains the legal notices that are placed in the files
+%% it generates.
+%%
+%%
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\input docstrip
+
+\keepsilent
+
+\usedir{tex/latex/contrib/latex-lab}
+
+\preamble
+
+This is a generated file.
+
+Copyright 2021,2022 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.
+
+
+\endpreamble
+
+
+\generate{\file{documentmetadata-support.ltx}{\from{documentmetadata-support.dtx}{code}}}
+
+% files that should be loadable with the testphase key should use the naming scheme
+% #1-latex-lab-testphase.ltx
+\generate{\file{phase-I-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-I}}}
+\generate{\file{phase-II-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-II}}}
+
+\generate{\file{tagpdf-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{tagpdf}}}
+\generate{\file{new-or-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{new-or}}}
+
+% support files (the new-or code is a private package to make life easier)
+
+\generate{\file{latex-lab-testphase-new-or.sty}{\from{latex-lab-new-or.dtx}{code}}}
+\generate{\file{latex-lab-footmisc.ltx}{\from{latex-lab-footnotes.dtx}{footmisc}}}
+\generate{\file{latex-lab-footnotes.ltx}{\from{latex-lab-footnotes.dtx}{kernel}}}
+
+% for \DocumentMetadata trials
+\generate{\file{prototype-latex-lab-testphase.ltx}{\from{latex-lab-prototype.dtx}{2ekernel}}}
+
+% for standalone trials
+\generate{\file{latex-lab-prototype.sty}{\from{latex-lab-prototype.dtx}{2ekernel}}}
+
+\endbatchfile

Modified: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
 %% 
 %% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
 %% ------------------------------------------------------------------------------------
@@ -141,9 +141,11 @@
       {
         \tl_gput_right:Nn\g__pdfmanagement_testphase_tl
            {
+             \AddToDocumentProperties [document]{testphase/#1}{loaded}
              \file_if_exist_input:nF {#1-latex-lab-testphase.ltx}
               {
                  \msg_warning:nnn{meta}{latex-lab-pkg-missing}{#1}
+                 \AddToDocumentProperties [document]{testphase/#1}{missing}
               }
            }
       }

Added: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,630 @@
+%%
+%% This is file `latex-lab-footmisc.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-footnotes.dtx  (with options: `footmisc')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021,2022 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-footnotes.dtx
+%%
+%% Copyright (c) 1995-2011 Robin Fairbairns
+%% Copyright (c) 2018-2022 Robin Fairbairns, Frank Mittelbach
+%%
+%% This file is part 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
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This work has the LPPL maintenance status 'maintained'.
+%%
+%%
+%% File: footmisc.dtx (C) Copyright 1995-2011 Robin Fairbairns
+%%                    (C) Copyright 2018-2022 Frank Mittelbach
+\NeedsTeXFormat{LaTeX2e}
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+
+\DeclareRelease{v5}{2011-06-06}{footmisc-2011-06-06.sty}
+\DeclareCurrentRelease{}{2022-02-14}
+\ProvidesPackage{latex-lab-footmisc}%
+        [2022/03/08 v6.0d
+     a miscellany of footnote facilities -- latex-lab version%
+                   ]
+
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\newtoks\FN at temptoken
+\providecommand\protected at writeaux{%
+  \protected at write\@auxout
+}
+\def\l at advance@macro{\@@dvance at macro\edef}
+\def\@@dvance at macro#1#2#3{\expandafter\@tempcnta#2\relax
+  \advance\@tempcnta#3\relax
+  #1#2{\the\@tempcnta}%
+}
+\let\@advance at macro\l at advance@macro
+\DeclareOption{symbol}{\renewcommand\thefootnote{\fnsymbol{footnote}}}
+\newif\ifFN at robust \FN at robustfalse
+\DeclareOption{symbol*}{%
+  \renewcommand\thefootnote{\@fnsymbol\c at footnote}%
+  \FN at robusttrue
+  \AtEndOfPackage{\setfnsymbol{lamport*-robust}}%
+}
+\newif\ifFN at para  \FN at parafalse
+\DeclareOption{para}{%
+  \FN at paratrue
+  \setlength\footnotemargin{-\maxdimen}    % default when para is used
+}
+\DeclareOption{side}{\ifFN at para
+    \PackageError{footmisc}{Option "\CurrentOption" incompatible with
+                            option "para"}%
+                 {I shall ignore "\CurrentOption"}%
+  \else
+    \def\@footnotetext at cfgpoint {\marginpar}
+    \AddToHook{fntext/para}{%
+      \hsize\marginparwidth     % correct the default \hsize
+      \footnotesep\z@           % don't add a default separation
+    }
+    \def\@footnotetext at cfgpointii  {\@makefntext}
+    \def\@footnotetext at cfgpointiii {}
+    \def\@footnotetext at cfgpointiv  {}
+  \fi
+}
+\let\footnotelayout\@empty
+\DeclareOption{ragged}{%
+  \@ifundefined{RaggedRight}%
+    {\renewcommand\footnotelayout{\linepenalty50 \raggedright}}%
+    {\renewcommand\footnotelayout{\linepenalty50 \RaggedRight}}%
+}
+\newif\ifFN at perpage
+\FN at perpagefalse
+\DeclareOption{perpage}{%
+  \FN at perpagetrue
+}
+\newif\ifFN at fixskip      \FN at fixskipfalse
+
+\let\FN at bottomcases\thr@@
+\newif\ifFN at abovefloats  \FN at abovefloatstrue
+\DeclareOption{bottom}{%
+  \let\FN at bottomcases\@ne
+  \FN at abovefloatsfalse
+  \FN at fixskiptrue
+}
+\DeclareOption{bottomfloats}{%
+  \let\FN at bottomcases\tw@
+  \FN at abovefloatstrue \FN at fixskiptrue
+}
+\DeclareOption{abovefloats}{\FN at abovefloatstrue  \FN at fixskiptrue}
+\DeclareOption{belowfloats}{\FN at abovefloatsfalse \FN at fixskiptrue}
+\DeclareOption{marginal}{%
+  \footnotemargin-0.8em\relax
+}
+\DeclareOption{flushmargin}{%
+  \footnotemargin0pt\relax
+}
+\newif\ifFN at hangfoot  \FN at hangfootfalse
+\DeclareOption{hang}{%
+  \FN at hangfoottrue
+}
+\newcommand*\hangfootparskip{0.5\baselineskip}
+\newcommand*\hangfootparindent{0em}%
+\DeclareOption{norule}{%
+  \renewcommand\footnoterule{}%
+  \advance\skip\footins 4\p@\@plus2\p@\relax
+}
+\DeclareOption{splitrule}{%
+  \gdef\split at prev{0}
+  \let\pagefootnoterule\footnoterule
+  \let\mpfootnoterule\footnoterule
+  \def\splitfootnoterule{\kern-3\p@ \hrule \kern2.6\p@}
+  \def\footnoterule{\relax
+    \ifx \@listdepth\@mplistdepth
+      \mpfootnoterule
+    \else
+      \ifnum\split at prev=\z@
+        \pagefootnoterule
+      \else
+        \splitfootnoterule
+      \fi
+      \xdef\split at prev{\the\insertpenalties}%
+    \fi
+  }%
+}
+\newif\ifFN at stablefootnote  \FN at stablefootnotefalse
+\DeclareOption{stable}{\FN at stablefootnotetrue}
+\newif\ifFN at multiplefootnote  \FN at multiplefootnotefalse
+\DeclareOption{multiple}{\FN at multiplefootnotetrue}
+\ProcessOptions
+\ifFN at para
+  \def\@makecol at cfgpointii {%
+     \global\setbox\footins\vbox{\FN at makefootnoteparagraph}%
+    }
+\fi
+\ifFN at fixskip
+  \def\@outputbox at removebskip{%
+    \ifx\@textbottom\relax \else
+      \@outputbox at append{%
+        \@tempskipa\lastskip
+        \ifnum \gluestretchorder\@tempskipa>\z@
+          \vskip-\@tempskipa
+          \xdef\@outputbox at reinsertbskip
+              {\noexpand\@outputbox at append{\vskip\the\@tempskipa}}%
+        \else
+          \global\let\@outputbox at reinsertbskip\relax
+        \fi
+      }%
+   \fi
+  }
+\let\@outputbox at reinsertbskip\relax
+\else
+  \let\@outputbox at removebskip \relax
+  \let\@outputbox at reinsertbskip\relax
+\fi
+\ifcase \FN at bottomcases\relax
+\ERROR
+\or
+  \ifFN at abovefloats
+    \def\@makecol at cfgpoint {%
+       \@if at footnotes@TF
+          {\@outputbox at append{\vfill}}%
+          {\@if at bfloats@TF{\@outputbox at append{\vfill}}%
+                          {\@outputbox at reinsertbskip}}%
+       \@outputbox at appendfootnotes
+       \@outputbox at attachfloats
+      }
+  \else
+    \def\@makecol at cfgpoint {%
+       \@outputbox at attachfloats
+       \@if at footnotes@TF
+          {\@outputbox at append{\vfill}}%
+          {\@outputbox at reinsertbskip}%
+       \@outputbox at appendfootnotes
+    }
+  \fi
+\or
+  \ifFN at abovefloats
+     \def\@makecol at cfgpoint {%
+        \@outputbox at appendfootnotes
+        \@if at bfloats@TF
+            {\@outputbox at append{\vfill}}%
+            {\@outputbox at reinsertbskip}%
+        \@outputbox at attachfloats
+     }
+  \else
+     \def\@makecol at cfgpoint {%
+       \@if at footnotes@TF
+          {\@outputbox at append{\vfill}}%
+          {\@if at bfloats@TF{\@outputbox at append{\vfill}}%
+                          {\@outputbox at reinsertbskip}}%
+        \@outputbox at attachfloats
+        \@outputbox at appendfootnotes
+     }
+  \fi
+\or
+  \ifFN at abovefloats
+    \def\@makecol at cfgpoint {%
+       \@outputbox at appendfootnotes
+       \@outputbox at attachfloats
+       \@outputbox at reinsertbskip
+    }
+  \else
+    \def\@makecol at cfgpoint {%
+       \@outputbox at attachfloats
+       \@outputbox at appendfootnotes
+       \@outputbox at reinsertbskip
+}
+  \fi
+\else
+\ERROR
+\fi
+
+\newif\ifFN at setspace
+\@ifpackageloaded{setspace}%
+ {%
+   \FN at setspacetrue
+   \@ifclassloaded{memoir}%
+     {%
+       \AddToHook{fntext}{\let\baselinestretch\m at m@singlespace}%
+       \let\FN at baselinestretch\m at m@singlespace
+     }%
+     {%
+       \let\FN at baselinestretch\setspace at singlespace
+     }%
+ }%
+ {%
+   \FN at setspacefalse
+ }
+
+\ifFN at para
+  \def\@footnotetext at cfgpoint {\insert\footins}
+
+  \long\def\@footnotetext at cfgpointii #1{%
+    \setbox\FN at tempboxa\hbox{\@makefntext{#1}}%
+    \dp\FN at tempboxa\z@
+    \ht\FN at tempboxa
+      \dimexpr\wd\FN at tempboxa *%
+              \footnotebaselineskip /\columnwidth\relax
+    \box\FN at tempboxa
+  }
+
+  \def\@footnotetext at cfgpointiii {}
+  \def\@footnotetext at cfgpointiv {% config point
+           \strut
+           \penalty-10\relax
+           \hskip\footglue
+  }
+\fi
+
+\ifFN at para
+  \let\FN at tempboxa\@tempboxa
+  \newbox\FN at tempboxb
+  \newbox\FN at tempboxc
+  \newskip\footglue \footglue=1em plus.3em minus.3em
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  \newdimen\footnotebaselineskip
+
+  % establish late:
+
+\AddToHook{begindocument/before} {%
+  {%
+    \footnotesize
+    \global\footnotebaselineskip=\normalbaselineskip
+  }%
+}
+
+  \long\def\FN at makefootnoteparagraph{%
+    \FN at setfootnoteparawidth
+    \@parboxrestore
+    \baselineskip=\footnotebaselineskip
+    \unvbox\footins \FN at removehboxes
+    \RawParEnd
+  }
+  \def\FN at removehboxes{\setbox\FN at tempboxa\lastbox
+    \ifhbox\FN at tempboxa{\FN at removehboxes}%
+      \unhbox\FN at tempboxa
+    \else
+      \RawNoindent
+      \rule\z@\footnotesep
+    \fi
+  }
+\fi
+
+\@ifpackageloaded{multicol}
+  {\def\FN at setfootnoteparawidth
+    {\hsize\ifnum\doublecol at number>\@ne
+                  \textwidth
+            \else \columnwidth \fi}}
+  {\def\FN at setfootnoteparawidth{\hsize\columnwidth}}
+
+\ifFN at perpage
+  \RequirePackage{perpage}
+  \MakePerPage{footnote}
+  \def\@stpelt#1{\global\csname c@#1\endcsname \m at ne
+    \stepcounter{#1}%
+    \pp at fix@MakePerPage{#1}%
+  }
+  \def\pp at fix@MakePerPage#1{%
+      \ifnum \value{#1}>\z@
+        \addtocounter{#1}\m at ne\fi
+  }
+  \def\pp at cl@end at iii\stepcounter#1\pp at fix@MakePerPage#2{}
+\fi
+
+\ifFN at para
+
+
+
+\AddToHook{fntext/begin}{\nobreak \hspace{.2em}}
+
+\else
+
+  \ifFN at hangfoot
+    \long\def\@makefntext#1{%
+      \bgroup
+        \setbox\@tempboxa\hbox{%
+          \ifdim\footnotemargin>\z@
+            \hb at xt@\footnotemargin{\@makefnmark\hss}%
+          \else
+            \@makefnmark
+          \fi
+        }%
+        \leftmargin\wd\@tempboxa
+        \rightmargin\z@
+        \linewidth \columnwidth
+        \advance \linewidth -\leftmargin
+        \parshape \@ne \leftmargin \linewidth
+        \footnotesize
+        \@setpar{{\@@par}}%
+        \leavevmode
+        \llap{\box\@tempboxa}%
+        \parskip\hangfootparskip\relax
+        \parindent\hangfootparindent\relax
+        \footnotelayout#1%
+        \par
+      \egroup
+    }
+
+ \else
+
+
+ \fi
+\fi
+
+\ifFN at multiplefootnote
+  \providecommand*{\multiplefootnotemarker}{3sp}
+  \providecommand*{\multfootsep}{,}
+  \AddToHook{fnmark}      {\FN at mf@check}
+  \AddToHook{fnmark/end}  {\FN at mf@prepare}
+  \def\FN at mf@prepare{%
+    \kern-\multiplefootnotemarker
+    \kern\multiplefootnotemarker\relax
+  }
+  \def\FN at mf@check{%
+    \ifdim\lastkern=\multiplefootnotemarker\relax
+      \edef\@x at sf{\the\spacefactor}%
+      \unkern  % new
+      \unkern
+      \textsuperscript{\multfootsep}%
+      \spacefactor\@x at sf\relax
+    \fi
+  }
+\else
+  \let\FN at mf@prepare\relax
+\fi
+\ifFN at stablefootnote
+\let\FN at sf@@footnote\footnote
+\def\footnote{\ifx\protect\@typeset at protect
+    \expandafter\FN at sf@@footnote
+  \else
+    \expandafter\FN at sf@gobble at opt
+  \fi
+}
+\edef\FN at sf@gobble at opt{\noexpand\protect
+  \expandafter\noexpand\csname FN at sf@gobble at opt \endcsname}
+\expandafter\def\csname FN at sf@gobble at opt \endcsname{%
+  \@ifnextchar[%]
+    \FN at sf@gobble at twobracket
+    \@gobble
+}
+\def\FN at sf@gobble at twobracket[#1]#2{}
+\let\FN at sf@@footnotemark\footnotemark
+\def\footnotemark{\ifx\protect\@typeset at protect
+    \expandafter\FN at sf@@footnotemark
+  \else
+    \expandafter\FN at sf@gobble at optonly
+  \fi
+}
+\edef\FN at sf@gobble at optonly{\noexpand\protect
+  \expandafter\noexpand\csname FN at sf@gobble at optonly \endcsname}
+\expandafter\def\csname FN at sf@gobble at optonly \endcsname{%
+  \@ifnextchar[%]
+    \FN at sf@gobble at bracket
+    {}%
+}
+\def\FN at sf@gobble at bracket[#1]{}
+\fi
+\newcommand\setfnsymbol[1]{%
+  \@bsphack
+  \@ifundefined{FN at fnsymbol@#1}%
+  {%
+    \PackageError{footmisc}{Symbol style "#1" not known}%
+    \@eha
+  }{%
+    \expandafter\let\expandafter\@fnsymbol\csname
+                        FN at fnsymbol@#1\endcsname
+  }%
+  \@esphack
+}
+\let\FN at fnsymbol@lamport\@fnsymbol
+\newif\if at tempswb
+\DeclareDocumentCommand\DefineFNsymbols {smO{text}m}{%
+  \expandafter\ifx\csname FN at fnsymbol@#2\endcsname\relax
+    \PackageInfo{footmisc}{Declaring symbol style #2}%
+  \else
+    \PackageWarning{footmisc}{Redeclaring symbol style #2}%
+  \fi
+  \toks@{}%
+  \def\@tempb{\end}%
+  \FN at build@symboldef#4\end
+  \def\@tempc{math}%
+  \def\@tempd{#3}%
+  \expandafter\xdef\csname FN at fnsymbol@#2\endcsname##1{%
+    \ifx\@tempc\@tempd
+      \noexpand\ensuremath
+    \else
+      \noexpand\nfss at text
+    \fi
+    {%
+      \noexpand\ifcase##1%
+      \the\toks@
+      \noexpand\else
+      \IfBooleanTF#1{\noexpand\@ctrerr}%
+        {\noexpand\FN at orange##1}%
+      \noexpand\fi
+    }%
+  }%
+}
+\def\FN at build@symboldef#1{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\@tempb
+  \else
+    \toks@\expandafter{\the\toks@\or#1}%
+    \expandafter\FN at build@symboldef
+  \fi
+}
+\DeclareDocumentCommand\DefineFNsymbolsTM {smm}{%
+  \expandafter\ifx\csname FN at fnsymbol@#2\endcsname\relax
+    \PackageInfo{footmisc}{Declaring symbol style #2}%
+  \else
+    \PackageWarning{footmisc}{Redeclaring symbol style #2}%
+  \fi
+  \toks@{}%
+  \def\@tempb{\end}%
+  \FN at build@symboldefTM#3\end\@null
+  \expandafter\xdef\csname FN at fnsymbol@#2\endcsname##1{%
+    \noexpand\ifcase##1%
+      \the\toks@
+    \noexpand\else
+      \IfBooleanTF#1{\noexpand\@ctrerr}%
+        {\noexpand\FN at orange##1}%
+      \noexpand\fi
+  }%
+}
+\def\FN at build@symboldefTM#1#2{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\@tempb
+  \else
+    \toks@\expandafter{\the\toks@\or\TextOrMath{#1}{#2}}%
+    \expandafter\FN at build@symboldefTM
+  \fi
+}
+\def\FN at orange#1{%
+  \ifFN at robust
+    \@arabic#1%
+    \@bsphack
+    \PackageInfo{footmisc}{Footnote number \number#1 out of range}%
+    \protect\@fnsymbol at orange
+    \@esphack
+  \else \@ctrerr \fi
+}
+\global\let\@diagnose at fnsymbol@orange\relax
+\AtEndDocument{\@diagnose at fnsymbol@orange}
+\def\@fnsymbol at orange{%
+  \gdef\@diagnose at fnsymbol@orange{%
+    \PackageWarningNoLine{footmisc}{Some footnote number(s)
+      were out of range
+      \MessageBreak
+      see log for details%
+    }%
+  }%
+}
+\DefineFNsymbolsTM{bringhurst}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textbardbl    \|%
+  \textparagraph \mathparagraph
+}%
+\DefineFNsymbolsTM{chicago}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textbardbl    \|%
+  \#\#%
+}%
+\DefineFNsymbolsTM{wiley}{%
+  \textasteriskcentered *%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+}%
+\DefineFNsymbolsTM{lamport-robust}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  {\textdagger\textdagger}{\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+}
+\DefineFNsymbolsTM*{lamport*}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  {\textdagger\textdagger}{\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+  {\textsection\textsection}{\mathsection\mathsection}%
+  {\textparagraph\textparagraph}{\mathparagraph\mathparagraph}%
+  {\textasteriskcentered\textasteriskcentered\textasteriskcentered}{***}%
+  {\textdagger\textdagger\textdagger}{\dagger\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger\ddagger}%
+  {\textsection\textsection\textsection}%%
+    {\mathsection\mathsection\mathsection}%
+  {\textparagraph\textparagraph\textparagraph}%%
+    {\mathparagraph\mathparagraph\mathparagraph}%
+}
+\setfnsymbol{lamport*}
+\DefineFNsymbolsTM{lamport*-robust}{%
+  \textasteriskcentered *%
+  \textdagger    \dagger
+  \textdaggerdbl \ddagger
+  \textsection   \mathsection
+  \textparagraph \mathparagraph
+  \textbardbl    \|%
+  {\textasteriskcentered\textasteriskcentered}{**}%
+  {\textdagger\textdagger}{\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger}%
+  {\textsection\textsection}{\mathsection\mathsection}%
+  {\textparagraph\textparagraph}{\mathparagraph\mathparagraph}%
+  {\textasteriskcentered\textasteriskcentered\textasteriskcentered}{***}%
+  {\textdagger\textdagger\textdagger}{\dagger\dagger\dagger}%
+  {\textdaggerdbl\textdaggerdbl\textdaggerdbl}{\ddagger\ddagger\ddagger}%
+  {\textsection\textsection\textsection}%%
+    {\mathsection\mathsection\mathsection}%
+  {\textparagraph\textparagraph\textparagraph}%%
+    {\mathparagraph\mathparagraph\mathparagraph}%
+}
+\newcommand\mpfootnotemark{%
+  \@ifnextchar[%
+    \@xmpfootnotemark
+    {%
+      \stepcounter\@mpfn
+      \protected at xdef\@thefnmark{\thempfn}%
+      \@footnotemark
+    }%
+}
+\def\@xmpfootnotemark[#1]{%
+  \begingroup
+    \csname c@\@mpfn\endcsname #1\relax
+    \unrestored at protected@xdef\@thefnmark{\thempfn}%
+  \endgroup
+  \@footnotemark
+}
+
+\endinput
+%%
+%% End of file `latex-lab-footmisc.ltx'.


Property changes on: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,429 @@
+%%
+%% This is file `latex-lab-footnotes.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-footnotes.dtx  (with options: `kernel')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021,2022 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-footnotes.dtx
+\ProvidesFile{latex-lab-footnotes.ltx}
+        [2022-03-10 v0.6a changes to the footnote interfaces]
+
+
+        % not looked at yet
+
+\long\def\@mpfootnotetext#1{%
+  \global\setbox\@mpfootins\vbox{%
+    \unvbox\@mpfootins
+    \reset at font\footnotesize
+    \hsize\columnwidth
+    \@parboxrestore
+    \def\@currentcounter{mpfootnote}%
+    \protected at edef\@currentlabel
+         {\csname p at mpfootnote\endcsname\@thefnmark}%
+    \color at begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \par
+    \color at endgroup}}
+
+\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
+
+\def\@mpfn{footnote}
+\def\thempfn{\thefootnote}
+
+
+\ExplSyntaxOn
+
+\cs_new_protected:Npn \fnote_step_fnmark:nn #1#2 {
+  \tl_if_novalue:nTF {#1}
+    {
+      \stepcounter {#2}
+      \protected at xdef \@thefnmark { \use:c { the#2 } }
+    }
+    {
+     \group_begin:
+        \int_set:cn { c@#2 }{ #1 }
+        \unrestored at protected@xdef \@thefnmark { \use:c { the#2 } }
+     \group_end:
+    }
+}
+
+\cs_new_protected:Npn \fnote_set_fnmark:nn #1#2 {
+  \tl_if_novalue:nTF {#1}
+    {
+      \protected at xdef \@thefnmark { \use:c { the#2 } }
+    }
+    {
+     \group_begin:
+        \int_set:cn { c@#2 }{ #1 }
+        \unrestored at protected@xdef \@thefnmark { \use:c { the#2 } }
+     \group_end:
+    }
+}
+
+
+\bool_new:N \g_fnote_debug_bool
+\bool_gset_true:N  \g_fnote_debug_bool   % for now we have debugging turned on by default
+
+
+\NewMirroredHookPair{fnmark/before}{fnmark/after}
+\NewHook{fnmark}
+\NewHook{fnmark/begin}
+\NewHook{fnmark/end}
+
+\cs_new:Npn \__fnote_debug_footnotemark: {
+  \bool_if:NT \g_fnote_debug_bool
+       {
+         \LogHook{fnmark/before}
+         \LogHook{fnmark}
+         \LogHook{fnmark/begin}
+         \LogHook{fnmark/end}
+         \LogHook{fnmark/after}
+         \cs_gset_eq:NN \__fnote_debug_footnotemark: \prg_do_nothing:
+       }
+}
+
+\cs_new_protected:Npn \fnote_footnotemark: {
+  \__fnote_debug_footnotemark:
+  \UseHook{fnmark/before}
+  \leavevmode
+  \ifhmode
+    \edef\@x at sf{\the\spacefactor}
+    \UseHook{fnmark}
+    \nobreak
+  \fi
+  \UseHook{fnmark/begin}
+  \@kernel at process@makefnmark
+     \@makefnmark
+  \__fnote_footnotemark_finish:
+}
+
+\cs_new:Npn \__fnote_finish: {
+  \UseHook{fnmark/end}
+  \ifhmode
+    \spacefactor \@x at sf \relax
+  \fi
+  \UseHook{fnmark/after}
+}
+
+\cs_new_eq:NN \__fnote_footnotemark_finish: \__fnote_finish:
+
+\def \@kernel at process@makefnmark { }
+
+
+
+\cs_set_eq:NN  \@footnotemark \fnote_footnotemark:
+
+
+\NewMirroredHookPair{fntext/before}{fntext/after}
+\NewHook{fntext}
+\NewHook{fntext/para}
+\NewHook{fntext/begin}
+\NewHook{fntext/end}
+
+\cs_new:Npn \__fnote_debug_footnotetext: {
+  \bool_if:NT \g_fnote_debug_bool
+       {
+         \cs_log:N\@footnotetext at cfgpoint
+         \cs_log:N\@footnotetext at cfgpointii
+         \cs_log:N\@footnotetext at cfgpointiii
+         \cs_log:N\@footnotetext at cfgpointiv
+         \cs_log:N\@makefntext at cfgpoint
+         \cs_log:N\@makefntext at cfgpointii
+         \LogHook{fntext/before}
+         \LogHook{fntext}
+         \LogHook{fntext/para}
+         \LogHook{fntext/begin}
+         \LogHook{fntext/end}
+         \LogHook{fntext/after}
+         \cs_gset_eq:NN \__fnote_debug_footnotetext: \prg_do_nothing:
+       }
+  }
+
+\cs_new_protected:Npn \fnote_footnotetext:n #1 {
+  \__fnote_debug_footnotetext:
+  \UseHook{fntext/before}
+  \@kernel at process@footnotetext
+  \@footnotetext at cfgpoint {  % config point
+    \UseHook{fntext}
+    \reset at font
+    \footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox
+    \floatingpenalty \@MM
+    \hsize\columnwidth
+    \@parboxrestore
+    \parindent 1em     % typical default used in \@makefntext moved up here
+    \def\@currentcounter{footnote}
+    \protected at edef \@currentlabel { \p at footnote \@thefnmark }
+    \UseHook{fntext/para}
+    \color at begingroup
+      \@footnotetext at cfgpointii       % config point
+        {
+          \@footnotetext at cfgpointiii  % config point
+          \UseHook{fntext/begin}
+          \ignorespaces
+          #1
+          \UseHook{fntext/end}
+          \@footnotetext at cfgpointiv   % config point
+        }
+      \par
+    \color at endgroup
+  }
+  \UseHook{fntext/after}
+}
+
+\cs_new_protected:Npn \@footnotetext at cfgpoint    { \insert\footins }
+
+\cs_new_protected:Npn \@footnotetext at cfgpointii  { \@makefntext }
+
+\cs_new_protected:Npn \@footnotetext at cfgpointiii { \rule\z@\footnotesep }
+
+\cs_new_protected:Npn \@footnotetext at cfgpointiv  { \@finalstrut\strutbox }
+
+\cs_new_protected:Npn \@kernel at process@footnotetext {}
+
+
+\AddToHook{begindocument}{
+  \cs_set_eq:NN \@footnotetext \fnote_footnotetext:n
+}
+
+
+
+\newdimen\footnotemargin
+\footnotemargin\maxdimen         % no value given
+
+\AtBeginDocument{
+  \ifdim \footnotemargin=\maxdimen
+    \setlength\footnotemargin{1.8em}
+  \fi
+}
+
+\cs_new_protected:Npn \fnote_makefntext:n #1 {
+  \@makefntext at cfgpoint
+      {
+        \ifdim\footnotemargin>\z@
+          \hb at xt@ \footnotemargin{\hss\@makefnmark}
+        \else
+          \ifdim\footnotemargin=\z@
+            \llap{\@makefnmark}
+          \else
+          \ifdim\footnotemargin=-\maxdimen
+               \@makefnmark
+            \else
+               \llap{\hb at xt@ -\footnotemargin{\@makefnmark\hss}}
+            \fi
+          \fi
+        \fi
+      }
+  \@makefntext at cfgpointii
+      { #1 }
+}
+
+\cs_new_protected:Npn \@makefntext at cfgpoint { \noindent }
+
+\cs_new_protected:Npn \@makefntext at cfgpointii #1 { #1 }
+\newcommand\old at std@class at makefntext[1]{%
+    \parindent 1em%
+    \noindent
+    \hb at xt@1.8em{\hss\@makefnmark}#1}
+
+
+\tl_new:N \l__fnote_patch_tl
+\cs_new_eq:NN \__fnote_tmp:w \ERROR
+
+\cs_new_protected:Npn \__fnote_patch:
+  {
+    \tl_set:No \l__fnote_patch_tl { \@makefntext { \@makefntext at cfgpointii{##1} } }
+    \tl_if_in:NnTF \l__fnote_patch_tl { \hbox }
+      { \cs_set_eq:NN \__fnote_tmp:w \__fnote_patch_hbox:w }
+      {
+        \tl_if_in:NnTF \l__fnote_patch_tl { \hb at xt@ }
+          { \cs_set_eq:NN \__fnote_tmp:w \__fnote_patch_hb at xt@:w }
+          {
+            \tl_if_in:NnTF \l__fnote_patch_tl { \@makefnmark }
+              { \cs_set_eq:NN \__fnote_tmp:w \__fnote_patch_ at makefnmark:w }
+              { \ERROR
+                \cs_set_eq:NN \__fnote_tmp:w \exp_stop_f: }
+          }
+      }
+    \tl_set:Nf \l__fnote_patch_tl
+      { \exp_after:wN \__fnote_tmp:w \l__fnote_patch_tl }
+    \cs_set:Npn \__fnote_tmp:w { \long \def \@makefntext ####1 }
+    \exp_after:wN \__fnote_tmp:w \exp_after:wN { \l__fnote_patch_tl }
+  }
+\cs_new:Npn \__fnote_patch_hbox:w #1 \hbox #2 #
+  { \exp_stop_f: #1 \@makefntext at processX { \hbox #2 } }
+\cs_new:Npn \__fnote_patch_hb at xt@:w #1 \hb at xt@ #2 #
+  { \exp_stop_f: #1 \@makefntext at processX { \hb at xt@ #2 } }
+\cs_new:Npn \__fnote_patch_ at makefnmark:w #1 \@makefnmark
+  { \exp_stop_f: #1 \@makefntext at processX { \use:n } { \@makefnmark } }
+\cs_new:Npn \@makefntext at processX #1#2{\@makefntext at cfgpoint{#1{#2}}}
+
+\AddToHook{begindocument}{
+  \cs_if_eq:NNTF \@makefntext \old at std@class at makefntext
+     {
+       \cs_set_eq:NN \@makefntext \fnote_makefntext:n
+     }
+     {
+       \__fnote_patch:
+     }
+}
+
+
+\DeclareDocumentCommand\footnotetext {om} {
+  \fnote_set_fnmark:nn {#1} \@mpfn
+  \@footnotetext {#2}
+}
+
+
+\DeclareDocumentCommand\footnote {om} {
+  \fnote_step_fnmark:nn {#1} \@mpfn
+  \cs_set_eq:NN \__fnote_footnotemark_finish: \prg_do_nothing:
+  \@footnotemark
+  \cs_set_eq:NN \__fnote_footnotemark_finish: \__fnote_finish:
+  \@footnotetext {#2}
+  \__fnote_footnotemark_finish:
+}
+
+
+\DeclareDocumentCommand\footnotemark {o} {
+  \fnote_step_fnmark:nn {#1} { footnote }
+  \@footnotemark
+}
+
+
+\DeclareDocumentCommand\footref {m}{%
+  \begingroup
+    \unrestored at protected@xdef\@thefnmark{\ref{#1}}%
+  \endgroup
+  \@footnotemark
+}
+
+\AddToHook{package/setspace/after}
+   {\let \@footnotetext \fnote_footnotetext:n
+    \AddToHook{fntext}[setspace]{\let\baselinestretch\setspace at singlespace}}
+\AddToHook{package/hyperref/after}{
+  \let\H@@footnotetext\fnote_footnotetext:n
+  \let\H@@footnotemark\fnote_footnotemark:
+  \let \@footnotetext \fnote_footnotetext:n
+  \let \@footnotemark \fnote_footnotemark:
+}
+
+
+
+
+
+
+
+
+\newcounter{absfootnote}
+\AddToHook{fnmark/begin}{\stepcounter{absfootnote}}  % too simple (fails with opt args)
+
+
+\cs_new_protected:Npn \tag_if_loaded:TF  { \cs_if_exist:NTF \tag_struct_begin:n }
+
+\cs_new_protected:Npn \tag at FEMark #1 {
+  \tag_if_loaded:TF
+     {
+       \tag_mc_end_push:
+       \exp_args:Nx
+       \tag_struct_begin:n{tag=Lbl,ref=fn.\the\c at absfootnote}
+       \tag_mc_begin:n{tag=Lbl}
+       \IfPackageLoadedTF{hyperref}{ \hyper at linkstart
+         {link}{fn.\the\c at absfootnote} }{}
+       #1
+      \IfPackageLoadedTF{hyperref}{ \hyper at linkend }{}
+      \tag_mc_end:
+      \tag_struct_end:
+      \tag_mc_begin_pop:n{}
+     }
+     { #1 }
+}
+
+
+\cs_set_eq:NN \@kernel at process@makefnmark \tag at FEMark
+
+\cs_set:Npn \@kernel at process@footnotetext #1#2 {
+  \tag_if_loaded:TF
+    {
+      \tag_mc_end_push:
+      \tag_struct_begin:n { tag=FENote,label=fn.\the\c at absfootnote }
+      #1 {#2}
+      \tag_struct_end:
+      \tag_mc_begin_pop:n{}
+    }
+    { #1 {#2} }
+}
+
+\cs_set:Npn \@makefntext at cfgpoint #1 {
+  \noindent
+  \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_end_push: }
+  \tag at FELbl { #1 }
+}
+
+\cs_set:Npn \@makefntext at cfgpointii #1 {
+  \tag at FENote { #1 }
+  \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_begin_pop:n{} }
+}
+
+\cs_new_protected:Npn \tag at FELbl #1 {
+  \tag_if_loaded:TF
+    {
+      % target should perhaps be raised ...
+      \IfPackageLoadedTF{hyperref}{ \hypertarget{fn.\the\c at absfootnote}{} }{}
+      %\tag_struct_begin:n { tag=FENote,label=fn.\the\c at absfootnote } %alternativ location for structure
+      \tag_struct_begin:n { tag=Lbl }
+        \tag_mc_begin:n { tag=Lbl }
+          #1
+        \tag_mc_end:
+      \tag_struct_end:
+    }
+    { #1 }
+}
+
+\cs_new_protected:Npn \tag at FENote #1 {
+  \tag_if_loaded:TF
+    {
+      \tag_mc_begin:n{tag=FENote}
+      #1
+      \tag_mc_end:
+      %\tag_struct_end: %alternative location for structure end but ends inside a P
+    }
+    { #1 }
+}
+
+
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `latex-lab-footnotes.ltx'.


Property changes on: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,301 @@
+%%
+%% This is file `latex-lab-prototype.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-prototype.dtx  (with options: `2ekernel')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021,2022 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-prototype.dtx
+\ExplSyntaxOn
+\tl_if_exist:NF \l__keys_precompile_tl
+  {
+    \bool_new:N \l__keys_precompile_bool
+    \tl_new:N \l__keys_precompile_tl
+  }
+\cs_gset_protected:Npn \__keys_precompile:n #1
+  {
+    \bool_if:NTF \l__keys_precompile_bool
+      { \tl_put_right:Nn \l__keys_precompile_tl }
+      { \use:n }
+        {#1}
+  }
+\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4
+  {
+    \bool_if_exist:NF #1 { \bool_new:N #1 }
+    \__keys_choice_make:
+    \__keys_cmd_set:nx { \l_keys_path_str / true }
+      { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
+    \__keys_cmd_set:nx { \l_keys_path_str / false }
+      { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
+    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+      {
+        \msg_error:nnx { keys } { boolean-values-only }
+          \l_keys_key_str
+      }
+    \__keys_default_set:n { true }
+  }
+\cs_gset_protected:Npn \__keys_choice_make_aux:N #1
+  {
+    \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
+      { choice }
+    \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
+    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+      {
+        \msg_error:nnxx { keys } { choice-unknown }
+          \l_keys_path_str {##1}
+      }
+  }
+\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2
+  {  \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } }
+\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2
+  { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
+\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3#
+  {
+    \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1
+      {
+        \__keys_precompile:n
+          { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+      }
+    \use_none:n
+  }
+\cs_gset_protected:Npn \__keys_meta_make:n #1
+  {
+    \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
+      {
+        \exp_after:wN \keys_set:nn \exp_after:wN
+          { \l__keys_module_str } {#1}
+      }
+  }
+\cs_gset_protected:Npn \__keys_meta_make:nn #1#2
+  {
+    \exp_args:NV \__keys_cmd_set_direct:nn
+      \l_keys_path_str { \keys_set:nn {#1} {#2} }
+  }
+\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
+  {
+    \bool_set_true:N \l__keys_precompile_bool
+    \tl_clear:N \l__keys_precompile_tl
+    \keys_set:nn {#1} {#2}
+    \bool_set_false:N \l__keys_precompile_bool
+    \tl_set_eq:NN #3 \l__keys_precompile_tl
+  }
+\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3
+  {
+    #1 { keys } { show-key }
+      { \__keys_trim_spaces:n { #2 / #3 } }
+      {
+        \keys_if_exist:nnT {#2} {#3}
+          {
+            \exp_args:Nnf \msg_show_item_unbraced:nn { code }
+              {
+                \exp_args:Ne \__keys_show:n
+                  {
+                    \exp_args:Nc \cs_replacement_spec:N
+                    {
+                      \c__keys_code_root_str
+                      \__keys_trim_spaces:n { #2 / #3 }
+                    }
+                  }
+              }
+          }
+      }
+      { } { }
+  }
+\cs_gset:Npx \__keys_show:n #1
+  {
+    \exp_not:N \__keys_show:w
+      #1
+      \tl_to_str:n { \__keys_precompile:n }
+      #1
+      \tl_to_str:n { \__keys_precompile:n }
+      \exp_not:N \s__keys_stop
+  }
+\use:x
+  {
+    \cs_gset:Npn \exp_not:N \__keys_show:w
+      ##1 \tl_to_str:n { \__keys_precompile:n }
+      ##2 \tl_to_str:n { \__keys_precompile:n }
+      ##3 \exp_not:N \s__keys_stop
+  }
+  {
+    \tl_if_blank:nTF {#2}
+      {#1}
+      { \__keys_show:Nw #2 \s__keys_stop }
+  }
+\use:x
+  {
+    \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2
+      \c_right_brace_str \exp_not:N \s__keys_stop
+  }
+  {#2}
+\tl_new:N \l__prototype_tmp_tl
+\prop_new:N \l__prototype_object_prop
+\cs_new_protected:Npn \prototype_declare_object:nn #1#2
+  {
+    \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1}
+  }
+\cs_new_protected:Npn \__prototype_declare_object:nn #1#2
+  {
+    \int_compare:nTF { 0 <= #1 <= 9 }
+      {
+        \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
+        \prop_put:Nnn \l__prototype_object_prop {#2} {#1}
+      }
+      { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
+  }
+\tl_new:N \l__prototype_assignments_tl
+\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
+  {
+    \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl
+      {
+        \keys_define:nn { prototype / #1 / #2 } {#3}
+        \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl }
+        \cs_generate_from_arg_count:cNnn
+          { __prototype_template_ #1 _ #2 :w }
+          \cs_set_protected:Npn
+          { \l__prototype_tmp_tl }
+          {
+            \tl_use:N \l__prototype_assignments_tl
+            #4
+          }
+      }
+      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+  }
+\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
+  {
+    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+      { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
+\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
+  {
+    \__prototype_declare_aux:nnnn {#1} {#2} {#3}
+      { \use:c { __prototype_template_ #1 _ #2 :w } }
+  }
+\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
+  {
+    \__prototype_declare_aux:nnnn {#1} {#2} {#4}
+      {
+        \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl }
+        \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl }
+          \l__prototype_assignments_tl
+         \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl }
+         \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2}
+      }
+  }
+\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4
+  {
+    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+      {
+        \keys_precompile:nvN
+          { prototype / #1 / #2 }
+          { l__prototype_defaults_ #1 _ #2 _tl }
+          \l__prototype_assignments_tl
+        \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl
+        \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl
+        #4
+      }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+\cs_new_protected:Npn \prototype_use_instance:nn #1#2
+  { \prototype_use_instance:nnn {#1} {#2} { } }
+\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
+  {
+    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+      {
+        \tl_set_eq:Nc \l__prototype_assignments_tl
+          { l__prototype_instance_ #1 _ #2 _pars_tl }
+        \tl_if_blank:nF {#3}
+          {
+            \keys_precompile:vnN
+              {
+                prototype / #1 /
+                \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+              }
+              {#3}
+              \l__prototype_tmp_tl
+            \tl_put_right:NV \l__prototype_assignments_tl
+              \l__prototype_tmp_tl
+          }
+        \use:c
+          {
+            __prototype_template_ #1 _
+            \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+            :w
+          }
+      }
+      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+  }
+\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
+  {
+    \prop_if_in:NnTF \l__prototype_object_prop {#1}
+      { \cs_show:c { __prototype_template_ #1 _ #2 :w } }
+      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+  }
+\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
+  {
+    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+      { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
+  {
+    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+      { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } }
+      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+  }
+\msg_new:nnnn { prototype } { bad-number-of-arguments }
+  { Bad~number~of~arguments~for~object~type~'#1'. }
+  {
+    An~object~may~accept~between~0~and~9~arguments.\\
+    You~asked~to~use~#2~arguments:~this~is~not~supported.
+  }
+\msg_new:nnnn { prototype } { unknown-instance }
+  { The~instance~'#2'~of~type~'#1'~is~unknown. }
+  {
+    You~have~asked~to~use~an~instance~'#2',~
+    but~this~has~not~been~created.
+  }
+\msg_new:nnnn { prototype } { unknown-object-type }
+  { The~object~type~'#1'~is~unknown. }
+  { An~object~type~needs~to~be~declared~prior~to~using~it. }
+\msg_new:nnnn { prototype } { unknown-template }
+  { The~template~'#2'~of~type~'#1'~is~unknown. }
+  {
+    No~interface~has~been~declared~for~a~template~
+    '#2'~of~object~type~'#1'.
+  }
+\msg_new:nnn { prototype } { declare-object-type }
+  { Declaring~object~type~'#1'~taking~#2~argument(s). }
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `latex-lab-prototype.sty'.


Property changes on: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,169 @@
+%%
+%% This is file `latex-lab-testphase-new-or.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-new-or.dtx  (with options: `code')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021,2022 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-new-or.dtx
+\ProvidesFile{latex-lab-new-or.ltx}
+        [2022-03-09 v0.1b changes to the output routine]
+\def \@makecol {%
+  \@kernel at before@cclv
+  \setbox\@outputbox \box\@cclv
+  \@outputbox at removebskip
+  \let\@elt\relax
+  \xdef\@freelist{\@freelist\@midlist}%
+  \global \let \@midlist \@empty
+  \@makecol at cfgpoint
+  \ifvbox\@kludgeins
+     \@makespecialcolbox
+  \else
+     \@makenormalcolbox
+  \fi
+  \global \maxdepth \@maxdepth
+}
+\newdimen\@outputbox at depth
+\def \@makenormalcolbox {%
+   \setbox\@outputbox \vbox to\@colht {%
+       \@texttop
+       \@outputbox at depth \dp\@outputbox
+       \unvbox \@outputbox
+       \vskip -\@outputbox at depth
+       \@textbottom
+      }%
+}
+\def \@makespecialcolbox {%
+   \@outputbox at append {\vskip-\@outputbox at depth}%
+   \@tempdima \@colht
+   \ifdim \wd\@kludgeins>\z@
+     \advance \@tempdima -\ht\@outputbox
+     \advance \@tempdima \pageshrink
+     \setbox\@outputbox \vbox to \@colht {%
+       \unvbox\@outputbox
+       \vskip \@tempdima
+       \@textbottom
+       }%
+   \else
+     \advance \@tempdima -\ht\@kludgeins
+     \setbox \@outputbox \vbox to \@colht {%
+       \vbox to \@tempdima {%
+         \unvbox\@outputbox
+         \@textbottom}%
+       \vss}%
+   \fi
+   {\setbox \@tempboxa \box \@kludgeins}%
+}
+\def\@outputbox at removebskip{%
+  \ifx\@textbottom\relax \else
+    \@outputbox at append{%
+      \@tempskipa\lastskip
+      \ifnum \gluestretchorder\@tempskipa>\z@
+        \vskip-\@tempskipa
+        \xdef\@outputbox at reinsertbskip
+            {\noexpand\@outputbox at append{\vskip\the\@tempskipa}}%
+      \else
+        \global\let\@outputbox at reinsertbskip\relax
+      \fi
+    }%
+ \fi
+}
+\let\@outputbox at reinsertbskip\relax
+\providecommand\@kernel at before@cclv{}
+\providecommand\@kernel at before@footins{}
+\def\@outputbox at append #1{%
+     \setbox\@outputbox \vbox {%
+       \boxmaxdepth \@maxdepth
+       \@outputbox at depth\dp\@outputbox      % if needed in #1
+       \unvbox \@outputbox
+       #1%
+     }%
+}
+\def\@outputbox at appendfootnotes {%
+   \ifvoid\footins \else
+     \@makecol at handlesplitfootnotes
+     \@makecol at cfgpointii
+     \@outputbox at append{%
+       \vskip \skip\footins
+       \@kernel at before@footins
+       \color at begingroup
+         \normalcolor
+         \footnoterule
+         \csname pdfcolfoot at current\endcsname
+         \unvbox \footins
+       \color at endgroup
+      }%
+  \fi
+}
+\let \@outputbox at attachfloats \@combinefloats
+\def \@outputbox at attachtopfloats {%
+  \ifx \@toplist\@empty \else \@cflt \fi
+}
+\def \@outputbox at attachbottomfloats {%
+    \ifx \@botlist\@empty \else \@cflb \fi
+}
+\def\@makecol at handlesplitfootnotes {%
+  \ifnum\insertpenalties>\z@
+    \@makecol at splitfootnotemessagehook
+  \fi
+}
+\let \@makecol at splitfootnotemessagehook \@empty
+\let \@makecol at cfgpointii \@empty
+\def\@if at flushbottom@TF{%
+  \ifx\@textbottom\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+}
+\def\@if at footnotes@TF{%
+  \ifvoid\footins
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi
+}
+\def\@if at bfloats@TF{%
+  \ifx \@botlist\@empty
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi
+}
+    \def\@makecol at cfgpoint {%
+       \@outputbox at appendfootnotes
+       \@outputbox at attachfloats
+       \@outputbox at reinsertbskip
+    }
+\declare at file@substitution{footmisc.sty}{latex-lab-footmisc.ltx}
+\input{latex-lab-footnotes.ltx}
+\endinput
+%%
+%% End of file `latex-lab-testphase-new-or.sty'.


Property changes on: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,44 @@
+%%
+%% This is file `new-or-latex-lab-testphase.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-testphase.dtx  (with options: `new-or')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021,2022 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-testphase.dtx
+
+\IfFileExists{latex-lab-testphase-new-or.sty}
+ {
+   \RequirePackage{latex-lab-testphase-new-or}
+ }
+ {}
+\endinput
+%%
+%% End of file `new-or-latex-lab-testphase.ltx'.


Property changes on: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-latex-lab-testphase.ltx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
 %% 
 %% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
 %% ------------------------------------------------------------------------------------

Modified: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
 %% 
 %% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
 %% ------------------------------------------------------------------------------------
@@ -34,6 +34,11 @@
 %% 
 %% File: latex-lab-testphase.dtx
 
+\IfFileExists{latex-lab-testphase-new-or.sty}
+ {
+   \RequirePackage{latex-lab-testphase-new-or}
+ }
+ {}
 \RequirePackage{tagpdf}
 \AddToDocumentProperties [document]{testphase/tagpdf}{loaded}
 \tagpdfsetup{activate,paratagging,interwordspace}

Added: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx	                        (rev 0)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -0,0 +1,301 @@
+%%
+%% This is file `prototype-latex-lab-testphase.ltx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latex-lab-prototype.dtx  (with options: `2ekernel')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 2021,2022 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-prototype.dtx
+\ExplSyntaxOn
+\tl_if_exist:NF \l__keys_precompile_tl
+  {
+    \bool_new:N \l__keys_precompile_bool
+    \tl_new:N \l__keys_precompile_tl
+  }
+\cs_gset_protected:Npn \__keys_precompile:n #1
+  {
+    \bool_if:NTF \l__keys_precompile_bool
+      { \tl_put_right:Nn \l__keys_precompile_tl }
+      { \use:n }
+        {#1}
+  }
+\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4
+  {
+    \bool_if_exist:NF #1 { \bool_new:N #1 }
+    \__keys_choice_make:
+    \__keys_cmd_set:nx { \l_keys_path_str / true }
+      { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
+    \__keys_cmd_set:nx { \l_keys_path_str / false }
+      { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
+    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+      {
+        \msg_error:nnx { keys } { boolean-values-only }
+          \l_keys_key_str
+      }
+    \__keys_default_set:n { true }
+  }
+\cs_gset_protected:Npn \__keys_choice_make_aux:N #1
+  {
+    \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
+      { choice }
+    \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
+    \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
+      {
+        \msg_error:nnxx { keys } { choice-unknown }
+          \l_keys_path_str {##1}
+      }
+  }
+\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2
+  {  \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } }
+\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2
+  { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
+\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3#
+  {
+    \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1
+      {
+        \__keys_precompile:n
+          { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+      }
+    \use_none:n
+  }
+\cs_gset_protected:Npn \__keys_meta_make:n #1
+  {
+    \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
+      {
+        \exp_after:wN \keys_set:nn \exp_after:wN
+          { \l__keys_module_str } {#1}
+      }
+  }
+\cs_gset_protected:Npn \__keys_meta_make:nn #1#2
+  {
+    \exp_args:NV \__keys_cmd_set_direct:nn
+      \l_keys_path_str { \keys_set:nn {#1} {#2} }
+  }
+\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3
+  {
+    \bool_set_true:N \l__keys_precompile_bool
+    \tl_clear:N \l__keys_precompile_tl
+    \keys_set:nn {#1} {#2}
+    \bool_set_false:N \l__keys_precompile_bool
+    \tl_set_eq:NN #3 \l__keys_precompile_tl
+  }
+\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3
+  {
+    #1 { keys } { show-key }
+      { \__keys_trim_spaces:n { #2 / #3 } }
+      {
+        \keys_if_exist:nnT {#2} {#3}
+          {
+            \exp_args:Nnf \msg_show_item_unbraced:nn { code }
+              {
+                \exp_args:Ne \__keys_show:n
+                  {
+                    \exp_args:Nc \cs_replacement_spec:N
+                    {
+                      \c__keys_code_root_str
+                      \__keys_trim_spaces:n { #2 / #3 }
+                    }
+                  }
+              }
+          }
+      }
+      { } { }
+  }
+\cs_gset:Npx \__keys_show:n #1
+  {
+    \exp_not:N \__keys_show:w
+      #1
+      \tl_to_str:n { \__keys_precompile:n }
+      #1
+      \tl_to_str:n { \__keys_precompile:n }
+      \exp_not:N \s__keys_stop
+  }
+\use:x
+  {
+    \cs_gset:Npn \exp_not:N \__keys_show:w
+      ##1 \tl_to_str:n { \__keys_precompile:n }
+      ##2 \tl_to_str:n { \__keys_precompile:n }
+      ##3 \exp_not:N \s__keys_stop
+  }
+  {
+    \tl_if_blank:nTF {#2}
+      {#1}
+      { \__keys_show:Nw #2 \s__keys_stop }
+  }
+\use:x
+  {
+    \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2
+      \c_right_brace_str \exp_not:N \s__keys_stop
+  }
+  {#2}
+\tl_new:N \l__prototype_tmp_tl
+\prop_new:N \l__prototype_object_prop
+\cs_new_protected:Npn \prototype_declare_object:nn #1#2
+  {
+    \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1}
+  }
+\cs_new_protected:Npn \__prototype_declare_object:nn #1#2
+  {
+    \int_compare:nTF { 0 <= #1 <= 9 }
+      {
+        \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1}
+        \prop_put:Nnn \l__prototype_object_prop {#2} {#1}
+      }
+      { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} }
+  }
+\tl_new:N \l__prototype_assignments_tl
+\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4
+  {
+    \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl
+      {
+        \keys_define:nn { prototype / #1 / #2 } {#3}
+        \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl }
+        \cs_generate_from_arg_count:cNnn
+          { __prototype_template_ #1 _ #2 :w }
+          \cs_set_protected:Npn
+          { \l__prototype_tmp_tl }
+          {
+            \tl_use:N \l__prototype_assignments_tl
+            #4
+          }
+      }
+      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+  }
+\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3
+  {
+    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+      { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+\cs_generate_variant:Nn \keys_precompile:nnN { v , nv }
+\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3
+  {
+    \__prototype_declare_aux:nnnn {#1} {#2} {#3}
+      { \use:c { __prototype_template_ #1 _ #2 :w } }
+  }
+\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4
+  {
+    \__prototype_declare_aux:nnnn {#1} {#2} {#4}
+      {
+        \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl }
+        \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl }
+          \l__prototype_assignments_tl
+         \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl }
+         \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2}
+      }
+  }
+\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4
+  {
+    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+      {
+        \keys_precompile:nvN
+          { prototype / #1 / #2 }
+          { l__prototype_defaults_ #1 _ #2 _tl }
+          \l__prototype_assignments_tl
+        \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl
+        \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl
+        #4
+      }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+\cs_new_protected:Npn \prototype_use_instance:nn #1#2
+  { \prototype_use_instance:nnn {#1} {#2} { } }
+\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3
+  {
+    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+      {
+        \tl_set_eq:Nc \l__prototype_assignments_tl
+          { l__prototype_instance_ #1 _ #2 _pars_tl }
+        \tl_if_blank:nF {#3}
+          {
+            \keys_precompile:vnN
+              {
+                prototype / #1 /
+                \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+              }
+              {#3}
+              \l__prototype_tmp_tl
+            \tl_put_right:NV \l__prototype_assignments_tl
+              \l__prototype_tmp_tl
+          }
+        \use:c
+          {
+            __prototype_template_ #1 _
+            \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl }
+            :w
+          }
+      }
+      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+  }
+\cs_new_protected:Npn \prototype_show_template_code:nn #1#2
+  {
+    \prop_if_in:NnTF \l__prototype_object_prop {#1}
+      { \cs_show:c { __prototype_template_ #1 _ #2 :w } }
+      { \msg_error:nnn { prototype } { unknown-object-type } {#1} }
+  }
+\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2
+  {
+    \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w }
+      { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } }
+      { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} }
+  }
+\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2
+  {
+    \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl }
+      { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } }
+      { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} }
+  }
+\msg_new:nnnn { prototype } { bad-number-of-arguments }
+  { Bad~number~of~arguments~for~object~type~'#1'. }
+  {
+    An~object~may~accept~between~0~and~9~arguments.\\
+    You~asked~to~use~#2~arguments:~this~is~not~supported.
+  }
+\msg_new:nnnn { prototype } { unknown-instance }
+  { The~instance~'#2'~of~type~'#1'~is~unknown. }
+  {
+    You~have~asked~to~use~an~instance~'#2',~
+    but~this~has~not~been~created.
+  }
+\msg_new:nnnn { prototype } { unknown-object-type }
+  { The~object~type~'#1'~is~unknown. }
+  { An~object~type~needs~to~be~declared~prior~to~using~it. }
+\msg_new:nnnn { prototype } { unknown-template }
+  { The~template~'#2'~of~type~'#1'~is~unknown. }
+  {
+    No~interface~has~been~declared~for~a~template~
+    '#2'~of~object~type~'#1'.
+  }
+\msg_new:nnn { prototype } { declare-object-type }
+  { Declaring~object~type~'#1'~taking~#2~argument(s). }
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `prototype-latex-lab-testphase.ltx'.


Property changes on: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx
===================================================================
--- branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx	2022-03-16 21:01:50 UTC (rev 62742)
+++ branches/branch2021.final/Master/texmf-dist/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx	2022-03-16 21:02:08 UTC (rev 62743)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright 2021 LaTeX Project
+%% Copyright 2021,2022 LaTeX Project
 %% 
 %% This file was generated from file(s) of the  `LaTeX-lab Bundle'.
 %% ------------------------------------------------------------------------------------
@@ -34,6 +34,11 @@
 %% 
 %% File: latex-lab-testphase.dtx
 
+\IfFileExists{latex-lab-testphase-new-or.sty}
+ {
+   \RequirePackage{latex-lab-testphase-new-or}
+ }
+ {}
 \RequirePackage{tagpdf}
 \AddToDocumentProperties [document]{testphase/tagpdf}{loaded}
 \tagpdfsetup{activate,paratagging,interwordspace}



More information about the tex-live-commits mailing list.