2015-01-15 14:56:35 -06:00
|
|
|
# Comment
|
|
|
|
# I am a comment. Hear me roar. Roar.
|
|
|
|
|
|
|
|
# Table
|
|
|
|
# Tables (also known as hash tables or dictionaries) are collections of key/value pairs.
|
|
|
|
# They appear in square brackets on a line by themselves.
|
|
|
|
|
|
|
|
[Table]
|
|
|
|
|
|
|
|
key = "value" # Yeah, you can do this.
|
|
|
|
|
|
|
|
# Nested tables are denoted by table names with dots in them. Name your tables whatever crap you please, just don't use #, ., [ or ].
|
|
|
|
|
|
|
|
[dog.tater]
|
|
|
|
type = "pug"
|
|
|
|
|
|
|
|
# You don't need to specify all the super-tables if you don't want to. TOML knows how to do it for you.
|
|
|
|
|
|
|
|
# [x] you
|
|
|
|
# [x.y] don't
|
|
|
|
# [x.y.z] need these
|
|
|
|
[x.y.z.w] # for this to work
|
|
|
|
|
|
|
|
# String
|
|
|
|
# There are four ways to express strings: basic, multi-line basic, literal, and multi-line literal.
|
|
|
|
# All strings must contain only valid UTF-8 characters.
|
|
|
|
|
|
|
|
[String]
|
|
|
|
basic = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."
|
|
|
|
|
|
|
|
[String.Multiline]
|
|
|
|
|
|
|
|
# The following strings are byte-for-byte equivalent:
|
|
|
|
key1 = "One\nTwo"
|
|
|
|
key2 = """One\nTwo"""
|
|
|
|
key3 = """
|
|
|
|
One
|
|
|
|
Two"""
|
|
|
|
|
|
|
|
[String.Multilined.Singleline]
|
|
|
|
|
|
|
|
# The following strings are byte-for-byte equivalent:
|
|
|
|
key1 = "The quick brown fox jumps over the lazy dog."
|
|
|
|
|
|
|
|
key2 = """
|
|
|
|
The quick brown \
|
|
|
|
|
|
|
|
|
|
|
|
fox jumps over \
|
|
|
|
the lazy dog."""
|
|
|
|
|
|
|
|
key3 = """\
|
|
|
|
The quick brown \
|
|
|
|
fox jumps over \
|
|
|
|
the lazy dog.\
|
|
|
|
"""
|
|
|
|
|
|
|
|
[String.Literal]
|
|
|
|
|
|
|
|
# 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*>'
|
|
|
|
|
|
|
|
|
|
|
|
[String.Literal.Multiline]
|
|
|
|
|
|
|
|
regex2 = '''I [dw]on't need \d{2} apples'''
|
|
|
|
lines = '''
|
|
|
|
The first newline is
|
|
|
|
trimmed in raw strings.
|
|
|
|
All other whitespace
|
|
|
|
is preserved.
|
|
|
|
'''
|
|
|
|
|
|
|
|
# Integer
|
|
|
|
# Integers are whole numbers. Positive numbers may be prefixed with a plus sign.
|
|
|
|
# Negative numbers are prefixed with a minus sign.
|
|
|
|
|
|
|
|
[Integer]
|
2015-01-15 16:27:55 -06:00
|
|
|
key1 = +99
|
2015-01-15 14:56:35 -06:00
|
|
|
key2 = 42
|
|
|
|
key3 = 0
|
|
|
|
key4 = -17
|
|
|
|
|
|
|
|
# Float
|
|
|
|
# A float consists of an integer part (which may be prefixed with a plus or minus sign)
|
|
|
|
# followed by a fractional part and/or an exponent part.
|
|
|
|
|
|
|
|
[Float.fractional]
|
|
|
|
|
|
|
|
# fractional
|
2015-01-15 16:27:55 -06:00
|
|
|
key1 = +1.0
|
2015-01-15 14:56:35 -06:00
|
|
|
key2 = 3.1415
|
|
|
|
key3 = -0.01
|
|
|
|
|
|
|
|
[Float.exponent]
|
|
|
|
|
|
|
|
# exponent
|
|
|
|
#key1 = 5e+22
|
|
|
|
#key2 = 1e6
|
|
|
|
#key3 = -2E-2
|
|
|
|
|
|
|
|
[Float.both]
|
|
|
|
|
|
|
|
# both
|
|
|
|
#key = 6.626e-34
|
|
|
|
|
|
|
|
# Boolean
|
|
|
|
# Booleans are just the tokens you're used to. Always lowercase.
|
|
|
|
|
|
|
|
[Booleans]
|
|
|
|
True = true
|
|
|
|
False = false
|
|
|
|
|
|
|
|
# Datetime
|
|
|
|
# Datetimes are RFC 3339 dates.
|
|
|
|
|
|
|
|
[Datetime]
|
|
|
|
key1 = 1979-05-27T07:32:00Z
|
|
|
|
#key2 = 1979-05-27T00:32:00-07:00
|
|
|
|
#key3 = 1979-05-27T00:32:00.999999-07:00
|
|
|
|
|
|
|
|
# Array
|
|
|
|
# Arrays are square brackets with other primitives inside. Whitespace is ignored. Elements are separated by commas. Data types may not be mixed.
|
|
|
|
|
|
|
|
[Array]
|
|
|
|
key1 = [ 1, 2, 3 ]
|
|
|
|
key2 = [ "red", "yellow", "green" ]
|
|
|
|
key3 = [ [ 1, 2 ], [3, 4, 5] ]
|
|
|
|
key4 = [ [ 1, 2 ], ["a", "b", "c"] ] # this is ok
|
|
|
|
|
|
|
|
#Arrays can also be multiline. So in addition to ignoring whitespace, arrays also ignore newlines between the brackets.
|
|
|
|
# Terminating commas are ok before the closing bracket.
|
|
|
|
|
|
|
|
key5 = [
|
|
|
|
1, 2, 3
|
|
|
|
]
|
|
|
|
key6 = [
|
|
|
|
1,
|
|
|
|
2, # this is ok
|
|
|
|
]
|
|
|
|
|
|
|
|
# Array of Tables
|
|
|
|
# These can be expressed by using a table name in double brackets.
|
|
|
|
# Each table with the same double bracketed name will be an element in the array.
|
|
|
|
# The tables are inserted in the order encountered.
|
|
|
|
|
|
|
|
[[products]]
|
|
|
|
name = "Hammer"
|
|
|
|
sku = 738594937
|
|
|
|
|
|
|
|
[[products]]
|
|
|
|
|
|
|
|
[[products]]
|
|
|
|
name = "Nail"
|
|
|
|
sku = 284758393
|
|
|
|
color = "gray"
|
|
|
|
|
|
|
|
|
|
|
|
# You can create nested arrays of tables as well.
|
|
|
|
|
|
|
|
[[fruit]]
|
|
|
|
name = "apple"
|
|
|
|
|
|
|
|
[fruit.physical]
|
|
|
|
color = "red"
|
|
|
|
shape = "round"
|
|
|
|
|
|
|
|
[[fruit.variety]]
|
|
|
|
name = "red delicious"
|
|
|
|
|
|
|
|
[[fruit.variety]]
|
|
|
|
name = "granny smith"
|
|
|
|
|
|
|
|
[[fruit]]
|
|
|
|
name = "banana"
|
|
|
|
|
|
|
|
[[fruit.variety]]
|
|
|
|
name = "plantain"
|
|
|
|
|