ECF (Easy Configuration Format) Specification

In ECF, a file is started with a format specifier, followed by any number of "entries",
where each entry is either an empty line, a key-value pair (aka a "setting"), or a
comment. All lines of input text have their leading and trailing whitespace trimmed,
except for the contents of multiline string values, where only the leading whitespace is
trimmed, and the contents of multiline comments, where no whitespace is trimmed.

A format specifier is a line of text that starts with "format " and is followed by an
integer that defined that version of the file's data.

A setting entry consists of a key (any key-unique text that doesn't contain any newlines
or colons), then a colon, then (optionally) whitespace, then a value (with no other
trailing characters). A value can be the text "empty" (non-case-dependant) for an empty
value, or "true" or "false" (again, non-case-dependant) for a boolean value, or a 64-bit
singed int, or a 64-bit floating point number, or text enclosed in quotation marks for a
single-line string, or just a quotation mark to start a multi-line string.

Multiline strings store the text data only in the lines following the start of the value,
and each line starts with a quotation mark. The data of a multiline string stops once a
line is encountered which does not start with a quotation mark. For example, the text
'line1\nline2' with the key 'ex key' would be stored as 'ex key: "\n"line1\n"line2'. This
is the definition so that no escape sequences are required.

A comment entry starts with either "#" for a single-line comment, or "##" for a multiline
comment. Multiline comments start and end with lines which are nothing but "##", and
everything between those two lines are the contents of the comment.

Additional notes:
- Every invalid line of text should be converted to a single-line comment when parsed.
- When formatting data from a layout and key-value pairs, any pairs whose keys are not
	specified in the layout should be added to the end of the formatted text



COMMON PRACTICES

To define namespaces, every key in the namespace should start with the namespace's name,
directly followed by a period, then directly followed by the key's name. To have nested
namespaces, just continue adding each namespace's name with a period after each name. For
example, the key "example key" within the namespace "nested namespace" within the
namespace "outer namespace" should be "outer namespace.nested namespace.example key".

To define data structures, such as structs, arrays, etc, simply use namespaces. For
example, a list of customers should be defined as follows:

customers.0.name: "example customer 1"
customers.0.id: 1234
customers.1.name: "example customer 2"
customers.1.id: 4321
