
The current behavior is - If the value contains a double-quote: - 1. Verify that it must contains at least two quotes. - 2. If one of the quotes is the first character, trim it. - 3. If one of the quotes is the last character, trim it. - Else: - 1. Trim a trailing comment from the value. This has the effect that `key = "value" # comment` => `value" #comment` This is surprising and almost certainly not what the user wants. However, it allows simple nested quotes like: `key = "A string "with quotes""` => `A string "with quotes"` Fix the brokenness of the first example at the expense of breaking the second. A user seeking that value will now have to type: key = "A string \"with quotes\"" Do this by treating double-quote as a toggle that simply changes whether `;` and `#` start comments (not too different than Bash using it to toggle field separation). In order to have strings that contain a literal double-quote, add rudimentary support for backslash-escaping. For now, only recognize double-quote and backslash-itself; anything else is undefined; and the program is free to do whatever it likes with them; for now, silently treat the backslash as an ordinary character. Note that this formulation of quoting implies that backslash-escaping works identically both inside and outside of quotes.
47 lines
1.0 KiB
Plaintext
47 lines
1.0 KiB
Plaintext
#General comment
|
|
[bool]
|
|
booltrue = true #This is a test inline comment
|
|
booltrue_capital = TRUE
|
|
|
|
#This is a comment
|
|
boolfalse = false
|
|
boolfalse_capital = FALSE
|
|
|
|
boolyes = yes
|
|
boolyes_capital = YES
|
|
|
|
boolno = no
|
|
boolno_capital = NO
|
|
|
|
boolbin0 = 0
|
|
boolbin1 = 1
|
|
|
|
boolinvalid = invalidbool
|
|
|
|
[string]
|
|
simple = A simple string
|
|
simple_with_hcomment = A simple string # a comment
|
|
simple_with_scomment = A simple string ; a comment
|
|
quoted = "A quoted string"
|
|
quoted_with_hcomment = "A quoted string" # a comment
|
|
quoted_with_scomment = "A quoted string" ; a comment
|
|
quoted_with_quotes = "A string \"with quotes\""
|
|
quoted_with_escapes = "A string \\\"with escapes\\"
|
|
quoted_with_cchar = "A string; with #comment characters" # a comment
|
|
quoted_in_middle = A string"; with #comment" characters # a comment
|
|
escaped_quotes = String \"with quotes\"
|
|
|
|
[int]
|
|
simple = 5
|
|
negative = -10
|
|
decimal = 2.71828
|
|
leading_zeroes = 007
|
|
multi_char = 1024
|
|
|
|
[double]
|
|
simple = 1
|
|
decimal = 1.5
|
|
negative = -1.2
|
|
zeroes = 0.005
|
|
long = 3.141592653589793
|