% wrapper for l3regex \RequirePackage{expl3} % \regex_match:nnTF \@lisp@env@add@global\regMatch{\@tlabel@func{\@lisp@func@check@args{2}{\@lisp@regex@match}}} \ExplSyntaxOn \cs_new:Npn \lot_regex_match:Nnn #1#2#3 { \regex_match:nnTF{#2}{#3}{\gdef#1{\@tlabel@bool{t}}}{\gdef#1{\@tlabel@bool{f}}} } \cs_new_eq:NN \@lisp@regex@match@ \lot_regex_match:Nnn \ExplSyntaxOff %TODO: error handling \def\@lisp@regex@match#1\@tlabel@string#2\@tlabel@string#3{\@lisp@regex@match@#1{#2}{#3}} % \regex_extract_all \@lisp@env@add@global\regExtract{\@tlabel@func{\@lisp@func@check@args{2}{\@lisp@regex@extract}}} \ExplSyntaxOn \seq_new:N \lot_regex_extract_seq \cs_new:Npn \lot_regex_extract:nnN #1#2#3{ \regex_extract_all:nnN{#1}{#2}\lot_regex_extract_seq \seq_map_variable:NNn \lot_regex_extract_seq \lot_regex_tmp {\@lisp@regex@add@sep@result#3\lot_regex_tmp}} \cs_new_eq:NN \@lisp@regex@extract@ \lot_regex_extract:nnN \ExplSyntaxOff \def\@lisp@regex@add@sep@result#1#2{\expandafter\@lisp@regex@add@sep@result@\expandafter#1\expandafter{#2}} \def\@lisp@regex@add@sep@result@#1#2{\expandafter\def\expandafter#1\expandafter{#1{#2}}} \def\@lisp@regex@add@typelabel#1#2{% \gdef#2{}% \@tfor\@lisp@regex@tmp:=#1\do{% \begingroup \toks0\expandafter{\@lisp@regex@tmp}% \toks1\expandafter{#2}% \xdef#2{\the\toks1 \noexpand\@tlabel@string{\the\toks0}}% \endgroup}} \def\@lisp@regex@extract#1\@tlabel@string#2\@tlabel@string#3{% \def#1{}% \@lisp@regex@extract@{#2}{#3}#1% \expandafter\@lisp@regex@add@typelabel\expandafter{#1}#1% \expandafter\@lisp@prim@list@pre\expandafter#1#1\relax\relax} % \regex_extract_once \@lisp@env@add@global\regMatchResult{\@tlabel@func{\@lisp@func@check@args{2}{\@lisp@regex@extract@once}}} \ExplSyntaxOn \seq_new:N \lot_regex_extract_once_seq \cs_new:Npn \lot_regex_extract_once:nnN #1#2#3{ \regex_extract_once:nnN{#1}{#2}\lot_regex_extract_once_seq \seq_map_variable:NNn \lot_regex_extract_once_seq \lot_regex_tmp {\@lisp@regex@add@sep@result#3\lot_regex_tmp}} \cs_new_eq:NN \@lisp@regex@extract@once@ \lot_regex_extract_once:nnN \ExplSyntaxOff \def\@lisp@regex@extract@once#1\@tlabel@string#2\@tlabel@string#3{% \def#1{}% \@lisp@regex@extract@once@{#2}{#3}#1% \expandafter\@lisp@regex@add@typelabel\expandafter{#1}#1% \expandafter\@lisp@prim@list@pre\expandafter#1#1\relax\relax} % \regex_split \@lisp@env@add@global\regSplit{\@tlabel@func{\@lisp@func@check@args{2}{\@lisp@regex@split}}} \ExplSyntaxOn \seq_new:N \lot_regex_split_seq \cs_new:Npn \lot_regex_split:nnN #1#2#3{ \regex_split:nnN{#1}{#2}\lot_regex_split_seq \seq_map_variable:NNn \lot_regex_split_seq \lot_regex_tmp {\@lisp@regex@add@sep@result#3\lot_regex_tmp}} \cs_new_eq:NN \@lisp@regex@split@ \lot_regex_split:nnN \ExplSyntaxOff \def\@lisp@regex@split#1\@tlabel@string#2\@tlabel@string#3{% \def#1{}% \@lisp@regex@split@{#2}{#3}#1% \expandafter\@lisp@regex@add@typelabel\expandafter{#1}#1% \expandafter\@lisp@prim@list@pre\expandafter#1#1\relax\relax} % \regex_replace_once \@lisp@env@add@global\regReplaceOnce{\@tlabel@func{\@lisp@func@check@args{3}{\@lisp@regex@replace@once}}} \ExplSyntaxOn \cs_new_eq:NN \@lisp@regex@replace@once@ \regex_replace_once:nnN \ExplSyntaxOff %TODO: error handling \def\@lisp@regex@replace@once#1\@tlabel@string#2\@tlabel@string#3\@tlabel@string#4{% \def#1{#4}% \@lisp@regex@replace@once@{#2}{#3}#1% \expandafter\gdef\expandafter#1\expandafter{% \expandafter\@tlabel@string\expandafter{#1}}} % \regex_replace_all \@lisp@env@add@global\regReplaceAll{\@tlabel@func{\@lisp@func@check@args{3}{\@lisp@regex@replace@all}}} \ExplSyntaxOn \cs_new_eq:NN \@lisp@regex@replace@all@ \regex_replace_all:nnN \ExplSyntaxOff %TODO: error handling \def\@lisp@regex@replace@all#1\@tlabel@string#2\@tlabel@string#3\@tlabel@string#4{% \def#1{#4}% \@lisp@regex@replace@all@{#2}{#3}#1% \expandafter\gdef\expandafter#1\expandafter{% \expandafter\@tlabel@string\expandafter{#1}}}