diff options
author | Karl Berry <karl@freefriends.org> | 2018-04-28 21:57:31 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-04-28 21:57:31 +0000 |
commit | 1d47aeb4b6825139fc0f32c3549fbdf3fef6bb5c (patch) | |
tree | 13c5e17fc806f1d51e1d1a91c14b16e6a30b4fbb | |
parent | b14146667f4cd6cbc5d5821c88e47096df3c78b5 (diff) |
latexindent (28apr18)
git-svn-id: svn://tug.org/texlive/trunk@47471 c570f23f-e606-0410-a88d-b1316a301751
35 files changed, 649 insertions, 424 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl b/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl index 97f8269ab88..b49b2a009cc 100755 --- a/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl +++ b/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# latexindent.pl, version 3.4.1, 2018-01-18 +# latexindent.pl, version 3.4.2, 2018-04-27 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/Master/bin/win32/latexindent.exe b/Master/bin/win32/latexindent.exe Binary files differindex 8192d2bf5d0..6df981cb13d 100755 --- a/Master/bin/win32/latexindent.exe +++ b/Master/bin/win32/latexindent.exe diff --git a/Master/texmf-dist/doc/support/latexindent/README b/Master/texmf-dist/doc/support/latexindent/README index c06388529f5..dfa09652e65 100644 --- a/Master/texmf-dist/doc/support/latexindent/README +++ b/Master/texmf-dist/doc/support/latexindent/README @@ -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. diff --git a/Master/texmf-dist/doc/support/latexindent/appendices.tex b/Master/texmf-dist/doc/support/latexindent/appendices.tex index 7aac0c4856e..ed93148521b 100644 --- a/Master/texmf-dist/doc/support/latexindent/appendices.tex +++ b/Master/texmf-dist/doc/support/latexindent/appendices.tex @@ -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 @@ exit; \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 @@ cpanm Log::Dispatch 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 @@ echo %path% \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) diff --git a/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex b/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex new file mode 100644 index 00000000000..b056bd23f79 --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex @@ -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 +}{} diff --git a/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex b/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex new file mode 100644 index 00000000000..911f85f6ad7 --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex @@ -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} diff --git a/Master/texmf-dist/doc/support/latexindent/latexindent.pdf b/Master/texmf-dist/doc/support/latexindent/latexindent.pdf Binary files differindex a511f2761bc..9cc5c3332f9 100644 --- a/Master/texmf-dist/doc/support/latexindent/latexindent.pdf +++ b/Master/texmf-dist/doc/support/latexindent/latexindent.pdf diff --git a/Master/texmf-dist/doc/support/latexindent/latexindent.tex b/Master/texmf-dist/doc/support/latexindent/latexindent.tex index e3ca8eeec86..3462790e824 100644 --- a/Master/texmf-dist/doc/support/latexindent/latexindent.tex +++ b/Master/texmf-dist/doc/support/latexindent/latexindent.tex @@ -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 @@ Version 3.4 - 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 diff --git a/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex b/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex index 897e519eddf..db7cfc7059f 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex @@ -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 diff --git a/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex b/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex index d5afdbe0cfb..0f6045189ac 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex @@ -86,10 +86,10 @@ copy myfile.bak4 to myfile.bak3 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 @@ copy myfile.bak4 to myfile.bak3 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 @@ lookForAlignDelims: 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 @@ lookForAlignDelims: 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 @@ lookForAlignDelims: \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 @@ latexindent.pl tabular2.tex -l tabular2.yaml,tabular8.yaml 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 @@ latexindent.pl specialLR.tex -l=specialsLeftRight.yaml,specialBeforeCommand.yaml 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 @@ latexindent.pl mult-nested.tex -l=max-indentation1 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 @@ mand arg text \\\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,] diff --git a/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex b/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex index abb3b737f5f..77e85e16af8 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex @@ -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 -sl myfile.tex 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 @@ latexindent.pl myfile 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 @@ latexindent.pl \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}. diff --git a/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex b/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex index d3f68e4f27c..db5f61621ee 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex @@ -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 @@ lookForAlignDelims: 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 @@ verbatimEnvironments: 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 @@ latexindent.pl -l=mysettings.yaml -y="verbatimEnvironments:cmhenvironment:0;myen \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 diff --git a/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex b/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex index 0e2ba9aac06..453851d7383 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex @@ -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 diff --git a/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex b/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex index 8e7f1a243f4..2b10438eb09 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex @@ -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 @@ latexindent.pl -m textwrap4.tex -o textwrap4-mod2.tex -l textwrap2.yaml \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 @@ latexindent.pl -m textwrap4.tex -o textwrap4-mod2.tex -l textwrap2.yaml 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 @@ latexindent.pl multiple-sentences -m -l=keep-sen-line-breaks.yaml 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 @@ latexindent.pl multiple-sentences -m -l=keep-sen-line-breaks.yaml \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 @@ latexindent.pl multiple-sentences -m -l=sentences-follow1.yaml 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 @@ latexindent.pl multiple-sentences -m -l=sentences-follow1.yaml 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,26 +257,26 @@ latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml,sentences-fol \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 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 @@ latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml,sentences-beg \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 @@ latexindent.pl multiple-sentences -m -l=sentences-end2.yaml 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 @@ latexindent.pl multiple-sentences -m -l=sentences-end2.yaml 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 @@ latexindent.pl url -m -l=manipulate-sentences.yaml \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 @@ latexindent.pl url -m -l=alt-full-stop1.yaml \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 url -m -l=alt-full-stop1.yaml 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=manipulate-sentences.yaml 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 @@ latexindent.pl multiple-sentences4 -m -l=item-rules2.yaml 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 @@ latexindent.pl -m sl-stop.tex -o sl-stop4-comment.tex -l=remove-para4.yaml,stop- 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 @@ latexindent.pl -m env-mlb.tex -l env-mlb2.yaml 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 @@ latexindent.pl -m env-mlb7.tex -l env-mlb13.yaml,env-mlb14.yaml,UnpreserveBlankL 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} diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex b/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex index fb967252fe3..32292cfbfc5 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex @@ -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 @@ latexindent.pl pstricks1.tex -l defFunction.yaml \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 @@ latexindent.pl tikz-node1.tex -l draw.yaml 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 @@ latexindent.pl tikz-node1.tex -l no-to.yaml 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 @@ latexindent.pl tikz-node1.tex -l no-to.yaml \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} diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex b/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex index e0a20542877..b715abfae17 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex @@ -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: diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex b/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex index 9a788acbd27..2741dbcac12 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex @@ -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. diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex index 65e63c2b67f..09b08ed1fdf 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex @@ -26,7 +26,7 @@ latexindent.pl myenv.tex -l myenv-noAdd2.yaml 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 @@ latexindent.pl myenv.tex -l myenv-rules2.yaml 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. diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex index cc4546c6de5..65a01eaaa91 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex @@ -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. diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex index 0ebb68691f1..f105498ca24 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex @@ -68,3 +68,16 @@ latexindent.pl ifelsefi1.tex -l ifelsefi-indent-rules-global.yaml \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} diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex index c8caf89b94e..c69685d36d7 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex @@ -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 diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex index d6d0c35d9f1..0ec7d78c38a 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex @@ -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}. diff --git a/Master/texmf-dist/doc/support/latexindent/title.tex b/Master/texmf-dist/doc/support/latexindent/title.tex index d78cc7f54dc..fec997546f6 100644 --- a/Master/texmf-dist/doc/support/latexindent/title.tex +++ b/Master/texmf-dist/doc/support/latexindent/title.tex @@ -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! diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm index fc6cab0c33a..8c8b5af38f1 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm @@ -235,19 +235,20 @@ sub get_arguments_regexp{ # 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; } diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm index acd118ecf6d..2ba44bd5a62 100755 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm @@ -45,17 +45,20 @@ sub construct_command_regexp{ 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; - - # form the regexp - $commandNameSpecialRegExp .= ($commandNameSpecialRegExp eq '' ? q() : "|").$commandName if $yesNo; + if(ref(${$masterSettings{commandCodeBlocks}}{commandNameSpecial}) eq "ARRAY"){ + + 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 diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm index fe2664cf1dd..0403de6adb2 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm @@ -26,51 +26,62 @@ our @ISA = "LatexIndent::Document"; # class inheritance, Programming Perl, pg 32 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 @@ sub tasks_particular_to_each_object{ # 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; } diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm index 4ad2623fe0d..5ef487f9866 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/FileContents.pm @@ -120,7 +120,7 @@ sub find_file_contents_environments_and_preamble{ # 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(), diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm index b5a9037a907..8fb07087c35 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm @@ -223,7 +223,32 @@ sub readSettings{ } } } 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 { diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm index af7d513809d..768ec1651f9 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/HiddenChildren.pm @@ -101,48 +101,52 @@ sub update_family_tree{ # 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"; - } - 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}); + + # 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); } - } - } + } 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}); + } + } + } + } } } diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm index 1a0529d3aac..ecceb00fec6 100755 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm @@ -101,12 +101,17 @@ sub find_ifelsefi{ 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 @@ sub tasks_particular_to_each_object{ 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; diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm index 22429677894..4508943ddfa 100755 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm @@ -39,7 +39,7 @@ sub construct_grouping_braces_brackets_regexp{ \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 diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm index 461c620e53f..45dd4c3ec16 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Special.pm @@ -130,6 +130,7 @@ sub find_special{ # 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 @@ sub find_special{ ); # 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,16 +180,80 @@ sub find_special{ 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; } +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; diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm index 945841208c7..c048b649a66 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm @@ -19,6 +19,6 @@ use warnings; 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 diff --git a/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml b/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml index 5f733c2ca23..4fa5eed5cc1 100755 --- a/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml +++ b/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml @@ -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 @@ indentRulesGlobal: 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 @@ modifyLineBreaks: ifElseFi: IfStartsOnOwnLine: 0 BodyStartsOnOwnLine: 0 + OrStartsOnOwnLine: 0 + OrFinishesWithLineBreak: 0 ElseStartsOnOwnLine: 0 ElseFinishesWithLineBreak: 0 FiStartsOnOwnLine: 0 @@ -458,6 +464,8 @@ modifyLineBreaks: ifnum: IfStartsOnOwnLine: 0 BodyStartsOnOwnLine: 0 + OrStartsOnOwnLine: 0 + OrFinishesWithLineBreak: 0 ElseStartsOnOwnLine: 0 ElseFinishesWithLineBreak: 0 FiStartsOnOwnLine: 0 diff --git a/Master/texmf-dist/scripts/latexindent/latexindent.pl b/Master/texmf-dist/scripts/latexindent/latexindent.pl index 97f8269ab88..b49b2a009cc 100755 --- a/Master/texmf-dist/scripts/latexindent/latexindent.pl +++ b/Master/texmf-dist/scripts/latexindent/latexindent.pl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# latexindent.pl, version 3.4.1, 2018-01-18 +# latexindent.pl, version 3.4.2, 2018-04-27 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by |