1. If indentation is significant and required, dotted notation should be optional:
[foo]
[bar]
[car]
The parser should be able to understand that this results in a foo.bar.car structure without explicitly using dotted notation in the keys.2. Support include files. With #1 implemented, includes would be extremely powerful and flexible. Since indentation is required, no special syntax is needed to relatively position the included files. And without requiring dotted notation in keys, include files can be reused in a configuration (such as common settings in the [servers] section of the example).
I personally never jumped on YAML or JSON. I liked that they weren't XML, but they each felt like XML++ too much for me. There was still too much, I don't know, weirdness/typing/oops! Don't get me wrong, I think they were better than XML, but only marginally. It would be nice to see more of a phase change type of approach. I'd LOVE to see something like this (or something else) that involves much less typing/special characters/etc than YAML and JSON.
Personal opinion.
value = "example # no that's not a comment" # but here's one
If inline comments where not allowed we could just check the first and last character for a quote and we know we have a string, same for arrays (check for [ and ]). But with inline comments, we need to parse the whole string.As far as I can see both the C# and Python parsers don't handle this kind of comment correctly at the moment, and probably many implementations will have troubles with that. They should just drop this option in my opinion.
>>> value = "example # no that's not a comment" # but here's one
>>> value
"example # no that's not a comment"It seems there are now several other Python parsers, so some of them are probably getting it right.
Personally, of course, I think we should just use a slightly modified version of s-exprs which would be easier to parse.
(:keyword value)
where value can be an atom, list of atoms or a list of keyword value pairs. Comments could follow the Lisp convention and start with semi-colon and end with newline. Only 5 characters to escape, namely, '(', ')', ':', ' ' and ';'.
Can you tell at a glance what is wrong with this YAML snippet:
scandinavia:
SE: Sweden
NO: Norway
FI: FinlandBut I think the "square bracket list" things only ever occur in value position, and the headers only ever occur in root position, so it's not that hard.
I had to spend half an hour debugging a bizarre side effect of that parsing to pinpoint the problem.
Edit, holy fuck all these are booleans:
y|Y|yes|Yes|YES|n|N|no|No|NO |true|True|TRUE|false|False|FALSE |on|On|ON|off|Off|OFF
kittyBreeds = ["Himalayan"
,"Bengal"
,"Siamese"
,"Burmese"
,"Cornish Rex" //rawr
,"LaPerm"
,"Manx"
//This is not a real cat! >:(
// ,"lolcat"
,"Munchkin"
,"Ocicat"
];
In this way the issue with the commas is relegated to the first element, rather than the last. Since appending is more common, this seems a better style.In other words, you know you're just gonna end up with this in your code after a few months:
kittyBreeds = ["Himalayan", ,"Bengal", "Siamese", "Cornish Rex", ,"Manx"]
and not only is it now even worse for changing lines (correcting it and adding another will be -1+3 instead of just -1+2, the optimal +1 a distant memory), but it's just plain a mess and probably people don't know why they need to do it.