texlive[47471] trunk: latexindent (28apr18)

commits+karl at tug.org commits+karl at tug.org
Sat Apr 28 23:57:32 CEST 2018


Revision: 47471
          http://tug.org/svn/texlive?view=revision&revision=47471
Author:   karl
Date:     2018-04-28 23:57:31 +0200 (Sat, 28 Apr 2018)
Log Message:
-----------
latexindent (28apr18)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl
    trunk/Master/bin/win32/latexindent.exe
    trunk/Master/texmf-dist/doc/support/latexindent/README
    trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex
    trunk/Master/texmf-dist/doc/support/latexindent/latexindent.pdf
    trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex
    trunk/Master/texmf-dist/doc/support/latexindent/title.tex
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm
    trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml
    trunk/Master/texmf-dist/scripts/latexindent/latexindent.pl

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex
    trunk/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex

Modified: trunk/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl
===================================================================
(Binary files differ)

Modified: trunk/Master/bin/win32/latexindent.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/latexindent/README
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/README	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/README	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-    latexindent.pl, version 3.4.1, 2018-01-18
+    latexindent.pl, version 3.4.2, 2018-04-27
 
     PERL script to indent code within environments, and align delimited 
     environments in .tex files.

Modified: trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,6 +1,6 @@
 % arara: pdflatex: {shell: yes, files: [latexindent]}
 \appendix
-	\section{Required \texttt{Perl} modules}\label{sec:requiredmodules}
+	\section{Required Perl modules}\label{sec:requiredmodules}
 	 If you intend to use \texttt{latexindent.pl} and \emph{not} one of the supplied standalone executable files, then you will need a few standard Perl modules -- if you can run the
 	 minimum code in \cref{lst:helloworld} (\texttt{perl helloworld.pl}) then you will be able to run \texttt{latexindent.pl}, otherwise you may
 	 need to install the missing modules -- see \cref{sec:module-installer,sec:manual-module-instal}.
@@ -31,7 +31,7 @@
 \end{cmhlistings}
 
 	\subsection{Module installer script}\label{sec:module-installer}
-		\announce*{2018-01-13}{perl module helper script} \texttt{latexindent.pl} ships with a helper script that will install any missing \texttt{perl} modules
+		\announce{2018-01-13}{perl module helper script} \texttt{latexindent.pl} ships with a helper script that will install any missing \texttt{perl} modules
 		on your system; if you run
 		\begin{commandshell}
 perl latexindent-module-installer.pl
@@ -76,7 +76,7 @@
 latexindent.exe -t myfile.tex
  \end{dosprompt}
 
-	\section{Updating the \texttt{path} variable}\label{sec:updating-path}
+	\section{Updating the path variable}\label{sec:updating-path}
 	 \texttt{latexindent.pl} has a few scripts (available at \cite{latexindent-home}) that can update the \texttt{path} variables.
 	 Thank you to \cite{jasjuang} for this feature. If you're
 	 on a Linux or Mac machine, then you'll want \texttt{CMakeLists.txt} from \cite{latexindent-home}.
@@ -130,17 +130,17 @@
 		\end{enumerate}
 		To \emph{remove} the directory from your \lstinline!%path%!, run \texttt{remove-from-path.bat} as administrator.
 
-	\section{\texttt{logFilePreferences}}\label{app:logfile-demo}
+	\section{logFilePreferences}\label{app:logfile-demo}
 	 \Vref{lst:logFilePreferences} describes the options for customising the information given
 	 to the log file, and we provide a few demonstrations here. Let's say that we start with the code
 	 given in \cref{lst:simple}, and the settings specified in \cref{lst:logfile-prefs1-yaml}.
 
 	 \begin{minipage}{.35\linewidth}
-		 \cmhlistingsfromfile*{demonstrations/simple.tex}{\texttt{simple.tex}}{lst:simple}
+		 \cmhlistingsfromfile{demonstrations/simple.tex}{\texttt{simple.tex}}{lst:simple}
 	 \end{minipage}
 	 \hfill
 	 \begin{minipage}{.6\linewidth}
-		 \cmhlistingsfromfile*{demonstrations/logfile-prefs1.yaml}[yaml-TCB]{\texttt{logfile-prefs1.yaml}}{lst:logfile-prefs1-yaml}
+		 \cmhlistingsfromfile{demonstrations/logfile-prefs1.yaml}[yaml-TCB]{\texttt{logfile-prefs1.yaml}}{lst:logfile-prefs1-yaml}
 	 \end{minipage}
 
 	 If we run the following command (noting that \texttt{-t} is active)

Added: trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -0,0 +1,21 @@
+\newcommand{\cmhlistingsfromfile}[3]{
+.. literalinclude:: #1^^J
+^^I:caption: #2^^J
+^^I:name: #3^^J
+}
+\newcommand{\cmhlistingsfromfilefour}[5]{
+.. literalinclude:: #3^^J
+^^I:caption: #4^^J
+^^I:name: #5^^J
+^^I:lines: #1-#2^^J
+^^I:linenos:^^J
+^^I:lineno-start: #1^^J
+}
+\newcommand{\cmhlabel}[1]{
+.. _#1:^^J
+}
+\newcommand{\warning}[1]{
+.. warning::^^J
+#1^^J
+.. endwarning::^^J
+}{}


Property changes on: trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -0,0 +1,33 @@
+\documentclass{standalone}
+\usepackage{tikz}
+\usetikzlibrary{positioning}
+\begin{document}
+\begin{tikzpicture}[
+		needed/.style={very thick, draw=blue,fill=blue!20,
+				text centered, minimum height=2.5em,rounded corners=1ex},
+		optional/.style={draw=black, very thick,scale=0.8,
+				text centered, minimum height=2.5em,rounded corners=1ex},
+		optionalfill/.style={fill=black!10},
+		connections/.style={draw=black!30,dotted,line width=3pt,text=red},
+	]
+	% Draw diagram elements
+	\node (latexindent) [needed,circle]  {\texttt{latexindent.pl}};
+	\node (default) [needed,above right=.5cm of latexindent]  {\texttt{defaultSettings.yaml}};
+	\node (indentconfig) [optional,right=of latexindent]  {\texttt{indentconfig.yaml}};
+	\node (any) [optional,optionalfill,above right=of indentconfig]  {\texttt{any.yaml}};
+	\node (name) [optional,optionalfill,right=of indentconfig]  {\texttt{name.yaml}};
+	\node (you) [optional,optionalfill,below right=of indentconfig]  {\texttt{you.yaml}};
+	\node (want) [optional,optionalfill,below=of indentconfig]  {\texttt{want.yaml}};
+	\node (local) [optional,below=of latexindent]  {\texttt{localSettings.yaml}};
+	\node (yamlswitch) [optional,left=of latexindent]  {\texttt{-y switch}};
+	% Draw arrows between elements
+	\draw[connections,solid] (latexindent) to[in=-90]node[pos=0.5,anchor=north]{1} (default.south) ;
+	\draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=north]{2} (indentconfig) ;
+	\draw[connections,optional] (indentconfig) to[in=-90] (any.south) ;
+	\draw[connections,optional] (indentconfig) -- (name) ;
+	\draw[connections,optional] (indentconfig) to[out=-45,in=90] (you) ;
+	\draw[connections,optional] (indentconfig) -- (want) ;
+	\draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=west]{3} (local) ;
+	\draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=north]{4} (yamlswitch) ;
+\end{tikzpicture}
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/support/latexindent/latexindent.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -39,6 +39,7 @@
 \usepackage{longtable}
 \usepackage{array}
 \usepackage{totalcount}
+\usepackage{standalone}
 % setup gitinfo2, as in the manual, details just above begin{document}
 \usepackage[mark,grumpy]{gitinfo2}
 % tikz, tcolorbox libraries
@@ -379,67 +380,67 @@
 
 \lstdefinestyle{commandCodeBlocks}{
 	style=yaml-LST,
-	firstnumber=311,linerange={311-321},
+	firstnumber=311,linerange={311-325},
 	numbers=left,
 }
 
 \lstdefinestyle{modifylinebreaks}{
 	style=yaml-LST,
-	firstnumber=391,linerange={391-393},
+	firstnumber=395,linerange={395-397},
 	numbers=left,
 }
 
 \lstdefinestyle{textWrapOptions}{
 	style=yaml-LST,
-	firstnumber=394,linerange={394-395},
+	firstnumber=398,linerange={398-399},
 	numbers=left,
 }
 
 \lstdefinestyle{textWrapOptionsAll}{
 	style=yaml-LST,
-	firstnumber=394,linerange={394-396},
+	firstnumber=398,linerange={398-400},
 	numbers=left,
 }
 
 \lstdefinestyle{removeParagraphLineBreaks}{
 	style=yaml-LST,
-	firstnumber=419,linerange={419-431},
+	firstnumber=423,linerange={423-435},
 	numbers=left,
 }
 
 \lstdefinestyle{paragraphsStopAt}{
 	style=yaml-LST,
-	firstnumber=432,linerange={432-440},
+	firstnumber=436,linerange={436-444},
 	numbers=left,
 }
 
 \lstdefinestyle{oneSentencePerLine}{
 	style=yaml-LST,
-	firstnumber=397,linerange={397-418},
+	firstnumber=401,linerange={401-422},
 	numbers=left,
 }
 
 \lstdefinestyle{sentencesFollow}{
 	style=yaml-LST,
-	firstnumber=400,linerange={400-408},
+	firstnumber=404,linerange={404-412},
 	numbers=left,
 }
 
 \lstdefinestyle{sentencesBeginWith}{
 	style=yaml-LST,
-	firstnumber=409,linerange={409-412},
+	firstnumber=413,linerange={413-416},
 	numbers=left,
 }
 
 \lstdefinestyle{sentencesEndWith}{
 	style=yaml-LST,
-	firstnumber=413,linerange={413-418},
+	firstnumber=417,linerange={417-422},
 	numbers=left,
 }
 
 \lstdefinestyle{modifylinebreaksEnv}{
 	style=yaml-LST,
-	firstnumber=441,linerange={441-450},
+	firstnumber=445,linerange={445-454},
 	numbers=left,
 }
 
@@ -607,6 +608,8 @@
 \newcommand{\EndFinishesWithLineBreak}{\color{red}\clubsuit}
 \newcommand{\ElseStartsOnOwnLine}{\color{red}\bigstar}
 \newcommand{\ElseFinishesWithLineBreak}{\color{red}\square}
+\newcommand{\OrStartsOnOwnLine}{\color{red}\blacktriangle}
+\newcommand{\OrFinishesWithLineBreak}{\color{red}\blacktriangledown}
 \newcommand{\EqualsStartsOnOwnLine}{\color{red}\bullet}
 
 % table rules
@@ -628,6 +631,10 @@
 %   git checkout develop
 %   ls .git
 % and you should see gitHeadInfo.gin
+% 
+% Make sure that the 'V' is included in the below!
+%
+% RELTAG=$(git describe --tags --long --always --dirty='-*' --match 'V[0-9]*.*' 2>/dev/null)
 
 % http://tex.stackexchange.com/questions/233843/textasteriskcentered-invisible-with-garamondmathdesign
 % remove the definition of \textasteriskcentered for TS1 encoding
@@ -752,3 +759,12 @@
 - STDIN allowed: https://github.com/cmhughes/latexindent.pl/issues/88
 - textwrap bug fix: https://github.com/cmhughes/latexindent.pl/issues/90
 - polyswitch bug fix: https://github.com/cmhughes/latexindent.pl/issues/94
+
+Version 3.4.1
+- the reading of defaultSettings.yaml needed addressing
+- https://github.com/cmhughes/latexindent.pl/releases/tag/V3.4.1
+
+Version 3.4.2
+- enhancements to specialBeginEnd: https://github.com/cmhughes/latexindent.pl/issues/100
+- enhancements to commandCodeBlocks: https://github.com/cmhughes/latexindent.pl/issues/105
+- better support for forrest syntax: https://github.com/cmhughes/latexindent.pl/issues/107

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -6,11 +6,11 @@
  The main limitation is to do with the alignment routine discussed on \cpageref{yaml:lookforaligndelims}; for example,
  consider the file given in \cref{lst:matrix2}.
 
- \cmhlistingsfromfile*{demonstrations/matrix2.tex}{\texttt{matrix2.tex}}{lst:matrix2}
+ \cmhlistingsfromfile{demonstrations/matrix2.tex}{\texttt{matrix2.tex}}{lst:matrix2}
 
  The default output is given in \cref{lst:matrix2-default}, and it is clear that the alignment routine
  has not worked as hoped, but it is \emph{expected}.
- \cmhlistingsfromfile*{demonstrations/matrix2-default.tex}{\texttt{matrix2.tex} default output}{lst:matrix2-default}
+ \cmhlistingsfromfile{demonstrations/matrix2-default.tex}{\texttt{matrix2.tex} default output}{lst:matrix2-default}
 
  The reason for the problem is that when \texttt{latexindent.pl} stores its code blocks (see \vref{tab:code-blocks})
  it uses replacement tokens. The alignment routine is using the \emph{length of the replacement token} in its measuring -- I hope

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -86,10 +86,10 @@
 	been loaded, you can see the amalgamated settings in the log file by switching \texttt{showAmalgamatedSettings}
 	to \texttt{1}, if you wish.
 
-	\cmhlistingsfromfile*[style=logFilePreferences,]*{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences}
+	\cmhlistingsfromfile[style=logFilePreferences,]*{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences}
 
 	When%
-	\announce*{2018-01-13}{showDecorationStartCodeBlockTrace feature for log file} either of the \texttt{trace} modes (see \cpageref{page:traceswitch})
+	\announce{2018-01-13}{showDecorationStartCodeBlockTrace feature for log file} either of the \texttt{trace} modes (see \cpageref{page:traceswitch})
 	are active, you will receive detailed information in \texttt{indent.log}. You can specify character strings
 	to appear before and after the notification of a found code block using, respectively, \texttt{showDecorationStartCodeBlockTrace}
 	and \texttt{showDecorationFinishCodeBlockTrace}. A demonstration is given in \vref{app:logfile-demo}.
