{
    "$schema": "http://json-schema.org/schema",
    "$id": "latexindent-yaml-schema.json",
    "title": "latexindent.pl YAML schema",
    "description": "latexindent.pl YAML schema helper, V3.22.2 2023-07-14",
    "type": "object",
    "properties": {
      "fileExtensionPreference": {
        "description": "calling latexindent.pl to operate on myfile (without extension) is fine, and in which case the file extensions from this field will be used in order",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "integer, specifying the order in which latexindent.pl will search for myfile ending with this extension",
            "type": "integer"
          }
        }
      },
      "backupExtension": {
        "description": "when the -w, --overwrite switch is active, a back-up file is created with this extension",
        "type": "string"
      },
      "onlyOneBackUp": {
        "description": "when the -w, --overwrite switch is active, the default is to create a back-up file for each call to latexindent.pl. Changing onlyOneBackUp to 1 means that only one back-up file is created",
        "type": "integer",
        "enum": [0,1]
      },
      "maxNumberOfBackUps": {
        "description": "when the -w, --overwrite switch is active, the default is to create a back-up file for each call to latexindent.pl. This field sets the maximum number of back-up files",
        "type": "integer",
        "minimum": 0
      },
      "cycleThroughBackUps": {
        "description": "when the -w, --overwrite switch is active, back-up files can be overwritten in order; see also maxNumberOfBackUps",
        "type": "integer",
        "enum": [0,1] 
      },
      "logFilePreferences": {
        "description": "latexindent.pl will write logging information to indent.log; the appearance of some of the information can be customised",
        "type": "object",
        "properties": {
          "showEveryYamlRead": {
            "description": "0/1, binary switch to show every YAML file's settings in indent.log",
            "type": "integer",
            "enum": [0,1]     
          },
          "showAmalgamatedSettings": {
            "description": "0/1, binary switch to show the overall/amalgamated settings in indent.log",
            "type": "integer",
            "enum": [0,1]     
          },
          "showDecorationStartCodeBlockTrace": {
            "description": "0/1, binary switch to show decorations at *start* of code block in indent.log when -t, -tt switches active",
            "type": "integer",
            "enum": [0,1]     
          },
          "showDecorationFinishCodeBlockTrace": {
            "description": "0/1, binary switch to show decorations at *finish* of code block in indent.log when -t, -tt switches active",
            "type": "integer",
            "enum": [0,1]     
          },
          "endLogFileWith": {
            "description": "string decoration to finish indent.log",
            "type": "string"   
          },
          "showGitHubInfoFooter": {
            "description": "0/1, binary switch to show GitHub information in footer of indent.log",
            "type": "integer",
            "enum": [0,1] 
          },
          "Dumper": {
            "description": "options to be passed to the Dumper module; most helpful when -t, -tt active.",
            "type": "object",
            "properties": {
              "Terse":{
                "type": "integer",
                "enum": [0,1]     
              },
              "Indent":{
                "type": "integer",
                "enum": [0,1]     
              },
              "Useqq":{
                "type": "integer",
                "enum": [0,1]     
              },
              "Deparse":{
                "type": "integer",
                "enum": [0,1]     
              },
              "Quotekeys":{
                "type": "integer",
                "enum": [0,1]     
              },
              "Sortkeys":{
                "type": "integer",
                "enum": [0,1]     
              },
              "Pair":{
                "type": "string"    
              }
            }
          }
        }
      },
      "verbatimEnvironments": {
        "description": "specify the names of verbatim environments in this field",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch to mean don't look for/look for this *environment*",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "verbatimCommands": {
        "description": "specify the names of verbatim *commands* in this field",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch to mean don't look for/look for this *command*",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "noIndentBlock": {
        "description": "specify the names of *noIndentBlock* in this field",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch to mean don't look for/look for this *noIndentBlock*",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "fileContentsEnvironments": {
        "description": "specify the names of *filecontents* in this field",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch to mean don't look for/look for this *filecontents* environment",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "indentPreamble": {
        "description": "0/1, binary switch to instruct latexindent.pl to operate on preamble or not",
        "type": "integer",
        "enum": [0,1]
      },
      "lookForPreamble": {
        "description": "list of extensions detailing which files latexindent.pl should look for preamble",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch for preamble search for this file type",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "preambleCommandsBeforeEnvironments": {
        "description": "0/1, binary switch to instruct latexindent.pl to search for commands before environments in preamble",
        "type": "integer",
        "enum": [0,1]
      },
      "defaultIndent": {
        "description": "default indentation, needs to be specified as horizontal space",
        "type": "string"
      },
      "removeTrailingWhitespace": {
        "description": "remove horizontal space at the *end* of lines",
        "type": "object",
        "properties": {
          "beforeProcessing": {
            "description": "0/1, binary switch to remove horizontal space *before* indenting",
            "type": "integer",
            "enum": [0,1]     
          },
          "afterProcessing": {
            "description": "0/1, binary switch to remove horizontal space *after* indenting",
            "type": "integer",
            "enum": [0,1] 
          }
        }
      },
      "lookForAlignDelims": {
        "description": "list of names of code blocks detailing that latexindent.pl should align at delimiters",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1 binary switch to detail if this code block has delimiters. Option to specify this field in 'advanced' form",
            "type": ["integer","object"],
            "properties": {
              "delims": {
                "description": "0/1, binary switch to look for delimiters",
                "type": "integer",
                "enum": [0,1]     
              },
              "alignDoubleBackSlash": {
                "description": "0/1, binary switch to align the \\\\",
                "type": "integer",
                "enum": [0,1]     
              },
              "spacesBeforeDoubleBackSlash": {
                "description": "integer detailing number of spaces *before* \\\\",
                "type": "integer",
                "minimum": 0     
              },
              "multiColumnGrouping": {
                "description": "0/1, binary switch to group alignment under \\multicolumn command",
                "type": "integer",
                "enum": [0,1]     
              },
              "alignRowsWithoutMaxDelims": {
                "description": "0/1, binary switch to align rows without the maximum number of delimiters",
                "type": "integer",
                "enum": [0,1]     
              },
              "spacesBeforeAmpersand": {
                "description": "integer detailing number of spaces *before* delimiter",
                "type": "integer",
                "minimum": 0
              },
              "spacesAfterAmpersand": {
                "description": "integer detailing number of spaces *after* delimiter",
                "type": "integer",
                "minimum": 0
              },
              "justification": {
                "description": "justification of cell",
                "type": "string",
                "enum": ["left", "right"]
              },
              "alignFinalDoubleBackSlash": {
                "description": "0/1, binary switch to align final \\\\",
                "type": "integer",
                "enum": [0,1]
              },
              "dontMeasure": {
                "description": "entries not to be measured in the alignment routine",
                "type": ["integer","string","array"],
                "items": {
                  "type": ["string","object"],
                  "description": "entry not to be measured",
                  "properties": {
                    "this": {
                      "type": "string",
                      "description": "string containing the cell *not* to be measured"
                    },
                    "applyTo": {
                      "type": "string",
                      "enum": ["cell", "row"],
                      "description": "detail cell or row"
                    },
                    "regex": {
                      "type": "string",
                      "description": "regular expression to match cell or row"
                    }
                  }
               }
              },
              "delimiterRegEx": {
                "description": "delimiter regex. NOTE: the capturing ()",
                "type": "string"   
              },
              "delimiterJustification": {
                "description": "delimiter justification",
                "type": "string",
                "enum": ["left", "right"]
              },
              "lookForChildCodeBlocks": {
                "description": "0/1. binary switch to look for child code blocks",
                "type": "integer",
                "enum": [0,1]
              }
            }
          }
        }
      },
      "indentAfterItems": {
        "description": "specify the names of environments that contain items",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch to mean don't look for/look for items in this environment",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "itemNames": {
        "description": "names of items",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch to mean don't look for/look for items",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "specialBeginEnd": {
        "description": "special code blocks have begin, end, and optionally 'middle' specified as regular expressions",
        "type": "object",
        "properties": {
          "specialBeforeCommand": {
            "description": "0/1, binary switch to look for commands before special code blocks",
            "type": "integer",
            "enum": [0,1]
          }
        },
        "patternProperties": {
          ".*": {
            "description": "name of special code block",
            "type": "object",
            "properties": {
              "begin":{
                "type": "string",
                "description": "regular expression containing the *beginning* part"
              },
              "middle":{
                "type": "string",
                "description": "optional: regular expression containing the *middle* part"
              },
              "end":{
                "type": "string",
                "description": "regular expression containing the *ending* part"
              },
              "lookForThis":{
                "type": "integer",
                "description": "optional 0/1, binary switch detailing look for this or not. Default is 1 if not specified",
                "enum": [0,1]     
              }
            }
          }
        }
      },
      "indentAfterHeadings": {
        "description": "indentation after headings",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "name of heading",
            "type": "object",
            "properties": {
              "indentAfterThisHeading":{
                "type": "integer",
                "description": "0/1, binary switch to look for heading or not",
                "enum": [0,1]
              },
              "level":{
                "type": "integer",
                "description": "level of the heading (minimum is 1)",
                "minimum": 1
              }
            }
          }
        }
      },
      "maximumIndentation": {
        "description": "maximum value of indentation; specify as horizontal space",
        "type": ["string","integer"]
      },
      "noAdditionalIndent": {
        "description": "names of code blocks to not have additional indentation",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "0/1, binary switch to mean code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "indentRules": {
        "description": "per-code block indentation rule",
        "type": "object",
        "patternProperties": {
          ".*": {
            "description": "indentation/horizontal space per-code block",
            "type": "string"
          }
        }
      },
      "noAdditionalIndentGlobal": {
        "description": "*types* of code blocks to not have additional indentation",
        "type": "object",
        "properties": {
          "environments": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "commands": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "optionalArguments": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "mandatoryArguments": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "ifElseFi": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "items": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "keyEqualsValuesBracesBrackets": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "namedGroupingBracesBrackets": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "UnNamedGroupingBracesBrackets": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "specialBeginEnd": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "afterHeading": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          },
          "filecontents": {
            "description": "0/1, binary switch to mean *type* of code block does not have/has additional indentation",
            "type": "integer",
            "enum": [0,1]
          }
        }
      },
      "indentRulesGlobal": {
        "description": "*types* of code blocks indentation rules",
        "type": "object",
        "properties": {
          "environments": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "commands": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "optionalArguments": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "mandatoryArguments": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "ifElseFi": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "items": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "keyEqualsValuesBracesBrackets": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "namedGroupingBracesBrackets": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "UnNamedGroupingBracesBrackets": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "specialBeginEnd": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "afterHeading": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          },
          "filecontents": {
            "description": "indentation rules per *type* of code block",
            "type": ["integer","string"]
          }
        }
      },
      "commandCodeBlocks": {
        "description": "command code blocks need some particular attention",
        "type": "object",
        "properties": {
          "roundParenthesesAllowed": {
            "description": "0/1, binary switch to not allow/allow round parenthesis () between arguments",
            "type": "integer",
            "enum": [0,1]
          },
          "stringsAllowedBetweenArguments": {
            "description": "strings allowed between arguments",
            "type": ["integer","array"],
            "items": {
              "type": ["string" ,"object"],
              "description": "entry to be allowed between arguments"
            }
          },
          "commandNameSpecial": {
            "description": "there are some particular commands that need individual attention",
            "type": ["integer","array"],
            "items": {
              "type": ["string" ,"object"],
              "description": "entry for particular attention"
            }
          }
        }
      },
      "dos2unixlinebreaks": {
        "description": "0/1, binary switch to convert dos line breaks to unix line breaks",
        "type": "integer",
        "enum": [0,1]
      },
      "modifyLineBreaks": {
        "description": "when -m switch active, latexindent.pl has ability to modify line breaks",
        "type": "object",
        "properties": {
          "preserveBlankLines": {
            "description": "0/1, binary switch to preserve blank lines or not",
            "type": "integer",
            "enum": [0,1]
          },
          "condenseMultipleBlankLinesInto": {
            "description": "condense multiple blank lines into this many blank lines",
            "type": "integer",
            "minimum": 0
          },
          "oneSentencePerLine": {
            "properties": {
              "manipulateSentences": {
                "description": "0/1, binary switch to perform one sentence per line routine or not",
                "type": "integer",
                "enum": [0,1]
              },
              "removeSentenceLineBreaks": {
                "description": "0/1, binary switch to remove line breaks from within sentences or not",
                "type": "integer",
                "enum": [0,1]
              },
              "textWrapSentences": {
                "description": "0/1, binary switch to text wrap sentences or not",
                "type": "integer",
                "enum": [0,1]
              },
              "sentenceIndent": {
                "description": "horizontal space representing indentation within sentences",
                "type": "string"
              },
              "sentencesFollow":{
                "description": "things that sentences can follow",
                "properties": {
                  "par": {
                    "description": "0/1, binary switch to determine if sentences can follow \\par or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "blankLine": {
                    "description": "0/1, binary switch to determine if sentences can follow blank lines or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "fullStop": {
                    "description": "0/1, binary switch to determine if sentences can follow blank lines or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "exclamationMark": {
                    "description": "0/1, binary switch to determine if sentences can follow ! or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "questionMark": {
                    "description": "0/1, binary switch to determine if sentences can follow ? or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "rightBrace": {
                    "description": "0/1, binary switch to determine if sentences can follow } or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "commentOnPreviousLine": {
                    "description": "0/1, binary switch to determine if sentences can follow % on previous line or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "other": {
                    "description": "regular expression detailing what else sentences can follow",
                    "type": ["integer","string"]
                  }
                }
              },
              "sentencesBeginWith":{
                "description": "things that sentences can begin with",
                "properties": {
                  "A-Z": {
                    "description": "0/1, binary switch to determine if sentences can begin upper case letters or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "a-z": {
                    "description": "0/1, binary switch to determine if sentences can begin lower case letters or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "other": {
                    "description": "regular expression detailing what else sentences can begin with",
                    "type": ["integer","string"]
                  }
                }
              },
              "sentencesEndWith":{
                "description": "things that sentences can end with",
                "properties": {
                  "basicFullStop": {
                    "description": "0/1, binary switch to determine if sentences can end with basic full stop (period) or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "betterFullStop": {
                    "description": "0/1, binary switch to determine if sentences can end with better full stop (period) or not (RECOMMENDED)",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "exclamationMark": {
                    "description": "0/1, binary switch to determine if sentences can end with ! or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "questionMark": {
                    "description": "0/1, binary switch to determine if sentences can end with ? or not",
                    "type": "integer",
                    "enum": [0,1]
                  },
                  "other": {
                    "description": "regular expression detailing what else sentences can end with",
                    "type": ["integer","string"]
                  }
                }
              }
            }
          },
          "textWrapOptions":{
            "description": "options for the text wrap routine",
            "type":"object",
            "properties": {
              "columns": {
                "description": "integer > 0 sets the number of columns for the text wrap routine, or if -1 then text wrap blocks simply have line breaks removed",
                "type": "integer",
                "minimum": -1
              },
              "huge": {
                "description": "WARNING: I don't recommend changing this from overflow",
                "type": "string"
              },
              "separator": {
                "description": "can be any string, but I haven't found a good use case to change this from ''",
                "type": "string"
              },
              "multipleSpacesToSingle": {
                "description": "0/1, binary switch to determine if text wrap should convert multiple spaces to single space",
                "type": "integer",
                "enum": [0,1]
              },
              "blocksFollow": {
                "description": "field containing switches that text wrap blocks *follow*",
                "type": ["object"]
              },
              "blocksBeginWith": {
                "description": "field containing switches that text wrap blocks *begin with*",
                "type": ["object"]
              },
              "blocksEndBefore": {
                "description": "field containing switches that text wrap blocks *end before*",
                "type": ["object"]
              }
            }
          },
          "environments": {
                "description": "poly-switches for environments (GLOBAL)",
                "type":"object",
                "properties": {
                  "BeginStartsOnOwnLine":{
                    "description": "poly-switch for line break before beginning of environments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "BodyStartsOnOwnLine":{
                    "description": "poly-switch for line break before body of environments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "EndStartsOnOwnLine":{
                    "description": "poly-switch for line break before end of environments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "EndFinishesWithLineBreak":{
                    "description": "poly-switch for line break after end of environments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  }
                },
                "patternProperties": {
                  ".*": {
                    "description": "poly-switches for environments (PER-NAME)",
                    "type": "object",
                    "properties": {
                      "BeginStartsOnOwnLine":{
                      "description": "poly-switch for line break before beginning of environments (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    },
                    "BodyStartsOnOwnLine":{
                      "description": "poly-switch for line break before body of environments (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    },
                    "EndStartsOnOwnLine":{
                      "description": "poly-switch for line break before end of environments (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    },
                    "EndFinishesWithLineBreak":{
                      "description": "poly-switch for line break after end of environments (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    }
                  }
                 }
               }
          },
          "specialBeginEnd": {
                "description": "poly-switches for specialBeginEnd (GLOBAL)",
                "type":"object",
                "properties": {
                  "SpecialBeginStartsOnOwnLine":{
                    "description": "poly-switch for line break before beginning of specialBeginEnd (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "SpecialBodyStartsOnOwnLine":{
                    "description": "poly-switch for line break before body of specialBeginEnd (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "SpecialEndStartsOnOwnLine":{
                    "description": "poly-switch for line break before end of specialBeginEnd (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "SpecialEndFinishesWithLineBreak":{
                    "description": "poly-switch for line break after end of specialBeginEnd (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  }
                },
                "patternProperties": {
                  ".*": {
                    "description": "poly-switches for specialBeginEnd (PER-NAME)",
                    "type": "object",
                    "properties": {
                      "SpecialBeginStartsOnOwnLine":{
                      "description": "poly-switch for line break before beginning of specialBeginEnd (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    },
                    "SpecialBodyStartsOnOwnLine":{
                      "description": "poly-switch for line break before body of specialBeginEnd (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    },
                    "SpecialEndStartsOnOwnLine":{
                      "description": "poly-switch for line break before end of specialBeginEnd (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    },
                    "SpecialEndFinishesWithLineBreak":{
                      "description": "poly-switch for line break after end of specialBeginEnd (PER-NAME)",
                      "type": "integer",
                      "enum": [-1,0,1,2,3,4]
                    }
                  }
                }
              }
          },
          "keyEqualsValuesBracesBrackets": {
            "description": "poly-switches for key equals value (GLOBAL)",
            "type":"object",
            "properties": {
              "KeyStartsOnOwnLine":{
                "description": "poly-switch for line break before beginning of key equals value (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "EqualsStartsOnOwnLine":{
                "description": "poly-switch for line break before = of key equals value (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "EqualsFinishesWithLineBreak":{
                "description": "poly-switch for line break after = of key equals value (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              }
            },
            "patternProperties": {
              ".*": {
                "description": "poly-switches for key equals value (PER-NAME)",
                "type": "object",
                "properties": {
                  "KeyStartsOnOwnLine":{
                  "description": "poly-switch for line break before beginning of key equals value (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "EqualsStartsOnOwnLine":{
                  "description": "poly-switch for line break before = of key equals value (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "EqualsFinishesWithLineBreak":{
                  "description": "poly-switch for line break after = of key equals value (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                }
               }
              }
            }
          },
          "ifElseFi": {
            "description": "poly-switches for ifElseFi (GLOBAL)",
            "type":"object",
            "properties": {
              "IfStartsOnOwnLine":{
                "description": "poly-switch for line break before beginning of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "BodyStartsOnOwnLine":{
                "description": "poly-switch for line break before body of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "OrStartsOnOwnLine":{
                "description": "poly-switch for line break before or statement of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "OrFinishesWithLineBreak":{
                "description": "poly-switch for line break after or statement of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "ElseStartsOnOwnLine":{
                "description": "poly-switch for line break before else statement of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "ElseFinishesWithLineBreak":{
                "description": "poly-switch for line break after else statement of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "FiStartsOnOwnLine":{
                "description": "poly-switch for line break before end of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "FiFinishesWithLineBreak":{
                "description": "poly-switch for line break after end of ifElseFi (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              }
            },
            "patternProperties": {
              ".*": {
                "description": "poly-switches for ifElseFi (PER-NAME)",
                "type": "object",
                "properties": {
                  "IfStartsOnOwnLine":{
                  "description": "poly-switch for line break before beginning of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "BodyStartsOnOwnLine":{
                  "description": "poly-switch for line break before body of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "OrStartsOnOwnLine":{
                  "description": "poly-switch for line break before or statement of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "OrFinishesWithLineBreak":{
                  "description": "poly-switch for line break after or statement of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "ElseStartsOnOwnLine":{
                  "description": "poly-switch for line break before else statement of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "ElseFinishesWithLineBreak":{
                  "description": "poly-switch for line break after else statement of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "FiStartsOnOwnLine":{
                  "description": "poly-switch for line break before end of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "FiFinishesWithLineBreak":{
                  "description": "poly-switch for line break after end of ifElseFi (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                }
               }
              }
            }
          },
          "commands": {
            "description": "poly-switches for commands (GLOBAL)",
            "type":"object",
            "properties": {
              "CommandStartsOnOwnLine":{
                "description": "poly-switch for line break before beginning of commands (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "CommandNameFinishesWithLineBreak":{
                "description": "poly-switch for line break after end of commands (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              }
            },
            "patternProperties": {
              ".*": {
                "description": "poly-switches for commands (PER-NAME)",
                "type": "object",
                "properties": {
                  "CommandStartsOnOwnLine":{
                  "description": "poly-switch for line break before beginning of commands (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "CommandNameFinishesWithLineBreak":{
                  "description": "poly-switch for line break after end of commands (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                }
               }
              }
            }
          },
          "verbatim": {
            "description": "poly-switches for verbatim (GLOBAL)",
            "type":"object",
            "properties": {
              "VerbatimBeginStartsOnOwnLine":{
                "description": "poly-switch for line break before beginning of verbatim (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "VerbatimEndFinishesWithLineBreak":{
                "description": "poly-switch for line break after end of verbatim (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              }
            },
            "patternProperties": {
              ".*": {
                "description": "poly-switches for verbatim (PER-NAME)",
                "type": "object",
                "properties": {
                  "VerbatimBeginStartsOnOwnLine":{
                    "description": "poly-switch for line break before beginning of verbatim (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "VerbatimEndFinishesWithLineBreak":{
                    "description": "poly-switch for line break after end of verbatim (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  }
                }
              }
            }
          },
          "namedGroupingBracesBrackets": {
            "description": "poly-switches for namedGroupingBracesBrackets (GLOBAL)",
            "type":"object",
            "properties": {
              "NameStartsOnOwnLine":{
                "description": "poly-switch for line break before beginning of namedGroupingBracesBrackets (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "NameFinishesWithLineBreak":{
                "description": "poly-switch for line break after end of namedGroupingBracesBrackets (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              }
            },
            "patternProperties": {
              ".*": {
                "description": "poly-switches for commands (PER-NAME)",
                "type": "object",
                "properties": {
                  "NameStartsOnOwnLine":{
                    "description": "poly-switch for line break before beginning of namedGroupingBracesBrackets (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "NameFinishesWithLineBreak":{
                    "description": "poly-switch for line break after end of namedGroupingBracesBrackets (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  }
                }
              }
            }
          },
          "items": {
            "description": "poly-switches for items (GLOBAL)",
            "type":"object",
            "properties": {
              "ItemStartsOnOwnLine":{
                "description": "poly-switch for line break before beginning of items (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "ItemFinishesWithLineBreak":{
                "description": "poly-switch for line break after end of items (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              }
            },
            "patternProperties": {
              ".*": {
                "description": "poly-switches for items (PER-NAME)",
                "type": "object",
                "properties": {
                  "ItemStartsOnOwnLine":{
                  "description": "poly-switch for line break before beginning of items (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "ItemFinishesWithLineBreak":{
                  "description": "poly-switch for line break after end of items (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                }
               }
              }
            }
          },
          "optionalArguments": {
            "description": "poly-switches for optional arguments (GLOBAL)",
            "type":"object",
            "properties": {
              "LSqBStartsOnOwnLine":{
                "description": "poly-switch for line break before beginning of optional arguments (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "OptArgBodyStartsOnOwnLine":{
                "description": "poly-switch for line break before body of optional arguments (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "RSqBStartsOnOwnLine":{
                "description": "poly-switch for line break before end of optional arguments (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              },
              "RSqBFinishesWithLineBreak":{
                "description": "poly-switch for line break after end of optional arguments (GLOBAL)",
                "type": "integer",
                "enum": [-1,0,1,2,3,4]
              }
            },
            "patternProperties": {
              ".*": {
                "description": "poly-switches for optional arguments (PER-NAME)",
                "type": "object",
                "properties": {
                  "LSqBStartsOnOwnLine":{
                  "description": "poly-switch for line break before beginning of optional arguments (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "OptArgBodyStartsOnOwnLine":{
                  "description": "poly-switch for line break before body of optional arguments (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "RSqBStartsOnOwnLine":{
                  "description": "poly-switch for line break before end of optional arguments (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                },
                "RSqBFinishesWithLineBreak":{
                  "description": "poly-switch for line break after end of optional arguments (PER-NAME)",
                  "type": "integer",
                  "enum": [-1,0,1,2,3,4]
                }
               }
              }
            }
          },
          "mandatoryArguments": {
                "description": "poly-switches for mandatory arguments (GLOBAL)",
                "type":"object",
                "properties": {
                  "LCuBStartsOnOwnLine":{
                    "description": "poly-switch for line break before beginning of mandatory arguments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "MandArgBodyStartsOnOwnLine":{
                    "description": "poly-switch for line break before body of mandatory arguments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "RCuBStartsOnOwnLine":{
                    "description": "poly-switch for line break before end of mandatory arguments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "RCuBFinishesWithLineBreak":{
                    "description": "poly-switch for line break after end of mandatory arguments (GLOBAL)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  }
                },
                "patternProperties": {
                  ".*": {
                    "description": "poly-switches for mandatory arguments (PER-NAME)",
                    "type": "object",
                  "properties": {
                    "LCuBStartsOnOwnLine":{
                    "description": "poly-switch for line break before beginning of mandatory arguments (PER-NAME)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "MandArgBodyStartsOnOwnLine":{
                    "description": "poly-switch for line break before body of mandatory arguments (PER-NAME)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "RCuBStartsOnOwnLine":{
                    "description": "poly-switch for line break before end of mandatory arguments (PER-NAME)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  },
                  "RCuBFinishesWithLineBreak":{
                    "description": "poly-switch for line break after end of mandatory arguments (PER-NAME)",
                    "type": "integer",
                    "enum": [-1,0,1,2,3,4]
                  }
                }
              }
            }
          }
        }
      },
      "replacements":{
        "description": "replacements to be made; requires -r, -rr or -rv switch",
        "type": "array"
      },
      "fineTuning":{
        "description": "fine tuning, proceed with caution!",
        "type":"object",
        "properties": {
          "environments":{
            "description": "fine tuning, for environments",
            "type":"object",
            "properties": {
              "name":{
                "description": "regular expression for environment name",
                "type": "string"
              }
            }
          },
          "ifElseFi":{
            "description": "fine tuning, for ifElseFi",
            "type":"object",
            "properties": {
              "name":{
                "description": "regular expression for ifElseFi name",
                "type": "string"
              }
            }
          },
          "commands":{
            "description": "fine tuning, for commands",
            "type":"object",
            "properties": {
              "name":{
                "description": "regular expression for commands name",
                "type": "string"
              }
            }
          },
          "items":{
            "description": "fine tuning, for items",
            "type":"object",
            "properties": {
              "canBeFollowedBy":{
                "description": "regular expression for what can follow items",
                "type": "string"
              }
            }
          },
          "keyEqualsValuesBracesBrackets":{
            "description": "fine tuning, for keyEqualsValuesBracesBrackets",
            "type":"object",
            "properties": {
              "name":{
                "description": "regular expression for key = value name",
                "type": "string"
              },
              "follow":{
                "description": "regular expression for what key = values follow",
                "type": "string"
              }
            }
          },
          "namedGroupingBracesBrackets":{
            "description": "fine tuning, for namedGroupingBracesBrackets",
            "type":"object",
            "properties": {
              "name":{
                "description": "regular expression for named grouping braces name",
                "type": "string"
              },
              "follow":{
                "description": "regular expression for what named grouping braces follow",
                "type": "string"
              }
            }
          },
          "UnNamedGroupingBracesBrackets":{
            "description": "fine tuning, for UnNamedGroupingBracesBrackets",
            "type":"object",
            "properties": {
              "follow":{
                "description": "regular expression for what UN named grouping braces follow",
                "type": "string"
              }
            }
          },
          "arguments":{
            "description": "fine tuning, for arguments",
            "type":"object",
            "properties": {
              "before":{
                "description": "regular expression for what can come BEFORE arguments",
                "type": "string"
              },
              "between":{
                "description": "regular expression for what can come BETWEEN arguments",
                "type": "string"
              }
            }
          },
          "trailingComments":{
            "description": "fine tuning, for trailing comments",
            "type":"object",
            "properties": {
              "notPreceededBy":{
                "description": "regular expression for what can NOT come before %, for example \\%",
                "type": "string"
              }
            }
          },
          "modifyLineBreaks":{
            "description": "fine tuning for some of the -m switch based features",
            "type":"object",
            "properties": {
              "betterFullStop":{
                "description": "regular expression for the 'better full stop' in the one-sentence-per-line routine",
                "type": "string"
              },
              "doubleBackSlash":{
                "description": "regular expression for the double back slash used in the DBS poly-switches",
                "type": "string"
              },
              "comma":{
                "description": "regular expression for the comma used in the comma-based poly-switches",
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
