# defaultSettings.yaml for latexindent.pl, version 3.7.1, 2019-09-07
#                      a script that aims to
#                      beautify .tex, .sty, .cls files
#
# (or latexindent.exe if you're on Windows)
#
# 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
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# See http://www.gnu.org/licenses/.
#
# Chris Hughes, 2017
#
# For all communication, please visit: https://github.com/cmhughes/latexindent.pl


# You should feel encouraged to change anything you like in these settings, but
# it would probably be better to have your own user settings
# files somewhere else - remember that this file may be overwritten
# when you update your tex distribution. Please see the manual linked from:
#
#       https://github.com/cmhughes/latexindent.pl
#
# for details of how to create and configure your own settings files.
#
# Please read the manual (linked from above) first to understand what each switch does.

# latexindent can be called to act on a file without using the file's extension,
# e.g, simply
#       latexindent myfile
# in which case the choice of file extension is chosen
# according to the choices made in fileExtensionPreference
# Other file extensions can be added.
fileExtensionPreference:
    .tex: 1
    .sty: 2
    .cls: 3
    .bib: 4

# default file extension of backup file (if -w switch is active)
# for example, if your .tex file is called
#       myfile.tex
# and you specify the backupExtension as BACKUP.bak then your
# backup file will be
#       myfileBACKUP.bak
backupExtension: .bak

# only one backup per file:
#   - if onlyOneBackUp is 0 then, as a safety measure,
#     the number on the extension increments by 1 each time:
#
#           myfile.bak0, myfile.bak1, myfile.bak2
#   - if you set onlyOnebackUp to 1, then the backup file will
#     be overwritten each time (not recommended until you trust the script)
onlyOneBackUp: 0

# some users may want a finite number of backup files,
# say at most 3; in which case, they can change this maxNumberOfBackUps.
#
# If maxNumberOfBackUps is set to 0 (or less) then infinitely
# many backups are possible, unless onlyOneBackUp is switched on
maxNumberOfBackUps: 0

# some users may wish to cycle through back up files.
#
# for example, with maxNumberOfBackUps: 4, they may
# wish to delete the oldest back up file, and keep only the most recent.
#
#    copy myfile.bak1 to myfile.bak0
#    copy myfile.bak2 to myfile.bak1
#    copy myfile.bak3 to myfile.bak2
#    copy myfile.bak4 to myfile.bak3
#
# the back up will be written to myfile.bak4
cycleThroughBackUps: 0

# preferences for information displayed in the log file
logFilePreferences:
    showEveryYamlRead: 1
    showAmalgamatedSettings: 0
    showDecorationStartCodeBlockTrace: 0
    showDecorationFinishCodeBlockTrace: 0
    endLogFileWith: '--------------'
    showGitHubInfoFooter: 1
    PatternLayout:
        default: "%A%n"
        trace: "%A%n"
        ttrace: "%A%n"

#  verbatim environments specified
#  in this field will not be changed at all!
verbatimEnvironments:
    verbatim: 1
    lstlisting: 1
    minted: 1

#  verbatim commands such as \verb! body !, \lstinline$something else$
verbatimCommands:
    verb: 1
    lstinline: 1

#  no indent blocks (not necessarily verbatim
#  environments) which are marked as %\begin{noindent}
#  or anything else that you detail in the following
noIndentBlock:
    noindent: 1
    cmhtest: 1

# remove trailing whitespace from all lines
removeTrailingWhitespace:
    beforeProcessing: 0
    afterProcessing: 1

# \begin{document} and \end{document} are treated differently
# by latexindent within filecontents environments
fileContentsEnvironments:
    filecontents: 1
    filecontents*: 1

# indent preamble
indentPreamble: 1

# assume no preamble in cls, sty, by default
lookForPreamble:
    .tex: 1
    .sty: 0
    .cls: 0
    .bib: 0

# some preambles can contain \begin and \end statements
# that are not in their 'standard environment block', for example,
# consider the following key = values:
#    preheadhook={\begin{mdframed}[style=myframedstyle]},
#    postfoothook=\end{mdframed},
preambleCommandsBeforeEnvironments: 0

# default value of indentation
defaultIndent: "  " # default: \t