@@ -99,7 +99,7 @@
 	of \texttt{latexindent.pl} to the log file if \texttt{showGitHubInfoFooter} is set to \texttt{1}.
 
 	\texttt{latexindent.pl}%
-	\announce*{2018-01-13}{log file pattern layout for log file} uses the \texttt{log4perl} module \cite{log4perl}
+	\announce{2018-01-13}{log file pattern layout for log file} uses the \texttt{log4perl} module \cite{log4perl}
 	to handle the creation of the logfile. You can specify the layout of the information given in the logfile
 	using any of the \texttt{Log Layouts} detailed at \cite{log4perl}.
 
@@ -254,7 +254,7 @@
 	If, for example, you wish to remove the alignment of the \lstinline!\\! within a delimiter-aligned block, then the
 	advanced form of \texttt{lookForAlignDelims} shown in \cref{lst:aligndelims:advanced} is for you.
 
-	\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/tabular.yaml}[yaml-TCB]{\texttt{tabular.yaml}}{lst:aligndelims:advanced}
+	\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/tabular.yaml}[yaml-TCB]{\texttt{tabular.yaml}}{lst:aligndelims:advanced}
 
 	Note that you can use a mixture of the basic and advanced form: in \cref{lst:aligndelims:advanced} \texttt{tabular} and \texttt{tabularx}
 	are advanced and \texttt{longtable} is basic. When using the advanced form, each field should receive at least 1 sub-field, and \emph{can}
@@ -265,17 +265,17 @@
 		      will not be called for this code block (default: 1);
 		\item \texttt{alignDoubleBackSlash}: binary switch (0 or 1) to determine if \lstinline!\\! should be aligned (default: 1);
 		\item \texttt{spacesBeforeDoubleBackSlash}: optionally,%
-		      \announce*{2018-01-13}*{update to spacesBeforeDoubleBackSlash in ampersand alignment} specifies the number (integer $\geq$ 0) of spaces to be inserted
+		      \announce{2018-01-13}*{update to spacesBeforeDoubleBackSlash in ampersand alignment} specifies the number (integer $\geq$ 0) of spaces to be inserted
 		      before \lstinline!\\! (default: 1). \footnote{Previously this only activated if \texttt{alignDoubleBackSlash} was set to \texttt{0}.}
 		\item \announce{2017-06-19}{multiColumnGrouping} \texttt{multiColumnGrouping}: binary switch (0 or 1) that details if \texttt{latexindent.pl} should group columns
 		      above and below a \lstinline!\multicolumn! command (default: 0);
 		\item \announce{2017-06-19}{alignRowsWithoutMaxDelims} \texttt{alignRowsWithoutMaxDelims}: binary switch (0 or 1) that details if rows that do not contain the
 		      maximum number of delimeters should be formatted so as to have the ampersands aligned (default: 1);
-		\item \announce*{2018-01-13}{spacesBeforeAmpersand in ampersand alignment}\texttt{spacesBeforeAmpersand}: optionally specifies the number (integer $\geq$ 0) of
+		\item \announce{2018-01-13}{spacesBeforeAmpersand in ampersand alignment}\texttt{spacesBeforeAmpersand}: optionally specifies the number (integer $\geq$ 0) of
 		      spaces to be placed \emph{before} ampersands (default: 1);
-		\item \announce*{2018-01-13}{spacesAfterAmpersand in ampersand alignment}\texttt{spacesAfterAmpersand}: optionally specifies the number (integer $\geq$ 0) of
+		\item \announce{2018-01-13}{spacesAfterAmpersand in ampersand alignment}\texttt{spacesAfterAmpersand}: optionally specifies the number (integer $\geq$ 0) of
 		      spaces to be placed \emph{After} ampersands (default: 1);
-		\item \announce*{2018-01-13}{justification of cells in ampersand alignment}\texttt{justification}: optionally specifies the justification of each cell as either \emph{left}
+		\item \announce{2018-01-13}{justification of cells in ampersand alignment}\texttt{justification}: optionally specifies the justification of each cell as either \emph{left}
 		      or \emph{right} (default: left).
 	\end{itemize}
 
@@ -292,23 +292,23 @@
 	\end{minipage}%
 
 	\begin{minipage}{.45\textwidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/tabular4.yaml}[yaml-TCB]{\texttt{tabular4.yaml}}{lst:tabular4YAML}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/tabular4.yaml}[yaml-TCB]{\texttt{tabular4.yaml}}{lst:tabular4YAML}
 	\end{minipage}%
 	\hfill
 	\begin{minipage}{.48\textwidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/tabular5.yaml}[yaml-TCB]{\texttt{tabular5.yaml}}{lst:tabular5YAML}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/tabular5.yaml}[yaml-TCB]{\texttt{tabular5.yaml}}{lst:tabular5YAML}
 	\end{minipage}%
 
 	\begin{minipage}{.45\textwidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/tabular6.yaml}[yaml-TCB]{\texttt{tabular6.yaml}}{lst:tabular6YAML}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/tabular6.yaml}[yaml-TCB]{\texttt{tabular6.yaml}}{lst:tabular6YAML}
 	\end{minipage}%
 	\hfill
 	\begin{minipage}{.48\textwidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/tabular7.yaml}[yaml-TCB]{\texttt{tabular7.yaml}}{lst:tabular7YAML}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/tabular7.yaml}[yaml-TCB]{\texttt{tabular7.yaml}}{lst:tabular7YAML}
 	\end{minipage}%
 
 	\begin{minipage}{.48\textwidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/tabular8.yaml}[yaml-TCB]{\texttt{tabular8.yaml}}{lst:tabular8YAML}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/tabular8.yaml}[yaml-TCB]{\texttt{tabular8.yaml}}{lst:tabular8YAML}
 	\end{minipage}%
 
 	On running the commands
@@ -325,14 +325,14 @@
 	we obtain the respective outputs given in \crefrange{lst:tabular2-default}{lst:tabular2-mod8}.
 
 	\begin{widepage}
-		\cmhlistingsfromfile*{demonstrations/tabular2-default.tex}{\texttt{tabular2.tex} default output}{lst:tabular2-default}
-		\cmhlistingsfromfile*{demonstrations/tabular2-mod2.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML}}{lst:tabular2-mod2}
-		\cmhlistingsfromfile*{demonstrations/tabular2-mod3.tex}{\texttt{tabular2.tex} using \cref{lst:tabular3YAML}}{lst:tabular2-mod3}
-		\cmhlistingsfromfile*{demonstrations/tabular2-mod4.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular4YAML}}{lst:tabular2-mod4}
-		\cmhlistingsfromfile*{demonstrations/tabular2-mod5.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular5YAML}}{lst:tabular2-mod5}
-		\cmhlistingsfromfile*{demonstrations/tabular2-mod6.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular6YAML}}{lst:tabular2-mod6}
-		\cmhlistingsfromfile*{demonstrations/tabular2-mod7.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular7YAML}}{lst:tabular2-mod7}
-		\cmhlistingsfromfile*{demonstrations/tabular2-mod8.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular8YAML}}{lst:tabular2-mod8}
+		\cmhlistingsfromfile{demonstrations/tabular2-default.tex}{\texttt{tabular2.tex} default output}{lst:tabular2-default}
+		\cmhlistingsfromfile{demonstrations/tabular2-mod2.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML}}{lst:tabular2-mod2}
+		\cmhlistingsfromfile{demonstrations/tabular2-mod3.tex}{\texttt{tabular2.tex} using \cref{lst:tabular3YAML}}{lst:tabular2-mod3}
+		\cmhlistingsfromfile{demonstrations/tabular2-mod4.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular4YAML}}{lst:tabular2-mod4}
+		\cmhlistingsfromfile{demonstrations/tabular2-mod5.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular5YAML}}{lst:tabular2-mod5}
+		\cmhlistingsfromfile{demonstrations/tabular2-mod6.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular6YAML}}{lst:tabular2-mod6}
+		\cmhlistingsfromfile{demonstrations/tabular2-mod7.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular7YAML}}{lst:tabular2-mod7}
+		\cmhlistingsfromfile{demonstrations/tabular2-mod8.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular8YAML}}{lst:tabular2-mod8}
 	\end{widepage}
 
 	Notice in particular:
@@ -492,6 +492,43 @@
 		      because \cref{lst:specialBeforeCommand-yaml} specifies that the \texttt{specialBeginEnd} should be sought \emph{before} commands.
 	\end{itemize}
 
+	You can,optionally, specify%
+	\announce*{2018-04-27}{update to specialBeginEnd} the \texttt{middle} field for anything that you
+	specify in \texttt{specialBeginEnd}. For example, let's consider the \texttt{.tex} file in \cref{lst:special2}.
+
+	\cmhlistingsfromfile*{demonstrations/special2.tex}{\texttt{special2.tex}}{lst:special2}
+
+	Upon saving the YAML settings in \cref{lst:middle-yaml,lst:middle1-yaml} and running the commands
+	\begin{commandshell}
+latexindent.pl special2.tex -l=middle
+latexindent.pl special2.tex -l=middle1
+    \end{commandshell}
+	then we obtain the output given in \cref{lst:special2-mod1,lst:special2-mod2}.
+
+	\begin{minipage}{.4\linewidth}
+		\cmhlistingsfromfile*{demonstrations/middle.yaml}[yaml-TCB]{\texttt{middle.yaml}}{lst:middle-yaml}
+	\end{minipage}
+	\hfill
+	\begin{minipage}{.5\linewidth}
+		\cmhlistingsfromfile*{demonstrations/special2-mod1.tex}{\texttt{special2.tex} using \cref{lst:middle-yaml}}{lst:special2-mod1}
+	\end{minipage}
+
+	\begin{minipage}{.4\linewidth}
+		\cmhlistingsfromfile*{demonstrations/middle1.yaml}[yaml-TCB]{\texttt{middle1.yaml}}{lst:middle1-yaml}
+	\end{minipage}
+	\hfill
+	\begin{minipage}{.5\linewidth}
+		\cmhlistingsfromfile*{demonstrations/special2-mod2.tex}{\texttt{special2.tex} using \cref{lst:middle1-yaml}}{lst:special2-mod2}
+	\end{minipage}
+
+	We note that:
+	\begin{itemize}
+		\item in \cref{lst:special2-mod1} the bodies of each of the \texttt{Elsif} statements have been indented appropriately;
+		\item the \texttt{Else} statement has \emph{not} been indented appropriately in \cref{lst:special2-mod1} -- read on!
+		\item we have specified multiple settings for the \texttt{middle} field using the syntax demonstrated in
+		      \cref{lst:middle1-yaml} so that the body of the \texttt{Else} statement has been indented appropriately in \cref{lst:special2-mod2}.
+	\end{itemize}
+
 \yamltitle{indentAfterHeadings}*{fields}
 	\begin{wrapfigure}[17]{r}[0pt]{8cm}
 		\cmhlistingsfromfile[style=indentAfterHeadings]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterHeadings}}{lst:indentAfterHeadings}
@@ -585,7 +622,7 @@
 	In general, when using the \texttt{maximumIndentation} feature, any leading tabs will be replaced by equivalent
 	spaces except, of course, those found in \texttt{verbatimEnvironments} (see \vref{lst:verbatimEnvironments}) or \texttt{noIndentBlock} (see \vref{lst:noIndentBlock}).
 
-\subsection{The code blocks known \texttt{latexindent.pl}}\label{subsubsec:code-blocks}
+\subsection{The code blocks known latexindent.pl}\label{subsubsec:code-blocks}
 	As of Version 3.0, \texttt{latexindent.pl} processes documents using code blocks; each
 	of these are shown in \cref{tab:code-blocks}.
 
@@ -620,7 +657,7 @@
 				\\\cmidrule{2-3}
 				commands                      & \lstinline!+a-zA-Z@\*0-9_\:!                                                                                        & \lstinline!\mycommand!$\langle$\itshape{arguments}$\rangle$                                                                                                                                                                                \\\cmidrule{2-3}
 				keyEqualsValuesBracesBrackets & \lstinline!a-zA-Z@\*0-9_\/.\h\{\}:\#-!                                                                                        & \lstinline!my key/.style=!$\langle$\itshape{arguments}$\rangle$                                                                                                                                                                                \\\cmidrule{2-3}
