I understand string processing can be done on either LaTeX2e using xstring and expl3 using xparse (originally based on the 2013 thread "Tokenizing and parsing") I will be running a relatively simple string parsing macro hundreds of times in a document, probably over many compilations and many documents, and would like to know which method is more timewise and/or computationally efficient, discounting the fixed time to load the packages.
An approximation based on a brief look at xstring's code would be most welcome from the 3e team here. I don't need anything close to exact results - this is for my own curiosity and just to make sure I don't end up trying to scratch through a brick wall somewhere.
Also I'd be interested in opinions on whether this application is a useful comparison of 2e and 3e algorithms.
This is the macro I'm running using xstring: it is to give a very light highlight of the first letter (first two letters for this demo) of every mention of key words and phrases, which would simply clutter the page if fully highlighted:
\documentclass{article}
\usepackage{xstring}
%%% capitalize first n letters of each word %%%
% apply operator#3 to string#1 with word separators #2
\newcommand{\Splitstrop}[3][ ]{%
\providecommand\csA{}%
\providecommand\csB{}%
\StrCut{#3}{#1}\csA\csB%
#2{\csA}%
\ifx\csB\empty\else{#1}\Splitstrop[#1]{#2}{\csB}\fi\relax}
% apply operation#3 on first #2 letters of string #1
\newcommand{\Leftstrop}[3][1]{#2{\StrLeft{#3}{#1}}\StrGobbleLeft{#3}{#1}\relax}
\newcommand{\Kw}[1]{\textsc{#1}} %first mention of keyword/phrase
\newcommand{\Kwd}[1]{\Leftstrop[2]{\Kw}{#1}} %single-word 2nd mention: apply \Kw to first two letters of the word (I plan to sc just the first letter, but this is more illustrative)
\newcommand{\Kwds}[1]{\Splitstrop[ ]{\Kwd}{#1}} % keyphrase 2nd mention: apply Kwd to each word (space is word separator)
\begin{document}
Example: We define the \Kw{embiggen} \Kwd{operator} to raise the size of the \Kwd{argument} by one.
This is a reminder not to \Kwds{beg the question} in your definitions (Sec. 2-1): don't say ``We define the \Kwd{embiggen} \Kwd{operator} as the \Kwd{operator} that \Kwd{embiggens}.''
\end{document}


