2025-01-31 17:28:21 +01:00
2025-01-31 17:28:21 +01:00

mini-file-format

Minimalized ini format with concrete format rules. Meant to be easily read and easily parsed. Ends with .mini i.e. config.mini.

Sections and Keys

  • Sections are denoted by square brackets ([Section]).
  • Subsections are nested within sections using dot notation ([Section.Subsection]).
  • All (sub-) sections must be explicitly defined before used elsewhere.
  • All (sub-) sections may only be defined once.
  • (Sub-) sections can be empty.
  • Keys within (sub-) sections use key = value syntax.
  • Key and (sub-) section names may only contain a-z, A-Z, 0-9, and _.
  • Values may never reach over multiple lines.
  • Empty keys (i.e., keys without values) are not allowed.
  • Spaces are ignored as long as they don't split up names or values.
  • Spaces are not allowed during (sub-) section declaration.
  • Empty lines are ignored.
  • Comments are denoted by # and may only appear on separate lines.
  • Cases are sensitive (for both names and values), except where otherwise noted.
  • The underlying size of any type is application specific.
  • The parsing behavior of an illformed file is undefined.

Supported Data Types

The format supports the following data types:

Integer

  • Defined as a sequence of digits (0-9).
  • May be suffixed with x to be interpreted as hexadecimal (0-9, a-f, A-F).
  • May be suffixed with b to be interpreted as binary (0-1).
  • May contain underscores (_) for better readability.
  • Example: value = 5
  • Example: hexValue = FA8x
  • Example: binValue = 0010010b
  • Example: anotherDec = 1_000_375

String

  • Strings are enclosed in double quotes ("").
  • Strings support escape sequences using backslashes (\).
  • Supported escape sequences:
    • \" for a double quote (")
    • \n for a newline
    • \t for a tab
    • \\ for a backslash
  • Strings may be empty.
  • Example: string = "My string"
  • Example: string = "Line 1\nLine 2"
  • Example: string = "Tab\tSeparated"
  • Example: string = "My \"escaped\" String"
  • Example: string = "My string with a \\ <- backslash"
  • Example: emptyString = ""

Array

  • Arrays are enclosed in square brackets ([]) and contain comma-separated values. A space may follow after a comma.
  • Arrays may only contain one datatype at a time.
  • Arrays may be of any positive dimension.
  • Arrays may be of any positive length.
  • Arrays must be consistent in length within each dimension.
  • Arrays may be empty.
  • Example: array = [5, 6, 10]
  • Example: array2d = [[5, 8], [9, 7], [23, 47]]
  • Example: array3d = [[[5, 8], [9, 7], [8, 1]], [[9, 1], [1, 4], [7, 6]]]
  • Example: emptyArray = []

Boolean

  • Boolean values are represented as either true or false.
  • Example: myBool = false

Floating-Point Numbers

  • Floating-point numbers use . for decimal notation or e/E for scientific notation.
  • Floats always end with f.
  • Floats may also be whole numbers without a decimal point.
  • Example: anotherValue = 1.065f
  • Example: thisToo = 1e18f
  • Example: scientificFloat = 1.534E3f
  • Example: wholeFloat = 1f
  • Example: wholeFloat = 5.f

Example Structure

[MySection]
myInteger = 5
myString = "My String"
myArray = [5, 6, 10]
myBool = false

# A comment
[MySection.MySubsection]
myFloat = 1.065f
myFloat2 = 1e18f
hexValue = FA8x

[MySection.MySubsection.AnotherSubsection]
binValue = 0010010b

# Another comment
anotherDec = 1_000_375

What not to do

[My-Section]                 | Invalid character in section name.
myFloat = 1.5                | Does not end with f.
myBool = True                | Should not be capitalized.
myArray = [5, "Hi"]          | Arrays can only contain one datatype at a time.
myArray2 = [[5, 6], 1]       | Technically same as above, dimensions must match across all arrays.
myString = 'Hello'           | Strings may only be encapsulated by ".
my-value = 5                 | Invalid character in key.

[MyOtherSection.Subsection]  | "MyOtherSection" has not been defined before.
myValue = 16 # a comment     | Inline comments are not allowed.
array2d = [[9], [50, 3]]     | Lengths of the arrays in the same dimension don't match.
abc =                        | Keys may not contain empty values

[MyOtherSection]
myArray = [                  | Values may not span over multiple lines.
            [5, 7],
            [9, 2]
          ]
Description
No description provided
Readme 68 KiB