-				namedGroupingBracesBrackets   & \lstinline!a-zA-Z@\*><!                                                                                        & \lstinline!in!$\langle$\itshape{arguments}$\rangle$                                                                                                                                                                                \\\cmidrule{2-3}
+				namedGroupingBracesBrackets   & \lstinline!0-9\.a-zA-Z@\*><!                                                                                        & \lstinline!in!$\langle$\itshape{arguments}$\rangle$                                                                                                                                                                                \\\cmidrule{2-3}
 				UnNamedGroupingBracesBrackets & \centering\emph{No name!}                                                                                      & \lstinline!{! or \lstinline![! or \lstinline!,! or \lstinline!&! or \lstinline!)! or \lstinline!(! or \lstinline!$! followed by $\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
 				ifElseFi                      & \lstinline!@a-zA-Z! but must begin with either \newline \lstinline!\if! of \lstinline!\@if! &
 				\begin{lstlisting}[,nolol=true,]

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -20,7 +20,7 @@
  users, so that you can use the script with or without a Perl distribution.
  If you plan to use \texttt{latexindent.pl} (i.e, the original Perl script) then you will
  need a few standard Perl modules -- see \vref{sec:requiredmodules} for details;
- \announce*{2018-01-13}{perl module installer helper script} in particular, note
+ \announce{2018-01-13}{perl module installer helper script} in particular, note
  that a module installer helper script is shipped with \texttt{latexindent.pl}.
 
 \subsection{From the command line}\label{sec:commandline}
@@ -290,7 +290,7 @@
 latexindent.pl -screenlog myfile.tex
       \end{commandshell}
 	Using this%
-	\announce*{2018-01-13}{screenlog switch created} option tells \texttt{latexindent.pl} to output the log file to the screen, as well
+	\announce{2018-01-13}{screenlog switch created} option tells \texttt{latexindent.pl} to output the log file to the screen, as well
 	as to your chosen log file.
 
 \flagbox{-m, --modifylinebreaks}
@@ -315,12 +315,12 @@
 cat myfile.tex | latexindent.pl
     \end{commandshell}
 	\texttt{latexindent.pl} will%
-	\announce*{2018-01-13}{STDIN allowed} allow input from STDIN, which means that you can pipe output from
+	\announce{2018-01-13}{STDIN allowed} allow input from STDIN, which means that you can pipe output from
 	other commands directly into the script. For example assuming that you have content in \texttt{myfile.tex}, then the above
 	command will output the results of operating upon \texttt{myfile.tex}
 
 	Similarly, if you%
-	\announce*{2018-01-13}*{no options/filename updated} simply type \texttt{latexindent.pl}
+	\announce{2018-01-13}*{no options/filename updated} simply type \texttt{latexindent.pl}
 	at the command line, then it will expect (STDIN) input from the command line.
 	\begin{commandshell}
 latexindent.pl
@@ -333,7 +333,7 @@
 	\end{itemize}
 	to signify that your input has finished.
 
-\subsection{From \texttt{arara}}\label{sec:arara}
+\subsection{From arara}\label{sec:arara}
 	Using \texttt{latexindent.pl} from the command line is fine for some folks, but
 	others may find it easier to use from \texttt{arara}; you can find the arara rule at \cite{paulo}.
 

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,11 +1,11 @@
 % arara: pdflatex: {shell: yes, files: [latexindent]}
-\section{\texttt{indentconfig.yaml}, local settings and the \texttt{-y} switch }\label{sec:indentconfig}
+\section{indentconfig.yaml, local settings and the -y switch }\label{sec:indentconfig}
  The behaviour of \texttt{latexindent.pl} is controlled from the settings specified
  in any of the YAML files that you tell it to load. By default, \texttt{latexindent.pl}
  will only load \texttt{defaultSettings.yaml}, but there are a few ways that you can
  tell it to load your own settings files.
 
-\subsection{\texttt{indentconfig.yaml} and \texttt{{.indentconfig.yaml}}}
+\subsection{indentconfig.yaml and .indentconfig.yaml}
 	\texttt{latexindent.pl} will always check your home directory for \texttt{indentconfig.yaml}
 	and  \texttt{.indentconfig.yaml} (unless
 	it is called with the \texttt{-d} switch),
@@ -80,7 +80,7 @@
 		will tell you so in \texttt{indent.log}.
 	\end{warning}
 
-\subsection{\texttt{localSettings.yaml}}\label{sec:localsettings}
+\subsection{localSettings.yaml}\label{sec:localsettings}
 	The \texttt{-l} switch tells \texttt{latexindent.pl} to look for \texttt{localSettings.yaml} in the
 	\emph{same directory} as \texttt{myfile.tex}.  For example, if you use the following command
 	\begin{commandshell}
@@ -114,7 +114,7 @@
 	for details; if it can not be read then you receive a warning, otherwise you'll get confirmation that
 	\texttt{latexindent.pl} has read your settings file.
 
-\subsection{The \texttt{-y|yaml} switch}\label{sec:yamlswitch}
+\subsection{The -y|yaml switch}\label{sec:yamlswitch}
 	You%
 	\announce{2017-08-21}{demonstration of the -y switch} may use the \texttt{-y} switch to load
 	your settings;  for example, if you wished to specify the settings from \cref{lst:localSettings}
@@ -152,34 +152,7 @@
 
 	\begin{figure}[!htb]
 		\centering
-		\begin{tikzpicture}[
-				needed/.style={very thick, draw=blue,fill=blue!20,
-						text centered, minimum height=2.5em,rounded corners=1ex},
-				optional/.style={draw=black, very thick,scale=0.8,
-						text centered, minimum height=2.5em,rounded corners=1ex},
-				optionalfill/.style={fill=black!10},
-				connections/.style={draw=black!30,dotted,line width=3pt,text=red},
-			]
-			% Draw diagram elements
-			\node (latexindent) [needed,circle]  {\texttt{latexindent.pl}};
-			\node (default) [needed,above right=.5cm of latexindent]  {\texttt{defaultSettings.yaml}};
-			\node (indentconfig) [optional,right=of latexindent]  {\texttt{indentconfig.yaml}};
-			\node (any) [optional,optionalfill,above right=of indentconfig]  {\texttt{any.yaml}};
-			\node (name) [optional,optionalfill,right=of indentconfig]  {\texttt{name.yaml}};
-			\node (you) [optional,optionalfill,below right=of indentconfig]  {\texttt{you.yaml}};
-			\node (want) [optional,optionalfill,below=of indentconfig]  {\texttt{want.yaml}};
-			\node (local) [optional,below=of latexindent]  {\texttt{localSettings.yaml}};
-			\node (yamlswitch) [optional,left=of latexindent]  {\texttt{-y switch}};
-			% Draw arrows between elements
-			\draw[connections,solid] (latexindent) to[in=-90]node[pos=0.5,anchor=north]{1} (default.south) ;
-			\draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=north]{2} (indentconfig) ;
-			\draw[connections,optional] (indentconfig) to[in=-90] (any.south) ;
-			\draw[connections,optional] (indentconfig) -- (name) ;
-			\draw[connections,optional] (indentconfig) to[out=-45,in=90] (you) ;
-			\draw[connections,optional] (indentconfig) -- (want) ;
-			\draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=west]{3} (local) ;
-			\draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=north]{4} (yamlswitch) ;
-		\end{tikzpicture}
+		\input{figure-schematic}
 		\caption{Schematic of the load order described in \cref{sec:loadorder}; solid lines represent
 			mandatory files, dotted lines represent optional files. \texttt{indentconfig.yaml} can
 			contain as many files as you like. The files will be loaded in order; if you specify

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -85,6 +85,7 @@
 		for more details.
 	\end{minipage}%
 
+	% \begin{latexonly}
 	You will occasionally see dates shown in the margin (for example, next to this paragraph!)
 	\announce{2017-06-25}{announce} which detail the date of the version in which the feature was implemented;
 	the `N' stands for `new as of the date shown' and `U' stands for `updated as of the date shown'.
@@ -94,6 +95,7 @@
 	not read this document before (and even if you have!), then you can ignore every occurrence of the \stardemo;
 	they are simply there to highlight new and updated features.
 	The new and updated features in this documentation (\gitRel) are on the following pages: \listOfNewFeatures
+	% \end{latexonly}
 
 \subsection{Quick start}\label{sec:quickstart}
 	If you'd like to get started with \texttt{latexindent.pl} then simply type

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -3,7 +3,7 @@
 	\tikz[remember picture,overlay] {
 		\node at (1,0){\includegraphics{logo}};
 	}}
-\section{The \texttt{-m} (\texttt{modifylinebreaks}) switch}\label{sec:modifylinebreaks}
+\section{The -m (modifylinebreaks) switch}\label{sec:modifylinebreaks}
  All features described in this section will only be relevant if the \texttt{-m} switch
  is used.
 
@@ -41,7 +41,7 @@
 	blank lines can be condensed if \texttt{condenseMultipleBlankLinesInto} is
 	greater than \texttt{0}, discussed next.
 
-\yamltitle{condenseMultipleBlankLinesInto}*{integer $\geq 0$}
+\yamltitle{condenseMultipleBlankLinesInto}*{positive integer}
 	Assuming that this switch takes an integer value greater than \texttt{0}, \texttt{latexindent.pl} will condense multiple blank lines into
 	the number of blank lines illustrated by this switch. As an example, \cref{lst:mlb-bl} shows a sample file
 	with blank lines; upon running
@@ -141,22 +141,22 @@
 		\cmhlistingsfromfile{demonstrations/textwrap2.yaml}[MLB-TCB]{\texttt{textwrap2.yaml}}{lst:textwrap2-yaml}
 	\end{minipage}
 
-	\paragraph{Summary of text wrapping}
-		It is important to note the following:
-		\begin{itemize}
-			\item Verbatim environments (\vref{lst:verbatimEnvironments}) and verbatim commands (\vref{lst:verbatimCommands}) will \emph{not} be affected by the text wrapping routine (see \vref{lst:textwrap2-mod1});
-			\item comments will \emph{not} be affected by the text wrapping routine (see \vref{lst:textwrap3-mod1});
-			\item indentation is performed \emph{after} the text wrapping routine; as such, indented code
-			      will likely exceed any maximum value set in the \texttt{columns} field.
-		\end{itemize}
+	\textbf{Summary of text wrapping}
+	It is important to note the following:
+	\begin{itemize}
+		\item Verbatim environments (\vref{lst:verbatimEnvironments}) and verbatim commands (\vref{lst:verbatimCommands}) will \emph{not} be affected by the text wrapping routine (see \vref{lst:textwrap2-mod1});
+		\item comments will \emph{not} be affected by the text wrapping routine (see \vref{lst:textwrap3-mod1});
+		\item indentation is performed \emph{after} the text wrapping routine; as such, indented code
+		      will likely exceed any maximum value set in the \texttt{columns} field.
+	\end{itemize}
 
-\subsection{\texttt{oneSentencePerLine}: modifying line breaks for sentences}\label{sec:onesentenceperline}
+\subsection{oneSentencePerLine: modifying line breaks for sentences}\label{sec:onesentenceperline}
 	You can instruct \texttt{latexindent.pl} to format%
-	\announce*{2018-01-13}{one sentence per line} your file so that it puts one sentence
+	\announce{2018-01-13}{one sentence per line} your file so that it puts one sentence
 	per line. Thank you to \cite{mlep} for helping to shape and test this feature. The behaviour of this part of the script is controlled by the switches detailed in \cref{lst:oneSentencePerLine},
 	all of which we discuss next.
 
-	\cmhlistingsfromfile*[style=oneSentencePerLine]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{oneSentencePerLine}}{lst:oneSentencePerLine}
+	\cmhlistingsfromfile[style=oneSentencePerLine]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{oneSentencePerLine}}{lst:oneSentencePerLine}
 
 \yamltitle{manipulateSentences}{0|1}
 	This is a binary switch that details if \texttt{latexindent.pl} should perform the sentence manipulation routine; it
@@ -169,7 +169,7 @@
 
 	For example, consider \texttt{multiple-sentences.tex} shown in \cref{lst:multiple-sentences}.
 
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences.tex}{\texttt{multiple-sentences.tex}}{lst:multiple-sentences}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences.tex}{\texttt{multiple-sentences.tex}}{lst:multiple-sentences}
 
 	If we use the YAML files in \cref{lst:manipulate-sentences-yaml,lst:keep-sen-line-breaks-yaml}, and run the commands
 	\begin{widepage}
@@ -181,19 +181,19 @@
 	then we obtain the respective output given in \cref{lst:multiple-sentences-mod1,lst:multiple-sentences-mod2}.
 
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences-mod1.tex}{\texttt{multiple-sentences.tex} using \cref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences-mod1}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod1.tex}{\texttt{multiple-sentences.tex} using \cref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences-mod1}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/manipulate-sentences.yaml}[MLB-TCB]{\texttt{manipulate-sentences.yaml}}{lst:manipulate-sentences-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/manipulate-sentences.yaml}[MLB-TCB]{\texttt{manipulate-sentences.yaml}}{lst:manipulate-sentences-yaml}
 	\end{minipage}
 
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences-mod2.tex}{\texttt{multiple-sentences.tex} using \cref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences-mod2}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod2.tex}{\texttt{multiple-sentences.tex} using \cref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences-mod2}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/keep-sen-line-breaks.yaml}[MLB-TCB]{\texttt{keep-sen-line-breaks.yaml}}{lst:keep-sen-line-breaks-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/keep-sen-line-breaks.yaml}[MLB-TCB]{\texttt{keep-sen-line-breaks.yaml}}{lst:keep-sen-line-breaks-yaml}
 	\end{minipage}
 
 	Notice, in particular, that the `internal' sentence line breaks in \cref{lst:multiple-sentences} have
@@ -214,19 +214,19 @@
 
 	\begin{adjustwidth}{-3.5cm}{-2.5cm}
 		\begin{minipage}{.36\linewidth}
-			\cmhlistingsfromfile*[style=sentencesFollow]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow}
+			\cmhlistingsfromfile[style=sentencesFollow]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow}
 		\end{minipage}
 		\hfill
 		\begin{minipage}{.31\linewidth}
-			\cmhlistingsfromfile*[style=sentencesBeginWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith}
+			\cmhlistingsfromfile[style=sentencesBeginWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith}
 		\end{minipage}
 		\hfill
 		\begin{minipage}{.31\linewidth}
-			\cmhlistingsfromfile*[style=sentencesEndWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith}
+			\cmhlistingsfromfile[style=sentencesEndWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith}
 		\end{minipage}
 	\end{adjustwidth}
 
-\subsubsection{\texttt{sentencesFollow}}
+\subsubsection{sentencesFollow}
 	Let's explore a few of the switches in \texttt{sentencesFollow}; let's start with \vref{lst:multiple-sentences}, and use the YAML
 	settings given in \cref{lst:sentences-follow1-yaml}. Using the command
 	\begin{commandshell}
@@ -235,11 +235,11 @@
 	we obtain the output given in \cref{lst:multiple-sentences-mod3}.
 
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences-mod3.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-follow1-yaml}}{lst:multiple-sentences-mod3}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod3.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-follow1-yaml}}{lst:multiple-sentences-mod3}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/sentences-follow1.yaml}[MLB-TCB]{\texttt{sentences-follow1.yaml}}{lst:sentences-follow1-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow1.yaml}[MLB-TCB]{\texttt{sentences-follow1.yaml}}{lst:sentences-follow1-yaml}
 	\end{minipage}
 
 	Notice that, because \texttt{blankLine} is set to \texttt{0}, \texttt{latexindent.pl} will not seek sentences following a blank line,
