% verbatim-mo testphase Module
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Highly experimental module for tagging characters in verbatim
% LaTeX Project March 2025
% Licence https://www.latex-project.org/lppl.txt
\ProvidesFile{verbatim-af-latex-lab-testphase.ltx}
[2025-03-31 v 0.1 Highly experimental module for tagging characters in verbatim]
\makeatletter
\begingroup \catcode `|=0 \catcode `[= 1
\catcode`]=2 \catcode `\{=13 \catcode `\}=13
\catcode`\\=12
|gdef|@xxverbatim#1\end{verbatim}[#1|end[verbatim]]
|gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]]
|endgroup
\def\@xverbatim{\activechars\everypar{\tagobeyedline}\@xxverbatim}
\makeatother
\ExplSyntaxOn
\cs_set:Npn\verbatim_tmp:nn#1#2{
\group_begin:
\pdfdict_put:nnn { l_pdffile/Filespec }{AFRelationship} { /Supplement }
\pdfdict_put:nne { l_pdffile }{Subtype}
{ \pdf_name_from_unicode_e:n{application/mathml+xml} }
\pdffile_embed_stream:nnn{
}{#1.xml}{verb/#2}
\group_end:
}
\cs_generate_variant:Nn \verbatim_tmp:nn {ne}
% delay to later to avoid to open the PDF to fast, which would no longer
% allow to change compression or the pdf version
\AddToHook{begindocument/before}
{
\verbatim_tmp:nn{openparen}{(}
\verbatim_tmp:nn{closeparen}{)}
\verbatim_tmp:ne{openbrace}{\c_left_brace_str}
\verbatim_tmp:ne{closebrace}{\c_right_brace_str}
\verbatim_tmp:nn{quote}{"}
\verbatim_tmp:nn{semi}{;}
\verbatim_tmp:nn{comma}{,}
\group_begin:
\pdfdict_put:nnn { l_pdffile/Filespec }{AFRelationship} { /Supplement }
\pdfdict_put:nne { l_pdffile }{Subtype}
{ \pdf_name_from_unicode_e:n{application/mathml+xml} }
\pdffile_embed_stream:nnn{
}{newline.xml}{verb/newline}
\group_end:
}
\ExplSyntaxOff
\makeatletter
\def\defactive#1#2\relax{%
\def#1{%
\leavevmode\tagmcend\tagstructbegin{tag=Formula, AF={verb/\string#1}}\tagmcbegin{}%
\detokenize{#1}%
\tagmcend\tagstructend\tagmcbegin{}}%
}
\protected\gdef\tagobeyedline{%
\tagmcend\tagstructbegin{tag=Formula, AF={verb/newline}}\tagmcbegin{}%
\tagmcend\tagstructend\tagmcbegin{}}%
\makeatother
\begingroup
\catcode`\B=1
\catcode`\E=2
\catcode`\(\active
\catcode`\)\active
\catcode`\{\active
\catcode`\}\active
\catcode`\;\active
\catcode`\,\active
\catcode`\"\active
\gdef\activecharsB%
\catcode`\(\active
\catcode`\)\active
\catcode`\{\active
\catcode`\}\active
\catcode`\;\active
\catcode`\,\active
\catcode`\"\active
\defactive(open paren\relax
\defactive)close paren\relax
\defactive{open brace\relax
\defactive}close brace\relax
\defactive;semicolon\relax
\defactive,comma\relax
\defactive"quote\relax
E
\endgroup