# defaultSettings.yaml for latexindent.pl, version 3.8, 2020-03-21
#                      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: 0

# 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: "\t"

# name of code blocks that should have their body aligned at ampersand delimiters
lookForAlignDelims:
   tabular: 
      delims: 1
      alignDoubleBackSlash: 1
      spacesBeforeDoubleBackSlash: 1
      multiColumnGrouping: 0
      alignRowsWithoutMaxDelims: 1
      spacesBeforeAmpersand: 1
      spacesAfterAmpersand: 1
      justification: left
      alignFinalDoubleBackSlash: 0
      dontMeasure: 0
      delimiterRegEx: '(?<!\\)(&)'
      delimiterJustification: 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
    myitem: 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: 0
       level: 1
    chapter: 
       indentAfterThisHeading: 0
       level: 2
    section:
       indentAfterThisHeading: 0
       level: 3
    subsection:
       indentAfterThisHeading: 0
       level: 4
    subsection*:
       indentAfterThisHeading: 0
       level: 4
    subsubsection:
       indentAfterThisHeading: 0
       level: 5
    paragraph:
       indentAfterThisHeading: 0
       level: 6
    subparagraph:
       indentAfterThisHeading: 0
       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:
    myexample: 1
    mydefinition: 1
    problem: 1
    exercises: 1
    mysolution: 1
    foreach: 0
    widepage: 1
    comment: 1
    document: 1
    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: "\t\t"
   anotherenvironment: "\t\t\t\t"
   chapter: " "
   section: " "
   item: "      "
   myitem: "        "

# 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: 0     
        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: 0
    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: 0
        BodyStartsOnOwnLine: 0
        EndStartsOnOwnLine: 0
        EndFinishesWithLineBreak: 0
        equation*:
            BeginStartsOnOwnLine: 0
            BodyStartsOnOwnLine: 0
            EndStartsOnOwnLine: 0
            EndFinishesWithLineBreak: 0
    ifElseFi:
        IfStartsOnOwnLine: 0
        BodyStartsOnOwnLine: 0
        OrStartsOnOwnLine: 0
        OrFinishesWithLineBreak: 0
        ElseStartsOnOwnLine: 0
        ElseFinishesWithLineBreak: 0
        FiStartsOnOwnLine: 0
        FiFinishesWithLineBreak: 0
        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: ','