@@ -247,7 +247,7 @@
 
 	We can explore the \texttt{other} field in \cref{lst:sentencesFollow} with the \texttt{.tex} file detailed in \cref{lst:multiple-sentences1}.
 
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences1.tex}{\texttt{multiple-sentences1.tex}}{lst:multiple-sentences1}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences1.tex}{\texttt{multiple-sentences1.tex}}{lst:multiple-sentences1}
 
 	Upon running the following commands
 	\begin{widepage}
@@ -257,14 +257,14 @@
 	\end{commandshell}
 	\end{widepage}
 	then we obtain the respective output given in \cref{lst:multiple-sentences1-mod1,lst:multiple-sentences1-mod2}.
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences1-mod1.tex}{\texttt{multiple-sentences1.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences1-mod1}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences1-mod1.tex}{\texttt{multiple-sentences1.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences1-mod1}
 
 	\begin{minipage}{.55\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences1-mod2.tex}{\texttt{multiple-sentences1.tex} using \cref{lst:sentences-follow2-yaml}}{lst:multiple-sentences1-mod2}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences1-mod2.tex}{\texttt{multiple-sentences1.tex} using \cref{lst:sentences-follow2-yaml}}{lst:multiple-sentences1-mod2}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.45\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/sentences-follow2.yaml}[MLB-TCB]{\texttt{sentences-follow2.yaml}}{lst:sentences-follow2-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow2.yaml}[MLB-TCB]{\texttt{sentences-follow2.yaml}}{lst:sentences-follow2-yaml}
 	\end{minipage}
 
 	Notice that in \cref{lst:multiple-sentences1-mod1} the first sentence after the \texttt{)} has not been accounted for, but that
@@ -271,12 +271,12 @@
 	following the inclusion of \cref{lst:sentences-follow2-yaml}, the output given in \cref{lst:multiple-sentences1-mod2} demonstrates that
 	the sentence \emph{has} been accounted for correctly.
 
-\subsubsection{\texttt{sentencesBeginWith}}
+\subsubsection{sentencesBeginWith}
 	By default, \texttt{latexindent.pl} will only assume that sentences begin with the upper case letters \texttt{A-Z}; you can instruct the
 	script to define sentences to begin with lower case letters (see \cref{lst:sentencesBeginWith}), and we can use the \texttt{other} field
 	to define sentences to begin with other characters.
 
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences2.tex}{\texttt{multiple-sentences2.tex}}{lst:multiple-sentences2}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences2.tex}{\texttt{multiple-sentences2.tex}}{lst:multiple-sentences2}
 
 	Upon running the following commands
 	\begin{widepage}
@@ -286,20 +286,20 @@
 	\end{commandshell}
 	\end{widepage}
 	then we obtain the respective output given in \cref{lst:multiple-sentences2-mod1,lst:multiple-sentences2-mod2}.
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences2-mod1.tex}{\texttt{multiple-sentences2.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences2-mod1}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences2-mod1.tex}{\texttt{multiple-sentences2.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences2-mod1}
 
 	\begin{minipage}{.55\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences2-mod2.tex}{\texttt{multiple-sentences2.tex} using \cref{lst:sentences-begin1-yaml}}{lst:multiple-sentences2-mod2}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences2-mod2.tex}{\texttt{multiple-sentences2.tex} using \cref{lst:sentences-begin1-yaml}}{lst:multiple-sentences2-mod2}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.45\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/sentences-begin1.yaml}[MLB-TCB]{\texttt{sentences-begin1.yaml}}{lst:sentences-begin1-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-begin1.yaml}[MLB-TCB]{\texttt{sentences-begin1.yaml}}{lst:sentences-begin1-yaml}
 	\end{minipage}
 	Notice that in \cref{lst:multiple-sentences2-mod1}, the first sentence has been accounted for but that the subsequent sentences
 	have not. In \cref{lst:multiple-sentences2-mod2}, all of the sentences have been accounted for, because the \texttt{other} field
 	in \cref{lst:sentences-begin1-yaml} has defined sentences to begin with either \lstinline!$! or any numeric digit, \texttt{0} to \texttt{9}.
 
-\subsubsection{\texttt{sentencesEndWith}}
+\subsubsection{sentencesEndWith}
 	Let's return to \vref{lst:multiple-sentences}; we have already seen the default way in which \texttt{latexindent.pl} will operate on the
 	sentences in this file in \vref{lst:multiple-sentences-mod1}. We can populate the \texttt{other} field with any character that we wish;
 	for example, using the YAML specified in \cref{lst:sentences-end1-yaml} and the command
@@ -310,19 +310,19 @@
 	then we obtain the output in \cref{lst:multiple-sentences-mod4}.
 
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences-mod4.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end1-yaml}}{lst:multiple-sentences-mod4}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod4.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end1-yaml}}{lst:multiple-sentences-mod4}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/sentences-end1.yaml}[MLB-TCB]{\texttt{sentences-end1.yaml}}{lst:sentences-end1-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end1.yaml}[MLB-TCB]{\texttt{sentences-end1.yaml}}{lst:sentences-end1-yaml}
 	\end{minipage}
 
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences-mod5.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end2-yaml}}{lst:multiple-sentences-mod5}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod5.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end2-yaml}}{lst:multiple-sentences-mod5}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/sentences-end2.yaml}[MLB-TCB]{\texttt{sentences-end2.yaml}}{lst:sentences-end2-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end2.yaml}[MLB-TCB]{\texttt{sentences-end2.yaml}}{lst:sentences-end2-yaml}
 	\end{minipage}
 
 	There is a subtle difference between the output in \cref{lst:multiple-sentences-mod4,lst:multiple-sentences-mod5}; in particular,
@@ -335,7 +335,7 @@
 
 	Let's consider the file shown in \cref{lst:url}.
 
-	\cmhlistingsfromfile*{demonstrations/url.tex}{\texttt{url.tex}}{lst:url}
+	\cmhlistingsfromfile{demonstrations/url.tex}{\texttt{url.tex}}{lst:url}
 
 	Upon running the following commands
 	\begin{commandshell}
@@ -343,7 +343,7 @@
 \end{commandshell}
 	we obtain the output given in \cref{lst:url-mod1}.
 
-	\cmhlistingsfromfile*{demonstrations/url-mod1.tex}{\texttt{url.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:url-mod1}
+	\cmhlistingsfromfile{demonstrations/url-mod1.tex}{\texttt{url.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:url-mod1}
 
 	Notice that the full stop within the url has been interpreted correctly. This is because, within the \texttt{betterFullStop},
 	full stops at the end of sentences have the following properties:
@@ -363,17 +363,17 @@
 
 	\begin{adjustwidth}{-3.5cm}{-1.5cm}
 		\begin{minipage}{.6\linewidth}
-			\cmhlistingsfromfile*{demonstrations/url-mod2.tex}{\texttt{url.tex} using \cref{lst:alt-full-stop1-yaml}}{lst:url-mod2}
+			\cmhlistingsfromfile{demonstrations/url-mod2.tex}{\texttt{url.tex} using \cref{lst:alt-full-stop1-yaml}}{lst:url-mod2}
 		\end{minipage}
 		\hfill
 		\begin{minipage}{.4\linewidth}
-			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/alt-full-stop1.yaml}[MLB-TCB]{\texttt{alt-full-stop1.yaml}}{lst:alt-full-stop1-yaml}
+			\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/alt-full-stop1.yaml}[MLB-TCB]{\texttt{alt-full-stop1.yaml}}{lst:alt-full-stop1-yaml}
 		\end{minipage}
 	\end{adjustwidth}
 
 	Notice that the full stop within the URL has not been accomodated correctly because of the non-default settings in \cref{lst:alt-full-stop1-yaml}.
 
-\subsubsection{Features of the \texttt{oneSentencePerLine} routine}
+\subsubsection{Features of the oneSentencePerLine routine}
 	The sentence manipulation routine takes place \emph{after} verbatim environments, preamble and trailing comments have
 	been accounted for; this means that any characters within these types of code blocks will not be part
 	of the sentence manipulation routine.
@@ -383,8 +383,8 @@
 latexindent.pl multiple-sentences3 -m -l=manipulate-sentences.yaml
 	\end{commandshell}
 	then we obtain the output in \cref{lst:multiple-sentences3-mod1}.
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences3.tex}{\texttt{multiple-sentences3.tex}}{lst:multiple-sentences3}
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences3-mod1.tex}{\texttt{multiple-sentences3.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences3-mod1}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences3.tex}{\texttt{multiple-sentences3.tex}}{lst:multiple-sentences3}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences3-mod1.tex}{\texttt{multiple-sentences3.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences3-mod1}
 
 	Furthermore, if sentences run across environments then, by default, the line breaks internal to the sentence will be removed.
 	For example, if we use the \texttt{.tex} file in \cref{lst:multiple-sentences4} and run the commands
@@ -393,11 +393,11 @@
 latexindent.pl multiple-sentences4 -m -l=keep-sen-line-breaks.yaml
 	\end{commandshell}
 	then we obtain the output in \cref{lst:multiple-sentences4-mod1,lst:multiple-sentences4-mod2}.
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences4.tex}{\texttt{multiple-sentences4.tex}}{lst:multiple-sentences4}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences4.tex}{\texttt{multiple-sentences4.tex}}{lst:multiple-sentences4}
 	\begin{widepage}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences4-mod1.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences4-mod1}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences4-mod1.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences4-mod1}
 	\end{widepage}
-	\cmhlistingsfromfile*{demonstrations/multiple-sentences4-mod2.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences4-mod2}
+	\cmhlistingsfromfile{demonstrations/multiple-sentences4-mod2.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences4-mod2}
 	Once you've read \cref{sec:poly-switches}, you will know that you can accomodate the removal of internal sentence line breaks
 	by using the YAML in \cref{lst:item-rules2-yaml} and the command
 	\begin{commandshell}
@@ -406,14 +406,14 @@
 	the output of which is shown in \cref{lst:multiple-sentences4-mod3}.
 
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*{demonstrations/multiple-sentences4-mod3.tex}{\texttt{multiple-sentences4.tex} using \cref{lst:item-rules2-yaml}}{lst:multiple-sentences4-mod3}
+		\cmhlistingsfromfile{demonstrations/multiple-sentences4-mod3.tex}{\texttt{multiple-sentences4.tex} using \cref{lst:item-rules2-yaml}}{lst:multiple-sentences4-mod3}
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.5\linewidth}
-		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/item-rules2.yaml}[MLB-TCB]{\texttt{item-rules2.yaml}}{lst:item-rules2-yaml}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/item-rules2.yaml}[MLB-TCB]{\texttt{item-rules2.yaml}}{lst:item-rules2-yaml}
 	\end{minipage}
 
-\subsection{\texttt{removeParagraphLineBreaks}: modifying line breaks for paragraphs}
+\subsection{removeParagraphLineBreaks: modifying line breaks for paragraphs}
 	When the \texttt{-m} switch is active \texttt{latexindent.pl} has the ability to remove line breaks
 	\announce{2017-05-27}{removeParagraphLineBreaks}
 	from within paragraphs; the behaviour is controlled by the \texttt{removeParagraphLineBreaks} field, detailed in
@@ -629,7 +629,7 @@
 before words(*@$\BeginStartsOnOwnLine$@*) \begin{myenv}(*@$\BodyStartsOnOwnLine$@*)body of myenv(*@$\EndStartsOnOwnLine$@*)\end{myenv}(*@$\EndFinishesWithLineBreak$@*) after words
 \end{cmhlistings}
 
-\subsubsection[Adding line breaks: \texttt{BeginStartsOnOwnLine} and \texttt{BodyStartsOnOwnLine}]{Adding line breaks using \texttt{BeginStartsOnOwnLine} and \texttt{BodyStartsOnOwnLine}}
+\subsubsection{Adding line breaks: BeginStartsOnOwnLine and BodyStartsOnOwnLine}
 	Let's explore \texttt{BeginStartsOnOwnLine} and \texttt{BodyStartsOnOwnLine} in \cref{lst:env-mlb1,lst:env-mlb2}, and in particular,
 	let's allow each of them in turn to take a value of $1$.
 
@@ -720,7 +720,7 @@
 	Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but this time a \emph{blank line}
 	has been added after adding the line break.
 
-\subsubsection[Adding line breaks: \texttt{EndStartsOnOwnLine} and \texttt{EndFinishesWithLineBreak}]{Adding line breaks using \texttt{EndStartsOnOwnLine} and \texttt{EndFinishesWithLineBreak}}
+\subsubsection{Adding line breaks using EndStartsOnOwnLine and EndFinishesWithLineBreak}
 	Let's explore \texttt{EndStartsOnOwnLine} and \texttt{EndFinishesWithLineBreak} in \cref{lst:env-mlb7,lst:env-mlb8},
 	and in particular, let's allow each of them in turn to take a value of $1$.
 
