% arara: pdflatex: { files: [latexindent]}
\subsection{Combining removeParagraphLineBreaks and textWrapOptions}\label{subsec:removeparagraphlinebreaks:and:textwrap}

 The \announce{2018-08-13}{combine text wrap and remove paragraph line breaks} text
 wrapping routine (\vref{subsec:textwrapping}) and remove paragraph line breaks routine
 (\vref{subsec:removeparagraphlinebreaks}) can be combined.%

 We motivate this feature with the code given in \cref{lst:textwrap7}.

 \cmhlistingsfromfile{demonstrations/textwrap7.tex}{\texttt{textwrap7.tex}}{lst:textwrap7}

 Applying the text wrap routine from \vref{subsec:textwrapping} with, for example,
 \vref{lst:textwrap3-yaml} gives the output in \cref{lst:textwrap7-mod3}.

 \cmhlistingsfromfile{demonstrations/textwrap7-mod3.tex}{\texttt{textwrap7.tex} using \cref{lst:textwrap3-yaml}}{lst:textwrap7-mod3}

 The text wrapping routine has behaved as expected, but it may be desired to remove
 paragraph line breaks \emph{before} performing the text wrapping routine. The desired
 behaviour can be achieved by employing the \texttt{beforeTextWrap} switch.

 Explicitly, using the settings in \cref{lst:textwrap12-yaml} and running the command
 \index{switches!-l demonstration} \index{switches!-m demonstration} \index{switches!-o
 demonstration}
 \begin{commandshell}
latexindent.pl -m textwrap7.tex -l=textwrap12.yaml -o=+-mod12
\end{commandshell}
 we obtain the output in \cref{lst:textwrap7-mod12}.

 \begin{cmhtcbraster}
  \cmhlistingsfromfile{demonstrations/textwrap7-mod12.tex}{\texttt{textwrap7-mod12.tex}}{lst:textwrap7-mod12}
  \cmhlistingsfromfile{demonstrations/textwrap12.yaml}[MLB-TCB]{\texttt{textwrap12.yaml}}{lst:textwrap12-yaml}
 \end{cmhtcbraster}

 In \cref{lst:textwrap7-mod12} the paragraph line breaks have first been removed from
 \cref{lst:textwrap7}, and then the text wrapping routine has been applied. It is
 envisaged that variants of \cref{lst:textwrap12-yaml} will be among the most useful
 settings for these two features.

\subsubsection{text wrapping beforeFindingChildCodeBlocks}\label{subsubsec:text-wrap-remove-para-bfccb}

 \index{text wrap!recommended starting point}

 I \announce{2021-07-31}{textWrapOptions new feature: beforeFindingChildCodeBlocks} think
 it likely that most users will wish to employ the \texttt{beforeFindingChildCodeBlocks}
 option for the text wrap routine.%

 To motivate its use, we begin with the file in \cref{lst:textwrap-bfccb}.

 \cmhlistingsfromfile{demonstrations/textwrap-bfccb.tex}{\texttt{textwrap-bfccb.tex}}{lst:textwrap-bfccb}

 Using the settings in \cref{lst:textwrap12-yaml} and running
 \begin{commandshell}
latexindent.pl -m textwrap-bfccb.tex -l=textwrap12.yaml -o=+-mod12
\end{commandshell}
 gives the output in \cref{lst:textwrap-bfccb-mod12}

 \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod12.tex}{\texttt{textwrap-bfccb-mod12.tex}}{lst:textwrap-bfccb-mod12}

 Note that we have added a `ruler' to \cref{lst:textwrap-bfccb-mod12} to assist with
 measuring.

 The output in \cref{lst:textwrap-bfccb-mod12} is not ideal, but it is \emph{expected}.
 The reasoning is as follows:
 \begin{itemize}
  \item \texttt{latexindent.pl} first of all searches for code blocks (see
        \vref{tab:code-blocks});
  \item it replaces each code block with a unique identifying string;
  \item with the settings of \cref{lst:textwrap12-yaml} in place, it performs the paragraph line
        break removal, and then the text wrapping routine first of all on the \texttt{text}
        command, and then on the surrounding text;
  \item the surrounding text does not know that \texttt{text} is a command.
 \end{itemize}

 We can instruct \texttt{latexindent.pl} to perform text wrapping \emph{before searching
 for child code blocks} by using the \texttt{beforeFindingChildCodeBlocks} field.

 We save the \emph{quick-start} settings from \cref{lst:textwrap-qs-yaml} into
 \cref{lst:textwrap13-yaml} and change the value of \texttt{columns} for demonstration.
 Upon running the command
 \begin{commandshell}
latexindent.pl -m textwrap-bfccb.tex -l=textwrap13.yaml -o=+-mod13
\end{commandshell}
 we receive the output in \cref{lst:textwrap-bfccb-mod13}.

 \cmhlistingsfromfile{demonstrations/textwrap13.yaml}[MLB-TCB,width=\linewidth]{\texttt{textwrap13.yaml} (tweaked quick start)}{lst:textwrap13-yaml}

 \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod13.tex}{\texttt{textwrap-bfccb-mod13.tex}}{lst:textwrap-bfccb-mod13}

 This output is different from \cref{lst:textwrap-bfccb-mod12}, but is still not ideal, as
 the \texttt{test} command has indented its mandatory argument. We can employ
 \texttt{noAdditionalIndent} from \vref{sec:noadd-indent-rules} in
 \cref{lst:textwrap14-yaml} and run the command
 \begin{commandshell}
latexindent.pl -m textwrap-bfccb.tex -l=textwrap14.yaml -o=+-mod14
\end{commandshell}
 to receive the output in \cref{lst:textwrap-bfccb-mod14}.

 \begin{widepage}
  \begin{cmhtcbraster}
   \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod14.tex}{\texttt{textwrap-bfccb-mod14.tex}}{lst:textwrap-bfccb-mod14}
   \cmhlistingsfromfile{demonstrations/textwrap14.yaml}[MLB-TCB]{\texttt{textwrap14.yaml}}{lst:textwrap14-yaml}
  \end{cmhtcbraster}
 \end{widepage}

 For reference, let's say that we had started from \cref{lst:textwrap12-yaml}, which
 instructs \texttt{latexindent.pl} to apply the text-wrapping and
 paragraph-line-break-removal routines to \emph{all} code blocks. In order to achieve the
 output in \cref{lst:textwrap-bfccb-mod14}, then we would need to employ an exception,
 which we demonstrate in \cref{lst:textwrap15-yaml}.

 \cmhlistingsfromfile{demonstrations/textwrap15.yaml}[MLB-TCB]{\texttt{textwrap15.yaml}}{lst:textwrap15-yaml}