# name of code blocks that should have their body aligned at ampersand delimiters
lookForAlignDelims:
   tabular:
      delims: 1
      alignDoubleBackSlash: 1
      spacesBeforeDoubleBackSlash: 1
      multiColumnGrouping: 1
      alignRowsWithoutMaxDelims: 1
      spacesBeforeAmpersand: 1
      spacesAfterAmpersand: 1
      justification: "left"
   tabularx:
      delims: 1
   longtable: 1
   tabu: 1
   array: 1
   matrix: 1
   bmatrix: 1
   Bmatrix: 1
   pmatrix: 1
   vmatrix: 1
   Vmatrix: 1
   align: 1
   align*: 1
   alignat: 1
   alignat*: 1
   aligned: 1
   cases: 1
   dcases: 1
   listabla: 1

# if you want the script to look for \item commands
# and format it, as follows (for example),
#       \begin{itemize}
#           \item content here
#                 next line is indented
#                 next line is indented
#           \item another item
#       \end{itemize}
# then populate indentAfterItems. See also itemNames
indentAfterItems:
    itemize: 1
    enumerate: 1
    description: 1
    list: 1

# if you want to use other names for your items (for example, \part)
# then populate them here; note that you can trick latexindent.pl
# into indenting all kinds of commands (within environments specified in
# indentAfterItems) using this technique.
itemNames:
    item: 1

# specialBeginEnd is, by default, mathmode focus, although
# there's no restrictions
specialBeginEnd:
    displayMath:
        begin: '\\\['
        end: '\\\]'
        lookForThis: 1
    inlineMath:
        begin: '(?<!\$)(?<!\\)\$(?!\$)'
        end: '(?<!\\)\$(?!\$)'
        lookForThis: 1
    displayMathTeX:
        begin: '\$\$'
        end: '\$\$'
        lookForThis: 1
    specialBeforeCommand: 0

# if you want to add indentation after
# a heading, such as \part, \chapter, etc
# then populate it in here - you can add
# an indent rule to indentRules if you would
# like something other than defaultIndent
#
# you can also change the level if you like,
# or add your own title command
indentAfterHeadings:
    part:
       indentAfterThisHeading: 1
       level: 1
    chapter:
       indentAfterThisHeading: 1
       level: 2
    section:
       indentAfterThisHeading: 1
       level: 3
    subsection:
       indentAfterThisHeading: 1
       level: 4
    subsection*:
       indentAfterThisHeading: 1
       level: 4
    subsubsection:
       indentAfterThisHeading: 1
       level: 5
    paragraph:
       indentAfterThisHeading: 1
       level: 6
    subparagraph:
       indentAfterThisHeading: 1
       level: 7

# maximum indentation, off by default
maximumIndentation: -1

# if you don't want to have additional indentation
# in a code block, then add it to noAdditionalIndent; note that
# code blocks in this field will inherit
# the *current* level of indentation they just won't
# get any *additional* indentation
noAdditionalIndent:
    foreach: 0
    widepage: 1
    comment: 1
    document: 0
    frame: 0

# if you have indent rules for particular code blocks
# then you can populate them in indentRules; for example, you might just want
# to use a space " " or maybe a double tab "\t\t"
indentRules:
   myenvironment: "    " # default: \t\t
   chapter: "  "
   section: "  "
   item: "      "

# set noAdditionalIndent globally for codeblocks
noAdditionalIndentGlobal:
    environments: 0
    commands: 1
    optionalArguments: 0
    mandatoryArguments: 0
    ifElseFi: 0
    items: 0
    keyEqualsValuesBracesBrackets: 0
    namedGroupingBracesBrackets: 0
    UnNamedGroupingBracesBrackets: 0
    specialBeginEnd: 0
    afterHeading: 0
    filecontents: 0

# set indentRules globally for codeblocks; these need
# to be horizontal spaces, if they are to be used
indentRulesGlobal:
    environments: 0
    commands: 0
    optionalArguments: 0
    mandatoryArguments: 0
    ifElseFi: 0
    items: 0
    keyEqualsValuesBracesBrackets: 0
    namedGroupingBracesBrackets: 0
    UnNamedGroupingBracesBrackets: 0
    specialBeginEnd: 0
    afterHeading: 0
    filecontents: 0

# command code block details
commandCodeBlocks:
    roundParenthesesAllowed: 1
    stringsAllowedBetweenArguments:
      -
        amalgamate: 1
      - 'node'
      - 'at'
      - 'to'
      - 'decoration'
      - '\+\+'
      - '\-\-'
    commandNameSpecial:
      -
        amalgamate: 1
      - '@ifnextchar\['