@@ -1026,151 +1026,63 @@
 	by design, line breaks involving \texttt{verbatim}, \texttt{filecontents} and `comment-marked' code blocks (\vref{lst:alignmentmarkup}) can \emph{not} be
 	modified using \texttt{latexindent.pl}.
 
-	\begin{longtable}{m{.2\textwidth}@{\hspace{.75cm}}m{.35\textwidth}@{}m{.4\textwidth}}
-		\caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping} \\
+	\begin{longtable}{llll}
+		\caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping}                                                                                                                         \\
 		\toprule
-		Code block                             & Sample & Poly-switch mapping                  \\
+		Code block                             & Sample                                                  & \multicolumn{2}{c}{Poly-switch mapping}                                                                     \\
 		\midrule
-		environment                            &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},nolol=true]
-before words(*@$\BeginStartsOnOwnLine$@*)
-\begin{myenv}(*@$\BodyStartsOnOwnLine$@*)
-body of myenv(*@$\EndStartsOnOwnLine$@*)
-\end{myenv}(*@$\EndFinishesWithLineBreak$@*)
-after words
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$     & BeginStartsOnOwnLine     \\
-			$\BodyStartsOnOwnLine$      & BodyStartsOnOwnLine      \\
-			$\EndStartsOnOwnLine$       & EndStartsOnOwnLine       \\
-			$\EndFinishesWithLineBreak$ & EndFinishesWithLineBreak \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		ifelsefi                               &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},nolol=true]
-before words(*@$\BeginStartsOnOwnLine$@*)
-\if...(*@$\BodyStartsOnOwnLine$@*)
-body of if statement(*@$\ElseStartsOnOwnLine$@*)
-\else(*@$\ElseFinishesWithLineBreak$@*)
-body of else statement(*@$\EndStartsOnOwnLine$@*)
-\fi(*@$\EndFinishesWithLineBreak$@*)
-after words
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$      & IfStartsOnOwnLine         \\
-			$\BodyStartsOnOwnLine$       & BodyStartsOnOwnLine       \\
-			$\ElseStartsOnOwnLine$       & ElseStartsOnOwnLine       \\
-			$\ElseFinishesWithLineBreak$ & ElseFinishesWithLineBreak \\
-			$\EndStartsOnOwnLine$        & FiStartsOnOwnLine         \\
-			$\EndFinishesWithLineBreak$  & FiFinishesWithLineBreak   \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		optionalArguments                      &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},nolol=true]
-...(*@$\BeginStartsOnOwnLine$@*)
-[(*@$\BodyStartsOnOwnLine$@*)
-body of opt arg(*@$\EndStartsOnOwnLine$@*)
-](*@$\EndFinishesWithLineBreak$@*)
-...
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$     & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\
-			$\BodyStartsOnOwnLine$      & OptArgBodyStartsOnOwnLine                                         \\
-			$\EndStartsOnOwnLine$       & RSqBStartsOnOwnLine                                               \\
-			$\EndFinishesWithLineBreak$ & RSqBFinishesWithLineBreak                                         \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		mandatoryArguments                     &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},nolol=true]
-...(*@$\BeginStartsOnOwnLine$@*)
-{(*@$\BodyStartsOnOwnLine$@*)
-body of mand arg(*@$\EndStartsOnOwnLine$@*)
-}(*@$\EndFinishesWithLineBreak$@*)
-...
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$     & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace} \\
-			$\BodyStartsOnOwnLine$      & MandArgBodyStartsOnOwnLine                                     \\
-			$\EndStartsOnOwnLine$       & RCuBStartsOnOwnLine                                            \\
-			$\EndFinishesWithLineBreak$ & RCuBFinishesWithLineBreak                                      \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		commands                               &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},morekeywords={mycommand},nolol=true,]
-before words(*@$\BeginStartsOnOwnLine$@*)
-\mycommand(*@$\BodyStartsOnOwnLine$@*)
-(*@$\langle$\itshape{arguments}$\rangle$@*)
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$ & CommandStartsOnOwnLine           \\
-			$\BodyStartsOnOwnLine$  & CommandNameFinishesWithLineBreak \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		namedGroupingBraces Brackets           &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},morekeywords={myname},nolol=true,]
-before words(*@$\BeginStartsOnOwnLine$@*)
-myname(*@$\BodyStartsOnOwnLine$@*)
-(*@$\langle$\itshape{braces/brackets}$\rangle$@*)
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$ & NameStartsOnOwnLine       \\
-			$\BodyStartsOnOwnLine$  & NameFinishesWithLineBreak \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		keyEqualsValuesBraces\newline Brackets &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},morekeywords={key},nolol=true,]
-before words(*@$\BeginStartsOnOwnLine$@*)
-key(*@$\EqualsStartsOnOwnLine$@*)=(*@$\BodyStartsOnOwnLine$@*)
-(*@$\langle$\itshape{braces/brackets}$\rangle$@*)
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$  & KeyStartsOnOwnLine          \\
-			$\EqualsStartsOnOwnLine$ & EqualsStartsOnOwnLine       \\
-			$\BodyStartsOnOwnLine$   & EqualsFinishesWithLineBreak \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		items                                  &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},nolol=true]
-before words(*@$\BeginStartsOnOwnLine$@*)
-\item(*@$\BodyStartsOnOwnLine$@*)
-...
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$ & ItemStartsOnOwnLine       \\
-			$\BodyStartsOnOwnLine$  & ItemFinishesWithLineBreak \\
-		\end{tabular}
-		\\
-		\cmidrule{2-3}
-		specialBeginEnd                        &
-		\begin{lstlisting}[style=tcblatex,escapeinside={(*@}{@*)},nolol=true]
-before words(*@$\BeginStartsOnOwnLine$@*)
-\[(*@$\BodyStartsOnOwnLine$@*)
-body of special(*@$\EndStartsOnOwnLine$@*)
-\](*@$\EndFinishesWithLineBreak$@*)
-after words
-  \end{lstlisting}
-		                                       &
-		\begin{tabular}[t]{c@{~}l@{}}
-			$\BeginStartsOnOwnLine$     & SpecialBeginStartsOnOwnLine     \\
-			$\BodyStartsOnOwnLine$      & SpecialBodyStartsOnOwnLine      \\
-			$\EndStartsOnOwnLine$       & SpecialEndStartsOnOwnLine       \\
-			$\EndFinishesWithLineBreak$ & SpecialEndFinishesWithLineBreak \\
-		\end{tabular}
-		\\
+		environment                            & \verb!before words!$\BeginStartsOnOwnLine$       & $\BeginStartsOnOwnLine$                 & BeginStartsOnOwnLine                                              \\
+		                                       & \verb!\begin{myenv}!$\BodyStartsOnOwnLine$        & $\BodyStartsOnOwnLine$                  & BodyStartsOnOwnLine                                               \\
+		                                       & \verb!body of myenv!$\EndStartsOnOwnLine$         & $\EndStartsOnOwnLine$                   & EndStartsOnOwnLine                                                \\
+		                                       & \verb!\end{myenv}!$\EndFinishesWithLineBreak$   & $\EndFinishesWithLineBreak$             & EndFinishesWithLineBreak                                          \\
+		                                       & \verb!after words!                              &                                         &                                                                   \\
+		\cmidrule{2-4}
+		ifelsefi                               & \verb!before words!$\BeginStartsOnOwnLine$       & $\BeginStartsOnOwnLine$                 & IfStartsOnOwnLine                                                 \\
+		                                       & \verb!\if...!$\BodyStartsOnOwnLine$        & $\BodyStartsOnOwnLine$                  & BodyStartsOnOwnLine                                               \\
+		                                       & \verb!body of if/or statement!$\OrStartsOnOwnLine$          & $\OrStartsOnOwnLine$                    & OrStartsOnOwnLine                                                 %
+		\announce*{2018-04-27}{new ifElseFi code block polyswitches}                                                                                                                                                   \\
+		                                       & \verb!\or!$\OrFinishesWithLineBreak$    & $\OrFinishesWithLineBreak$              & OrFinishesWithLineBreak                                           \\
+		                                       & \verb!body of if/or statement!$\ElseStartsOnOwnLine$       & $\ElseStartsOnOwnLine$                  & ElseStartsOnOwnLine                                               \\
+		                                       & \verb!\else!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$            & ElseFinishesWithLineBreak                                         \\
+		                                       & \verb!body of else statement!$\EndStartsOnOwnLine$        & $\EndStartsOnOwnLine$                   & FiStartsOnOwnLine                                                 \\
+		                                       & \verb!\fi!$\EndFinishesWithLineBreak$  & $\EndFinishesWithLineBreak$             & FiFinishesWithLineBreak                                           \\
+		                                       & \verb!after words!                             &                                         &                                                                   \\
+		\cmidrule{2-4}
+		optionalArguments                      & \verb!...!$\BeginStartsOnOwnLine$      & $\BeginStartsOnOwnLine$                 & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\
+		                                       & \verb![!$\BodyStartsOnOwnLine$       & $\BodyStartsOnOwnLine$                  & OptArgBodyStartsOnOwnLine                                         \\
+		                                       & \verb!body of opt arg!$\EndStartsOnOwnLine$        & $\EndStartsOnOwnLine$                   & RSqBStartsOnOwnLine                                               \\
+		                                       & \verb!]!$\EndFinishesWithLineBreak$  & $\EndFinishesWithLineBreak$             & RSqBFinishesWithLineBreak                                         \\
+		                                       & \verb!...!                             &                                         &                                                                   \\
+		\cmidrule{2-4}
+		mandatoryArguments                     & \verb!...!$\BeginStartsOnOwnLine$      & $\BeginStartsOnOwnLine$                 & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace}    \\
+		                                       & \verb!{!$\BodyStartsOnOwnLine$       & $\BodyStartsOnOwnLine$                  & MandArgBodyStartsOnOwnLine                                        \\
+		                                       & \verb!body of mand arg!$\EndStartsOnOwnLine$        & $\EndStartsOnOwnLine$                   & RCuBStartsOnOwnLine                                               \\
+		                                       & \verb!}!$\EndFinishesWithLineBreak$  & $\EndFinishesWithLineBreak$             & RCuBFinishesWithLineBreak                                         \\
+		                                       & \verb!...!                             &                                         &                                                                   \\
+		\cmidrule{2-4}
+		commands                               & \verb!before words!$\BeginStartsOnOwnLine$      & $\BeginStartsOnOwnLine$                 & CommandStartsOnOwnLine                                            \\
+		                                       & \verb!\mycommand!$\BodyStartsOnOwnLine$       & $\BodyStartsOnOwnLine$                  & CommandNameFinishesWithLineBreak                                  \\
+		                                       & $\langle$\itshape{arguments}$\rangle$                   &                                         &                                                                   \\
+		\cmidrule{2-4}
+		namedGroupingBraces Brackets           & before words$\BeginStartsOnOwnLine$                     & $\BeginStartsOnOwnLine$                 & NameStartsOnOwnLine                                               \\
+		                                       & myname$\BodyStartsOnOwnLine$                            & $\BodyStartsOnOwnLine$                  & NameFinishesWithLineBreak                                         \\
+		                                       & $\langle$\itshape{braces/brackets}$\rangle$             &                                         &                                                                   \\
+		\cmidrule{2-4}
+		keyEqualsValuesBraces\newline Brackets & before words$\BeginStartsOnOwnLine$                     & $\BeginStartsOnOwnLine$                 & KeyStartsOnOwnLine                                                \\
+		                                       & key$\EqualsStartsOnOwnLine$=$\BodyStartsOnOwnLine$      & $\EqualsStartsOnOwnLine$                & EqualsStartsOnOwnLine                                             \\
+		                                       & $\langle$\itshape{braces/brackets}$\rangle$             & $\BodyStartsOnOwnLine$                  & EqualsFinishesWithLineBreak                                       \\
+		\cmidrule{2-4}
+		items                                  & before words$\BeginStartsOnOwnLine$                     & $\BeginStartsOnOwnLine$                 & ItemStartsOnOwnLine                                               \\
+		                                       & \verb!\item!$\BodyStartsOnOwnLine$       & $\BodyStartsOnOwnLine$                  & ItemFinishesWithLineBreak                                         \\
+		                                       & \verb!...!                             &                                         &                                                                   \\
+		\cmidrule{2-4}
+		specialBeginEnd                        & before words$\BeginStartsOnOwnLine$                     & $\BeginStartsOnOwnLine$                 & SpecialBeginStartsOnOwnLine                                       \\
+		                                       & \verb!\[!$\BodyStartsOnOwnLine$       & $\BodyStartsOnOwnLine$                  & SpecialBodyStartsOnOwnLine                                        \\
+		                                       & \verb!body of special/middle!$\ElseStartsOnOwnLine$       & $\ElseStartsOnOwnLine$                  & SpecialMiddleStartsOnOwnLine                                      %
+		\announce*{2018-04-27}{new special code block polyswitches}                                                                                                                                                    \\
+		                                       & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$            & SpecialMiddleFinishesWithLineBreak                                \\
+		                                       & body of special/middle $\EndStartsOnOwnLine$            & $\EndStartsOnOwnLine$                   & SpecialEndStartsOnOwnLine                                         \\
+		                                       & \verb!\]!$\EndFinishesWithLineBreak$  & $\EndFinishesWithLineBreak$             & SpecialEndFinishesWithLineBreak                                   \\
+		                                       & after words                                             &                                         &                                                                   \\
 		\bottomrule
 	\end{longtable}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -8,9 +8,9 @@
 \yamltitle{commandCodeBlocks}*{fields}
 
 	The \texttt{commandCodeBlocks} field%
-	\announce{2017-08-21}*{commandCodeBlocks} contains a few switches detailed in \cref{lst:commandCodeBlocks}.
+	\announce*{2018-04-27}*{commandCodeBlocks} contains a few switches detailed in \cref{lst:commandCodeBlocks}.
 
-	\cmhlistingsfromfile[style=commandCodeBlocks]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{commandCodeBlocks}}{lst:commandCodeBlocks}
+	\cmhlistingsfromfile*[style=commandCodeBlocks]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{commandCodeBlocks}}{lst:commandCodeBlocks}
 
 \yamltitle{roundParenthesesAllowed}{0|1}
 
@@ -87,7 +87,7 @@
 	\begin{quote}
 		to, node, ++
 	\end{quote}
-	are all allowed to appear between arguments, as they are each set to $1$; importantly, you are encouraged to add further names
+	are all allowed to appear between arguments; importantly, you are encouraged to add further names
 	to this field as necessary. This means that when \texttt{latexindent.pl}
 	processes \cref{lst:tikz-node1}, it consumes:
 	\begin{itemize}
@@ -118,30 +118,88 @@
 	Notice that each line after the \lstinline!\draw! command (its `body') in \cref{lst:tikz-node1-draw} has been given the
 	appropriate two-spaces worth of indentation specified in \cref{lst:draw}.
 
