% Figtree # Figtree Figtree is a file-format designed for configuration files. It allows for multiple, nested sections, many data-types included dict and list container types, and attempts to be expressive and useable for human maintainers. A figtree file (`.ft`) looks a bit like this: ```javascript // C-style inline comments and block comments are allowed /* block comments /* can be */ nested */ myconfig { // Nodes consist of an identifier followed by a brace-block. // Each node can have a number of key-value attributes attached. // Keys must be strings, but values can be any type. identifiers { // Figtree uses Swift's rules for identifiers, which means that emojii are // allowed. Additionally, `quoted identifiers` can also be used if an identifier // is wanted that contains disallowed characters 🐶 { /* emojii dog */ } underscores_allowed {} numbers_allowed_345 { /* except as the first character */ } } value_types { // strings can be written with single or double quotes // multiple string literals in a row will be concatenated together // strings can span multiple lines "strings": "with single" ' or double ' "quotes" // this is equivalent to "with single or double quotes" // integers can be written using standard numerals // or by prefixing with 0[xdob] for hexadecimal, decimal, octal, or binary "integers": [+34, -42, 0x4f, 0d34, 0o42, 0b1010] // floats can only be written in decimal // floats can have exponents using either 'e' or 'E' "floats": [3.4, .5, 8.e4, -4.5, +4.5E4] // booleans are either 'true' or 'false' "booleans": [true, false] // really not much else here... // identifiers can be used as values by prefixing with an exclamation point (!) // idents can be used much like strings, but can be given special meaning "identifiers": [!ident, !false, !`quoted using \` characters`] // lists are pairs of brackets that contain comma-separated values // trailing commas are allowed "lists": [["nested"], [["lists"], "are"], "allowed",] // dicts are pairs of braces that contain comma-separated key-value pairs // keys must always be strings // trailing commas are allowed "dicts": { "dicts": { "can": !also }, "be": "nested" } } }