# modifyLineBreaks will only be searched if the -m
# switch is active
#
# poly-switch examples:
#
#    BeginStartsOnOwnLine:
#       modify line breaks before a begin statement
#
#       when set to -1, e.g
#               some text some text
#               \begin{myenvironment}
#           will be changed to
#               some text some text \begin{myenvironment}
#       when set to 0, the switch is ignored
#       when set to 1, e.g
#               some text some text \begin{myenvironment}
#           will be changed to
#               some text some text
#               \begin{myenvironment}
#       when set to 2, e.g
#               some text some text \begin{myenvironment}
#           will be changed to
#               some text some text%
#               \begin{myenvironment}
#       when set to 3, e.g
#               some text some text \begin{myenvironment}
#           will be changed to
#               some text some text
#
#               \begin{myenvironment}
#
#    BodyStartsOnOwnLine:
#       modify line breaks before the beginning of the body
#
#       when set to -1, e.g
#               \begin{myenv}
#                   body text body text
#           will be changed to
#               \begin{myenv}body text body text
#       when set to 0, the switch is ignored
#       when set to 1, e.g
#               \begin{myenv}body text body text
#           will be changed to
#               \begin{myenv}
#                   body text body text
#       when set to 2, e.g
#               \begin{myenv}body text body text
#           will be changed to
#               \begin{myenv}%
#                   body text body text
#       when set to 3, e.g
#               \begin{myenv}body text body text
#           will be changed to
#               \begin{myenv}
#
#                   body text body text
#
#    EndStartsOnOwnLine:
#       modify line breaks before the end statement
#
#       when set to -1, e.g
#               some text some text
#               \end{myenvironment}
#           will be changed to
#               some text some text \end{myenvironment}
#       when set to 0, the switch is ignored
#       when set to 1, e.g
#               some text some text \end{myenvironment}
#           will be changed to
#               some text some text
#               \end{myenvironment}
#       when set to 2, e.g
#               some text some text \end{myenvironment}
#           will be changed to
#               some text some text%
#               \end{myenvironment}
#       when set to 3, e.g
#               some text some text \end{myenvironment}
#           will be changed to
#               some text some text
#
#               \end{myenvironment}
#
#    EndFinishesWithLineBreak:
#       modify line breaks after the end statement
#
#       when set to -1, e.g
#               \end{myenvironment}
#               some text some text
#           will be changed to
#                   \end{myenvironment}some text some text
#       when set to 0, the switch is ignored
#       when set to 1, e.g
#               \end{myenvironment}some text some text
#           will be changed to
#                   \end{myenvironment}
#                   some text some text
#       when set to 2, e.g
#               \end{myenvironment}some text some text
#           will be changed to
#                   \end{myenvironment}%
#                   some text some text
#       when set to 3, e.g
#               \end{myenvironment}some text some text
#           will be changed to
#                   \end{myenvironment}
#
#                   some text some text
#
# you can specify settings on a per-name basis
modifyLineBreaks:
    preserveBlankLines: 1
    condenseMultipleBlankLinesInto: 1
    oneSentencePerLine:
        manipulateSentences: 1
        removeSentenceLineBreaks: 1
        textWrapSentences: 0
        sentenceIndent: ""
        sentencesFollow:
            par: 1
            blankLine: 1
            fullStop: 1
            exclamationMark: 1
            questionMark: 1
            rightBrace: 1
            commentOnPreviousLine: 1
            other: 0
        sentencesBeginWith:
            A-Z: 1
            a-z: 0
            other: 0
        sentencesEndWith:
            basicFullStop: 0
            betterFullStop: 1
            exclamationMark: 1
            questionMark: 1
            other: ":"
    textWrapOptions:
        columns: 0
        separator: ""
        perCodeBlockBasis: 0
        all: 0
        alignAtAmpersandTakesPriority: 1
        environments:
            quotation: 0
        ifElseFi: 0
        optionalArguments: 0
        mandatoryArguments: 0
        items: 0
        specialBeginEnd: 0
        afterHeading: 0
        preamble: 0
        filecontents: 0
        masterDocument: 0
    removeParagraphLineBreaks:
        all: 0
        beforeTextWrap: 0
        alignAtAmpersandTakesPriority: 1
        environments:
            quotation: 0
        ifElseFi: 0
        optionalArguments: 0
        mandatoryArguments: 0
        items: 0
        specialBeginEnd: 0
        afterHeading: 0
        preamble: 0
        filecontents: 0
        masterDocument: 0
        paragraphsStopAt:
            environments: 1
            verbatim: 1
            commands: 0
            ifElseFi: 0
            items: 0
            specialBeginEnd: 0
            heading: 0
            filecontents: 0
            comments: 0
    environments:
        BeginStartsOnOwnLine: 1
        BodyStartsOnOwnLine: 1
        EndStartsOnOwnLine: 1
        EndFinishesWithLineBreak: 1
        equation*:
            BeginStartsOnOwnLine: 1
            BodyStartsOnOwnLine: 1
            EndStartsOnOwnLine: 1
            EndFinishesWithLineBreak: 1
    ifElseFi:
        IfStartsOnOwnLine: 1
        BodyStartsOnOwnLine: 1
        OrStartsOnOwnLine: 1
        OrFinishesWithLineBreak: 1
        ElseStartsOnOwnLine: 1
        ElseFinishesWithLineBreak: 1
        FiStartsOnOwnLine: 1
        FiFinishesWithLineBreak: 1
        ifnum:
            IfStartsOnOwnLine: 0
            BodyStartsOnOwnLine: 0
            OrStartsOnOwnLine: 0
            OrFinishesWithLineBreak: 0
            ElseStartsOnOwnLine: 0
            ElseFinishesWithLineBreak: 0
            FiStartsOnOwnLine: 0
            FiFinishesWithLineBreak: 0
    commands:
        CommandStartsOnOwnLine: 0
        CommandNameFinishesWithLineBreak: 0
    optionalArguments:
        LSqBStartsOnOwnLine: 0
        OptArgBodyStartsOnOwnLine: 0
        RSqBStartsOnOwnLine: 0
        RSqBFinishesWithLineBreak: 0
    mandatoryArguments:
        LCuBStartsOnOwnLine: 0
        MandArgBodyStartsOnOwnLine: 0
        RCuBStartsOnOwnLine: 0
        RCuBFinishesWithLineBreak: 0
    keyEqualsValuesBracesBrackets:
        KeyStartsOnOwnLine: 0
        EqualsStartsOnOwnLine: 0
        EqualsFinishesWithLineBreak: 0
    items:
        ItemStartsOnOwnLine: 0
        ItemFinishesWithLineBreak: 0
    namedGroupingBracesBrackets:
        NameStartsOnOwnLine: 0
        NameFinishesWithLineBreak: 0
    specialBeginEnd:
        SpecialBeginStartsOnOwnLine: 0
        SpecialBodyStartsOnOwnLine: 0
        SpecialEndStartsOnOwnLine: 0
        SpecialEndFinishesWithLineBreak: 0
    verbatim:
        VerbatimBeginStartsOnOwnLine: 0
        VerbatimEndFinishesWithLineBreak: 0

