1506 lines
32 KiB
Plaintext
1506 lines
32 KiB
Plaintext
================================================================================
|
|
VALID - comment - basic
|
|
================================================================================
|
|
|
|
# This is a full-line comment
|
|
key = "value" # This is a comment at the end of a line
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - key/value pair - basic
|
|
================================================================================
|
|
|
|
key = "value"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
INVALID - key/value pair - empty value
|
|
================================================================================
|
|
|
|
key = # INVALID
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(ERROR
|
|
(bare_key)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
INVALID - key/value pair - no newline between pairs
|
|
================================================================================
|
|
|
|
first = "Tom" last = "Preston-Werner" # INVALID
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string)
|
|
(MISSING _line_ending_or_eof))
|
|
(pair
|
|
(bare_key)
|
|
(string)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - keys - bare keys
|
|
================================================================================
|
|
|
|
key = "value"
|
|
bare_key = "value"
|
|
bare-key = "value"
|
|
1234 = "value"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - keys - quoted keys
|
|
================================================================================
|
|
|
|
"127.0.0.1" = "value"
|
|
"character encoding" = "value"
|
|
"ʎǝʞ" = "value"
|
|
'key2' = "value"
|
|
'quoted "value"' = "value"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(quoted_key)
|
|
(string))
|
|
(pair
|
|
(quoted_key)
|
|
(string))
|
|
(pair
|
|
(quoted_key)
|
|
(string))
|
|
(pair
|
|
(quoted_key)
|
|
(string))
|
|
(pair
|
|
(quoted_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
INVALID - keys - empty bare key
|
|
================================================================================
|
|
|
|
= "no key name" # INVALID
|
|
"" = "blank" # VALID but discouraged
|
|
'' = 'blank' # VALID but discouraged
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(ERROR)
|
|
(pair
|
|
(quoted_key)
|
|
(comment)
|
|
(ERROR)
|
|
(string)
|
|
(comment))
|
|
(pair
|
|
(quoted_key)
|
|
(string)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - keys - dotted keys
|
|
================================================================================
|
|
|
|
name = "Orange"
|
|
physical.color = "orange"
|
|
physical.shape = "round"
|
|
site."google.com" = true
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(quoted_key))
|
|
(boolean)))
|
|
|
|
================================================================================
|
|
VALID - keys - duplicate keys (semantically INVALID)
|
|
================================================================================
|
|
|
|
# DO NOT DO THIS
|
|
name = "Tom"
|
|
name = "Pradyun"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - keys - directly defined nested keys
|
|
================================================================================
|
|
|
|
# This makes the key "fruit" into a table.
|
|
fruit.apple.smooth = true
|
|
|
|
# So then you can add to the table "fruit" like so:
|
|
fruit.orange = 2
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(boolean))
|
|
(comment)
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(integer)))
|
|
|
|
================================================================================
|
|
VALID - keys - overlapped keys (semantically INVALID)
|
|
================================================================================
|
|
|
|
# THE FOLLOWING IS INVALID
|
|
|
|
# This defines the value of fruit.apple to be an integer.
|
|
fruit.apple = 1
|
|
|
|
# But then this treats fruit.apple like it's a table.
|
|
# You can't turn an integer into a table.
|
|
fruit.apple.smooth = true
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(comment)
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(integer))
|
|
(comment)
|
|
(comment)
|
|
(pair
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(boolean)))
|
|
|
|
================================================================================
|
|
VALID - keys - order
|
|
================================================================================
|
|
|
|
# VALID BUT DISCOURAGED
|
|
|
|
apple.type = "fruit"
|
|
orange.type = "fruit"
|
|
|
|
apple.skin = "thin"
|
|
orange.skin = "thick"
|
|
|
|
apple.color = "red"
|
|
orange.color = "orange"
|
|
|
|
# RECOMMENDED
|
|
|
|
apple.type = "fruit"
|
|
apple.skin = "thin"
|
|
apple.color = "red"
|
|
|
|
orange.type = "fruit"
|
|
orange.skin = "thick"
|
|
orange.color = "orange"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(comment)
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - string - basic strings
|
|
================================================================================
|
|
|
|
str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence))))
|
|
|
|
================================================================================
|
|
VALID - string - multi-line basic strings
|
|
================================================================================
|
|
|
|
str1 = """
|
|
Roses are red
|
|
Violets are blue"""
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - string - multi-line basic strings with trailing backslashes
|
|
================================================================================
|
|
|
|
# The following strings are byte-for-byte equivalent:
|
|
str1 = "The quick brown fox jumps over the lazy dog."
|
|
|
|
str2 = """
|
|
The quick brown \
|
|
|
|
|
|
fox jumps over \
|
|
the lazy dog."""
|
|
|
|
str3 = """\
|
|
The quick brown \
|
|
fox jumps over \
|
|
the lazy dog.\
|
|
"""
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string
|
|
(escape_sequence)
|
|
(escape_sequence)))
|
|
(pair
|
|
(bare_key)
|
|
(string
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence))))
|
|
|
|
================================================================================
|
|
VALID - string - multi-line basic strings with double quotes
|
|
================================================================================
|
|
|
|
str4 = """Here are two quotation marks: "". Simple enough."""
|
|
# str5 = """Here are three quotation marks: """.""" # INVALID
|
|
str5 = """Here are three quotation marks: ""\"."""
|
|
str6 = """Here are fifteen quotation marks: ""\"""\"""\"""\"""\"."""
|
|
|
|
# "This," she said, "is just a pointless statement."
|
|
str7 = """"This," she said, "is just a pointless statement.""""
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string
|
|
(escape_sequence)))
|
|
(pair
|
|
(bare_key)
|
|
(string
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence)
|
|
(escape_sequence)))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - string - literal strings
|
|
================================================================================
|
|
|
|
# What you see is what you get.
|
|
winpath = 'C:\Users\nodejs\templates'
|
|
winpath2 = '\\ServerX\admin$\system32\'
|
|
quoted = 'Tom "Dubs" Preston-Werner'
|
|
regex = '<\i\c*\s*>'
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - string - multi-line literal strings
|
|
================================================================================
|
|
|
|
regex2 = '''I [dw]on't need \d{2} apples'''
|
|
lines = '''
|
|
The first newline is
|
|
trimmed in raw strings.
|
|
All other whitespace
|
|
is preserved.
|
|
'''
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - string - multi-line literal strings with single quotes
|
|
================================================================================
|
|
|
|
quot15 = '''Here are fifteen quotation marks: """""""""""""""'''
|
|
|
|
# apos15 = '''Here are fifteen apostrophes: '''''''''''''''''' # INVALID
|
|
apos15 = "Here are fifteen apostrophes: '''''''''''''''"
|
|
|
|
# 'That's still pointless', she said.
|
|
str = ''''That's still pointless', she said.'''
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
|
|
================================================================================
|
|
VALID - integer - signed/unsigned decimal integer
|
|
================================================================================
|
|
|
|
int1 = +99
|
|
int2 = 42
|
|
int3 = 0
|
|
int4 = -17
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer)))
|
|
|
|
================================================================================
|
|
VALID - integer - decimal integer with underscores
|
|
================================================================================
|
|
|
|
int5 = 1_000
|
|
int6 = 5_349_221
|
|
int7 = 1_2_3_4_5 # VALID but discouraged
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - integer - hexadecimal/octal/binary integer
|
|
================================================================================
|
|
|
|
# hexadecimal with prefix `0x`
|
|
hex1 = 0xDEADBEEF
|
|
hex2 = 0xdeadbeef
|
|
hex3 = 0xdead_beef
|
|
|
|
# octal with prefix `0o`
|
|
oct1 = 0o01234567
|
|
oct2 = 0o755 # useful for Unix file permissions
|
|
|
|
# binary with prefix `0b`
|
|
bin1 = 0b11010110
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer)
|
|
(comment))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(integer)))
|
|
|
|
================================================================================
|
|
VALID - float - float with fractional or exponent or both
|
|
================================================================================
|
|
|
|
# fractional
|
|
flt1 = +1.0
|
|
flt2 = 3.1415
|
|
flt3 = -0.01
|
|
|
|
# exponent
|
|
flt4 = 5e+22
|
|
flt5 = 1e06
|
|
flt6 = -2E-2
|
|
|
|
# both
|
|
flt7 = 6.626e-34
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(float))
|
|
(pair
|
|
(bare_key)
|
|
(float))
|
|
(pair
|
|
(bare_key)
|
|
(float))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(float))
|
|
(pair
|
|
(bare_key)
|
|
(float))
|
|
(pair
|
|
(bare_key)
|
|
(float))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(float)))
|
|
|
|
================================================================================
|
|
VALID - float - float with underscores
|
|
================================================================================
|
|
|
|
flt8 = 224_617.445_991_228
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(float)))
|
|
|
|
================================================================================
|
|
VALID - float - special float values
|
|
================================================================================
|
|
|
|
# infinity
|
|
sf1 = inf # positive infinity
|
|
sf2 = +inf # positive infinity
|
|
sf3 = -inf # negative infinity
|
|
|
|
# not a number
|
|
sf4 = nan # actual sNaN/qNaN encoding is implementation specific
|
|
sf5 = +nan # same as `nan`
|
|
sf6 = -nan # valid, actual encoding is implementation specific
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(float)
|
|
(comment))
|
|
(pair
|
|
(bare_key)
|
|
(float)
|
|
(comment))
|
|
(pair
|
|
(bare_key)
|
|
(float)
|
|
(comment))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(float)
|
|
(comment))
|
|
(pair
|
|
(bare_key)
|
|
(float)
|
|
(comment))
|
|
(pair
|
|
(bare_key)
|
|
(float)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - boolean - basic
|
|
================================================================================
|
|
|
|
bool1 = true
|
|
bool2 = false
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(boolean))
|
|
(pair
|
|
(bare_key)
|
|
(boolean)))
|
|
|
|
================================================================================
|
|
VALID - offset date time - basic
|
|
================================================================================
|
|
|
|
odt1 = 1979-05-27T07:32:00Z
|
|
odt2 = 1979-05-27T00:32:00-07:00
|
|
odt3 = 1979-05-27T00:32:00.999999-07:00
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(offset_date_time))
|
|
(pair
|
|
(bare_key)
|
|
(offset_date_time))
|
|
(pair
|
|
(bare_key)
|
|
(offset_date_time)))
|
|
|
|
================================================================================
|
|
VALID - offset date time - whitespace as delimiter
|
|
================================================================================
|
|
|
|
odt4 = 1979-05-27 07:32:00Z
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(offset_date_time)))
|
|
|
|
================================================================================
|
|
VALID - local date time - basic
|
|
================================================================================
|
|
|
|
ldt1 = 1979-05-27T07:32:00
|
|
ldt2 = 1979-05-27T00:32:00.999999
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(local_date_time))
|
|
(pair
|
|
(bare_key)
|
|
(local_date_time)))
|
|
|
|
================================================================================
|
|
VALID - local date - basic
|
|
================================================================================
|
|
|
|
ld1 = 1979-05-27
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(local_date)))
|
|
|
|
================================================================================
|
|
VALID - local time - basic
|
|
================================================================================
|
|
|
|
lt1 = 07:32:00
|
|
lt2 = 00:32:00.999999
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(local_time))
|
|
(pair
|
|
(bare_key)
|
|
(local_time)))
|
|
|
|
================================================================================
|
|
VALID - array - basic
|
|
================================================================================
|
|
|
|
integers = [ 1, 2, 3 ]
|
|
colors = [ "red", "yellow", "green" ]
|
|
nested_array_of_int = [ [ 1, 2 ], [3, 4, 5] ]
|
|
nested_mixed_array = [ [ 1, 2 ], ["a", "b", "c"] ]
|
|
string_array = [ "all", 'strings', """are the same""", '''type''' ]
|
|
|
|
# Mixed-type arrays are allowed
|
|
numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ]
|
|
contributors = [
|
|
"Foo Bar <foo@example.com>",
|
|
{ name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" }
|
|
]
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(integer)
|
|
(integer)
|
|
(integer)))
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(string)
|
|
(string)
|
|
(string)))
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(array
|
|
(integer)
|
|
(integer))
|
|
(array
|
|
(integer)
|
|
(integer)
|
|
(integer))))
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(array
|
|
(integer)
|
|
(integer))
|
|
(array
|
|
(string)
|
|
(string)
|
|
(string))))
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(string)
|
|
(string)
|
|
(string)
|
|
(string)))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(float)
|
|
(float)
|
|
(float)
|
|
(integer)
|
|
(integer)
|
|
(integer)))
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(string)
|
|
(inline_table
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))))))
|
|
|
|
================================================================================
|
|
VALID - array - allow newlines
|
|
================================================================================
|
|
|
|
integers2 = [
|
|
1, 2, 3
|
|
]
|
|
|
|
integers3 = [
|
|
1,
|
|
2, # this is ok
|
|
]
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(integer)
|
|
(integer)
|
|
(integer)))
|
|
(pair
|
|
(bare_key)
|
|
(array
|
|
(integer)
|
|
(integer)
|
|
(comment))))
|
|
|
|
================================================================================
|
|
VALID - table - header
|
|
================================================================================
|
|
|
|
[table]
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table
|
|
(bare_key)))
|
|
|
|
================================================================================
|
|
VALID - table - basic
|
|
================================================================================
|
|
|
|
[table-1]
|
|
key1 = "some string"
|
|
key2 = 123
|
|
|
|
[table-2]
|
|
key1 = "another string"
|
|
key2 = 456
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(integer)))
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(integer))))
|
|
|
|
================================================================================
|
|
VALID - table - header with dotted key
|
|
================================================================================
|
|
|
|
[dog."tater.man"]
|
|
type.name = "pug"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(quoted_key))
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))))
|
|
|
|
================================================================================
|
|
VALID - table- header with whitespaces
|
|
================================================================================
|
|
|
|
[a.b.c] # this is best practice
|
|
[ d.e.f ] # same as [d.e.f]
|
|
[ g . h . i ] # same as [g.h.i]
|
|
[ j . "ʞ" . 'l' ] # same as [j."ʞ".'l']
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(comment))
|
|
(table
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(comment))
|
|
(table
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(comment))
|
|
(table
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(quoted_key))
|
|
(quoted_key))
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - table - directly defined nested header key
|
|
================================================================================
|
|
|
|
# [x] you
|
|
# [x.y] don't
|
|
# [x.y.z] need these
|
|
[x.y.z.w] # for this to work
|
|
|
|
[x] # defining a super-table afterwards is ok
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(comment)
|
|
(comment)
|
|
(table
|
|
(dotted_key
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(bare_key))
|
|
(comment))
|
|
(table
|
|
(bare_key)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - table - duplicate header key (semantically INVALID)
|
|
================================================================================
|
|
|
|
# DO NOT DO THIS
|
|
|
|
[fruit]
|
|
apple = "red"
|
|
|
|
[fruit]
|
|
orange = "orange"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|
|
|
|
================================================================================
|
|
VALID - table - overlapped header key (semantically INVALID)
|
|
================================================================================
|
|
|
|
# DO NOT DO THIS EITHER
|
|
|
|
[fruit]
|
|
apple = "red"
|
|
|
|
[fruit.apple]
|
|
texture = "smooth"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|
|
|
|
================================================================================
|
|
VALID - table - order
|
|
================================================================================
|
|
|
|
# VALID BUT DISCOURAGED
|
|
[fruit.apple]
|
|
[animal]
|
|
[fruit.orange]
|
|
|
|
# RECOMMENDED
|
|
[fruit.apple]
|
|
[fruit.orange]
|
|
[animal]
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key)))
|
|
(table
|
|
(bare_key))
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(comment))
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key)))
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key)))
|
|
(table
|
|
(bare_key)))
|
|
|
|
================================================================================
|
|
VALID - table - sub-table
|
|
================================================================================
|
|
|
|
[fruit]
|
|
apple.color = "red"
|
|
apple.taste.sweet = true
|
|
|
|
# [fruit.apple] # INVALID
|
|
# [fruit.apple.taste] # INVALID
|
|
|
|
[fruit.apple.texture] # you can add sub-tables
|
|
smooth = true
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(pair
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(boolean))
|
|
(comment)
|
|
(comment))
|
|
(table
|
|
(dotted_key
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(bare_key))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(boolean))))
|
|
|
|
================================================================================
|
|
VALID - inline table - basic
|
|
================================================================================
|
|
|
|
name = { first = "Tom", last = "Preston-Werner" }
|
|
point = { x = 1, y = 2 }
|
|
animal = { type.name = "pug" }
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(pair
|
|
(bare_key)
|
|
(inline_table
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|
|
(pair
|
|
(bare_key)
|
|
(inline_table
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(integer))))
|
|
(pair
|
|
(bare_key)
|
|
(inline_table
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string)))))
|
|
|
|
================================================================================
|
|
VALID - inline table - overlapped key (semantically INVALID)
|
|
================================================================================
|
|
|
|
[product]
|
|
type = { name = "Nail" }
|
|
# type.edible = false # INVALID
|
|
|
|
[product]
|
|
type.name = "Nail"
|
|
# type = { edible = false } # INVALID
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(inline_table
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|
|
(comment))
|
|
(table
|
|
(bare_key)
|
|
(pair
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(string))
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - array of tables - basic
|
|
================================================================================
|
|
|
|
[[products]]
|
|
name = "Hammer"
|
|
sku = 738594937
|
|
|
|
[[products]]
|
|
|
|
[[products]]
|
|
name = "Nail"
|
|
sku = 284758393
|
|
|
|
color = "gray"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table_array_element
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(integer)))
|
|
(table_array_element
|
|
(bare_key))
|
|
(table_array_element
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(integer))
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|
|
|
|
================================================================================
|
|
VALID - array of tables - nested arrays of tables
|
|
================================================================================
|
|
|
|
[[fruit]]
|
|
name = "apple"
|
|
|
|
[fruit.physical] # subtable
|
|
color = "red"
|
|
shape = "round"
|
|
|
|
[[fruit.variety]] # nested array of tables
|
|
name = "red delicious"
|
|
|
|
[[fruit.variety]]
|
|
name = "granny smith"
|
|
|
|
[[fruit]]
|
|
name = "banana"
|
|
|
|
[[fruit.variety]]
|
|
name = "plantain"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(table_array_element
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table_array_element
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table_array_element
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table_array_element
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table_array_element
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|
|
|
|
================================================================================
|
|
VALID - array of tables - append to array in undefined table (semantically INVALID)
|
|
================================================================================
|
|
|
|
# INVALID TOML DOC
|
|
[fruit.physical] # subtable, but to which parent element should it belong?
|
|
color = "red"
|
|
shape = "round"
|
|
|
|
[[fruit]] # parser must throw an error upon discovering that "fruit" is
|
|
# an array rather than a table
|
|
name = "apple"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table_array_element
|
|
(bare_key)
|
|
(comment)
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|
|
|
|
================================================================================
|
|
VALID - array of tables - append to statically defined array (semantically INVALID)
|
|
================================================================================
|
|
|
|
# INVALID TOML DOC
|
|
fruit = []
|
|
|
|
[[fruit]] # Not allowed
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(pair
|
|
(bare_key)
|
|
(array))
|
|
(table_array_element
|
|
(bare_key)
|
|
(comment)))
|
|
|
|
================================================================================
|
|
VALID - array of tables - append to table (semantically INVALID)
|
|
================================================================================
|
|
|
|
# INVALID TOML DOC
|
|
[[fruit]]
|
|
name = "apple"
|
|
|
|
[[fruit.variety]]
|
|
name = "red delicious"
|
|
|
|
# INVALID: This table conflicts with the previous array of tables
|
|
[fruit.variety]
|
|
name = "granny smith"
|
|
|
|
[fruit.physical]
|
|
color = "red"
|
|
shape = "round"
|
|
|
|
# INVALID: This array of tables conflicts with the previous table
|
|
[[fruit.physical]]
|
|
color = "green"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(document
|
|
(comment)
|
|
(table_array_element
|
|
(bare_key)
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table_array_element
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(comment))
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(pair
|
|
(bare_key)
|
|
(string)))
|
|
(table
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(pair
|
|
(bare_key)
|
|
(string))
|
|
(comment))
|
|
(table_array_element
|
|
(dotted_key
|
|
(bare_key)
|
|
(bare_key))
|
|
(pair
|
|
(bare_key)
|
|
(string))))
|