-	Let's compare this with the output from using the YAML settings in \cref{lst:no-to}, and running the command
+	Let's compare this with the output from using the YAML settings in \cref{lst:no-strings}, and running the command
 	\begin{commandshell}
-latexindent.pl tikz-node1.tex -l no-to.yaml  
+latexindent.pl tikz-node1.tex -l no-strings.yaml  
 \end{commandshell}
-	given in \cref{lst:tikz-node1-no-to}.
+	given in \cref{lst:tikz-node1-no-strings}.
 
 	\begin{minipage}{.45\textwidth}
-		\cmhlistingsfromfile{demonstrations/tikz-node1-no-to.tex}{\texttt{tikz-node1.tex} using \cref{lst:no-to}}{lst:tikz-node1-no-to}
+		\cmhlistingsfromfile{demonstrations/tikz-node1-no-strings.tex}{\texttt{tikz-node1.tex} using \cref{lst:no-strings}}{lst:tikz-node1-no-strings}
 	\end{minipage}
 	\hfill
-	\begin{minipage}{.45\textwidth}
-		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/no-to.yaml}[yaml-TCB]{\texttt{no-to.yaml}}{lst:no-to}
+	\begin{minipage}{.49\textwidth}
+		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/no-strings.yaml}[yaml-TCB]{\texttt{no-strings.yaml}}{lst:no-strings}
 	\end{minipage}
 
 	In this case, \texttt{latexindent.pl} sees that:
 	\begin{itemize}
-		\item the \lstinline!\draw! command finishes after the \lstinline!(c)! as (\texttt{stringsAllowedBetweenArguments} has \texttt{to} set to $0$)
+		\item the \lstinline!\draw! command finishes after the \lstinline!(c)!, as \texttt{stringsAllowedBetweenArguments} has been set to $0$
+		      so there are no strings allowed between arguments;
 		\item it finds a \texttt{namedGroupingBracesBrackets} called \texttt{to} (see \vref{tab:code-blocks}) \emph{with} argument \lstinline![in=110,out=-90]!
 		\item it finds another \texttt{namedGroupingBracesBrackets} but this time called \texttt{node} with argument \lstinline![below,align=left,scale=0.5]!
 	\end{itemize}
 
+	Referencing \vref{lst:commandCodeBlocks},%
+	\announce*{2018-04-27}*{amalgamate feature in commandCodeBlocks}, we see that the first field in
+	the \texttt{stringsAllowedBetweenArguments} is \texttt{amalgamate} and is set to \texttt{1} by default. This is for users who wish to
+	specify their settings in multiple YAML files. For example, by using the settings in either \cref{lst:amalgamate-demo} or\cref{lst:amalgamate-demo1}
+	is equivalent to using the settings in \cref{lst:amalgamate-demo2}.
+
+	\begin{adjustwidth}{-3.5cm}{-1.5cm}
+		\begin{minipage}{.32\linewidth}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/amalgamate-demo.yaml}[yaml-TCB]{\texttt{amalgamate-demo.yaml}}{lst:amalgamate-demo}
+		\end{minipage}%
+		\hfill
+		\begin{minipage}{.32\linewidth}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/amalgamate-demo1.yaml}[yaml-TCB]{\texttt{amalgamate-demo1.yaml}}{lst:amalgamate-demo1}
+		\end{minipage}%
+		\hfill
+		\begin{minipage}{.32\linewidth}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/amalgamate-demo2.yaml}[yaml-TCB]{\texttt{amalgamate-demo2.yaml}}{lst:amalgamate-demo2}
+		\end{minipage}
+	\end{adjustwidth}
+	We specify \texttt{amalgamate} to be set to \texttt{0} and in which case any settings loaded prior
+	to those specified, including the default, will be overwritten. For example, using the settings
+	in \cref{lst:amalgamate-demo3} means that only the strings specified in that field will be used.
+
+	\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/amalgamate-demo3.yaml}[yaml-TCB]{\texttt{amalgamate-demo3.yaml}}{lst:amalgamate-demo3}
+
+	It is important to note that the \texttt{amalgamate} field, if used, must be in the first field,
+	and specified using the syntax given in \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}.
+
+	We may explore this feature further with the code in \cref{lst:for-each}, whose default output is given in \cref{lst:for-each-default}.
+
+	\begin{minipage}{.45\textwidth}
+		\cmhlistingsfromfile*{demonstrations/for-each.tex}{\texttt{for-each.tex}}{lst:for-each}
+	\end{minipage}
+	\hfill
+	\begin{minipage}{.45\textwidth}
+		\cmhlistingsfromfile*{demonstrations/for-each-default.tex}{\texttt{for-each} default output}{lst:for-each-default}
+	\end{minipage}
+
+	Let's compare this with the output from using the YAML settings in \cref{lst:foreach}, and running the command
+	\begin{commandshell}
+latexindent.pl for-each.tex -l foreach.yaml  
+\end{commandshell}
+	given in \cref{lst:for-each-mod1}.
+
+	\begin{minipage}{.45\textwidth}
+		\cmhlistingsfromfile*{demonstrations/for-each-mod1.tex}{\texttt{for-each.tex} using \cref{lst:foreach}}{lst:for-each-mod1}
+	\end{minipage}
+	\hfill
+	\begin{minipage}{.49\textwidth}
+		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/foreach.yaml}[yaml-TCB]{\texttt{foreach.yaml}}{lst:foreach}
+	\end{minipage}
+
+	You might like to compare the output given in \cref{lst:for-each-default} and \cref{lst:for-each-mod1}. Note,in particular, in
+	\cref{lst:for-each-default} that the \texttt{foreach} command has not included any of the subsequent strings, and that the braces
+	have been treated as a \texttt{namedGroupingBracesBrackets}. In \cref{lst:for-each-mod1} the \texttt{foreach} command has been allowed to have \lstinline!\x/\y! and \texttt{in} between
+	arguments because of the settings given in \cref{lst:foreach}.
+
 \yamltitle{commandNameSpecial}*{fields}
 	There are some special command names%
-	\announce{2017-08-21}{commandNameSpecial} that do not fit within the names recognized by \texttt{latexindent.pl},
+	\announce*{2018-04-27}*{commandNameSpecial} that do not fit within the names recognized by \texttt{latexindent.pl},
 	the first one of which is \lstinline!\@ifnextchar[!. From the perspective of \texttt{latexindent.pl}, the whole of the
 	text \lstinline!\@ifnextchar[! is is a command, because it is
 	immediately followed by sets of mandatory arguments. However, without the \texttt{commandNameSpecial} field, \texttt{latexindent.pl}
@@ -159,9 +217,11 @@
 
 	Notice that in \cref{lst:ifnextchar-default} the \texttt{parbox} command has been able to indent its body, because \texttt{latexindent.pl}
 	has successfully found the command \lstinline!\@ifnextchar! first; the pattern-matching of \texttt{latexindent.pl} starts from
-	\emph{the inner most <thing> and works outwards}, discussed in more detail on \cpageref{page:phases}.  For demonstration, we can compare
+	\emph{the inner most <thing> and works outwards}, discussed in more detail on \cpageref{page:phases}.
+
+	For demonstration, we can compare
 	this output with that given in \cref{lst:ifnextchar-off} in which
-	the settings from \cref{lst:no-ifnextchar} have dictated that \lstinline!\@ifnextchar[! command should not be searched for specially;
+	the settings from \cref{lst:no-ifnextchar} have dictated that no special command names, including the \lstinline!\@ifnextchar[! command, should not be searched for specially;
 	as such, the \texttt{parbox} command has been \emph{unable} to indent its body successfully, because the \lstinline!\@ifnextchar[!
 	command has not been found.
 
@@ -170,5 +230,12 @@
 	\end{minipage}
 	\hfill
 	\begin{minipage}{.45\textwidth}
-		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/no-ifnextchar.yaml}[yaml-TCB]{\texttt{no-ifnextchar.yaml}}{lst:no-ifnextchar}
+		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/no-ifnextchar.yaml}[yaml-TCB]{\texttt{no-ifnextchar.yaml}}{lst:no-ifnextchar}
 	\end{minipage}
+
+	The \texttt{amalgamate} field can be used for \texttt{commandNameSpecial}, just as for \texttt{stringsAllowedBetweenArguments}. The
+	same condition holds as stated previously, which we state again here:
+	\begin{warning}
+		It is important to note that the \texttt{amalgamate} field, if used, in either \texttt{commandNameSpecial} or \texttt{stringsAllowedBetweenArguments} must be in the first field,
+		and specified using the syntax given in \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}.
+	\end{warning}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,6 +1,6 @@
 % arara: pdflatex: {shell: yes, files: [latexindent]}
 % arara: pdflatex: {shell: yes, files: [latexindent]}
-\subsection{\texttt{noAdditionalIndent} and \texttt{indentRules}}\label{sec:noadd-indent-rules}
+\subsection{noAdditionalIndent and indentRules}\label{sec:noadd-indent-rules}
 	\texttt{latexindent.pl} operates on files by looking for code blocks, as detailed in \vref{subsubsec:code-blocks};
 	for each type of code block  in \vref{tab:code-blocks} (which we will call a \emph{$\langle$thing$\rangle$} in what follows)
 	it searches YAML fields for information in the following order:

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,5 +1,5 @@
 % arara: pdflatex: {shell: yes, files: [latexindent]}
-\subsection{Partnering \texttt{BodyStartsOnOwnLine} with argument-based poly-switches}
+\subsection{Partnering BodyStartsOnOwnLine with argument-based poly-switches}
 	Some poly-switches need to be partnered together; in particular, when line breaks involving the \emph{first} argument
 	of a code block need to be accounted for using both \texttt{BodyStartsOnOwnLine} (or its equivalent, see \vref{tab:poly-switch-mapping})
 	and \texttt{LCuBStartsOnOwnLine} for mandatory arguments, and \texttt{LSqBStartsOnOwnLine} for optional arguments.

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -26,7 +26,7 @@
 	has not received any \emph{additional} indentation, but that the \texttt{outer} environment \emph{has} still
 	received indentation.
 
-	\cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body1.tex}{\texttt{myenv.tex output (using either \cref{lst:myenv-noAdd1} or \cref{lst:myenv-noAdd2})}}{lst:myenv-output}
+	\cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-noAdd1} or \cref{lst:myenv-noAdd2})}{lst:myenv-output}
 
 	Upon changing the YAML files to those shown in \cref{lst:myenv-noAdd3,lst:myenv-noAdd4}, and running either
 	\begin{commandshell}
@@ -103,7 +103,7 @@
 	we obtain the output given in \cref{lst:myenv-rules-output}; note in particular that the environment \texttt{myenv}
 	has received one tab (from the \texttt{outer} environment) plus three spaces from \cref{lst:myenv-rules1} or \ref{lst:myenv-rules2}.
 
-	\cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenv-rules1.tex}{\texttt{myenv.tex output (using either \cref{lst:myenv-rules1} or \cref{lst:myenv-rules2})}}{lst:myenv-rules-output}
+	\cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenv-rules1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-rules1} or \cref{lst:myenv-rules2})}{lst:myenv-rules-output}
 
 	If you specify a field in \texttt{indentRules} using anything other than horizontal space, it will be ignored.
 

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,5 +1,5 @@
 % arara: pdflatex: {shell: yes, files: [latexindent]}
-\subsubsection{\texttt{afterHeading} code blocks}\label{subsubsec-headings-no-add-indent-rules}
+\subsubsection{afterHeading code blocks}\label{subsubsec-headings-no-add-indent-rules}
 	Let's use the example \cref{lst:headings2} for demonstration throughout this \namecref{subsubsec-headings-no-add-indent-rules}.
 	As discussed on \cpageref{lst:headings1}, by default \texttt{latexindent.pl} will not add indentation after headings.
 

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -68,3 +68,16 @@
 	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[showspaces=true]{demonstrations/ifelsefi1-indent-rules-global.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifelsefi-indent-rules-global}}{lst:ifelsefi1-output-indent-rules-global}
 	\end{minipage}
