Browse files

Minor spec editing

  • Loading branch information...
1 parent 47e168a commit 27096e262f6f6d784b463bc71d2da43a64133d99 @havocp havocp committed Apr 6, 2012
Showing with 11 additions and 9 deletions.
  1. +11 −9
@@ -128,7 +128,7 @@ While all Unicode separators should be treated as whitespace, in
this spec "newline" refers only and specifically to ASCII newline
-### Duplicate keys
+### Duplicate keys and object merging
The JSON spec does not clarify how duplicate keys in the same
object should be handled. In HOCON, duplicate keys that appear
@@ -204,7 +204,8 @@ unquoted string.
unquoted string `foo`. However, `footrue` parses as the unquoted
string `footrue`. Similarly, `10.0bar` is the number `10.0` then
the unquoted string `bar` but `bar10.0` is the unquoted string
+`bar10.0`. (In practice, this distinction doesn't matter much
+because of value concatenation; see later section.)
In general, once an unquoted string begins, it continues until a
forbidden character or the two-character string "//" is
@@ -242,9 +243,9 @@ concatenation:
- if all the values are objects, they are merged (as with
duplicate keys) into one object.
-String value concatenation is allowed in object field keys, in
-addition to object field values and array elements. Objects and
-arrays do not make sense as object field keys.
+String value concatenation is allowed in field keys, in addition
+to field values and array elements. Objects and arrays do not make
+sense as field keys.
#### String value concatenation
@@ -316,7 +317,7 @@ For purposes of concatenation, "array" also means "substitution
that resolves to an array" and "object" also means "substitution
that resolves to an object."
-Within an object field value or array element, if only non-newline
+Within an field value or array element, if only non-newline
whitespace separates the end of a first array or object or
substitution from the start of a second array or object or
substitution, the two values are concatenated. Newlines may occur
@@ -357,8 +358,8 @@ A common use of object concatenation is "inheritance":
A common use of array concatenation is to add to paths:
- path = [ /bin ]
- path = ${path} [ /usr/bin ]
+ path = [ /bin ]
+ path = ${path} [ /usr/bin ]
#### Note: Arrays without commas or newlines
@@ -557,7 +558,7 @@ If a substitution with the `${?foo}` syntax is undefined:
concatenation so if `bar` or `baz` are not defined, the result
is an empty string.
-Substitutions are only allowed in object field values and array
+Substitutions are only allowed in field values and array
elements (value concatenations), they are not allowed in keys or
nested inside other substitutions (path expressions).
@@ -595,6 +596,7 @@ Examples of self-referential fields:
- `a : ${a}`
- `a : ${a}bc`
+ - `path : ${path} [ /usr/bin ]`
Note that an object or array with a substitution inside it is
_not_ considered self-referential for this purpose. The

0 comments on commit 27096e2

Please sign in to comment.