# replacements, only active when either -r or -rr switches are active
replacements:
  -
    amalgamate: 1
  -
    this: 'latexindent.pl'
    that: 'pl.latexindent'
    lookForThis: 1
    when: before

# fineTuning allows you to tweak the internal pattern matching that
# is central to latexindent.pl
fineTuning:
    environments:
      name: '[a-zA-Z@\*0-9_\\]+'
    ifElseFi:
      name: '@?if[a-zA-Z@]*?'
    commands:
      name: '[+a-zA-Z@\*0-9_\:]+?'
    keyEqualsValuesBracesBrackets:
      name: '[a-zA-Z@\*0-9_\/.\h\{\}:\#-]+?'
      follow: '(?:(?<!\\)\{)|,|(?:(?<!\\)\[)'
    NamedGroupingBracesBrackets:
      name: '[0-9\.a-zA-Z@\*><]+?'
      follow: '\h|\R|\{|\[|\$|\)|\('
    UnNamedGroupingBracesBrackets:
      follow: '\{|\[|,|&|\)|\(|\$'
    arguments:
      before: '(?:#\d\h*;?,?\/?)+|\<.*?\>'
      between: '_|\^|\*'
    modifyLineBreaks:
      betterFullStop: '(?:\.\)(?!\h*[a-z]))|(?:(?<!(?:(?:e\.g)|(?:i\.e)|(?:etc))))\.(?!(?:[a-z]|[A-Z]|\-|~|\,|[0-9]))'
      doubleBackSlash: '\\\\(?:\h*\[\h*\d+\h*[a-zA-Z]+\h*\])?'
      comma: ','