+
+	We can further explore the treatment of \texttt{ifElseFi} code blocks%
+	\announce*{2018-04-27}*{updates to ifElseFi code blocks} in \cref{lst:ifelsefi2},
+	and the associated default output given in \cref{lst:ifelsefi2-default}; note, in particular, that the bodies of each of the `or statements'
+	have been indented.
+
+	\begin{minipage}{.45\textwidth}
+		\cmhlistingsfromfile*{demonstrations/ifelsefi2.tex}{\texttt{ifelsefi2.tex}}{lst:ifelsefi2}
+	\end{minipage}%
+	\hfill
+	\begin{minipage}{.54\textwidth}
+		\cmhlistingsfromfile*{demonstrations/ifelsefi2-default.tex}{\texttt{ifelsefi2.tex} default output}{lst:ifelsefi2-default}
+	\end{minipage}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -5,7 +5,7 @@
 	covered comprehensively in \vref{subsubsec:commands-arguments}, but a small discussion
 	defining these remaining code blocks is necessary.
 
-	\paragraph{\texttt{keyEqualsValuesBracesBrackets}}
+	\paragraph{keyEqualsValuesBracesBrackets}
 		\texttt{latexindent.pl} defines this type of code block by the following criteria:
 		\begin{itemize}
 			\item it must immediately follow either \lstinline!{! OR \lstinline![! OR \lstinline!,! with comments
@@ -33,7 +33,7 @@
 			      key that include its arguments.  This is the part controlled by the \emph{body} field for \texttt{noAdditionalIndent}
 			      and friends from \cpageref{sec:noadd-indent-rules}.
 		\end{itemize}
-	\paragraph{\texttt{namedGroupingBracesBrackets}}
+	\paragraph{namedGroupingBracesBrackets}
 		This type of code block is mostly motivated by tikz-based code; we define this code block as follows:
 		\begin{itemize}
 			\item it must immediately follow either \emph{horizontal space} OR \emph{one or more line breaks} OR \lstinline!{! OR \lstinline![!
@@ -62,7 +62,7 @@
 			      and friends from \cpageref{sec:noadd-indent-rules}.
 		\end{itemize}
 
-	\paragraph{\texttt{UnNamedGroupingBracesBrackets}} occur in a variety of situations; specifically, we define
+	\paragraph{UnNamedGroupingBracesBrackets} occur in a variety of situations; specifically, we define
 		this type of code block as satisfying the following criteria:
 		\begin{itemize}
 			\item it must immediately follow either \lstinline!{! OR \lstinline![! OR \lstinline!,! OR \lstinline!&! OR \lstinline!)! OR \lstinline!(!
@@ -92,7 +92,7 @@
 		Users wishing to customise the mandatory and/or optional arguments on a \emph{per-name} basis for the \texttt{UnNamedGroupingBracesBrackets}
 		should use \texttt{always-un-named}.
 
-	\paragraph{\texttt{filecontents}} code blocks behave just as \texttt{environments}, except that neither arguments nor items are sought.
+	\paragraph{filecontents} code blocks behave just as \texttt{environments}, except that neither arguments nor items are sought.
 
 \subsubsection{Summary}
 	Having considered all of the different types of code blocks, the functions of the fields given in

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,5 +1,5 @@
 % arara: pdflatex: {shell: yes, files: [latexindent]}
-\subsubsection{\texttt{specialBeginEnd} code blocks}
+\subsubsection{specialBeginEnd code blocks}
 	Let's use the example from \vref{lst:specialbefore} which has default output shown in
 	\vref{lst:specialafter}.
 

Modified: trunk/Master/texmf-dist/doc/support/latexindent/title.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/title.tex	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/doc/support/latexindent/title.tex	2018-04-28 21:57:31 UTC (rev 47471)
@@ -8,7 +8,7 @@
 			sharp corners,
 			enhanced,
 			overlay={\node[anchor=north east,outer sep=2pt] at ([xshift=3cm,yshift=4mm]frame.north east) {\includegraphics[width=3cm]{logo}}; }]
-		\centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.4.1
+		\centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.4.2
 	\end{tcolorbox}
 }
 \author{Chris Hughes \thanks{and contributors!

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -235,19 +235,20 @@
     # commands are allowed strings between arguments, e.g node, decoration, etc, specified in stringsAllowedBetweenArguments
     my $stringsBetweenArguments = q();
 
-    if(defined ${input}{stringBetweenArguments} and ${input}{stringBetweenArguments}==1){
+    if(defined ${input}{stringBetweenArguments} and ${input}{stringBetweenArguments}==1
+       and ref(${$masterSettings{commandCodeBlocks}}{stringsAllowedBetweenArguments}) eq "ARRAY"){
         # grab the strings allowed between arguments
-        my %stringsAllowedBetweenArguments = %{${$masterSettings{commandCodeBlocks}}{stringsAllowedBetweenArguments}};
+        my @stringsAllowedBetweenArguments = @{${$masterSettings{commandCodeBlocks}}{stringsAllowedBetweenArguments}};
 
-        while( my ($allowedStringName,$allowedStringValue)= each %stringsAllowedBetweenArguments){
-            # change + and - to escaped characters
-            $allowedStringName =~ s/\+/\\+/g;
-            $allowedStringName =~ s/\-/\\-/g;
+        $logger->trace("*Looping through array for commandCodeBlocks->stringsAllowedBetweenArguments") if $is_t_switch_active ;
 
-            # form the regexp
-            $stringsBetweenArguments .= ($stringsBetweenArguments eq '' ? q() : "|").$allowedStringName if $allowedStringValue; 
+        # note that the zero'th element in this array contains the amalgamate switch, which we don't want!
+        foreach (@stringsAllowedBetweenArguments[1 .. $#stringsAllowedBetweenArguments]) {
+            $logger->trace("$_") if $is_t_switch_active ;
+            $stringsBetweenArguments .= ($stringsBetweenArguments eq ""?q():"|").$_;
         }
 
+        $stringsBetweenArguments = qr/$stringsBetweenArguments/;
         # report to log file
         $logger->trace("*Strings allowed between arguments: $stringsBetweenArguments (see stringsAllowedBetweenArguments)") if $is_t_switch_active;
      }

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -45,17 +45,20 @@
                                                                     stringBetweenArguments=>1);
 
     # put together a list of the special command names (this was mostly motivated by the \@ifnextchar[ issue)
-    my %commandNameSpecial = %{${$masterSettings{commandCodeBlocks}}{commandNameSpecial}};
-
     my $commandNameSpecialRegExp = q();
-    while( my ($commandName,$yesNo)= each %commandNameSpecial){
-        # change + and - to escaped characters
-        $commandName =~ s/\+/\\+/g;
-        $commandName =~ s/\-/\\-/g;
-        $commandName =~ s/\[/\\[/g;
+    if(ref(${$masterSettings{commandCodeBlocks}}{commandNameSpecial}) eq "ARRAY"){
 
-        # form the regexp
-        $commandNameSpecialRegExp .= ($commandNameSpecialRegExp eq '' ? q() : "|").$commandName if $yesNo; 
+        my @commandNameSpecial = @{${$masterSettings{commandCodeBlocks}}{commandNameSpecial}};
+        $logger->trace("*Looping through array for commandCodeBlocks->commandNameSpecial") if $is_t_switch_active ;
+
+        # note that the zero'th element in this array contains the amalgamate switch, which we don't want!
+        foreach (@commandNameSpecial[1 .. $#commandNameSpecial]) {
+            $logger->trace("$_") if $is_t_switch_active ;
+            $commandNameSpecialRegExp .= ($commandNameSpecialRegExp eq ""?q():"|").$_;
+        }
+
+        # turn the above into a regexp
+        $commandNameSpecialRegExp = qr/$commandNameSpecialRegExp/;
     }
 
     # details to log file

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -26,51 +26,62 @@
 our @EXPORT_OK = qw/check_for_else_statement/;
 our $elseCounter;
 
-# store the regular expresssion for matching and replacing the \else statements
-our $elseRegExp = qr/
-                  (
-                    \\else  
-                    \h*     # possible horizontal space
-                    (\R*)   # possible line breaks after \else statement
-                  )
-                  (.*?)$
-            /sx;
-
 sub check_for_else_statement{
     my $self = shift;
-    $logger->trace("*Looking for \\else statement (${$self}{name})") if $is_t_switch_active;
 
-    ${$self}{body} =~ s/$elseRegExp(\h*)($trailingCommentRegExp)?
-                       /   
-                      # create a new IfElseFi object
-                      my $else = LatexIndent::Else->new(begin=>$1,
-                                                              name=>${$self}{name},
-                                                              storageNameAppend=>"else",
-                                                              body=>$3,
-                                                              end=>q(),
-                                                              linebreaksAtEnd=>{
-                                                                begin=>$2?1:0,
-                                                                body=>0,
-                                                                end=>0,
-                                                              },
-                                                              aliases=>{
-                                                                # begin statements
-                                                                BeginStartsOnOwnLine=>"ElseStartsOnOwnLine",
-                                                                # end statements
-                                                                BodyStartsOnOwnLine=>"ElseFinishesWithLineBreak",
-                                                              },
-                                                              modifyLineBreaksYamlName=>"ifElseFi",
-                                                              endImmediatelyFollowedByComment=>0,
-                                                              horizontalTrailingSpace=>q(),
-                                                            );
-                      # log file output
-                      $logger->trace("*else found: ${$self}{name}")if $is_t_switch_active;
-         
-                      # the settings and storage of most objects has a lot in common
-                      $self->get_settings_and_store_new_object($else);
-                      ${@{${$self}{children}}[-1]}{replacementText};
-                      /xse;
-        return;
+    # we call the else routine from different places; see IfElseFi.pm and Special.pm
+    my %input = @_;
+
+    # store the regular expresssion for matching and replacing the \else statements
+    my $elseRegExp = qr/
+                      (
+                        $input{elseNameRegExp}
+                        \h*                             # possible horizontal space
+                        (\R*)                           # possible line breaks after \else statement
+                      )
+                      (
+                        (?: 
+                            (?!$input{elseNameRegExp}).
+                        )*?                             # body, which can't include another \else
+                      )
+                      $
+                /sx;
+
+    $logger->trace("*Looking for $input{elseNameRegExp} statement (${$self}{name})") if $is_t_switch_active;
+
+    while(${$self}{body} =~ m/$elseRegExp(\h*)($trailingCommentRegExp)?/){
+        ${$self}{body} =~ s/$elseRegExp(\h*)($trailingCommentRegExp)?
+                           /   
+                          # create a new IfElseFi object
+                          my $else = LatexIndent::Else->new(begin=>$1,
+                                                                  name=>${$self}{name},
+                                                                  storageNameAppend=>$input{storageNameAppend},
+                                                                  body=>$3,
+                                                                  end=>q(),
+                                                                  linebreaksAtEnd=>{
+                                                                    begin=>$2?1:0,
+                                                                    body=>0,
+                                                                    end=>0,
+                                                                  },
+                                                                  aliases=>{
+                                                                    # begin statements
+                                                                    BeginStartsOnOwnLine=>$input{ElseStartsOnOwnLine},
+                                                                    # end statements
+                                                                    BodyStartsOnOwnLine=>$input{ElseFinishesWithLineBreak},
+                                                                  },
+                                                                  modifyLineBreaksYamlName=>${$self}{modifyLineBreaksYamlName},
+                                                                  endImmediatelyFollowedByComment=>0,
+                                                                  horizontalTrailingSpace=>q(),
+                                                                );
+                          # log file output
+                          $logger->trace("*$input{logName} found: ${$self}{name}")if $is_t_switch_active;
+             
+                          # the settings and storage of most objects has a lot in common
+                          $self->get_settings_and_store_new_object($else);
+                          ${@{${$self}{children}}[-1]}{replacementText};
+                          /xse;
+    }
+    return;
 }
 
 sub remove_line_breaks_begin{
@@ -92,6 +103,10 @@
 
     # search for commands and special code blocks
     $self->find_commands_or_key_equals_values_braces_and_special;
+    
+    # search for arguments
+    $self->find_opt_mand_arguments;
+
     return;
 }
 

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -120,7 +120,7 @@
     # try and find the preamble
     if( ${$self}{body} =~ m/$preambleRegExp/sx and ${$masterSettings{lookForPreamble}}{${$self}{fileExtension}}){
 
-        $logger->trace("\\begin{document} found in body (after searching for filecontents)-- assuming that a preamble exists",'heading') if $is_t_switch_active ;
+        $logger->trace("\\begin{document} found in body (after searching for filecontents)-- assuming that a preamble exists") if $is_t_switch_active ;
 
         # create a preamble object
         $preamble = LatexIndent::Preamble->new( begin=>q(),

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -223,7 +223,32 @@
                                     }
                                 }
                             } else {
-                                $masterSettings{$firstLevelKey}{$secondLevelKey} = $secondLevelValue;
+                                # settings such as commandCodeBlocks can have arrays, which may wish 
+                                # to be amalgamated, rather than overwritten
+                                if(ref($secondLevelValue) eq "ARRAY" 
+                                    and 
+                                   ${${$masterSettings{$firstLevelKey}{$secondLevelKey}}[0]}{amalgamate}
+                                    and
+                                   !(ref(${$secondLevelValue}[0]) eq "HASH" and defined ${$secondLevelValue}[0]{amalgamate} and !${$secondLevelValue}[0]{amalgamate}) 
+                                 ){
+                                    $logger->trace("*$firstLevelKey -> $secondLevelKey, amalgamate: 1") if($is_t_switch_active);
+                                    foreach (@{$secondLevelValue}){
+                                        $logger->trace("$_") if($is_t_switch_active);
+                                        push (@{$masterSettings{$firstLevelKey}{$secondLevelKey}},$_) unless(ref($_) eq "HASH");
+                                    }
+
+                                    # remove duplicated entries, https://stackoverflow.com/questions/7651/how-do-i-remove-duplicate-items-from-an-array-in-perl
+                                    my %seen = ();
+                                    my @unique = grep { ! $seen{ $_ }++ } @{$masterSettings{$firstLevelKey}{$secondLevelKey}};
+                                    @{$masterSettings{$firstLevelKey}{$secondLevelKey}} = @unique; 
+
+                                    $logger->trace("*master settings for $firstLevelKey -> $secondLevelKey now look like:") if $is_t_switch_active;
+                                    foreach (@{$masterSettings{$firstLevelKey}{$secondLevelKey}}){
+                                        $logger->trace("$_") if($is_t_switch_active);
+                                    }
+                                } else {
+                                    $masterSettings{$firstLevelKey}{$secondLevelKey} = $secondLevelValue;
+                                }
                             }
                           }
                       } else {

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -101,48 +101,52 @@
     # loop through the hash
     $logger->trace("*Updating FamilyTree...") if $is_t_switch_active;
     while( my ($idToSearch,$ancestorToSearch)= each %familyTree){
+          $logger->trace("*current ID: $idToSearch") if($is_t_switch_active);
           foreach(@{${$ancestorToSearch}{ancestors}}){
               my $ancestorID = ${$_}{ancestorID};
-              $logger->trace("current ID: $idToSearch, ancestor: $ancestorID") if($is_t_switch_active);
-              if($familyTree{$ancestorID}){
-                  $logger->trace("$ancestorID is a key within familyTree, grabbing its ancestors") if($is_t_switch_active);
-                  my $naturalAncestors = q();
-                  foreach(@{${$familyTree{$idToSearch}}{ancestors}}){
-                      $naturalAncestors .= "---".${$_}{ancestorID} if(${$_}{type} eq "natural");
-                  }
-                  foreach(@{${$familyTree{$ancestorID}}{ancestors}}){
-                      $logger->trace("ancestor of *hidden* child: ${$_}{ancestorID}") if($is_t_switch_active);
-                      my $newAncestorId = ${$_}{ancestorID};
-                      my $type;
-                      if($naturalAncestors =~ m/$ancestorID/){
-                            $type = "natural";
-                      } else {
-                            $type = "adopted";
-                      }
-                      my $matched = grep { $_->{ancestorID} eq $newAncestorId } @{${$familyTree{$idToSearch}}{ancestors}};
-                      push(@{${$familyTree{$idToSearch}}{ancestors}},{ancestorID=>${$_}{ancestorID},ancestorIndentation=>${$_}{ancestorIndentation},type=>$type}) unless($matched);
-                  }
-              } else {
-                    my $naturalAncestors = q();
-                    foreach(@{${$familyTree{$idToSearch}}{ancestors}}){
-                        $naturalAncestors .= "---".${$_}{ancestorID} if(${$_}{type} eq "natural");
-                    }
-                    $logger->trace("natural ancestors of $ancestorID: $naturalAncestors") if($is_t_switch_active);
-                    foreach(@{${$allChildren{$ancestorID}}{ancestors}}){
-                        my $newAncestorId = ${$_}{ancestorID};
-                        my $type;
-                        if($naturalAncestors =~ m/$newAncestorId/){
-                            $type = "natural";
-                        } else {
-                            $type = "adopted";
+
+              # construct the natural ancestors
+              my $naturalAncestors = q();
+              foreach(@{${$familyTree{$idToSearch}}{ancestors}}){
+                  $naturalAncestors .= "---".${$_}{ancestorID} if(${$_}{type} eq "natural");
+              }
+              
+              # we only need to update the family tree if the $ancestorID is *not* a natural
+              # ancestor, otherwise everything will be taken care of by the natural ancestor
+              if($naturalAncestors !~ m/$ancestorID/){
+                    $logger->trace("ancestor: $ancestorID") if($is_t_switch_active);
+                    if($familyTree{$ancestorID}){
+                        $logger->trace("$ancestorID is a key within familyTree, grabbing its ancestors") if($is_t_switch_active);
+                        foreach(@{${$familyTree{$ancestorID}}{ancestors}}){
+                            $logger->trace("ancestor of *hidden* child: ${$_}{ancestorID}") if($is_t_switch_active);
+                            my $newAncestorId = ${$_}{ancestorID};
+                            my $type;
+                            if($naturalAncestors =~ m/$ancestorID/){
+                                  $type = "natural";
+                            } else {
+                                  $type = "adopted";
+                            }
+                            my $matched = grep { $_->{ancestorID} eq $newAncestorId } @{${$familyTree{$idToSearch}}{ancestors}};
+                            push(@{${$familyTree{$idToSearch}}{ancestors}},{ancestorID=>${$_}{ancestorID},ancestorIndentation=>${$_}{ancestorIndentation},type=>$type}) unless($matched);
                         }
-                        my $matched = grep { $_->{ancestorID} eq $newAncestorId } @{${$familyTree{$idToSearch}}{ancestors}};
-                        unless($matched){
-                            $logger->trace("ancestor of UNHIDDEN child: ${$_}{ancestorID}") if($is_t_switch_active);
-                            push(@{${$familyTree{$idToSearch}}{ancestors}},{ancestorID=>${$_}{ancestorID},ancestorIndentation=>${$_}{ancestorIndentation},type=>$type});
-                        }
-                    }
-              } 
+                    } else {
+                          $logger->trace("natural ancestors of $ancestorID: $naturalAncestors") if($is_t_switch_active);
+                          foreach(@{${$allChildren{$ancestorID}}{ancestors}}){
+                              my $newAncestorId = ${$_}{ancestorID};
+                              my $type;
+                              if($naturalAncestors =~ m/$newAncestorId/){
+                                  $type = "natural";
+                              } else {
+                                  $type = "adopted";
+                              }
+                              my $matched = grep { $_->{ancestorID} eq $newAncestorId } @{${$familyTree{$idToSearch}}{ancestors}};
+                              unless($matched){
+                                  $logger->trace("ancestor of UNHIDDEN child: ${$_}{ancestorID}") if($is_t_switch_active);
+                                  push(@{${$familyTree{$idToSearch}}{ancestors}},{ancestorID=>${$_}{ancestorID},ancestorIndentation=>${$_}{ancestorIndentation},type=>$type});
+                              }
+                          }
+                    } 
+               }
           }
     }
 

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -101,12 +101,17 @@
 sub post_indentation_check{
     # needed to remove leading horizontal space before \else
     my $self = shift;
-    if(${$self}{body} =~ m/^\h*\\else/sm
-                and
-       !(${$self}{body} =~ m/^\h*\\else/s and ${$self}{linebreaksAtEnd}{begin}==0)
-            ){
-        $logger->trace("*Adding surrounding indentation to \\else statement ('${$self}{surroundingIndentation}')") if $is_t_switch_active;
-        ${$self}{body} =~ s/^\h*\\else/${$self}{surroundingIndentation}\\else/sm;
+
+    # loop through \else and \or
+    foreach ({regExp=>qr/\\else/},{regExp=>qr/\\or/}){
+        my %else = %{$_};
+        if(${$self}{body} =~ m/^\h*$else{regExp}/sm
+                    and
+           !(${$self}{body} =~ m/^\h*$else{regExp}/s and ${$self}{linebreaksAtEnd}{begin}==0)
+                ){
+            $logger->trace("*Adding surrounding indentation to $else{regExp} statement(s) ('${$self}{surroundingIndentation}')") if $is_t_switch_active;
+            ${$self}{body} =~ s/^\h*($else{regExp})/${$self}{surroundingIndentation}$1/smg;
+        }
     }
     return;
 }
@@ -115,7 +120,32 @@
     my $self = shift;
 
     # check for existence of \else statement, and associated line break information
-    $self->check_for_else_statement;
+    $self->check_for_else_statement(
+                                       # else name regexp
+                                       elseNameRegExp=>qr|\\else|,
+                                       # else statements name
+                                       ElseStartsOnOwnLine=>"ElseStartsOnOwnLine",
+                                       # end statements
+                                       ElseFinishesWithLineBreak=>"ElseFinishesWithLineBreak",
+                                       # for the YAML settings storage
+                                       storageNameAppend=>"else",
+                                       # logfile information
+                                       logName=>"else",
+                                                                );
+                                                                
+    # check for existence of \or statement, and associated line break information
+    $self->check_for_else_statement(
+                                       # else name regexp
+                                       elseNameRegExp=>qr|\\or|,
+                                       # else statements name
+                                       ElseStartsOnOwnLine=>"OrStartsOnOwnLine",
+                                       # end statements
+                                       ElseFinishesWithLineBreak=>"OrFinishesWithLineBreak",
+                                       # for the YAML settings storage
+                                       storageNameAppend=>"or",
+                                       # logfile information
+                                       logName=>"or",
+                                                                );
 
     # search for headings (important to do this before looking for commands!)
     $self->find_heading;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -39,7 +39,7 @@
                      \h|\R|\{|\[|\$|\)|\(
                   )
                   (
-                   [0-9a-zA-Z@\*><]+?  # lowercase|uppercase letters, @, *, numbers, forward slash, dots
+                   [0-9\.a-zA-Z@\*><]+?  # lowercase|uppercase letters, @, *, numbers, forward slash, dots
                   )                    # $2 name
                   (\h*)                # $3 h-space
                   (\R*)                # $4 linebreaks

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -130,6 +130,7 @@
 
             # the regexp
             my $specialRegExp = $individualSpecialRegExps{$specialName};
+            $logger->trace("$specialName regexp: \n$specialRegExp") if $is_tt_switch_active ;
             
             while(${$self}{body} =~ m/$specialRegExp(\h*)($trailingCommentRegExp)?/){
 
@@ -163,7 +164,7 @@
                                                                           );
 
                                     # log file output
-                                    $logger->trace("*Special found: $specialName",'heading') if $is_t_switch_active;
+                                    $logger->trace("*Special found: $specialName") if $is_t_switch_active;
 
                                     # the settings and storage of most objects has a lot in common
                                     $self->get_settings_and_store_new_object($specialObject);
@@ -179,10 +180,52 @@
 sub tasks_particular_to_each_object{
     my $self = shift;
 
+    if( defined ${${$masterSettings{specialBeginEnd}}{${$self}{name}}}{middle}){
+            $logger->trace("middle specified for ${$self}{name} (see specialBeginEnd -> ${$self}{name} -> middle)") if $is_t_switch_active ;
+
+            # initiate the middle regexp
+            my $specialMiddle = q();
+
+            # we can specify middle as either an array or a hash
+            if(ref(${${$masterSettings{specialBeginEnd}}{${$self}{name}}}{middle}) eq "ARRAY"){
+                $logger->trace("looping through middle array for ${$self}{name}") if $is_t_switch_active ;
+                foreach(@{${${$masterSettings{specialBeginEnd}}{${$self}{name}}}{middle}}){
+                    $specialMiddle .= ($specialMiddle eq ""?q():"|").$_;
+                }
+                $specialMiddle = qr/$specialMiddle/; 
+            } else {
+                $specialMiddle = qr/${${$masterSettings{specialBeginEnd}}{${$self}{name}}}{middle}/;
+            }
+
+            $logger->trace("overall middle regexp for ${$self}{name}: $specialMiddle") if $is_t_switch_active ;
+
+            # store the middle regexp for later
+            ${$self}{middleRegExp} = $specialMiddle;
+
+            # check for existence of a 'middle' statement, and associated line break information
+            $self->check_for_else_statement(
+                                               # else name regexp
+                                               elseNameRegExp=>$specialMiddle,
+                                               # else statements name
+                                               ElseStartsOnOwnLine=>"SpecialMiddleStartsOnOwnLine",
+                                               # end statements
+                                               ElseFinishesWithLineBreak=>"SpecialMiddleFinishesWithLineBreak",
+                                               # for the YAML settings storage
+                                               storageNameAppend=>"middle",
+                                               # logfile information
+                                               logName=>"special middle",
+                                                                        );
+            
+    
+    }
+
     return unless(${$masterSettings{specialBeginEnd}}{specialBeforeCommand});
 
     # search for commands with arguments
     $self->find_commands_or_key_equals_values_braces;
+    
+    # search for arguments
+    $self->find_opt_mand_arguments;
 
     # search for ifElseFi blocks
     $self->find_ifelsefi;
@@ -189,7 +232,29 @@
 
 }
 
+sub post_indentation_check{
+    # needed to remove leading horizontal space before \else
+    my $self = shift;
 
+    return unless ( defined ${${$masterSettings{specialBeginEnd}}{${$self}{name}}}{middle});
+
+    $logger->trace("post indentation check for ${$self}{name} to account for middle") if $is_t_switch_active ;
+
+    # loop through \else and \or
+    foreach ({regExp=>${$self}{middleRegExp}}){
+        my %else = %{$_};
+        if(${$self}{body} =~ m/^\h*$else{regExp}/sm
+                    and
+           !(${$self}{body} =~ m/^\h*$else{regExp}/s and ${$self}{linebreaksAtEnd}{begin}==0)
+                ){
+            $logger->trace("*Adding surrounding indentation to $else{regExp} statement(s) ('${$self}{surroundingIndentation}')") if $is_t_switch_active;
+            ${$self}{body} =~ s/^\h*($else{regExp})/${$self}{surroundingIndentation}$1/smg;
+        }
+    }
+    return;
+}
+
+
 sub create_unique_id{
     my $self = shift;
 

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm	2018-04-28 21:57:31 UTC (rev 47471)
@@ -19,6 +19,6 @@
 use Exporter qw/import/;
 our @EXPORT_OK = qw/$versionNumber $versionDate/;
 
-our $versionNumber = '3.4.1';
-our $versionDate = '2018-01-18';
+our $versionNumber = '3.4.2';
+our $versionDate = '2018-04-27';
 1

Modified: trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml	2018-04-28 07:36:22 UTC (rev 47470)
+++ trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml	2018-04-28 21:57:31 UTC (rev 47471)
@@ -1,4 +1,4 @@
-# defaultSettings.yaml for latexindent.pl, version 3.4.1, 2018-01-18
+# defaultSettings.yaml for latexindent.pl, version 3.4.2, 2018-04-27
 #                      a script that aims to
 #                      beautify .tex, .sty, .cls files
 #
@@ -311,14 +311,18 @@
 commandCodeBlocks:
     roundParenthesesAllowed: 1
     stringsAllowedBetweenArguments:
-        node: 1
-        at: 1
-        to: 1
-        decoration: 1
-        ++: 1
-        --: 1
+      - 
+        amalgamate: 1
+      - 'node'
+      - 'at'
+      - 'to'
+      - 'decoration'
+      - '\+\+'
+      - '\-\-'
     commandNameSpecial:
-        @ifnextchar[: 1
+      - 
+        amalgamate: 1
+      - '@ifnextchar\['
 
 # modifyLineBreaks will only be searched if the -m 
 # switch is active
@@ -451,6 +455,8 @@
     ifElseFi:
         IfStartsOnOwnLine: 0
         BodyStartsOnOwnLine: 0
+        OrStartsOnOwnLine: 0
+        OrFinishesWithLineBreak: 0
         ElseStartsOnOwnLine: 0
         ElseFinishesWithLineBreak: 0
         FiStartsOnOwnLine: 0
@@ -458,6 +464,8 @@
         ifnum:
             IfStartsOnOwnLine: 0
             BodyStartsOnOwnLine: 0
+            OrStartsOnOwnLine: 0
+            OrFinishesWithLineBreak: 0
             ElseStartsOnOwnLine: 0
             ElseFinishesWithLineBreak: 0
             FiStartsOnOwnLine: 0

Modified: trunk/Master/texmf-dist/scripts/latexindent/latexindent.pl
===================================================================
(Binary files differ)



More information about the tex-live-commits mailing list