diff options
author | Romain d'Alverny <rda@mageia.org> | 2012-05-14 09:16:32 +0000 |
---|---|---|
committer | Romain d'Alverny <rda@mageia.org> | 2012-05-14 09:16:32 +0000 |
commit | 6eda908cfd5d885d5740bc4821dfb524c9e7a436 (patch) | |
tree | c02bc0a26cf954be14186091738eee56fbc5926e /lib/fabpot-yaml/doc/02-YAML.markdown | |
parent | 948f9d8ef1c3f688a688f99ed17974eb87b3d984 (diff) | |
download | fidd-6eda908cfd5d885d5740bc4821dfb524c9e7a436.tar fidd-6eda908cfd5d885d5740bc4821dfb524c9e7a436.tar.gz fidd-6eda908cfd5d885d5740bc4821dfb524c9e7a436.tar.bz2 fidd-6eda908cfd5d885d5740bc4821dfb524c9e7a436.tar.xz fidd-6eda908cfd5d885d5740bc4821dfb524c9e7a436.zip |
add library and var dir
Diffstat (limited to 'lib/fabpot-yaml/doc/02-YAML.markdown')
-rw-r--r-- | lib/fabpot-yaml/doc/02-YAML.markdown | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/lib/fabpot-yaml/doc/02-YAML.markdown b/lib/fabpot-yaml/doc/02-YAML.markdown new file mode 100644 index 0000000..a64c19e --- /dev/null +++ b/lib/fabpot-yaml/doc/02-YAML.markdown @@ -0,0 +1,312 @@ +The YAML Format +=============== + +According to the official [YAML](http://yaml.org/) website, YAML is "a human +friendly data serialization standard for all programming languages". + +Even if the YAML format can describe complex nested data structure, this +chapter only describes the minimum set of features needed to use YAML as a +configuration file format. + +YAML is a simple language that describes data. As PHP, it has a syntax for +simple types like strings, booleans, floats, or integers. But unlike PHP, it +makes a difference between arrays (sequences) and hashes (mappings). + +Scalars +------- + +The syntax for scalars is similar to the PHP syntax. + +### Strings + + [yml] + A string in YAML + +- + + [yml] + 'A singled-quoted string in YAML' + +>**TIP** +>In a single quoted string, a single quote `'` must be doubled: +> +> [yml] +> 'A single quote '' in a single-quoted string' + + [yml] + "A double-quoted string in YAML\n" + +Quoted styles are useful when a string starts or ends with one or more +relevant spaces. + +>**TIP** +>The double-quoted style provides a way to express arbitrary strings, by +>using `\` escape sequences. It is very useful when you need to embed a +>`\n` or a unicode character in a string. + +When a string contains line breaks, you can use the literal style, indicated +by the pipe (`|`), to indicate that the string will span several lines. In +literals, newlines are preserved: + + [yml] + | + \/ /| |\/| | + / / | | | |__ + +Alternatively, strings can be written with the folded style, denoted by `>`, +where each line break is replaced by a space: + + [yml] + > + This is a very long sentence + that spans several lines in the YAML + but which will be rendered as a string + without carriage returns. + +>**NOTE** +>Notice the two spaces before each line in the previous examples. They +>won't appear in the resulting PHP strings. + +### Numbers + + [yml] + # an integer + 12 + +- + + [yml] + # an octal + 014 + +- + + [yml] + # an hexadecimal + 0xC + +- + + [yml] + # a float + 13.4 + +- + + [yml] + # an exponential number + 1.2e+34 + +- + + [yml] + # infinity + .inf + +### Nulls + +Nulls in YAML can be expressed with `null` or `~`. + +### Booleans + +Booleans in YAML are expressed with `true` and `false`. + +>**NOTE** +>The symfony YAML parser also recognize `on`, `off`, `yes`, and `no` but +>it is strongly discouraged to use them as it has been removed from the +>1.2 YAML specifications. + +### Dates + +YAML uses the ISO-8601 standard to express dates: + + [yml] + 2001-12-14t21:59:43.10-05:00 + +- + + [yml] + # simple date + 2002-12-14 + +Collections +----------- + +A YAML file is rarely used to describe a simple scalar. Most of the time, it +describes a collection. A collection can be a sequence or a mapping of +elements. Both sequences and mappings are converted to PHP arrays. + +Sequences use a dash followed by a space (`- `): + + [yml] + - PHP + - Perl + - Python + +The previous YAML file is equivalent to the following PHP code: + + [php] + array('PHP', 'Perl', 'Python'); + +Mappings use a colon followed by a space (`: `) to mark each key/value pair: + + [yml] + PHP: 5.2 + MySQL: 5.1 + Apache: 2.2.20 + +which is equivalent to this PHP code: + + [php] + array('PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20'); + +>**NOTE** +>In a mapping, a key can be any valid scalar. + +The number of spaces between the colon and the value does not matter: + + [yml] + PHP: 5.2 + MySQL: 5.1 + Apache: 2.2.20 + +YAML uses indentation with one or more spaces to describe nested collections: + + [yml] + "symfony 1.0": + PHP: 5.0 + Propel: 1.2 + "symfony 1.2": + PHP: 5.2 + Propel: 1.3 + +The following YAML is equivalent to the following PHP code: + + [php] + array( + 'symfony 1.0' => array( + 'PHP' => 5.0, + 'Propel' => 1.2, + ), + 'symfony 1.2' => array( + 'PHP' => 5.2, + 'Propel' => 1.3, + ), + ); + +There is one important thing you need to remember when using indentation in a +YAML file: *Indentation must be done with one or more spaces, but never with +tabulations*. + +You can nest sequences and mappings as you like: + + [yml] + 'Chapter 1': + - Introduction + - Event Types + 'Chapter 2': + - Introduction + - Helpers + +YAML can also use flow styles for collections, using explicit indicators +rather than indentation to denote scope. + +A sequence can be written as a comma separated list within square brackets +(`[]`): + + [yml] + [PHP, Perl, Python] + +A mapping can be written as a comma separated list of key/values within curly +braces (`{}`): + + [yml] + { PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 } + +You can mix and match styles to achieve a better readability: + + [yml] + 'Chapter 1': [Introduction, Event Types] + 'Chapter 2': [Introduction, Helpers] + +- + + [yml] + "symfony 1.0": { PHP: 5.0, Propel: 1.2 } + "symfony 1.2": { PHP: 5.2, Propel: 1.3 } + +Comments +-------- + +Comments can be added in YAML by prefixing them with a hash mark (`#`): + + [yml] + # Comment on a line + "symfony 1.0": { PHP: 5.0, Propel: 1.2 } # Comment at the end of a line + "symfony 1.2": { PHP: 5.2, Propel: 1.3 } + +>**NOTE** +>Comments are simply ignored by the YAML parser and do not need to be +>indented according to the current level of nesting in a collection. + +Dynamic YAML files +------------------ + +In symfony, a YAML file can contain PHP code that is evaluated just before the +parsing occurs: + + [php] + 1.0: + version: <?php echo file_get_contents('1.0/VERSION')."\n" ?> + 1.1: + version: "<?php echo file_get_contents('1.1/VERSION') ?>" + +Be careful to not mess up with the indentation. Keep in mind the following +simple tips when adding PHP code to a YAML file: + + * The `<?php ?>` statements must always start the line or be embedded in a + value. + + * If a `<?php ?>` statement ends a line, you need to explicitly output a new + line ("\n"). + +<div class="pagebreak"></div> + +A Full Length Example +--------------------- + +The following example illustrates most YAML notations explained in this +document: + + [yml] + "symfony 1.0": + end_of_maintainance: 2010-01-01 + is_stable: true + release_manager: "Grégoire Hubert" + description: > + This stable version is the right choice for projects + that need to be maintained for a long period of time. + latest_beta: ~ + latest_minor: 1.0.20 + supported_orms: [Propel] + archives: { source: [zip, tgz], sandbox: [zip, tgz] } + + "symfony 1.2": + end_of_maintainance: 2008-11-01 + is_stable: true + release_manager: 'Fabian Lange' + description: > + This stable version is the right choice + if you start a new project today. + latest_beta: null + latest_minor: 1.2.5 + supported_orms: + - Propel + - Doctrine + archives: + source: + - zip + - tgz + sandbox: + - zip + - tgz |