Index: /pysyck/tags/0.61.1/lib/syck/loaders.py
===================================================================
--- /pysyck/tags/0.61.1/lib/syck/loaders.py	(revision 49)
+++ /pysyck/tags/0.61.1/lib/syck/loaders.py	(revision 49)
@@ -0,0 +1,427 @@
+"""
+syck.loaders is a high-level wrapper for the Syck YAML parser.
+Do not use it directly, use the module 'syck' instead.
+"""
+
+# Python 2.2 compatibility
+from __future__ import generators
+
+try:
+    import datetime
+except ImportError:
+    pass
+
+try:
+    Set = set
+except:
+    try:
+        from sets import Set
+    except ImportError:
+        def Set(items):
+            set = {}
+            for items in items:
+                set[items] = None
+            return set
+
+import _syck
+
+import sys, re, warnings
+
+__all__ = ['GenericLoader', 'Loader',
+    'parse', 'load', 'parse_documents', 'load_documents',
+    'NotUnicodeInputWarning']
+
+class NotUnicodeInputWarning(UserWarning):
+    pass
+
+class GenericLoader(_syck.Parser):
+    """
+    GenericLoader constructs primitive Python objects from YAML documents.
+    """
+
+    def load(self):
+        """
+        Loads a YAML document from the source and return a native Python
+        object. On EOF, returns None and set the eof attribute on.
+        """
+        node = self.parse()
+        if self.eof:
+            return
+        return self._convert(node, {})
+
+    def _convert(self, node, node_to_object):
+        if node in node_to_object:
+            return node_to_object[node]
+        value = None
+        if node.kind == 'scalar':
+            value = node.value
+        elif node.kind == 'seq':
+            value = []
+            for item_node in node.value:
+                value.append(self._convert(item_node, node_to_object))
+        elif node.kind == 'map':
+            value = {}
+            for key_node in node.value:
+                key_object = self._convert(key_node, node_to_object)
+                value_object = self._convert(node.value[key_node],
+                        node_to_object)
+                try:
+                    if key_object in value:
+                        value = None
+                        break
+                    value[key_object] = value_object
+                except TypeError:
+                    value = None
+                    break
+            if value is None:
+                value = []
+                for key_node in node.value:
+                    key_object = self._convert(key_node, node_to_object)
+                    value_object = self._convert(node.value[key_node],
+                            node_to_object)
+                value.append((key_object, value_object))
+        node.value = value
+        object = self.construct(node)
+        node_to_object[node] = object
+        return object
+
+    def construct(self, node):
+        """Constructs a Python object by the given node."""
+        return node.value
+
+class Merge:
+    """Represents the merge key '<<'."""
+    pass
+
+class Default:
+    """Represents the default key '='."""
+    pass
+
+class Loader(GenericLoader):
+    """
+    Loader constructs native Python objects from YAML documents.
+    """
+
+    inf_value = 1e300000
+    nan_value = inf_value/inf_value
+
+    timestamp_expr = re.compile(r'(?P<year>\d\d\d\d)-(?P<month>\d\d)-(?P<day>\d\d)'
+            r'(?:'
+                r'(?:[Tt]|[ \t]+)(?P<hour>\d\d):(?P<minute>\d\d):(?P<second>\d\d)'
+                r'(?:\.(?P<micro>\d+)?)?'
+                r'[ \t]*(?:Z|(?P<zhour>[+-]\d\d)(?::(?P<zminute>\d\d))?)?'
+            r')?')
+
+    merge_key = Merge()
+    default_key = Default()
+
+    non_ascii = []
+    for i in range(256):
+        ch = chr(i)
+        if ch.isalnum():
+            non_ascii.append(ch)
+        else:
+            non_ascii.append('_')
+    non_ascii = ''.join(non_ascii)
+
+    python_bools = {'True': True, 'False': False}
+
+    class python_class:
+        pass
+
+    def find_constructor(self, node):
+        """
+        Returns the contructor for generating a Python object for the given
+        node.
+
+        The node tags are mapped to constructors by the following rule:
+
+        Tag                             Constructor
+        ---                             -----------
+        tag:yaml.org,2002:type          construct_type
+        tag:python.yaml.org,2002:type   construct_python_type
+        x-private:type                  construct_private_type
+        tag:domain.tld,2002:type        construct_domain_tld_2002_type
+
+        See the method code for more details.
+        """
+        parts = []
+        if node.tag:
+            parts = node.tag.split(':')
+        if parts:
+            if parts[0] == 'tag':
+                parts.pop(0)
+                if parts:
+                    if parts[0] == 'yaml.org,2002':
+                        parts.pop(0)
+                    elif parts[0] == 'python.yaml.org,2002':
+                        parts[0] = 'python'
+            elif parts[0] == 'x-private':
+                parts[0] = 'private'
+        parts = [part.translate(self.non_ascii) for part in parts]
+        while parts:
+            method = 'construct_'+'_'.join(parts)
+            if hasattr(self, method):
+                return getattr(self, method)
+            parts.pop()
+
+    def construct(self, node):
+        """Constructs a Python object by the given node."""
+        if node.kind == 'map' and self.merge_key in node.value:
+            self.merge_maps(node)
+        constructor = self.find_constructor(node)
+        if constructor:
+            return constructor(node)
+        else:
+            return node.value
+
+    def construct_null(self, node):
+        return None
+
+    def construct_bool_yes(self, node):
+        return True
+
+    def construct_bool_no(self, node):
+        return False
+
+    def construct_str(self, node):
+        try:
+            value = unicode(node.value, 'utf-8')
+        except UnicodeDecodeError:
+            warnings.warn("scalar value is not utf-8", NotUnicodeInputWarning)
+            return node.value
+        try:
+            return value.encode('ascii')
+        except UnicodeEncodeError:
+            return value
+
+    def construct_numeric_base60(self, num_type, node):
+        digits = [num_type(part) for part in node.value.split(':')]
+        digits.reverse()
+        base = 1
+        value = num_type(0)
+        for digit in digits:
+            value += digit*base
+            base *= 60
+        return value
+
+    def construct_int(self, node):
+        return int(node.value)
+
+    def construct_int_hex(self, node):
+        return int(node.value, 16)
+
+    def construct_int_oct(self, node):
+        return int(node.value, 8)
+
+    def construct_int_base60(self, node):
+        return self.construct_numeric_base60(int, node)
+
+    def construct_float(self, node):
+        return float(node.value)
+    construct_float_fix = construct_float
+    construct_float_exp = construct_float
+
+    def construct_float_base60(self, node):
+        return self.construct_numeric_base60(float, node)
+
+    def construct_float_inf(self, node):
+        return self.inf_value
+
+    def construct_float_neginf(self, node):
+        return -self.inf_value
+
+    def construct_float_nan(self, node):
+        return self.nan_value
+
+    def construct_binary(self, node):
+        return node.value.decode('base64')
+
+    def construct_timestamp(self, node):
+        match = self.timestamp_expr.match(node.value)
+        values = match.groupdict()
+        for key in values:
+            if values[key]:
+                values[key] = int(values[key])
+            else:
+                values[key] = 0
+        micro = values['micro']
+        if micro:
+            while 10*micro < 1000000:
+                micro *= 10
+        stamp = datetime.datetime(values['year'], values['month'], values['day'],
+                values['hour'], values['minute'], values['second'], micro)
+        diff = datetime.timedelta(hours=values['zhour'], minutes=values['zminute'])
+        return stamp-diff
+    construct_timestamp_ymd = construct_timestamp
+    construct_timestamp_iso8601 = construct_timestamp
+    construct_timestamp_spaced = construct_timestamp
+
+    def construct_merge(self, node):
+        return self.merge_key
+
+    def construct_default(self, node):
+        return self.default_key
+
+    def merge_maps(self, node):
+        maps = node.value[self.merge_key]
+        del node.value[self.merge_key]
+        if not isinstance(maps, list):
+            maps = [maps]
+        maps.reverse()
+        maps.append(node.value.copy())
+        for item in maps:
+            node.value.update(item)
+
+    def construct_omap(self, node):
+        omap = []
+        for mapping in node.value:
+            for key in mapping:
+                omap.append((key, mapping[key]))
+        return omap
+
+    def construct_pairs(self, node): # Same as construct_omap.
+        pairs = []
+        for mapping in node.value:
+            for key in mapping:
+                pairs.append((key, mapping[key]))
+        return pairs
+
+    def construct_set(self, node):
+        return Set(node.value)
+
+    def construct_python_none(self, node):
+        return None
+
+    def construct_python_bool(self, node):
+        return self.python_bools[node.value]
+
+    def construct_python_int(self, node):
+        return int(node.value)
+
+    def construct_python_long(self, node):
+        return long(node.value)
+
+    def construct_python_float(self, node):
+        return float(node.value)
+
+    def construct_python_complex(self, node):
+        return complex(node.value)
+
+    def construct_python_str(self, node):
+        return str(node.value)
+
+    def construct_python_unicode(self, node):
+        return unicode(node.value, 'utf-8')
+
+    def construct_python_list(self, node):
+        return node.value
+
+    def construct_python_tuple(self, node):
+        return tuple(node.value)
+
+    def construct_python_dict(self, node):
+        return node.value
+
+    def find_python_object(self, node):
+        full_name = node.tag.split(':')[3]
+        parts = full_name.split('.')
+        object_name = parts.pop()
+        module_name = '.'.join(parts)
+        if not module_name:
+            module_name = '__builtin__'
+        else:
+            __import__(module_name)
+        return getattr(sys.modules[module_name], object_name)
+
+    def find_python_state(self, node):
+        if node.kind == 'seq':
+            args = node.value
+            kwds = {}
+            state = {}
+        else:
+            args = node.value.get('args', [])
+            kwds = node.value.get('kwds', {})
+            state = node.value.get('state', {})
+        return args, kwds, state
+
+    def set_python_state(self, object, state):
+        if hasattr(object, '__setstate__'):
+            object.__setstate__(state)
+        else:
+            slotstate = {}
+            if isinstance(state, tuple) and len(state) == 2:
+                state, slotstate = state
+            if hasattr(object, '__dict__'):
+                object.__dict__.update(state)
+            elif state:
+                slotstate.update(state)
+            for key, value in slotstate.items():
+                setattr(object, key, value)
+
+    def construct_python_name(self, node):
+        return self.find_python_object(node)
+
+    def construct_python_module(self, node):
+        module_name = node.tag.split(':')[3]
+        __import__(module_name)
+        return sys.modules[module_name]
+
+    def construct_python_object(self, node):
+        cls = self.find_python_object(node)
+        if type(cls) is type(self.python_class):
+            if hasattr(cls, '__getnewargs__'):
+                object = cls()
+            else:
+                object = self.python_class()
+                object.__class__ = cls
+        else:
+            object = cls.__new__(cls)
+        self.set_python_state(object, node.value)
+        return object
+
+    def construct_python_new(self, node):
+        cls = self.find_python_object(node)
+        args, kwds, state = self.find_python_state(node)
+        if type(cls) is type(self.python_class):
+            object = cls(*args, **kwds)
+        else:
+            object = cls.__new__(cls, *args, **kwds)
+        self.set_python_state(object, state)
+        return object
+
+    def construct_python_apply(self, node):
+        constructor = self.find_python_object(node)
+        args, kwds, state = self.find_python_state(node)
+        object = constructor(*args, **kwds)
+        self.set_python_state(object, state)
+        return object
+
+def parse(source, Loader=Loader, **parameters):
+    """Parses 'source' and returns the root of the 'Node' graph."""
+    loader = Loader(source, **parameters)
+    return loader.parse()
+
+def load(source, Loader=Loader, **parameters):
+    """Parses 'source' and returns the root object."""
+    loader = Loader(source, **parameters)
+    return loader.load()
+
+def parse_documents(source, Loader=Loader, **parameters):
+    """Iterates over 'source' and yields the root 'Node' for each document."""
+    loader = Loader(source, **parameters)
+    while True:
+        node = loader.parse()
+        if loader.eof:
+            break
+        yield node
+
+def load_documents(source, Loader=Loader, **parameters):
+    """Iterates over 'source' and yields the root object for each document."""
+    loader = Loader(source, **parameters)
+    while True:
+        object = loader.load()
+        if loader.eof:
+            break
+        yield object
+
Index: /pysyck/tags/0.61.1/lib/syck/__init__.py
===================================================================
--- /pysyck/tags/0.61.1/lib/syck/__init__.py	(revision 25)
+++ /pysyck/tags/0.61.1/lib/syck/__init__.py	(revision 25)
@@ -0,0 +1,105 @@
+"""
+YAML is a data serialization format designed for human readability and
+interaction with scripting languages.
+
+Syck is an extension for reading and writing YAML in scripting languages.
+
+PySyck provides Python bindings for Syck YAML parser and emitter.
+
+To start working with PySyck, import the package 'syck':
+>>> from syck import *
+
+To parse a YAML document into a Python object, use the function 'load()':
+>>> load('''
+... - Mark McGwire
+... - Sammy Sosa
+... - Ken Griffey
+... ''')
+['Mark McGwire', 'Sammy Sosa', 'Ken Griffey']
+
+To emit a Python object into a YAML document, use the function 'dump()':
+>>> print dump(['Mark McGwire', 'Sammy Sosa', 'Ken Griffey'])
+---
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+You may get access to the YAML parser tree using the function 'parse()':
+>>> root_node = parse('''
+... - Mark McGwire
+... - Sammy Sosa
+... - Ken Griffey
+... ''')
+>>> root_node
+<_syck.Seq object at 0xb7a1f874>
+>>> root_node.kind
+'seq'
+>>> root_node.value
+[<_syck.Scalar object at 0xb7a1e5fc>, <_syck.Scalar object at 0xb7a1e65c>, <_syck.Scalar object at 0xb7a1e6bc>]
+
+You may now use the function 'emit()' to obtain the YAML document again:
+>>> print emit(root_node)
+---
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+What do you get if you apply the function 'dump()' to root_node? Let's try it:
+>>> print dump(root_node)
+--- !python/object:_syck.Seq
+value:
+- !python/object:_syck.Scalar
+  value: Mark McGwire
+  tag: tag:yaml.org,2002:str
+- !python/object:_syck.Scalar
+  value: Sammy Sosa
+  tag: tag:yaml.org,2002:str
+- !python/object:_syck.Scalar
+  value: Ken Griffey
+  tag: tag:yaml.org,2002:str
+
+As you can see, PySyck allow you to represent complex Python objects.
+
+You can also dump the generated YAML output into any file-like object:
+>>> import os
+>>> stream = os.tmpfile()
+>>> object = ['foo', 'bar', ['baz']]
+>>> dump(object, stream)
+>>> stream.seek(0)
+>>> print stream.read()
+---
+- foo
+- bar
+- - baz
+
+To load several documents from a single YAML stream, use the function
+'load_documents()':
+>>> source = '''
+... ---
+... american:
+...   - Boston Red Sox
+...   - Detroit Tigers
+...   - New York Yankees
+... national:
+...   - New York Mets
+...   - Chicago Cubs
+...   - Atlanta Braves
+... ---
+... - [name        , hr, avg  ]
+... - [Mark McGwire, 65, 0.278]
+... - [Sammy Sosa  , 63, 0.288]
+... '''
+>>> for document in load_documents(source):
+...     print document
+...
+{'national': ['New York Mets', 'Chicago Cubs', 'Atlanta Braves'], 'american': ['Boston Red Sox', 'Detroit Tigers', 'New York Yankees']}
+[['name', 'hr', 'avg'], ['Mark McGwire', 65, 0.27800000000000002], ['Sammy Sosa', 63, 0.28799999999999998]]
+
+See the source code for more details.
+"""
+
+
+from _syck import *
+from loaders import *
+from dumpers import *
+
Index: /pysyck/tags/0.61.1/lib/syck/dumpers.py
===================================================================
--- /pysyck/tags/0.61.1/lib/syck/dumpers.py	(revision 49)
+++ /pysyck/tags/0.61.1/lib/syck/dumpers.py	(revision 49)
@@ -0,0 +1,329 @@
+"""
+syck.dumpers is a high-level wrapper for the Syck YAML emitter.
+Do not use it directly, use the module 'syck' instead.
+"""
+
+import _syck
+
+try:
+    import cStringIO as StringIO
+except ImportError:
+    import StringIO
+
+__all__ = ['GenericDumper', 'Dumper',
+    'emit', 'dump', 'emit_documents', 'dump_documents']
+
+class GenericDumper(_syck.Emitter):
+    """
+    GenericDumper dumps native Python objects into YAML documents.
+    """
+
+    def dump(self, object):
+        """Dumps the given Python object as a YAML document."""
+        self.emit(self._convert(object, {}))
+
+    def _convert(self, object, object_to_node):
+        if id(object) in object_to_node and self.allow_aliases(object):
+            return object_to_node[id(object)][1]
+        node = self.represent(object)
+        object_to_node[id(object)] = object, node
+        if node.kind == 'seq':
+            for index in range(len(node.value)):
+                item = node.value[index]
+                node.value[index] = self._convert(item, object_to_node)
+        elif node.kind == 'map':
+            if isinstance(node.value, dict):
+                for key in node.value.keys():
+                    value = node.value[key]
+                    del node.value[key]
+                    node.value[self._convert(key, object_to_node)] =    \
+                            self._convert(value, object_to_node)
+            elif isinstance(node.value, list):
+                for index in range(len(node.value)):
+                    key, value = node.value[index]
+                    node.value[index] = (self._convert(key, object_to_node),
+                            self._convert(value, object_to_node))
+#        # Workaround against a Syck bug:
+#        if node.kind == 'scalar' and node.style not in ['1quote', '2quote'] \
+#                and node.value and node.value[-1] in [' ', '\t']:
+#            node.style = '2quote'
+        return node
+
+    def represent(self, object):
+        """Represents the given Python object as a 'Node'."""
+        if isinstance(object, dict):
+            return _syck.Map(object.copy(), tag="tag:yaml.org,2002:map")
+        elif isinstance(object, list):
+            return _syck.Seq(object[:], tag="tag:yaml.org,2002:seq")
+        else:
+            return _syck.Scalar(str(object), tag="tag:yaml.org,2002:str")
+
+    def allow_aliases(self, object):
+        """Checks whether the given object can be aliased."""
+        return True
+
+class Dumper(GenericDumper):
+    """
+    Dumper dumps native Python objects into YAML documents.
+    """
+
+    INF = 1e300000
+    inf_value = repr(INF)
+    neginf_value = repr(-INF)
+    nan_value = repr(INF/INF)
+
+    def find_representer(self, object):
+        """
+        For the given object, find a method that can represent it as a 'Node'
+        object.
+
+        If the type of the object has the form 'package.module.type',
+        find_representer() returns the method 'represent_package_module_type'.
+        If this method does not exist, it checks the base types.
+        """
+        for object_type in type(object).__mro__:
+            if object_type.__module__ == '__builtin__':
+                name = object_type.__name__
+            else:
+                name = '%s.%s' % (object_type.__module__, object_type.__name__)
+            method = 'represent_' + name.replace('.', '_')
+            if hasattr(self, method):
+                return getattr(self, method)
+
+    def represent(self, object):
+        """Represents the given Python object as a 'Node'."""
+        representer = self.find_representer(object)
+        if representer:
+            return representer(object)
+        else:
+            return super(Dumper, self).represent(object)
+
+    def represent_object(self, object):
+        return _syck.Scalar(repr(object), tag="tag:yaml.org,2002:str")
+
+    def represent_NoneType(self, object):
+        return _syck.Scalar('~', tag="tag:yaml.org,2002:null")
+
+    def represent_bool(self, object):
+        return _syck.Scalar(repr(object), tag="tag:yaml.org,2002:bool")
+
+    def represent_str(self, object):
+        try:
+            return _syck.Scalar(object.encode('ascii'), tag="tag:yaml.org,2002:str")
+        except UnicodeDecodeError:
+            try:
+                return _syck.Scalar(unicode(object, 'utf-8').encode('utf-8'),
+                        tag="tag:python.yaml.org,2002:str")
+            except UnicodeDecodeError:
+                return _syck.Scalar(object.encode('base64'),
+                        tag="tag:yaml.org,2002:binary")
+
+    def represent_unicode(self, object):
+        try:
+            return _syck.Scalar(object.encode('ascii'), tag="tag:python.yaml.org,2002:unicode")
+        except UnicodeEncodeError:
+            return _syck.Scalar(object.encode('utf-8'), tag="tag:yaml.org,2002:str")
+
+    def represent_list(self, object):
+        return _syck.Seq(object[:], tag="tag:yaml.org,2002:seq")
+
+    def represent_dict(self, object):
+        return _syck.Map(object.copy(), tag="tag:yaml.org,2002:map")
+
+    def represent_int(self, object):
+        return _syck.Scalar(repr(object), tag="tag:yaml.org,2002:int")
+
+    def represent_float(self, object):
+        value = repr(object)
+        if value == self.inf_value:
+            value = '.inf'
+        elif value == self.neginf_value:
+            value = '-.inf'
+        elif value == self.nan_value:
+            value = '.nan'
+        return _syck.Scalar(value, tag="tag:yaml.org,2002:float")
+
+    def represent_complex(self, object):
+        if object.real != 0.0:
+            value = '%s+%sj' % (repr(object.real), repr(object.imag))
+        else:
+            value = '%sj' % repr(object.imag)
+        return _syck.Scalar(value, tag="tag:python.yaml.org,2002:complex")
+
+    def represent_sets_Set(self, object):
+        return _syck.Seq(list(object), tag="tag:yaml.org,2002:set")
+    represent_set = represent_sets_Set
+
+    def represent_datetime_datetime(self, object):
+        return _syck.Scalar(object.isoformat(), tag="tag:yaml.org,2002:timestamp")
+
+    def represent_long(self, object):
+        return _syck.Scalar(repr(object), tag="tag:python.yaml.org,2002:long")
+
+    def represent_tuple(self, object):
+        return _syck.Seq(list(object), tag="tag:python.yaml.org,2002:tuple")
+
+    def represent_type(self, object):
+        name = '%s.%s' % (object.__module__, object.__name__)
+        return _syck.Scalar('', tag="tag:python.yaml.org,2002:name:"+name)
+    represent_classobj = represent_type
+    represent_class = represent_type
+    # TODO: Python 2.2 does not provide the module name of a function
+    represent_function = represent_type
+    represent_builtin_function_or_method = represent_type
+
+    def represent_module(self, object):
+        return _syck.Scalar('', tag="tag:python.yaml.org,2002:module:"+object.__name__)
+
+    def represent_instance(self, object):
+        cls = object.__class__
+        class_name = '%s.%s' % (cls.__module__, cls.__name__)
+        args = ()
+        state = {}
+        if hasattr(object, '__getinitargs__'):
+            args = object.__getinitargs__()
+        if hasattr(object, '__getstate__'):
+            state = object.__getstate__()
+        elif not hasattr(object, '__getinitargs__'):
+            state = object.__dict__.copy()
+        if not args and isinstance(state, dict):
+            return _syck.Map(state.copy(),
+                    tag="tag:python.yaml.org,2002:object:"+class_name)
+        value = {}
+        if args:
+            value['args'] = list(args)
+        if state or not isinstance(state, dict):
+            value['state'] = state
+        return _syck.Map(value,
+                tag="tag:python.yaml.org,2002:new:"+class_name)
+
+    def represent_object(self, object): # Do you understand this? I don't.
+        cls = type(object)
+        class_name = '%s.%s' % (cls.__module__, cls.__name__)
+        args = ()
+        state = {}
+        if cls.__reduce__ is type.__reduce__:
+            if hasattr(object, '__reduce_ex__'):
+                reduce = object.__reduce_ex__(2)
+                args = reduce[1][1:]
+            else:
+                reduce = object.__reduce__()
+            if len(reduce) > 2:
+                state = reduce[2]
+            if state is None:
+                state = {}
+            if not args and isinstance(state, dict):
+                return _syck.Map(state.copy(),
+                        tag="tag:python.yaml.org,2002:object:"+class_name)
+            if not state and isinstance(state, dict):
+                return _syck.Seq(list(args),
+                        tag="tag:python.yaml.org,2002:new:"+class_name)
+            value = {}
+            if args:
+                value['args'] = list(args)
+            if state or not isinstance(state, dict):
+                value['state'] = state
+            return _syck.Map(value,
+                    tag="tag:python.yaml.org,2002:new:"+class_name)
+        else:
+            reduce = object.__reduce__()
+            cls = reduce[0]
+            class_name = '%s.%s' % (cls.__module__, cls.__name__)
+            args = reduce[1]
+            state = None
+            if len(reduce) > 2:
+                state = reduce[2]
+            if state is None:
+                state = {}
+            if not state and isinstance(state, dict):
+                return _syck.Seq(list(args),
+                        tag="tag:python.yaml.org,2002:apply:"+class_name)
+            value = {}
+            if args:
+                value['args'] = list(args)
+            if state or not isinstance(state, dict):
+                value['state'] = state
+            return _syck.Map(value,
+                    tag="tag:python.yaml.org,2002:apply:"+class_name)
+
+    def represent__syck_Node(self, object):
+        object_type = type(object)
+        type_name = '%s.%s' % (object_type.__module__, object_type.__name__)
+        state = []
+        if hasattr(object_type, '__slotnames__'):
+            for name in object_type.__slotnames__:
+                value = getattr(object, name)
+                if value:
+                    state.append((name, value))
+        return _syck.Map(state,
+                tag="tag:python.yaml.org,2002:object:"+type_name)
+
+    def allow_aliases(self, object):
+        """Checks whether the given object can be aliased."""
+        if object is None or type(object) in [int, bool, float]:
+            return False
+        if type(object) is str and (not object or object.isalnum()):
+            return False
+        if type(object) is tuple and not object:
+            return False
+        return True
+
+def emit(node, output=None, Dumper=Dumper, **parameters):
+    """
+    Emits the given node to the output.
+
+    If output is None, returns the produced YAML document.
+    """
+    if output is None:
+        dumper = Dumper(StringIO.StringIO(), **parameters)
+    else:
+        dumper = Dumper(output, **parameters)
+    dumper.emit(node)
+    if output is None:
+        return dumper.output.getvalue()
+
+def dump(object, output=None, Dumper=Dumper, **parameters):
+    """
+    Dumps the given object to the output.
+
+    If output is None, returns the produced YAML document.
+    """
+    if output is None:
+        dumper = Dumper(StringIO.StringIO(), **parameters)
+    else:
+        dumper = Dumper(output, **parameters)
+    dumper.dump(object)
+    if output is None:
+        return dumper.output.getvalue()
+
+def emit_documents(nodes, output=None, Dumper=Dumper, **parameters):
+    """
+    Emits the list of nodes to the output.
+    
+    If output is None, returns the produced YAML document.
+    """
+    if output is None:
+        dumper = Dumper(StringIO.StringIO(), **parameters)
+    else:
+        dumper = Dumper(output, **parameters)
+    for node in nodes:
+        dumper.emit(node)
+    if output is None:
+        return dumper.output.getvalue()
+
+def dump_documents(objects, output=None, Dumper=Dumper, **parameters):
+    """
+    Dumps the list of objects to the output.
+    
+    If output is None, returns the produced YAML document.
+    """
+    if output is None:
+        dumper = Dumper(StringIO.StringIO(), **parameters)
+    else:
+        dumper = Dumper(output, **parameters)
+    for object in objects:
+        dumper.dump(object)
+    if output is None:
+        return dumper.output.getvalue()
+
+
Index: /pysyck/tags/0.61.1/setup.py
===================================================================
--- /pysyck/tags/0.61.1/setup.py	(revision 115)
+++ /pysyck/tags/0.61.1/setup.py	(revision 115)
@@ -0,0 +1,124 @@
+
+NAME = 'PySyck'
+VERSION = '0.61.1'
+DESCRIPTION = "Python bindings for the Syck YAML parser and emitter"
+LONG_DESCRIPTION = """\
+YAML is a data serialization format designed for human readability
+and interaction with scripting languages. Syck is an extension for
+reading and writing YAML in scripting languages. PySyck is aimed to
+update the current Python bindings for Syck."""
+AUTHOR = "Kirill Simonov"
+AUTHOR_EMAIL = 'xi@resolvent.net'
+LICENSE = "BSD"
+PLATFORMS = "Any"
+URL = "http://pyyaml.org/wiki/PySyck"
+DOWNLOAD_URL = "http://pyyaml.org/download/pysyck/%s-%s.tar.gz" % (NAME, VERSION)
+CLASSIFIERS = [
+    "Development Status :: 3 - Alpha",
+    "Intended Audience :: Developers",
+    "License :: OSI Approved :: BSD License",
+    "Programming Language :: Python",
+    "Topic :: Software Development :: Libraries :: Python Modules",
+    "Topic :: Text Processing :: Markup",
+]
+
+from distutils.core import setup, Extension
+
+from distutils import log
+from distutils.command.build_ext import build_ext
+from distutils.errors import CCompilerError, CompileError, LinkError
+
+import sys
+if sys.version < '2.2.4':
+    from distutils.dist import DistributionMetadata
+    DistributionMetadata.classifiers = None
+    DistributionMetadata.download_url = None
+
+import os
+
+CHECK_SYCK = """
+#include <syck.h>
+#include <stdio.h>
+int main(void) {
+    syck_free_parser(syck_new_parser());
+    syck_free_emitter(syck_new_emitter());
+    puts(SYCK_VERSION);
+    return 0;
+}
+"""
+CHECK_SYCK_PROG = './_check_syck'
+
+class PySyckBuildExt(build_ext):
+
+    def build_extensions(self):
+        if not self.force:
+            self.check_syck()
+        build_ext.build_extensions(self)
+
+    def _clean(self, *filenames):
+        for filename in filenames:
+            try:
+                os.remove(filename)
+            except OSError:
+                pass
+
+    def check_syck(self):
+        prog = CHECK_SYCK_PROG
+        src = prog + '.c'
+        file(src, 'w').write(CHECK_SYCK)
+        [obj] = self.compiler.object_filenames([src])
+        log.info("checking for syck.h")
+        try:
+            self.compiler.compile([src])
+        except CompileError:
+            self._clean(src, obj)
+            raise CompileError, "syck.h is not found, " \
+                    "try to uncomment the include_dirs parameter in setup.cfg"
+        log.info("checking for libsyck.a")
+        try:
+            self.compiler.link_executable([obj], prog, libraries=['syck'])
+        except LinkError:
+            self._clean(src, obj, prog)
+            raise LinkError, "libsyck.a is not found, " \
+                    "try to uncomment the library_dirs parameter in setup.cfg"
+        if self.compiler.exe_extension:
+            prog += self.compiler.exe_extension
+        log.info("checking syck version")
+        pipe = os.popen(prog, 'r')
+        data = pipe.read().strip()
+        pipe.close()
+        version = float(data)
+        log.info("syck version: %s" % version)
+        if version < 0.55:
+            self._clean(src, obj, prog)
+            raise CCompilerError, "syck 0.55 or higher is required"
+        self._clean(src, obj, prog)
+            
+
+setup(
+    name=NAME,
+    version=VERSION,
+    description=DESCRIPTION,
+    long_description=LONG_DESCRIPTION,
+    author=AUTHOR,
+    author_email=AUTHOR_EMAIL,
+    license=LICENSE,
+    platforms=PLATFORMS,
+    url=URL,
+    download_url=DOWNLOAD_URL,
+    classifiers=CLASSIFIERS,
+
+    package_dir={'': 'lib'},
+    packages=['syck'],
+    ext_modules=[
+        Extension('_syck', ['ext/_syckmodule.c'],
+#            include_dirs=[],   # do not uncomment this, edit setup.cfg instead.
+#            library_dirs=[],   # do not uncomment this, edit setup.cfg instead.
+            libraries=['syck'],
+        ),
+    ],
+    cmdclass={
+        'build_ext': PySyckBuildExt,
+    },
+)
+
Index: /pysyck/tags/0.61.1/MANIFEST.in
===================================================================
--- /pysyck/tags/0.61.1/MANIFEST.in	(revision 27)
+++ /pysyck/tags/0.61.1/MANIFEST.in	(revision 27)
@@ -0,0 +1,2 @@
+include README.txt README.html
+recursive-include tests *.py
Index: /pysyck/tags/0.61.1/README.txt
===================================================================
--- /pysyck/tags/0.61.1/README.txt	(revision 115)
+++ /pysyck/tags/0.61.1/README.txt	(revision 115)
@@ -0,0 +1,914 @@
+
+============================================================
+PySyck: Python bindings for the Syck YAML parser and emitter
+============================================================
+
+:Author: Kirill Simonov
+:Contact: xi@resolvent.net
+:Web site: http://pyyaml.org/wiki/PySyck
+
+.. contents::
+
+
+Overview
+========
+
+YAML_ is a data serialization format designed for human readability and
+interaction with scripting languages.
+
+Syck_ is an extension for reading and writing YAML in scripting languages. Syck
+provides bindings to the Python_ programming language, but they are somewhat
+limited and leak memory.
+
+PySyck_ is aimed to update the current Python bindings for Syck. The new
+bindings provide a wrapper for the Syck emitter and give access to YAML
+representation graphs. Hopefully it will not leak memory as well.
+
+PySyck_ may be used for various tasks, in particular, as a replacement of the
+module pickle_.
+
+.. _YAML: http://yaml.org/
+.. _Syck: http://whytheluckystiff.net/syck/
+.. _Python: http://python.org/
+.. _PySyck: http://pyyaml.org/wiki/PySyck
+.. _pickle: http://docs.python.org/lib/module-pickle.html
+
+
+Requirements
+============
+
+PySyck requires Syck 0.55 or higher and Python 2.3 or higher.
+
+
+Installation
+============
+
+Please note that Syck 0.55 or higher must be installed. We recommend to use
+Syck_ from `the Syck SVN repository`_ together with `my Syck patches`_. For
+your convenience, a tarball is provided:
+http://pyyaml.org/download/pysyck/syck-0.61+svn232+patches.tar.gz.
+
+If you install PySyck from source, unpack the source tarball and type::
+
+  $ python setup.py install
+
+Windows binaries for Python 2.3 and 2.4 are provided. Windows binaries are
+linked against Syck_ statically.
+
+.. _the Syck SVN repository: http://code.whytheluckystiff.net/svn/syck/trunk
+.. _my Syck patches: http://pyyaml.org/wiki/SyckPatches
+
+
+Usage
+=====
+
+The documentation is still rough and incomplete. See `the source code`_ for
+more information.
+
+.. _the source code: http://pyyaml.org/browser/pysyck/
+
+Quick Example
+-------------
+
+::
+
+  >>> from syck import *
+  >>> print load("""
+  ... - foo
+  ... - bar
+  ... - baz
+  ... """)
+  ['foo', 'bar', 'baz']
+  >>> print dump(['foo', 'bar', 'baz'])
+  ---
+  - foo
+  - bar
+  - baz
+
+Important notice: Do not load a YAML stream from any untrusted source.
+Like ``pickle.load``, ``syck.load`` may call an arbitrary Python function.
+
+
+YAML syntax
+-----------
+
+We do not describe the YAML syntax here. Please check http://yaml.org/ for the
+reference.
+
+In addition to the tags defined in `the YAML types repository`_, PySyck understands
+the following Python-specific tags:
+
+* ``tag:python.yaml.org,2002:none``,
+* ``tag:python.yaml.org,2002:bool``,
+* ``tag:python.yaml.org,2002:int``,
+* ``tag:python.yaml.org,2002:float``,
+* ``tag:python.yaml.org,2002:str``,
+* ``tag:python.yaml.org,2002:unicode``,
+* ``tag:python.yaml.org,2002:list``,
+* ``tag:python.yaml.org,2002:tuple``,
+* ``tag:python.yaml.org,2002:dict``,
+* ``tag:python.yaml.org,2002:name:...``,
+* ``tag:python.yaml.org,2002:object:...``,
+* ``tag:python.yaml.org,2002:new:...``,
+* ``tag:python.yaml.org,2002:apply:...``.
+
+Most of these tags are self-explanatory. The tags ``!python/name:...``,
+``!python/object:...``, ``!python/new:...``, and ``!python/apply:...`` are used
+for constructing Python functions, classes, and objects. See the sections `Use
+Python-specific tags in YAML documents`_ and `Use Python-specific tags to
+construct Python objects`_ for some examples.
+
+.. _the YAML types repository: http://yaml.org/type/index.html
+
+Common Tasks
+------------
+
+Import the module
+~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> from syck import *
+
+or
+
+::
+
+  >>> import syck
+
+Load a document from a string
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> source = "..."
+  >>> object = load(source)
+
+Load a document from a file
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> source = file(..., 'r')
+  >>> object = load(source)
+
+Convert a Python object to a YAML document
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> object = ...
+  >>> document = dump(object)
+
+Dump a Python object to a YAML stream
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> object = ...
+  >>> output = file(..., 'w')
+  >>> dump(object, output)
+
+Format the output YAML stream
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> object = ...
+  >>> output = file(..., 'w')
+  >>> dump(object, output,
+  ...     headless=False, use_header=False, use_version=False,
+  ...     explicit_typing=True, style=None, best_width=80, indent=2)
+
+Load several documents from a YAML stream
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> source = ...
+  >>> objects = load_documents(source)
+  >>> for object in objects:
+  ...     # ...
+
+Create several documents in a YAML stream
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> objects = [...]
+  >>> output = file(..., 'w')
+  >>> dump_documents(objects, output)
+
+Construct a representation tree of a YAML document
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> source = ...
+  >>> root_node = parse(source)
+
+Convert a representation tree to a YAML document
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> scalar_node = Scalar('...', tag='tag:...',
+  ...     style='...', indent=.., width=..)
+  >>> sequence_node = Seq(list_of_nodes, tag='tag:...', inline=..)
+  >>> mapping_node = Map(dictionary_of_nodes, tag='tag:...', inline=..)
+  >>> root_node = ...
+  >>> output = file(..., 'w')
+  >>> emit(root_node, output)
+
+Use PySyck as a pickle replacement
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> object = ...
+  >>> stream = ...
+  >>> dump(object, stream)
+  
+  >>> stream = ...
+  >>> object = load(stream)
+
+Use PySyck to display the structure of a complex object
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> object = ...
+  >>> print dump(object)
+
+Use PySyck to display a YAML representation graph
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> source = ...
+  >>> node = parse(source)
+  >>> print dump(node)
+
+Use Python-specific tags in YAML documents
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  --- %YAML:1.0
+  - !python/none ''       # You may also use '!null'.
+  - !python/bool 'False'  # You may also use '!bool'.
+  - !python/int '123'     # You may also use '!int'.
+  - !python/long '1234567890'
+  - !python/float '123.456789'  # Also '!float'.
+  - !python/str 'a string'      # Also '!str'.
+  - !python/unicode 'a unicode string encoded in utf-8'
+  - !python/list [1, 2, 3]      # The same as '!seq' or no tag.
+  - !python/tuple [1, 2, 3]
+  - !python/dict { 1: foo, 2: bar } # The same as '!map' or no tag.
+
+Use Python-specific tags to construct functions or classes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  --- %YAML:1.0
+  - !python/name:package.module.function_name ''
+  - !python/name:package.module.class_name ''
+
+Use Python-specific tags to construct Python objects
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  --- %YAML:1.0
+  - !python/object:package.module.type
+    attribute1: value1
+    attribute2: value2
+    # ...
+  - !python/new:package.module.type
+    - parameter1
+    - parameter2
+    # ...
+  - !python/new:package.module.type
+    args: [parameter1, parameter2, ...]
+    kwds: {kwd1: val1, kwd2: val2, ...}
+    state: {attr1: val1, attr2: val2, ...}
+    # ...
+  - !python/apply:package.module.function
+    - parameter1
+    - parameter2
+    # ...
+  - !python/apply:package.module.function
+    args: [parameter1, parameter2, ...]
+    kwds: {kwd1: val1, kwd2: val2, ...}
+    state: {attr1: val1, attr2: val2, ...}
+    # ...
+
+Use application specific tags
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+  >>> class MyClass:
+  ...   # ...
+
+  >>> class MyLoader(Loader):
+  ...     def construct_private_my_tag(self, node):
+  ...         # ...
+  ...         return MyClass(...)
+
+  >>> class MyDumper(Dumper):
+  ...     def represent_MyDumper(self, object):
+  ...         # ...
+  ...         return Map(...)
+
+  >>> source = """--- !!my_tag { ... }"""
+  >>> my_instance = load(source, Loader=MyLoader)
+
+  >>> my_instance = MyClass(...)
+  >>> output = dump(my_instance, Dumper=MyDumper)
+
+Reference
+---------
+
+Functions
+~~~~~~~~~
+
+``load`` : function
+  ``load(source, Loader=Loader, **parameters)``
+
+  The function ``load()`` returns a Python object corresponding to the first
+  document in the source. If the source is empty, ``load()`` returns ``None``.
+  ``source`` must be a string or a file-like object that has the method
+  ``read(max_length)``.
+
+  By default, the function ``load()`` uses an instance of the class ``Loader``
+  for parsing. You may use another class or pass additional parameters to the
+  class constructor. See the section Parser_ for more details.
+
+  Example::
+
+    >>> load("""
+    ... - foo
+    ... - bar
+    ... - baz
+    ... """)
+    ['foo', 'bar', 'baz']
+
+``parse`` : function
+  ``parse(source, Loader=Loader, **parameters)``
+
+  The function ``parse()`` parses the source and returns a representation tree
+  of the first document. ``source`` must be a string or a file-like object
+  that has the method ``read(max_length)``.
+
+  By default, the function ``parse()`` uses an instance of the class ``Loader``
+  for parsing. You may use another class or pass additional parameters to the
+  class constructor. See the section Parser_ for more details.
+
+  Example::
+
+    >>> parse("""
+    ... - foo
+    ... - bar
+    ... - baz
+    ... """)
+    <_syck.Seq object at 0xb7a3f2fc>
+
+``load_documents`` : function
+  ``load_documents(source, Loader=Loader, **parameters)``
+
+  The function ``load_documents()`` parses the source and an iterator.  The
+  iterator produces Python objects corresponding the documents of the source
+  stream. ``source`` must be a string or a file-like object that has the method
+  ``read(max_length)``.
+
+  By default, the function ``load_documents()`` uses an instance of the class
+  ``Loader`` for parsing. You may use another class or pass additional
+  parameters to the class constructor. See the section Parser_ for more
+  details.
+
+  Example::
+
+    >>> source = """
+    ... --- >
+    ... This is the
+    ... first document.
+    ... --- >
+    ... This is the
+    ... next document.
+    ... --- >
+    ... This is the
+    ... last document.
+    ... """
+    >>> for object in load_documents(source): print object
+    ...
+    This is the first document.
+
+    This is the next document.
+
+    This is the last document.
+
+``parse_documents`` : function
+  ``parse_documents(source, Loader=Loader, **parameters)``
+
+  The function ``parse_documents()`` is similar to ``load_documents()``, but
+  produces representation graphs for all documents in the source.
+  
+``dump`` : function
+  ``dump(object, output=None, Dumper=Dumper, **parameters)``
+
+  The function ``dump()`` converts ``object`` to a representation graph
+  and write it to ``output``. ``output`` must be ``None`` or a file-like
+  object that has the method ``write(data)``. If ``output`` is ``None``,
+  ``dump()`` returns the generated document.
+
+  By default, the function ``dump()`` uses an instance of the class ``Dumper``
+  for emitting. You may use another class or pass additional parameters to the
+  class constructor. See the section Emitter_ for more details.
+
+  Example::
+
+    >>> object = ['foo', 'bar', ['baz']]
+    >>> dump(object, sys.stdout)
+    ---
+    - foo
+    - bar
+    - - baz
+    >>> print dump(object)
+    ---
+    - foo
+    - bar
+    - - baz
+
+    >>> print dump(object, use_version=True, indent=5)
+    --- %YAML:1.0
+    - foo
+    - bar
+    -    - baz
+
+``emit`` : function
+  ``emit(node, output=None, Dumper=Dumper, **parameters)``
+
+  The function ``emit()`` write the representation graph to the output stream.
+  ``output`` must be ``None`` or a file-like object that has the method
+  ``write(data)``. If ``output`` is ``None``, ``emit()`` returns the generated
+  document.
+
+  By default, the function ``emit()`` uses an instance of the class ``Dumper``
+  for emitting. You may use another class or pass additional parameters to the
+  class constructor. See the section Emitter_ for more details.
+
+  Example::
+
+    >>> foo = Scalar('a string')
+    >>> bar = Scalar('a unicode string', tag="tag:python.yaml.org,2002:unicode")
+    >>> baz = Scalar('12345', tag="tag:yaml.org,2002:int")
+    >>> seq = Seq([foo, bar, baz], tag="tag:python.taml.org,2002:tuple")
+    >>> print emit(seq, use_version=True)
+    --- %YAML:1.0 !python.taml.org,2002/tuple
+    - a string
+    - !python/unicode a unicode string
+    - 12345
+
+``dump_documents`` : function
+  ``dump_documents(objects, output=None, Dumper=Dumper, **parameters)``
+
+  The function ``dump_documents()`` takes a list of objects and converts
+  each object to a YAML document. If ``output`` is ``None``, it returns
+  the produced documents. Otherwise it writes down them to ``output``,
+  which must be a file-like object with the method ``write(data)``.
+
+  By default, the function ``dump_documents()`` uses an instance of the class
+  ``Dumper`` for emitting. You may use another class or pass additional
+  parameters to the class constructor. See the section Emitter_ for more
+  details.
+
+  Example::
+
+    >>> print dump_documents(['foo', 'bar', 'baz'])
+    --- foo
+    --- bar
+    --- baz
+
+``emit_documents`` : function
+  ``emit_documents(nodes, output=None, Dumper=Dumper, **parameters)``
+
+  The function ``emit_documents()`` is similar to ``dump_documents()``, but
+  it requires a list of representation graphs.
+
+Exceptions
+~~~~~~~~~~
+
+``error`` : exception
+  This exception is raised by the Syck parser when it detects a syntax error.
+
+  The attribute ``args`` of the exception is a triple: *message*, *row*,
+  *column*.
+
+  Example::
+
+    >>> load("""---
+    ... - foo
+    ... - '''
+    ... - bar
+    ... """)
+    Traceback (most recent call last):
+      File "<stdin>", line 1, in ?
+      File "build/lib.linux-i686-2.3/syck/loaders.py", line 384, in load
+      File "build/lib.linux-i686-2.3/syck/loaders.py", line 42, in load
+    _syck.error: ('syntax error', 4, 2)
+
+Nodes
+~~~~~
+
+The following four classes represents nodes in the YAML representation graph:
+
+``Node`` : class
+  ``Node`` is an abstract class; you cannot create an instance of the class
+  ``Node``. ``Node`` is the base class of ``Scalar``, ``Seq``, and ``Map``.
+
+``Scalar`` : subclass of ``Node``
+  ``Scalar`` represents a scalar node. Its value is a string.
+
+``Seq`` : subclass of ``Node``
+  ``Seq`` represents a sequence node. Its value is a list of nodes.
+
+``Map`` : subclass of ``Node``
+  ``Map`` represents a mapping node. Its value is a list of pairs or a
+  dictionary.
+
+All instances of ``Scalar``, ``Seq``, and ``Map`` have the following
+attributes:
+
+``kind`` : string
+  ``'scalar'``, ``'seq'``, or ``'map'``; read-only.
+
+``anchor`` : string or ``None``
+  The node anchor.
+
+``tag`` : string or ``None``
+  The node tag.
+
+``value``
+  The node value. For scalar nodes, it should be a string. For sequence nodes,
+  it should be a list. For mapping nodes, it should be a list of pairs or a
+  dictionary.
+
+``Scalar`` instances have additional attributes:
+
+``style`` : string or ``None``
+  The node style. Possible values are ``None`` (means literal or plain),
+  ``'1quote'``, ``'2quote'``, ``'fold'``, ``'literal'``, ``'plain'``.
+
+``indent`` : integer
+  The node indentation. ``0`` means the default value.
+
+``width`` : integer
+  The width of the node field. Longer scalars will be broken on several lines
+  to fit the field. ``0`` means the default value.
+
+``chomp`` : string or ``None``
+  The chomping method. Possible values are ``None`` (clip), ``'-'`` (strip),
+  ``'+'`` (keep).
+
+``Seq`` and ``Map`` instances have an additional attribute:
+
+``inline`` : boolean
+  The block/flow flag.
+
+For example, let us create a representation graph and transform it into a YAML
+stream::
+
+  >>> # Create three scalar nodes:
+  >>> foo = Scalar('foo', tag="tag:example.com,2005:foo", style='fold',
+  ...     indent=5)
+  >>> bar = Scalar('bar', style='1quote')
+  >>> baz = Scalar('baz')
+
+  >>> # Create a sequence node:
+  >>> seq = Seq([foo, bar, baz], tag="x-private:seq")
+
+  >>> # Emit it into a YAML stream:
+  >>> print emit(seq)
+  --- !!seq
+  - !example.com,2005/foo >-
+       foo
+  - 'bar'
+  - baz
+
+Now let us construct a representation graph from a YAML document::
+
+  >>> # The function 'parse' generates a representation graph:
+  >>> root = parse("""
+  ... - foo
+  ... - bar
+  ... - baz
+  ... """)
+
+  >>> # The object 'root' is a sequence node:
+  >>> root
+  <_syck.Seq object at 0xb7e124b4>
+
+  >>> # We can transform 'root' back into a YAML stream:
+  >>> print emit(root)
+  ---
+  - foo
+  - bar
+  - baz
+
+  >>> # We can also display the structure of the representation tree using a
+  >>> # clever trick:
+  >>> print dump(root)
+  --- !python/object:_syck.Seq
+  value:
+  - !python/object:_syck.Scalar
+    value: foo
+    tag: tag:yaml.org,2002:str
+  - !python/object:_syck.Scalar
+    value: bar
+    tag: tag:yaml.org,2002:str
+  - !python/object:_syck.Scalar
+    value: baz
+    tag: tag:yaml.org,2002:str
+
+Parser
+~~~~~~
+
+``Parser`` : class
+  The class ``Parser`` is a low-level wrapper of a Syck YAML parser. It can
+  generate a representation graph from a YAML stream.
+
+  The class constructor has the following arguments:
+
+  * ``Parser(source, implicit_typing=True, taguri_expansion=True)``.
+
+  The parameter ``source`` is a YAML stream. It must be a string
+  or a file-like object. If it is not a string, it should have a
+  method named ``read(max_length)`` that returns a string.
+
+  It is not recommended to change the default values of the parameters
+  ``implicit_typing`` and ``taguri_expansion``. See the Syck documentation
+  for more details about them.
+
+  The class defines a single method:
+
+  * ``Parser.parse()``.
+
+  It parses the source and returns the root node of the corresponding
+  representation graph. If the stream is finished, it returns ``None`` and
+  set the flag ``eof`` on.
+
+``GenericLoader`` : subclass of ``Parser``
+  The subclass ``GenericLoader`` defines two additional methods:
+
+  * ``GenericLoader.load()``,
+
+  * ``GenericLoader.construct(node)``.
+
+  The method ``load()`` parses the source and constructs the corresponding
+  Python object. To generate an object by a node, ``load()`` uses the
+  ``construct()`` method. The ``construct()`` method defined in
+  ``GenericLoader`` just returns the value of the node: a string, a list,
+  or a dictionary.
+
+``Loader`` : subclass of ``GenericLoader``
+  
+  ``Loader`` redefines the method
+
+  * ``Loader.construct(node)``,
+
+  defines an additional method:
+
+  * ``Loader.find_constructor(node)``,
+
+  and add many other auxiliary methods for constructing Python objects.
+
+  ``Loader.construct()`` calls ``find_constructor()`` for the given node,
+  and uses the returned constructor to generate a Python object.
+
+  ``Loader.find_constructor()`` determines the constructor of a node by
+  the following rules:
+
+  * If the node tag has the form ``tag:yaml.org,2002:type_id``, returns the
+    method ``Loader.construct_type_id``.
+
+  * If the node tag has the form ``tag:python.yaml.org,2002:type_id``, returns
+    the method ``Loader.construct_python_type_id``.
+
+  * If the node tag has the form ``x-private:type_id``, returns
+    ``Loader.construct_private_type_id``.
+
+  * If the node tag has the form ``tag:domain.tld,year:type_id``, returns
+    ``Loader.construct_domain_tld_year_type_id``.
+
+  See the source for more details.
+
+Let us show how ``Parser``, ``GenericLoader``, and ``Loader`` parse the same
+document::
+
+  >>> # The source stream includes PySyck specific tags '!python/tuple'
+  >>> # and '!python/unicode'. It also includes implicitly typed integer
+  >>> # '12345'
+  >>> source = """--- !python/tuple
+  ... - a string
+  ... - !python/unicode a unicode string
+  ... - 12345
+  ... """
+
+  >>> # 'Parser.parse()' returns the root node of the representation tree:
+  >>> p = Parser(source)
+  >>> print p.parse()
+  <_syck.Seq object at 0xb7a33f54>
+
+  >>> # 'GenericLoader.load()' returns a Python object, but ignores the tags:
+  >>> gl = GenericLoader(source)
+  >>> print gl.load()
+  ['a string', 'a unicode string', '12345']
+
+  >>> # 'Loader.load()' is aware of the tags:
+  >>> l = Loader(source)
+  >>> print l.load()
+  ('a string', u'a unicode string', 12345)
+
+Emitter
+~~~~~~~
+
+``Emitter`` : class
+  The class ``Emitter`` is a low-level wrapper of a Syck YAML emitter. It can
+  generate a YAML stream from a representation graph.
+
+  The class constructor has the following signature:
+
+  * ``Emitter(output, headless=False, use_header=False, use_version=False,
+    explicit_typing=True, style=None, best_width=80, indent=2)``.
+
+  The parameter ``output`` must be a file-like object that provides a method
+  ``write(data)``. The other parameters describe the formatting of the output
+  document.
+
+  The class defines a single method:
+
+  * ``emit(node)``.
+
+  The parameter ``node`` must be the root node of a YAML representation graph.
+  The method ``emit()`` writes the generated YAML document to the ``output``
+  stream.
+
+``GenericDumper`` : subclass of ``Emitter``
+  The subclass ``GenericDumper`` adds the following methods:
+
+  * ``GenericDumper.dump(object)``,
+
+  * ``GenericDumper.represent(object)``,
+
+  * ``GenericDumper.allow_aliases(object)``.
+
+  The method ``dump()`` converts the given object into a representation graph,
+  generates a YAML document, and writes it to the ``output`` stream. It uses
+  the method ``represent()`` to convert an object to a representation node.
+  The method ``represent()`` defined in ``GenericDumper`` generates a sequence
+  node for a list object and a mapping node for a dictionary object. Otherwise
+  it generates a scalar node with the value equal to ``str(object)``.
+
+  The Syck YAML emitter automatically detects if the same object is reffered
+  from different parts of the graph and generates aliases for it. Unfortunately
+  it does not work well with immutable Python objects such as strings, numbers,
+  and tuples. To prevent generating unnecessary aliases, the method
+  ``allow_aliases()`` is used. If ``allow_aliases()`` for a given object
+  returns ``False``, the alias will never be generated.
+
+  The ``allow_aliases()`` method defined in ``GenericDumper`` always returns
+  ``True``.
+
+``Dumper`` : subclass of ``GenericDumper``
+  The subclass ``Dumpers`` redefines the methods:
+
+  * ``Dumper.represent(object)``,
+
+  * ``Dumper.allow_aliases(object)``,
+
+  defines the method
+
+  * ``Dumper.find_representer(object)``,
+
+  and add many other auxiliary methods for representing objects as nodes.
+
+  ``Dumper.find_representer()`` finds a method that can represent the given
+  object as a node in a representation tree. ``find_representer()`` checks the
+  class of the object. If the class has the form ``package.module.type``,
+  ``find_representer()`` returns the method
+  ``Dumper.represent_package_module_type`` if it exists. If this method does
+  not exists, ``find_representer()`` consults its base class, and so on.
+
+  ``Dumper.represent()`` calls ``Dumper.find_representer()`` for the given
+  object and uses the returned method to generate a representation node.
+
+  See the source for more details.
+
+Let us show how ``Emitter``, ``GenericDumper``, and ``Dumper`` work::
+
+  >>> # For our demonstration, we define a representation tree named 'seq'
+  >>> # and a Python tuple named 'object':
+  >>> foo = Scalar('a string')
+  >>> bar = Scalar('a unicode string', tag="tag:python.yaml.org,2002:unicode")
+  >>> baz = Scalar('12345', tag="tag:yaml.org,2002:int")
+  >>> seq = Seq([foo, bar, baz], tag="tag:python.taml.org,2002:tuple")
+  >>> object = ('a string', u'a unicode string', 12345)
+
+  >>> # An 'Emitter' instance can dump a representation tree into a stream,
+  >>> # but obviously failed to dump a Python object:
+  >>> e = Emitter(sys.stdout)
+  >>> e.emit(seq)
+  --- !python.taml.org,2002/tuple
+  - a string
+  - !python/unicode a unicode string
+  - 12345
+  >>> e.emit(object)
+  Traceback (most recent call last):
+    File "<stdin>", line 1, in ?
+  TypeError: Node instance is required
+
+  >>> # A 'GenericDumper' instance dumps almost everything as a scalar:
+  >>> gd = GenericDumper(sys.stdout)
+  >>> gd.dump(seq)
+  --- <_syck.Seq object at 0xb7a3c2fc>
+  >>> gd.dump(object)
+  --- ('a string', u'a unicode string', 12345)
+
+  >>> # Finally, a 'Dumper' instance dumps a representation tree as a complex
+  >>> # Python object:
+  >>> d = Dumper(sys.stdout)
+  >>> d.dump(seq)
+  --- !python/object:_syck.Seq
+  value:
+  - !python/object:_syck.Scalar
+    value: a string
+  - !python/object:_syck.Scalar
+    value: a unicode string
+    tag: tag:python.yaml.org,2002:unicode
+  - !python/object:_syck.Scalar
+    value: "12345"
+    tag: tag:yaml.org,2002:int
+  tag: tag:python.taml.org,2002:tuple
+  >>> # It also dumps the 'object' object as expected:
+  >>> d.dump(object)
+  --- !python/tuple
+  - a string
+  - !python/unicode a unicode string
+  - 12345
+
+
+Development and Bug Reports
+===========================
+
+You may check out the PySyck_ source code from `PySyck SVN repository`_.
+
+If you find a bug in PySyck_, please file a bug report to `PySyck BTS`_. You
+may review open bugs on `the list of active tickets`_.
+
+You may use `YAML-core mailing list`_ for discussions of PySyck_.
+
+.. _PySyck SVN repository: http://svn.pyyaml.org/pysyck/
+.. _PySyck BTS: http://pyyaml.org/newticket?component=pysyck
+.. _the list of active tickets: http://pyyaml.org/query?action=view&component=pysyck&order=priority
+.. _YAML-core mailing list: http://lists.sourceforge.net/lists/listinfo/yaml-core
+
+
+Known Bugs
+==========
+
+PySyck_ does not support Unicode for real. It is a Syck_ limitation.
+
+
+History
+=======
+
+* PySyck-0.61.1 (2006-03-15):
+
+  - ``setup.py``: check if ``syck.h`` is present, complain if it doesn't.
+  - ``ext/_syckmodule.c``: release GIL_ before calling Syck_. Note that this
+    change broke Python 2.2 compatibility.
+  - ``lib/syck/loader.py``, ``lib/syck/dumper.py``: change treatment of the
+    ``!str`` tag. Now ``!str``-tagged scalars are converted to Unicode strings
+    if they are valid UTF-8, but are not valid ASCII.
+  - Windows binaries are compiled against the latest Syck_ from
+    `the Syck SVN repository`_ with `my Syck patches`_.
+  - The site is moved to http://pyyaml.org/wiki/PySyck.
+
+* PySyck-0.55.1 (2005-08-30): Initial release.
+
+.. _GIL: http://docs.python.org/api/threads.html
+
+
+Author and Copyright
+====================
+
+The PySyck_ module was written by `Kirill Simonov`_.
+
+PySyck_ is released under the BSD license as Syck_ itself.
+
+.. _Kirill Simonov: mailto:xi@resolvent.net
+
+..
+  vim: ft=rst:
Index: /pysyck/tags/0.61.1/Makefile
===================================================================
--- /pysyck/tags/0.61.1/Makefile	(revision 29)
+++ /pysyck/tags/0.61.1/Makefile	(revision 29)
@@ -0,0 +1,52 @@
+
+.PHONY: default build force install test clean	\
+	dist-src dist-win dist-win-2.2 dist-win-2.3 dist-win-2.4
+
+PYTHON=/usr/bin/python
+REST2HTML=/usr/bin/rest2html --embed-stylesheet --stylesheet-path=/usr/share/python-docutils/stylesheets/default.css
+TEST=
+PARAMETERS=
+
+default: build README.html
+
+build:
+	${PYTHON} setup.py build ${PARAMETERS}
+
+force:
+	${PYTHON} setup.py build -f ${PARAMETERS}
+
+install: build
+	${PYTHON} setup.py install ${PARAMETERS}
+
+test: build
+	${PYTHON} tests/test_build.py -v ${TEST}
+
+clean:
+	${PYTHON} setup.py clean -a
+
+dist-src:
+	${PYTHON} setup.py sdist --formats=zip,gztar
+
+dist-win: dist-win-2.2 dist-win-2.3 dist-win-2.4
+
+dist-win-2.2: PYTHON=/c/Python22/python
+dist-win-2.2: PARAMETERS=--compiler=mingw32
+dist-win-2.2:
+	${PYTHON} setup.py build ${PARAMETERS}
+	${PYTHON} setup.py bdist_wininst
+
+dist-win-2.3: PYTHON=/c/Python23/python
+dist-win-2.3: PARAMETERS=--compiler=mingw32
+dist-win-2.3:
+	${PYTHON} setup.py build ${PARAMETERS}
+	${PYTHON} setup.py bdist_wininst --skip-build --target-version=2.3
+
+dist-win-2.4: PYTHON=/c/Python24/python
+dist-win-2.4: PARAMETERS=--compiler=mingw32
+dist-win-2.4:
+	${PYTHON} setup.py build ${PARAMETERS}
+	${PYTHON} setup.py bdist_wininst --skip-build --target-version=2.4
+
+README.html: README.txt
+	${REST2HTML} README.txt README.html
+
Index: /pysyck/tags/0.61.1/sandbox/my-parser/canonical.py
===================================================================
--- /pysyck/tags/0.61.1/sandbox/my-parser/canonical.py	(revision 37)
+++ /pysyck/tags/0.61.1/sandbox/my-parser/canonical.py	(revision 37)
@@ -0,0 +1,363 @@
+
+import re, unittest
+
+class Marker(object):
+
+    def __init__(self, source, data, index, length=0):
+        self.source = source
+        self.data = data
+        self.index = index
+        self.length = length
+        self._line = None
+        self._position = None
+
+    def line(self):
+        if not self._line:
+            self._make_line_position()
+        return self._line
+
+    def position(self):
+        if not self._position:
+            self._make_line_position()
+        return self._position
+
+    def _make_line_position(self):
+        line_start = self.data.rfind('\n', 0, self.index)+1
+        line_end = self.data.find('\n', self.index)+1
+        if line_end == 0:
+            line_end = len(self.data)
+        self._line = (line_start, line_end)
+        row = self.data.count('\n', 0, line_start)
+        col = self.index-line_start
+        self._position = (row, col)
+
+class Error(Exception):
+
+    def __init__(self, message=None, marker=None):
+        Exception.__init__(self)
+        self.message = message
+        if isinstance(marker, list):
+            if marker:
+                marker = marker[0].marker
+            else:
+                marker = None
+        self.marker = marker
+
+    def __str__(self):
+        if self.marker is not None:
+            row, col = self.marker.position()
+            start, end = self.marker.line()
+            error_position = "source \"%s\", line %s, column %s:\n%s\n"  \
+                    % (self.marker.source, row+1, col+1, self.marker.data[start:end].rstrip().encode('utf-8'))
+            error_pointer = " " * col + "^\n"
+        else:
+            error_position = ""
+            error_pointer = ""
+        if self.message is not None:
+            error_message = self.message
+        else:
+            error_message = "YAML error"
+        return error_position+error_pointer+error_message
+
+def scanner_rule(pattern):
+    def make(function):
+        function.pattern = pattern
+        return function
+    return make
+
+class Token:
+
+    def __init__(self, name, value, marker=None):
+        self.name = name
+        self.value = value
+        self.marker = marker
+
+class YAMLScanner:
+
+    @scanner_rule(r"\s+")
+    def WHITESPACE(self, tokens, token):
+        pass
+            
+    @scanner_rule(r"%YAML")
+    def DIRECTIVE_NAME(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r"\d+\.\d+")
+    def DIRECTIVE_VALUE(self, tokens, token):
+        token.value = float(token.value)
+        tokens.append(token)
+
+    @scanner_rule(r"---")
+    def DOCUMENT_SEPARATOR(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r"\[")
+    def SEQ_START(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r"\]")
+    def SEQ_END(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r"\{")
+    def MAP_START(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r"\}")
+    def MAP_END(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r"\?")
+    def MAP_KEY(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r":")
+    def MAP_VALUE(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r",")
+    def COLL_ENTRY(self, tokens, token):
+        tokens.append(token)
+
+    @scanner_rule(r"!\S*")
+    def TAG(self, tokens, token):
+        if token.value == "!":
+            token.value = ""
+        elif token.value.startswith(r"!<") and token.value.endswith(r">"):
+            token.value = token.value[2:-1]
+        elif token.value.startswith(r"!!"):
+            token.value = "tag:yaml.org,2002:" + token.value[2:]
+        tokens.append(token)
+
+    escapes_re = re.compile(r"\\(?P<value>[\\\"abefnrtvNLP_0 ]|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})", re.U)
+    escapes = {
+        "\\": u"\\",
+        "\"": u"\"",
+        " ": u" ",
+        "a": u"\x07",
+        "b": u"\x08",
+        "e": u"\x1B",
+        "f": u"\x0C",
+        "n": u"\x0A",
+        "r": u"\x0D",
+        "t": u"\x09",
+        "v": u"\x0B",
+        "N": u"\u0085",
+        "L": u"\u2028",
+        "P": u"\u2029",
+        "_": u"_",
+        "0": u"\x00",
+    }
+
+    def escapes_replace(self, match):
+        value = match.group('value')
+        if len(value) == 1:
+            return self.escapes[value]
+        else:
+            return unichr(int(value[1:], 16))
+
+    @scanner_rule(r"\"(?:[^\"\\]|\\[\\\"abefnrtvNLP_0 ]|\\x[0-9A-Fa-f]{2}|\\u[0-9A-Fa-f]{4}|\\U[0-9A-Fa-f]{8})*\"")
+    def SCALAR(self, tokens, token):
+        token.value = self.escapes_re.sub(self.escapes_replace, token.value[1:-1])
+        tokens.append(token)
+
+    @scanner_rule(r"&\S+")
+    def ANCHOR(self, tokens, token):
+        token.value = token.value[1:]
+        tokens.append(token)
+
+    @scanner_rule(r"\*\S+")
+    def ALIAS(self, tokens, token):
+        token.value = token.value[1:]
+        tokens.append(token)
+
+    def __init__(self):
+        rules = []
+        for name, function in vars(self.__class__).items():
+            if hasattr(function, 'pattern'):
+                rules.append((name, function.pattern))
+        patterns = [r'(?P<%s>%s)' % (name, pattern) for name, pattern in rules]
+        self.scanner_re = re.compile('|'.join(patterns), re.U)
+
+    def scan(self, source, data):
+        data = unicode(data, 'utf-8')
+        tokens = []
+        index = 0
+        while index < len(data):
+            match = self.scanner_re.match(data, index)
+            if not match:
+                raise Error("invalid token", Marker(source, data, index))
+            name = match.lastgroup
+            value = match.group()
+            marker = Marker(source, data, index, len(value))
+            token = Token(name, value, marker)
+            processor = getattr(self, name)
+            processor(tokens, token)
+            index += len(value)
+        return tokens
+
+class Value:
+    def __init__(self, tag, anchor, value):
+        self.tag = tag
+        self.anchor = anchor
+        self.value = value
+    def __eq__(self, other):
+        return (self.__class__, self.__dict__) == (other.__class__, other.__dict__)
+
+class Scalar(Value):
+    pass
+
+class Sequence(Value):
+    pass
+
+class Mapping(Value):
+    pass
+
+class Alias:
+    def __init__(self, link):
+        self.link = link
+    def __eq__(self, other):
+        return (self.__class__, self.__dict__) == (other.__class__, other.__dict__)
+
+class YAMLParser:
+
+    # stream: document*
+    def parse_stream(self, tokens):
+        documents = []
+        while tokens:
+            if self.check_token(tokens, ['DIRECTIVE_NAME', 'DOCUMENT_SEPARATOR']):
+                documents.append(self.parse_document(tokens))
+            else:
+                raise Error("document is expected", tokens)
+        return documents
+
+    # document: (DIRECTIVE_NAME DIRECTIVE_VALUE)? DOCUMENT_SEPARATOR node?
+    def parse_document(self, tokens):
+        node = None
+        if self.check_token(tokens, ['DIRECTIVE_NAME']):
+            self.eat_token(tokens, 'DIRECTIVE_NAME')
+            self.eat_token(tokens, 'DIRECTIVE_VALUE')
+        self.eat_token(tokens, 'DOCUMENT_SEPARATOR')
+        if self.check_token(tokens, ['TAG', 'ANCHOR', 'ALIAS', 'SCALAR', 'SEQ_START', 'MAP_START']):
+            node = self.parse_node(tokens)
+        return node
+
+    # node: TAG? ANCHOR? (SCALAR|sequence|mapping) | ALIAS")
+    def parse_node(self, tokens):
+        if self.check_token(tokens, ['ALIAS']):
+            return Alias(self.eat_token(tokens, 'ALIAS'))
+        else:
+            tag = None
+            anchor = None
+            if self.check_token(tokens, ['TAG']):
+                tag = self.eat_token(tokens, 'TAG')
+            if self.check_token(tokens, ['ANCHOR']):
+                anchor = self.eat_token(tokens, 'ANCHOR')
+            if self.check_token(tokens, ['SCALAR']):
+                return Scalar(tag, anchor, self.eat_token(tokens, 'SCALAR'))
+            elif self.check_token(tokens, ['SEQ_START']):
+                return Sequence(tag, anchor, self.parse_sequence(tokens))
+            elif self.check_token(tokens, ['MAP_START']):
+                return Mapping(tag, anchor, self.parse_mapping(tokens))
+            else:
+                raise Error("SCALAR, sequence or mapping is expected", tokens)
+
+    # sequence: SEQ_START (node (COLL_ENTRY node)*)? SEQ_END
+    def parse_sequence(self, tokens):
+        values = []
+        self.eat_token(tokens, 'SEQ_START')
+        if not self.check_token(tokens, ['SEQ_END']):
+            values.append(self.parse_node(tokens))
+            while not self.check_token(tokens, ['SEQ_END']):
+                self.eat_token(tokens, 'COLL_ENTRY')
+                values.append(self.parse_node(tokens))
+        self.eat_token(tokens, 'SEQ_END')
+        return values
+
+    # mapping: MAP_START (map_entry (COLL_ENTRY map_entry)*)? MAP_END
+    def parse_mapping(self, tokens):
+        values = []
+        self.eat_token(tokens, 'MAP_START')
+        if not self.check_token(tokens, ['MAP_END']):
+            values.append(self.parse_map_entry(tokens))
+            while not self.check_token(tokens, ['MAP_END']):
+                self.eat_token(tokens, 'COLL_ENTRY')
+                values.append(self.parse_map_entry(tokens))
+        self.eat_token(tokens, 'MAP_END')
+        return values
+
+    # map_entry: MAP_KEY node MAP_VALUE node
+    def parse_map_entry(self, tokens):
+        self.eat_token(tokens, 'MAP_KEY')
+        key = self.parse_node(tokens)
+        self.eat_token(tokens, 'MAP_VALUE')
+        value = self.parse_node(tokens)
+        return (key, value)
+
+    def check_token(self, tokens, names):
+        return tokens and tokens[0].name in names
+
+    def eat_token(self, tokens, name):
+        if not tokens:
+            raise Error("%s is expected, EOF is found" % name, tokens)
+        if tokens and tokens[0].name != name:
+            raise Error("%s is expected, %s is found" % (name, tokens[0].name), tokens)
+        return tokens.pop(0).value
+
+    def __init__(self):
+        self.scanner = YAMLScanner()
+
+    def parse(self, source, data):
+        tokens = self.scanner.scan(source, data)
+        return self.parse_stream(tokens)
+
+class Test(unittest.TestCase):
+
+    def testScalar(self):
+        parser = YAMLParser()
+        documents = parser.parse('testScalar', """--- !!str "foo"\n""")
+        self.failUnlessEqual(documents, [Scalar('tag:yaml.org,2002:str', None, "foo")])
+
+    def testSequence(self):
+        parser = YAMLParser()
+        documents = parser.parse('testSequence', """%YAML 1.1\n--- !!seq\n["foo", "bar", "baz"]\n""")
+        self.failUnlessEqual(documents, [
+            Sequence('tag:yaml.org,2002:seq', None, [
+                Scalar(None, None, "foo"),
+                Scalar(None, None, "bar"),
+                Scalar(None, None, "baz"),
+            ])
+        ])
+
+    def testMapping(self):
+        parser = YAMLParser()
+        documents = parser.parse('testMapping', """%YAML 1.1\n--- !!map\n{ ? "foo" : "bar", ? "baz" : "bat" }\n""")
+        self.failUnlessEqual(documents, [
+            Mapping('tag:yaml.org,2002:map', None, [
+                (Scalar(None, None, "foo"), Scalar(None, None, "bar")),
+                (Scalar(None, None, "baz"), Scalar(None, None, "bat")),
+            ])
+        ])
+
+    def testAlias(self):
+        parser = YAMLParser()
+        documents = parser.parse('testSequence', """%YAML 1.1\n--- !!seq\n[ &id "foo", *id ]\n""")
+        self.failUnlessEqual(documents, [
+            Sequence('tag:yaml.org,2002:seq', None, [
+                Scalar(None, 'id', "foo"),
+                Alias('id'),
+            ])
+        ])
+
+    def testMultiplyDocuments(self):
+        parser = YAMLParser()
+        documents = parser.parse('testMultiplyDocuments', """%YAML 1.1\n--- "foo"\n--- "bar"\n--- "baz"\n""")
+        self.failUnlessEqual(documents, [
+            Scalar(None, None, "foo"),
+            Scalar(None, None, "bar"),
+            Scalar(None, None, "baz"),
+        ])
+
+if __name__ == '__main__':
+    unittest.main()
+
Index: /pysyck/tags/0.61.1/sandbox/my-parser/parser2_test.py
===================================================================
--- /pysyck/tags/0.61.1/sandbox/my-parser/parser2_test.py	(revision 40)
+++ /pysyck/tags/0.61.1/sandbox/my-parser/parser2_test.py	(revision 40)
@@ -0,0 +1,838 @@
+
+import unittest
+import parser2
+
+EX99 = r"""
+key:
+value
+"""
+
+TOKENS99 = """
+Should produce error.
+"""
+
+EX1 = r"""
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+"""
+
+TOKENS1 = """
+BLOCK_SEQ_START
+ENTRY SCALAR
+ENTRY SCALAR
+ENTRY SCALAR
+BLOCK_END
+"""
+
+NODES1 = [True, True, True]
+
+EX2 = r"""
+hr:  65    # Home runs
+avg: 0.278 # Batting average
+rbi: 147   # Runs Batted In
+"""
+
+TOKENS2 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES2 = [(True, True), (True, True), (True, True)]
+
+EX3 = r"""
+american:
+  - Boston Red Sox
+  - Detroit Tigers
+  - New York Yankees
+national:
+  - New York Mets
+  - Chicago Cubs
+  - Atlanta Braves
+"""
+
+TOKENS3 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY SCALAR
+    ENTRY SCALAR
+    ENTRY SCALAR
+    BLOCK_END
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY SCALAR
+    ENTRY SCALAR
+    ENTRY SCALAR
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES3 = [(True, [True, True, True]), (True, [True, True, True])]
+
+EX4 = r"""
+-
+  name: Mark McGwire
+  hr:   65
+  avg:  0.278
+-
+  name: Sammy Sosa
+  hr:   63
+  avg:  0.288
+"""
+
+TOKENS4 = """
+BLOCK_SEQ_START
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES4 = [[(True, True), (True, True), (True, True)], [(True, True), (True, True), (True, True)]]
+
+EX5 = r"""
+- [name        , hr, avg  ]
+- [Mark McGwire, 65, 0.278]
+- [Sammy Sosa  , 63, 0.288]
+"""
+
+TOKENS5 = """
+BLOCK_SEQ_START
+ENTRY FLOW_SEQ_START SCALAR ENTRY SCALAR ENTRY SCALAR FLOW_SEQ_END
+ENTRY FLOW_SEQ_START SCALAR ENTRY SCALAR ENTRY SCALAR FLOW_SEQ_END
+ENTRY FLOW_SEQ_START SCALAR ENTRY SCALAR ENTRY SCALAR FLOW_SEQ_END
+BLOCK_END
+"""
+
+NODES5 = [[True, True, True], [True, True, True], [True, True, True]]
+
+EX6 = r"""
+Mark McGwire: {hr: 65, avg: 0.278}
+Sammy Sosa: {
+    hr: 63,
+    avg: 0.288
+  }
+"""
+
+TOKENS6 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE
+    FLOW_MAP_START KEY SCALAR VALUE SCALAR ENTRY KEY SCALAR VALUE SCALAR FLOW_MAP_END
+KEY SCALAR VALUE
+    FLOW_MAP_START KEY SCALAR VALUE SCALAR ENTRY KEY SCALAR VALUE SCALAR FLOW_MAP_END
+BLOCK_END    
+"""
+
+NODES6 = [(True, [(True, True), (True, True)]), (True, [(True, True), (True, True)])]
+
+EX7 = r"""
+# Ranking of 1998 home runs
+---
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+# Team ranking
+---
+- Chicago Cubs
+- St Louis Cardinals
+"""
+
+TOKENS7 = """
+DOCUMENT_START 
+BLOCK_SEQ_START
+ENTRY SCALAR
+ENTRY SCALAR
+ENTRY SCALAR
+BLOCK_END
+
+DOCUMENT_START 
+BLOCK_SEQ_START
+ENTRY SCALAR
+ENTRY SCALAR
+BLOCK_END
+"""
+
+NODES7 = ([True, True, True], [True, True])
+
+EX8 = r"""
+---
+time: 20:03:20
+player: Sammy Sosa
+action: strike (miss)
+...
+---
+time: 20:03:47
+player: Sammy Sosa
+action: grand slam
+...
+"""
+
+TOKENS8 = """
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+DOCUMENT_END
+
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+DOCUMENT_END
+"""
+
+NODES8 = ([(True, True), (True, True), (True, True)], [(True, True), (True, True), (True, True)])
+
+EX9 = r"""
+---
+hr: # 1998 hr ranking
+  - Mark McGwire
+  - Sammy Sosa
+rbi:
+  # 1998 rbi ranking
+  - Sammy Sosa
+  - Ken Griffey
+"""
+
+TOKENS9 = """
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY SCALAR
+    ENTRY SCALAR
+    BLOCK_END
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY SCALAR
+    ENTRY SCALAR
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES9 = [(True, [True, True]), (True, [True, True])]
+
+EX10 = r"""
+---
+hr:
+  - Mark McGwire
+  # Following node labeled SS
+  - &SS Sammy Sosa
+rbi:
+  - *SS # Subsequent occurrence
+  - Ken Griffey
+"""
+
+TOKENS10 = """
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY SCALAR
+    ENTRY ANCHOR SCALAR
+    BLOCK_END
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY ALIAS
+    ENTRY SCALAR
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES10 = [(True, [True, True]), (True, ['*', True])]
+
+EX11 = r"""
+? - Detroit Tigers
+  - Chicago cubs
+:
+  - 2001-07-23
+
+? [ New York Yankees,
+    Atlanta Braves ]
+: [ 2001-07-02, 2001-08-12,
+    2001-08-14 ]
+"""
+
+TOKENS11 = """
+BLOCK_MAP_START
+KEY
+    BLOCK_SEQ_START
+    ENTRY SCALAR
+    ENTRY SCALAR
+    BLOCK_END
+VALUE
+    BLOCK_SEQ_START
+    ENTRY SCALAR
+    BLOCK_END
+KEY
+    FLOW_SEQ_START SCALAR ENTRY SCALAR FLOW_SEQ_END
+VALUE
+    FLOW_SEQ_START SCALAR ENTRY SCALAR ENTRY SCALAR FLOW_SEQ_END
+BLOCK_END
+"""
+
+NODES11 = [([True, True], [True]), ([True, True], [True, True, True])]
+
+EX12 = r"""
+---
+# products purchased
+- item    : Super Hoop
+  quantity: 1
+- item    : Basketball
+  quantity: 4
+- item    : Big Shoes
+  quantity: 1
+"""
+
+TOKENS12 = """
+DOCUMENT_START
+BLOCK_SEQ_START
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES12 = [[(True, True), (True, True)], [(True, True), (True, True)], [(True, True), (True, True)]]
+
+EX13 = r"""
+# ASCII Art
+--- |
+  \//||\/||
+  // ||  ||__
+"""
+
+TOKENS13 = """
+DOCUMENT_START SCALAR
+"""
+
+NODES13 = True
+
+EX14 = r"""
+---
+  Mark McGwire's
+  year was crippled
+  by a knee injury.
+"""
+
+TOKENS14 = """
+DOCUMENT_START SCALAR
+"""
+
+NODES14 = True
+
+EX15 = r"""
+>
+ Sammy Sosa completed another
+ fine season with great stats.
+
+   63 Home Runs
+   0.288 Batting Average
+
+ What a year!
+"""
+
+TOKENS15 = """
+SCALAR
+"""
+
+NODES15 = True
+
+EX16 = r"""
+name: Mark McGwire
+accomplishment: >
+  Mark set a major league
+  home run record in 1998.
+stats: |
+  65 Home Runs
+  0.278 Batting Average
+"""
+
+TOKENS16 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES16 = [(True, True), (True, True), (True, True)]
+
+EX17 = r"""
+unicode: "Sosa did fine.\u263A"
+control: "\b1998\t1999\t2000\n"
+hexesc:  "\x13\x10 is \r\n"
+
+single: '"Howdy!" he cried.'
+quoted: ' # not a ''comment''.'
+tie-fighter: '|\-*-/|'
+"""
+
+TOKENS17 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES17 = [(True, True), (True, True), (True, True), (True, True), (True, True), (True, True)]
+
+EX18 = r"""
+plain:
+  This unquoted scalar
+  spans many lines.
+
+quoted: "So does this
+  quoted scalar.\n"
+"""
+
+TOKENS18 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES18 = [(True, True), (True, True)]
+
+EX19 = r"""
+canonical: 12345
+decimal: +12,345
+sexagesimal: 3:25:45
+octal: 014
+hexadecimal: 0xC
+"""
+
+TOKENS19 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES19 = [(True, True), (True, True), (True, True), (True, True), (True, True)]
+
+EX20 = r"""
+canonical: 1.23015e+3
+exponential: 12.3015e+02
+sexagesimal: 20:30.15
+fixed: 1,230.15
+negative infinity: -.inf
+not a number: .NaN
+"""
+
+TOKENS20 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES20 = [(True, True), (True, True), (True, True), (True, True), (True, True), (True, True)]
+
+EX21 = r"""
+null: ~
+true: y
+false: n
+string: '12345'
+"""
+
+TOKENS21 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES21 = [(True, True), (True, True), (True, True), (True, True)]
+
+EX22 = r"""
+canonical: 2001-12-15T02:59:43.1Z
+iso8601: 2001-12-14t21:59:43.10-05:00
+spaced: 2001-12-14 21:59:43.10 -5
+date: 2002-12-14
+"""
+
+TOKENS22 = """
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES22 = [(True, True), (True, True), (True, True), (True, True)]
+
+EX23 = r"""
+---
+not-date: !!str 2002-04-28
+
+picture: !!binary |
+ R0lGODlhDAAMAIQAAP//9/X
+ 17unp5WZmZgAAAOfn515eXv
+ Pz7Y6OjuDg4J+fn5OTk6enp
+ 56enmleECcgggoBADs=
+
+application specific tag: !something |
+ The semantics of the tag
+ above may be different for
+ different documents.
+"""
+
+TOKENS23 = """
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE TAG SCALAR
+KEY SCALAR VALUE TAG SCALAR
+KEY SCALAR VALUE TAG SCALAR
+BLOCK_END
+"""
+
+NODES23 = [(True, True), (True, True), (True, True)]
+
+EX24 = r"""
+%TAG ! tag:clarkevans.com,2002:
+--- !shape
+  # Use the ! handle for presenting
+  # tag:clarkevans.com,2002:circle
+- !circle
+  center: &ORIGIN {x: 73, y: 129}
+  radius: 7
+- !line
+  start: *ORIGIN
+  finish: { x: 89, y: 102 }
+- !label
+  start: *ORIGIN
+  color: 0xFFEEBB
+  text: Pretty vector drawing.
+"""
+
+TOKENS24 = """
+DIRECTIVE
+DOCUMENT_START TAG
+BLOCK_SEQ_START
+ENTRY TAG
+    BLOCK_MAP_START
+    KEY SCALAR VALUE ANCHOR
+        FLOW_MAP_START KEY SCALAR VALUE SCALAR ENTRY KEY SCALAR VALUE SCALAR FLOW_MAP_END
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+ENTRY TAG
+    BLOCK_MAP_START
+    KEY SCALAR VALUE ALIAS
+    KEY SCALAR VALUE
+        FLOW_MAP_START KEY SCALAR VALUE SCALAR ENTRY KEY SCALAR VALUE SCALAR FLOW_MAP_END
+    BLOCK_END
+ENTRY TAG
+    BLOCK_MAP_START
+    KEY SCALAR VALUE ALIAS
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES24 = [[(True, [(True, True), (True, True)]), (True, True)],
+    [(True, '*'), (True, [(True, True), (True, True)])],
+    [(True, '*'), (True, True), (True, True)]]
+
+EX25 = r"""
+# sets are represented as a
+# mapping where each key is
+# associated with the empty string
+--- !!set
+? Mark McGwire
+? Sammy Sosa
+? Ken Griff
+"""
+
+TOKENS25 = """
+DOCUMENT_START TAG
+BLOCK_MAP_START
+KEY SCALAR
+KEY SCALAR
+KEY SCALAR
+BLOCK_END
+"""
+
+NODES25 = [(True, None), (True, None), (True, None)]
+
+EX26 = r"""
+# ordered maps are represented as
+# a sequence of mappings, with
+# each mapping having one key
+--- !!omap
+- Mark McGwire: 65
+- Sammy Sosa: 63
+- Ken Griffy: 58
+"""
+
+TOKENS26 = """
+DOCUMENT_START TAG
+BLOCK_SEQ_START
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+ENTRY
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES26 = [[(True, True)], [(True, True)], [(True, True)]]
+
+EX27 = r"""
+--- !<tag:clarkevans.com,2002:invoice>
+invoice: 34843
+date   : 2001-01-23
+bill-to: &id001
+    given  : Chris
+    family : Dumars
+    address:
+        lines: |
+            458 Walkman Dr.
+            Suite #292
+        city    : Royal Oak
+        state   : MI
+        postal  : 48046
+ship-to: *id001
+product:
+    - sku         : BL394D
+      quantity    : 4
+      description : Basketball
+      price       : 450.00
+    - sku         : BL4438H
+      quantity    : 1
+      description : Super Hoop
+      price       : 2392.00
+tax  : 251.42
+total: 4443.52
+comments:
+    Late afternoon is best.
+    Backup contact is Nancy
+    Billsmer @ 338-4338.
+"""
+
+TOKENS27 = """
+DOCUMENT_START TAG
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE ANCHOR
+    BLOCK_MAP_START
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE SCALAR
+    KEY SCALAR VALUE
+        BLOCK_MAP_START
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        BLOCK_END
+    BLOCK_END
+KEY SCALAR VALUE ALIAS
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY
+        BLOCK_MAP_START
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        BLOCK_END
+    ENTRY
+        BLOCK_MAP_START
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        BLOCK_END
+    BLOCK_END
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+"""
+
+NODES27 = [
+    (True, True), (True, True), (True, [(True, True), (True, True), (True, [(True, True), (True, True), (True, True), (True, True)])]), (True, '*'),
+    (True, [[(True, True), (True, True), (True, True), (True, True)], [(True, True), (True, True), (True, True), (True, True)]]), (True, True), (True, True), (True, True),
+]
+
+EX28 = r"""
+---
+Time: 2001-11-23 15:01:42 -5
+User: ed
+Warning:
+  This is an error message
+  for the log file
+---
+Time: 2001-11-23 15:02:31 -5
+User: ed
+Warning:
+  A slightly different error
+  message.
+---
+Date: 2001-11-23 15:03:17 -5
+User: ed
+Fatal:
+  Unknown variable "bar"
+Stack:
+  - file: TopClass.py
+    line: 23
+    code: |
+      x = MoreObject("345\n")
+  - file: MoreClass.py
+    line: 58
+    code: |-
+      foo = bar
+"""
+
+TOKENS28 = """
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+BLOCK_END
+
+DOCUMENT_START
+BLOCK_MAP_START
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE SCALAR
+KEY SCALAR VALUE
+    BLOCK_SEQ_START
+    ENTRY
+        BLOCK_MAP_START
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        BLOCK_END
+    ENTRY
+        BLOCK_MAP_START
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        KEY SCALAR VALUE SCALAR
+        BLOCK_END
+    BLOCK_END
+BLOCK_END
+"""
+
+NODES28 = (
+    [(True, True), (True, True), (True, True)], [(True, True), (True, True), (True, True)],
+    [(True, True), (True, True), (True, True), (True, [[(True, True), (True, True), (True, True)], [(True, True), (True, True), (True, True)]])],
+)
+
+MAX_TESTS = 100
+
+class TestParser2(unittest.TestCase):
+
+    def _testTokens(self, index, EX, TOKENS):
+        try:
+            tokens = None
+            scanner = parser2.Scanner()
+            tokens = scanner.scan('EX'+str(index), EX)
+            self.failUnlessEqual(tokens, TOKENS.split())
+        except:
+            print "EXAMPLE #%s" % index
+            print "EX:"
+            print EX
+            print "TOKENS:"
+            print TOKENS
+            print "RESULT:", tokens
+            print "EXPECT:", TOKENS.split()
+            raise
+
+    def _testNodes(self, index, EX, NODES):
+        try:
+            nodes = None
+            parser = parser2.Parser()
+            nodes = parser.parse('EX'+str(index), EX)
+            self.failUnlessEqual(nodes, NODES)
+        except:
+            print "EXAMPLE #%s" % index
+            print "EX:"
+            print EX
+            print "RESULT:", nodes
+            print "EXPECT:", NODES
+            raise
+
+    @classmethod
+    def add_tests(cls, test_method_name, *tests):
+        for index in range(1, MAX_TESTS):
+            args = []
+            for name in tests:
+                if name+str(index) in globals():
+                    args.append(globals()[name+str(index)])
+                else:
+                    break
+            else:
+                def test_method(self, index=index, args=args):
+                    getattr(self, '_'+test_method_name)(index, *args)
+                test_method.__name__ = '%s%02d' % (test_method_name, index)
+                setattr(cls, test_method.__name__, test_method)
+
+TestParser2.add_tests('testTokens', 'EX', 'TOKENS')
+TestParser2.add_tests('testNodes', 'EX', 'NODES')
+
+if __name__ == '__main__':
+    unittest.main()
+
Index: /pysyck/tags/0.61.1/sandbox/my-parser/parser2.py
===================================================================
--- /pysyck/tags/0.61.1/sandbox/my-parser/parser2.py	(revision 37)
+++ /pysyck/tags/0.61.1/sandbox/my-parser/parser2.py	(revision 37)
@@ -0,0 +1,731 @@
+# Tokens:
+# YAML_DIRECTIVE: ^ '%' YAML ' '+ (version: \d+ '.' \d+) s-l-comments
+# TAG_DIRECTIVE: ^ % TAG ' '+ (handle: '!' (word-char* '!')? )  (prefix: uri-char+) s-l-comments
+# RESERVED_DIRECTIVE: ^ '%' (directive-name: ns-char+) (' '+ (directive-parameter: ns-char+))* s-l-comments
+# DOCUMENT_START: ^ '---' (' ' | b-any)
+# DOCUMENT_END: ^ ... (' ' | b-any)
+# TAG: '!' ( ('<' uri-char+ '>') | uri-char* ) (' ' | b-any)
+# ANCHOR: '&' ns-char+      <-- bug
+# ALIAS: * ns-char+         <-- bug
+# ENTRY(block): '-' (' ' | b-any)
+# KEY(block): '?' (' ' | b-any)
+# VALUE(block): ':' (' ' | b-any)
+# FLOW_SEQ_START: '['
+# FLOW_SEQ_END: ']'
+# FLOW_MAP_START: '{'
+# FLOW_MAP_END: '}'
+# KEY(flow): '?'
+# VALUE(flow): ':'
+# ENTRY(flow): ','
+# PLAIN: (plain-char - indicator) | ([-?:] plain-char) ...  <-- bugs
+# DOUBLE_QUOTED: '"' ...
+# SINGLE_QUOTED: ''' ...
+# LITERAL: '|' ...
+# FOLDED: '>' ...
+# BLOCK_SEQ_START: indentation before '-'.
+# BLOCK_MAP_START: indentation before '?' or a simple key.
+# BLOCK_END: no indentation
+# LINE: end of line
+
+# b-generic: \r \n | \r | \n | #x85
+# b-specific: #x2028 | #x2029
+# b-any: b-generic | b-specific
+# hex-digit: [0-9A-Fa-f]
+# word-char: [0-9A-Za-z-]
+# uri-char: word-char | % hex-digit hex-digit | [;/?:@&=+$,_.!~*'()[]]
+
+# Production rules:
+# stream :== implicit_document? explicit_document* END
+# explicit_document :== DIRECTIVE* DOCUMENT_START block_node? DOCUMENT_END?
+# implicit_document :== block_node DOCUMENT_END?
+# block_node :== ALIAS | properties? block_content
+# flow_node :== ALIAS | properties? flow_content
+# properties :== TAG ANCHOR? | ANCHOR TAG?
+# block_content :== block_collection | flow_collection | SCALAR
+# flow_content :== flow_collection | SCALAR
+# block_collection :== block_sequence | block_mapping
+# block_sequence :== BLOCK_SEQ_START (ENTRY block_node?)* BLOCK_END
+# block_mapping :== BLOCK_MAP_START ((KEY block_node_or_indentless_sequence?)? (VALUE block_node_or_indentless_sequence?)?)* BLOCK_END
+# block_node_or_indentless_sequence :== ALIAS | properties? (block_content | indentless_block_sequence)
+# indentless_block_sequence :== (ENTRY block_node?)+
+# flow_collection :== flow_sequence | flow_mapping
+# flow_sequence :== FLOW_SEQ_START (flow_sequence_entry ENTRY)* flow_sequence_entry? FLOW_SEQ_END
+# flow_sequence_entry :== flow_node | KEY flow_node (VALUE flow_node?)?
+# flow_mapping :== FLOW_MAP_START flow_mapping_entry ENTRY)* flow_mapping_entry? FLOW_MAP_END
+# flow_mapping_entry :== flow_node | KEY flow_node (VALUE flow_node?)?
+
+# FIRST(rule) sets:
+# stream: {}
+# explicit_document: { DIRECTIVE DOCUMENT_START }
+# implicit_document: block_node
+# block_node: { ALIAS TAG ANCHOR SCALAR BLOCK_SEQ_START BLOCK_MAP_START FLOW_SEQ_START FLOW_MAP_START }
+# flow_node: { ALIAS TAG ANCHOR SCALAR FLOW_SEQ_START FLOW_MAP_START }
+# block_content: { BLOCK_SEQ_START BLOCK_MAP_START FLOW_SEQ_START FLOW_MAP_START SCALAR }
+# flow_content: { FLOW_SEQ_START FLOW_MAP_START SCALAR }
+# block_collection: { BLOCK_SEQ_START BLOCK_MAP_START }
+# flow_collection: { FLOW_SEQ_START FLOW_MAP_START }
+# block_sequence: { BLOCK_SEQ_START }
+# block_mapping: { BLOCK_MAP_START }
+# block_node_or_indentless_sequence: { ALIAS TAG ANCHOR SCALAR BLOCK_SEQ_START BLOCK_MAP_START FLOW_SEQ_START FLOW_MAP_START ENTRY }
+# indentless_sequence: { ENTRY }
+# flow_collection: { FLOW_SEQ_START FLOW_MAP_START }
+# flow_sequence: { FLOW_SEQ_START }
+# flow_mapping: { FLOW_MAP_START }
+# flow_sequence_entry: { ALIAS TAG ANCHOR SCALAR FLOW_SEQ_START FLOW_MAP_START KEY }
+# flow_mapping_entry: { ALIAS TAG ANCHOR SCALAR FLOW_SEQ_START FLOW_MAP_START KEY }
+
+class Marker(object):
+
+    def __init__(self, source, data, index, length=0):
+        self.source = source
+        self.data = data
+        self.index = index
+        self.length = length
+        self._line = None
+        self._position = None
+
+    def line(self):
+        if not self._line:
+            self._make_line_position()
+        return self._line
+
+    def position(self):
+        if not self._position:
+            self._make_line_position()
+        return self._position
+
+    def _make_line_position(self):
+        allow_block_collection = self.data.rfind('\n', 0, self.index)+1
+        line_end = self.data.find('\n', self.index)+1
+        if line_end == 0:
+            line_end = len(self.data)
+        self._line = (allow_block_collection, line_end)
+        row = self.data.count('\n', 0, allow_block_collection)
+        col = self.index-allow_block_collection
+        self._position = (row, col)
+
+class Error(Exception):
+
+    def __init__(self, message=None, marker=None):
+        Exception.__init__(self)
+        self.message = message
+        self.marker = marker
+
+    def __str__(self):
+        if self.marker is not None:
+            row, col = self.marker.position()
+            start, end = self.marker.line()
+            error_position = "source \"%s\", line %s, column %s:\n%s\n"  \
+                    % (self.marker.source, row+1, col+1, self.marker.data[start:end].rstrip().encode('utf-8'))
+            error_pointer = " " * col + "^\n"
+        else:
+            error_position = ""
+            error_pointer = ""
+        if self.message is not None:
+            error_message = self.message
+        else:
+            error_message = "YAML error"
+        return error_position+error_pointer+error_message
+
+class Scanner:
+
+    def scan(self, source, data):
+        self.source = source
+        self.data = data
+        self.flow_level = 0
+        self.indents = []
+        self.indent = -1
+        self.index = 0
+        self.line = 0
+        self.column = 0
+        self.allow_block_collection = True
+        self.guess_simple_key = False
+        self.guess_simple_key_token = None
+        self.guess_simple_key_indent = None
+        self.allow_flow_key = False
+        self.guess_flow_key_levels = []
+        self.guess_flow_key_tokens = []
+        self.tokens = []
+        while self.eat_ignored() or self.fetch_token():
+            pass
+        return self.tokens
+
+    def eat_ignored(self):
+        result = False
+        while self.eat_ignored_spaces() or self.eat_ignored_comment() or self.eat_ignored_newline():
+            result = True
+        return result
+
+    def eat_ignored_spaces(self):
+        result = False
+        while self.index < len(self.data) and self.data[self.index] == ' ':
+            self.index += 1
+            self.column += 1
+            result = True
+        return result
+
+    def eat_ignored_comment(self):
+        if self.index < len(self.data) and self.data[self.index] == '#':
+            self.eat_line()
+        return False
+
+    def eat_line(self):
+        result = False
+        while self.index < len(self.data) and self.data[self.index] not in '\r\n':
+            self.index += 1
+            self.column += 1
+            result = True
+        return result
+
+    def eat_ignored_newline(self):
+        if self.index < len(self.data) and self.data[self.index] in '\r\n':
+            if self.data[self.index:self.index+2] == '\r\n':
+                self.index += 2
+            else:
+                self.index += 1
+            self.line += 1
+            self.column = 0
+            self.allow_block_collection = True
+            return True
+        return False
+
+    def eat_ns(self):
+        result = False
+        while self.index < len(self.data) and self.data[self.index] not in ' \t\r\n':
+            self.index += 1
+            self.column += 1
+            result = True
+        return result
+
+    def eat_indent(self, indent=0):
+        if indent < self.indent:
+            indent = self.indent
+        if self.column != 0:
+            return False
+        count = 0
+        while self.index < len(self.data) and self.data[self.index] == ' ' and count < indent:
+            self.index += 1
+            self.column += 1
+            count += 1
+        return count == indent
+
+    def eat_double_quoted(self):
+        if self.index < len(self.data) and self.data[self.index] == '"':
+            self.index += 1
+            self.column += 1
+            while self.index < len(self.data) and self.data[self.index] != '"':
+                if self.data[self.index:self.index+2] in ['\\\\', '\\"']:
+                    self.index += 2
+                    self.column += 2
+                elif self.data[self.index] in '\r\n':
+                    self.eat_ignored_newline()
+                    if not self.eat_indent(1):
+                        self.error("Invalid indentation")
+                else:
+                    self.index += 1
+                    self.column += 1
+            if self.index < len(self.data) and self.data[self.index] == '"':
+                self.index += 1
+                self.column += 1
+                return True
+            else:
+                self.error("unclosed double quoted scalar")
+        else:
+            return False
+
+    def eat_single_quoted(self):
+        if self.index < len(self.data) and self.data[self.index] == '\'':
+            self.index += 1
+            self.column += 1
+            while self.index < len(self.data) and   \
+                    (self.data[self.index] != '\'' or self.data[self.index:self.index+2] == '\'\''):
+                if self.data[self.index:self.index+2] == '\'\'':
+                    self.index += 2
+                    self.column += 2
+                elif self.data[self.index] in '\r\n':
+                    self.eat_ignored_newline()
+                    if not self.eat_indent(1):
+                        self.error("Invalid indentation")
+                else:
+                    self.index += 1
+                    self.column += 1
+            if self.index < len(self.data) and self.data[self.index] == '\'':
+                self.index += 1
+                self.column += 1
+                return True
+            else:
+                self.error("unclosed single quoted scalar")
+        else:
+            return False
+
+    def eat_folded(self):
+        self.eat_block_scalar()
+
+    def eat_literal(self):
+        self.eat_block_scalar()
+
+    def eat_block_scalar(self):
+        if self.index < len(self.data) and self.data[self.index] in '>|':
+            self.eat_line()
+            if not self.eat_ignored_newline():
+                return True
+            indent = self.indent+1
+            if indent < 1:
+                indent = 1
+            while (self.eat_indent(indent) and ((self.eat_line() and self.eat_ignored_newline()) or (self.eat_ignored_newline()))) or  \
+                    (self.eat_ignored_comment() and self.eat_ignored_newline()) or  \
+                    self.eat_ignored_newline():
+                pass
+            return True
+        return False
+
+    def eat_block_plain(self):
+        return self.eat_plain(block=True)
+
+    def eat_flow_plain(self):
+        return self.eat_plain(block=False)
+
+    def eat_plain(self, block):
+        indent = self.indent+1
+        if indent < 1:
+            indent = 1
+        if self.index < len(self.data):
+            if self.data[self.index] not in ' \t\r\n-?:,[]{}#&*!|>\'"%@`' or    \
+                    (block and self.data[self.index] == '-' and self.data[self.index:self.index+2] not in ['-', '- ', '-\r', '-\n']) or \
+                    (block and self.data[self.index] == '?' and self.data[self.index:self.index+2] not in ['?', '? ', '?\r', '?\n']) or \
+                    (block and self.data[self.index] == ':' and self.data[self.index:self.index+2] not in [':', ': ', ':\r', ':\n']):
+                if block and self.allow_block_collection:
+                    self.guessing_simple_key()
+                if self.flow_level and self.allow_flow_key:
+                    self.guess_flow_key_levels.append(self.flow_level)
+                    self.guess_flow_key_tokens.append(len(self.tokens))
+                self.allow_flow_key = False
+                self.index += 1
+                self.column += 1
+                space = False
+                while True:
+                    self.eat_ignored_spaces()
+                    while self.index < len(self.data) and (
+                            self.data[self.index] not in '\r\n?:,[]{}#' or
+                            (not space and self.data[self.index] == '#') or
+                            (block and self.data[self.index] in '?,[]{}') or
+                            (block and self.data[self.index] == ':' and self.data[self.index:self.index+2] not in [':', ': ', ':\r', ':\n'])):
+                        space = self.data[self.index] not in ' \t'
+                        self.index += 1
+                        self.column += 1
+                        self.allow_block_collection = False
+                    if not (self.eat_ignored_newline() and self.eat_indent(indent)):
+                        break
+                    space = True
+                return True
+        return False
+
+    def no_simple_key(self):
+        self.guess_simple_key = False
+        self.guess_simple_key_token = None
+        self.guess_simple_key_indent = None
+
+    def guessing_simple_key(self):
+        self.guess_simple_key = True
+        self.guess_simple_key_token = len(self.tokens)
+        self.guess_simple_key_indent = self.column
+
+    def unwind_indents(self, level):
+        while self.indent > level:
+            if self.flow_level:
+                self.error("Invalid indentation")
+            self.tokens.append('BLOCK_END')
+            self.indent = self.indents.pop()
+            self.no_simple_key()
+
+    def fetch_token(self):
+        self.unwind_indents(self.column)
+        if self.index < len(self.data):
+            if self.column == 0:
+                if self.data[self.index] == '%':
+                    self.tokens.append('DIRECTIVE')
+                    self.eat_line()
+                    self.no_simple_key()
+                    return True
+                if self.data[self.index:self.index+3] == '---' and  \
+                        (not self.data[self.index+3:self.index+4] or self.data[self.index+3:self.index+4] in ' \r\n'):
+                    self.unwind_indents(-1)
+                    self.tokens.append('DOCUMENT_START')
+                    self.index += 3
+                    self.column += 3
+                    self.allow_block_collection = False
+                    self.allow_flow_key = False
+                    self.guess_flow_keys = []
+                    self.no_simple_key()
+                    return True
+                if self.data[self.index:self.index+3] == '...' and   \
+                        (not self.data[self.index+3:self.index+4] or self.data[self.index+3:self.index+4] in ' \r\n'):
+                    self.unwind_indents(-1)
+                    self.tokens.append('DOCUMENT_END')
+                    self.index += 3
+                    self.column += 3
+                    self.allow_block_collection = False
+                    self.allow_flow_key = False
+                    self.guess_flow_keys = []
+                    self.no_simple_key()
+                    return True
+            if self.data[self.index] in '[]{}':
+                if self.data[self.index] == '[':
+                    self.flow_level += 1
+                    self.allow_flow_key = True
+                    self.tokens.append('FLOW_SEQ_START')
+                elif self.data[self.index] == '{':
+                    self.flow_level += 1
+                    self.allow_flow_key = True
+                    self.tokens.append('FLOW_MAP_START')
+                elif self.data[self.index] == ']':
+                    if not self.flow_level:
+                        self.error("Extra ]")
+                    self.flow_level -= 1
+                    self.allow_flow_key = False
+                    self.tokens.append('FLOW_SEQ_END')
+                else:
+                    if not self.flow_level:
+                        self.error("Extra }")
+                    self.flow_level -= 1
+                    self.allow_flow_key = False
+                    self.tokens.append('FLOW_MAP_END')
+                while self.guess_flow_key_levels and self.guess_flow_key_levels[-1] > self.flow_level:
+                    self.guess_flow_key_levels.pop()
+                    self.guess_flow_key_tokens.pop()
+                self.index += 1
+                self.column += 1
+                self.allow_block_collection = False
+                return True
+            if self.data[self.index] in '!&*':
+                if self.flow_level and self.allow_flow_key:
+                    self.guess_flow_key_levels.append(self.flow_level)
+                    self.guess_flow_key_tokens.append(len(self.tokens))
+                if not self.flow_level and self.allow_block_collection:
+                    self.guessing_simple_key()
+                if self.data[self.index] == '!':
+                    self.tokens.append('TAG')
+                elif self.data[self.index] == '&':
+                    self.tokens.append('ANCHOR')
+                else:
+                    self.tokens.append('ALIAS')
+                self.eat_ns()
+                self.allow_flow_key = False
+                self.allow_block_collection = False
+                return True
+            if self.data[self.index] == '"':
+                if self.flow_level and self.allow_flow_key:
+                    self.guess_flow_key_levels.append(self.flow_level)
+                    self.guess_flow_key_tokens.append(len(self.tokens))
+                if not self.flow_level and self.allow_block_collection:
+                    self.guessing_simple_key()
+                self.tokens.append('SCALAR')
+                self.eat_double_quoted()
+                self.allow_flow_key = False
+                self.allow_block_collection = False
+                return True
+            if self.data[self.index] == '\'':
+                if self.flow_level and self.allow_flow_key:
+                    self.guess_flow_key_levels.append(self.flow_level)
+                    self.guess_flow_key_tokens.append(len(self.tokens))
+                if not self.flow_level and self.allow_block_collection:
+                    self.guessing_simple_key()
+                self.tokens.append('SCALAR')
+                self.eat_single_quoted()
+                self.allow_flow_key = False
+                self.allow_block_collection = False
+                return True
+            if not self.flow_level:
+                if self.data[self.index] in '-?:' and \
+                        (not self.data[self.index+1:self.index+2] or self.data[self.index+1:self.index+2] in ' \r\n'):
+                    if self.guess_simple_key and self.data[self.index] == ':':
+                        self.tokens.insert(self.guess_simple_key_token, 'KEY')
+                        if self.guess_simple_key_indent > self.indent:
+                            self.indents.append(self.indent)
+                            self.indent = self.guess_simple_key_indent
+                            self.tokens.insert(self.guess_simple_key_token, 'BLOCK_MAP_START')
+                        self.tokens.append('VALUE')
+                        self.no_simple_key()
+                        self.index += 1
+                        self.column += 1
+                        self.allow_block_collection = False
+                        return True
+                    else:
+                        if not self.allow_block_collection:
+                            self.error("Block collection should start at the beginning of the line")
+                        if self.column > self.indent:
+                            self.indents.append(self.indent)
+                            self.indent = self.column
+                            if self.data[self.index] == '-':
+                                self.tokens.append('BLOCK_SEQ_START')
+                            else:
+                                self.tokens.append('BLOCK_MAP_START')
+                        if self.data[self.index] == '-':
+                            self.tokens.append('ENTRY')
+                        elif self.data[self.index] == '?':
+                            self.tokens.append('KEY')
+                        else:
+                            self.tokens.append('VALUE')
+                        self.index += 1
+                        self.column += 1
+                        #self.allow_block_collection = False
+                        self.allow_block_collection = True
+                        self.no_simple_key()
+                        return True
+                if self.data[self.index] == '>':
+                    self.no_simple_key()
+                    self.tokens.append('SCALAR')
+                    self.eat_folded()
+                    self.allow_block_collection = True
+                    return True
+                if self.data[self.index] == '|':
+                    self.no_simple_key()
+                    self.tokens.append('SCALAR')
+                    self.eat_literal()
+                    self.allow_block_collection = True
+                    return True
+                if self.eat_block_plain():
+                    self.tokens.append('SCALAR')
+                    return True
+            else:
+                if self.data[self.index] in ',?:':
+                    if self.data[self.index] == ',':
+                        self.tokens.append('ENTRY')
+                        while self.guess_flow_key_levels and self.guess_flow_key_levels[-1] >= self.flow_level:
+                            self.guess_flow_key_levels.pop()
+                            self.guess_flow_key_tokens.pop()
+                        self.allow_flow_key = True
+                    elif self.data[self.index] == '?':
+                        self.tokens.append('KEY')
+                        while self.guess_flow_key_levels and self.guess_flow_key_levels[-1] >= self.flow_level:
+                            self.guess_flow_key_levels.pop()
+                            self.guess_flow_key_tokens.pop()
+                        self.allow_flow_key = False
+                    else:
+                        self.tokens.append('VALUE')
+                        if self.guess_flow_key_levels and self.guess_flow_key_levels[-1] == self.flow_level:
+                            self.guess_flow_key_levels.pop()
+                            index = self.guess_flow_key_tokens.pop()
+                            self.tokens.insert(index, 'KEY')
+                        self.allow_flow_key =False
+                    self.index += 1
+                    self.column += 1
+                    return True
+                if self.eat_flow_plain():
+                    self.tokens.append('SCALAR')
+                    return True
+            self.error("Invalid token")
+        else:
+            self.unwind_indents(-1)
+
+    def error(self, message):
+        raise Error(message, Marker(self.source, self.data, self.index))
+
+class Parser:
+
+    def parse(self, source, data):
+        scanner = Scanner()
+        self.tokens = scanner.scan(source, data)
+        self.tokens.append('END')
+        documents = self.parse_stream()
+        if len(documents) == 1:
+            return documents[0]
+        return documents
+
+    def parse_stream(self):
+        documents = []
+        if self.tokens[0] not in ['DIRECTIVE', 'DOCUMENT_START', 'END']:
+            documents.append(self.parse_block_node())
+        while self.tokens[0] != 'END':
+            while self.tokens[0] == 'DIRECTIVE':
+                self.tokens.pop(0)
+            if self.tokens[0] != 'DOCUMENT_START':
+                self.error('DOCUMENT_START is expected')
+            self.tokens.pop(0)
+            if self.tokens[0] in ['DIRECTIVE', 'DOCUMENT_START', 'DOCUMENT_END', 'END']:
+                documents.append(None)
+            else:
+                documents.append(self.parse_block_node())
+            while self.tokens[0] == 'DOCUMENT_END':
+                self.tokens.pop(0)
+        if self.tokens[0] != 'END':
+            self.error("END is expected")
+        return tuple(documents)
+
+    def parse_block_node(self):
+        if self.tokens[0] == 'ALIAS':
+            self.tokens.pop(0)
+            return '*'
+        if self.tokens[0] == 'TAG':
+            self.tokens.pop(0)
+            if self.tokens[0] == 'ANCHOR':
+                self.tokens.pop(0)
+        elif self.tokens[0] == 'ANCHOR':
+            self.tokens.pop(0)
+            if self.tokens[0] == 'TAG':
+                self.tokens.pop(0)
+        return self.parse_block_content()
+
+    def parse_flow_node(self):
+        if self.tokens[0] == 'ALIAS':
+            self.tokens.pop(0)
+            return '*'
+        if self.tokens[0] == 'TAG':
+            self.tokens.pop(0)
+            if self.tokens[0] == 'ANCHOR':
+                self.tokens.pop(0)
+        elif self.tokens[0] == 'ANCHOR':
+            self.tokens.pop(0)
+            if self.tokens[0] == 'TAG':
+                self.tokens.pop(0)
+        return self.parse_flow_content()
+
+    def parse_block_node_or_indentless_sequence(self):
+        if self.tokens[0] == 'ALIAS':
+            self.tokens.pop(0)
+            return '*'
+        if self.tokens[0] == 'TAG':
+            self.tokens.pop(0)
+            if self.tokens[0] == 'ANCHOR':
+                self.tokens.pop(0)
+        elif self.tokens[0] == 'ANCHOR':
+            self.tokens.pop(0)
+            if self.tokens[0] == 'TAG':
+                self.tokens.pop(0)
+        if self.tokens[0] == 'ENTRY':
+            return self.parse_indentless_sequence(self)
+        return self.parse_block_content()
+
+    def parse_block_content(self):
+        if self.tokens[0] == 'SCALAR':
+            self.tokens.pop(0)
+            return True
+        elif self.tokens[0] == 'BLOCK_SEQ_START':
+            return self.parse_block_sequence()
+        elif self.tokens[0] == 'BLOCK_MAP_START':
+            return self.parse_block_mapping()
+        elif self.tokens[0] == 'FLOW_SEQ_START':
+            return self.parse_flow_sequence()
+        elif self.tokens[0] == 'FLOW_MAP_START':
+            return self.parse_flow_mapping()
+        else:
+            self.error('block content is expected')
+
+    def parse_flow_content(self):
+        if self.tokens[0] == 'SCALAR':
+            self.tokens.pop(0)
+            return True
+        elif self.tokens[0] == 'FLOW_SEQ_START':
+            return self.parse_flow_sequence()
+        elif self.tokens[0] == 'FLOW_MAP_START':
+            return self.parse_flow_mapping()
+        else:
+            self.error('flow content is expected')
+
+    def parse_block_sequence(self):
+        sequence = []
+        if self.tokens[0] != 'BLOCK_SEQ_START':
+            self.error('BLOCK_SEQ_START is expected')
+        self.tokens.pop(0)
+        while self.tokens[0] == 'ENTRY':
+            self.tokens.pop(0)
+            if self.tokens[0] not in ['ENTRY', 'BLOCK_END']:
+                sequence.append(self.parse_block_node())
+            else:
+                sequence.append(None)
+        if self.tokens[0] != 'BLOCK_END':
+            self.error('BLOCK_END is expected')
+        self.tokens.pop(0)
+        return sequence
+
+    def parse_indentless_sequence(self):
+        sequence = []
+        while self.tokens[0] == 'ENTRY':
+            self.tokens.pop(0)
+            if self.tokens[0] not in ['ENTRY']:
+                sequence.append(self.parse_block_node())
+            else:
+                sequence.append(None)
+        return sequence
+
+    def parse_block_mapping(self):
+        mapping = []
+        if self.tokens[0] != 'BLOCK_MAP_START':
+            self.error('BLOCK_MAP_START is expected')
+        self.tokens.pop(0)
+        while self.tokens[0] in ['KEY', 'VALUE']:
+            key = None
+            value = None
+            if self.tokens[0] == 'KEY':
+                self.tokens.pop(0)
+                if self.tokens[0] not in ['KEY', 'VALUE', 'BLOCK_END']:
+                    key = self.parse_block_node_or_indentless_sequence()
+            if self.tokens[0] == 'VALUE':
+                self.tokens.pop(0)
+                if self.tokens[0] not in ['KEY', 'VALUE', 'BLOCK_END']:
+                    value = self.parse_block_node_or_indentless_sequence()
+            mapping.append((key, value))
+        if self.tokens[0] != 'BLOCK_END':
+            self.error('BLOCK_END is expected')
+        self.tokens.pop(0)
+        return mapping
+
+    def parse_flow_sequence(self):
+        sequence = []
+        if self.tokens[0] != 'FLOW_SEQ_START':
+            self.error('FLOW_SEQ_START is expected')
+        self.tokens.pop(0)
+        while self.tokens[0] != 'FLOW_SEQ_END':
+            if self.tokens[0] == 'KEY':
+                self.tokens.pop(0)
+                key = None
+                value = None
+                if self.tokens[0] != 'VALUE':
+                    key = self.parse_flow_node()
+                if self.tokens[0] == 'VALUE':
+                    self.tokens.pop(0)
+                    if self.tokens[0] not in ['ENTRY', 'FLOW_SEQ_END']:
+                        value = self.parse_flow_node()
+                sequence.append([(key, value)])
+            else:
+                sequence.append(self.parse_flow_node())
+            if self.tokens[0] not in ['ENTRY', 'FLOW_SEQ_END']:
+                self.error("ENTRY or FLOW_SEQ_END is expected")
+            if self.tokens[0] == 'ENTRY':
+                self.tokens.pop(0)
+        if self.tokens[0] != 'FLOW_SEQ_END':
+            self.error('FLOW_SEQ_END is expected')
+        self.tokens.pop(0)
+        return sequence
+
+    def parse_flow_mapping(self):
+        mapping = []
+        if self.tokens[0] != 'FLOW_MAP_START':
+            self.error('FLOW_MAP_START is expected')
+        self.tokens.pop(0)
+        while self.tokens[0] != 'FLOW_MAP_END':
+            if self.tokens[0] == 'KEY':
+                self.tokens.pop(0)
+                key = None
+                value = None
+                if self.tokens[0] != 'VALUE':
+                    key = self.parse_flow_node()
+                if self.tokens[0] == 'VALUE':
+                    self.tokens.pop(0)
+                    if self.tokens[0] not in ['ENTRY', 'FLOW_MAP_END']:
+                        value = self.parse_flow_node()
+                mapping.append((key, value))
+            else:
+                mapping.append((self.parse_flow_node(), None))
+            if self.tokens[0] not in ['ENTRY', 'FLOW_MAP_END']:
+                self.error("ENTRY or FLOW_MAP_END is expected")
+            if self.tokens[0] == 'ENTRY':
+                self.tokens.pop(0)
+        if self.tokens[0] != 'FLOW_MAP_END':
+            self.error('FLOW_MAP_END is expected')
+        self.tokens.pop(0)
+        return mapping
+
+    def error(self, message):
+        raise Error(message+': '+str(self.tokens))
+
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/Makefile
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/Makefile	(revision 2)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/Makefile	(revision 2)
@@ -0,0 +1,15 @@
+
+.PHONY: default clean
+
+default: syck-parser
+
+clean:
+	rm -f syck-parser
+	rm -f syck-parser.o
+
+syck-parser: syck-parser.o
+	gcc syck-parser.o -o syck-parser -lsyck -L${HOME}/lib -Wall -Wstrict-prototypes
+
+syck-parser.o: syck-parser.c
+	gcc -c syck-parser.c -o syck-parser.o -I${HOME}/include
+
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_my_typing.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_my_typing.yml	(revision 4)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_my_typing.yml	(revision 4)
@@ -0,0 +1,9 @@
+
+- !int '123'
+- !yamltype 'foo'
+- !python/type 'bar'
+- !domain.tld,2002/type 'baz'
+- !!private 'private'
+- !map {}
+- !seq []
+
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test.yml	(revision 4)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test.yml	(revision 4)
@@ -0,0 +1,18 @@
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+---
+1: simple string
+2: 42
+3: '1 Single Quoted String'
+4: "YAML's Double \\\"Quoted\\\" String"
+5: |
+  A block
+    with several
+      lines.
+6: |-
+  A "chomped" block
+7: >
+  A
+  folded
+   string
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_aliases.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_aliases.yml	(revision 20)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_aliases.yml	(revision 20)
@@ -0,0 +1,4 @@
+- &alias foo
+- *alias
+- *alias
+- *alias
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_binary_bug.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_binary_bug.yml	(revision 7)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_binary_bug.yml	(revision 7)
@@ -0,0 +1,40 @@
+---
+test1: !mytype |
+    data
+---
+-
+ !mytype |
+    data
+---
+ - !binary |
+               11111111111111111
+
+---
+test: Omap
+yaml: |
+   # Explicitly typed dictionary.
+   Bestiary: !omap |
+     - aardvark: African pig-like ant eater. Ugly.
+     - anteater: South-American ant eater. Two species.
+     - anaconda: South-American constrictor snake. Scary.
+     # Etc.
+ruby: |
+   {
+     'Bestiary' => YAML::Omap[
+       'aardvark', 'African pig-like ant eater. Ugly.',
+       'anteater', 'South-American ant eater. Two species.',
+       'anaconda', 'South-American constrictor snake. Scary.'
+     ]
+   }
+
+--- !test
+ - 1
+ - 2
+--- !test >
+  test
+---
+- !binary |
+ R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
+ OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+ +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
+ AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_mutable_key.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_mutable_key.yml	(revision 8)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_mutable_key.yml	(revision 8)
@@ -0,0 +1,4 @@
+---
+? {}
+: 0
+
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_single.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_single.yml	(revision 7)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_single.yml	(revision 7)
@@ -0,0 +1,1 @@
+~
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_aliases2.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_aliases2.yml	(revision 20)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_aliases2.yml	(revision 20)
@@ -0,0 +1,4 @@
+
+- &alias foo
+- *alias
+- *alias
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_my_tags.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_my_tags.yml	(revision 21)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_my_tags.yml	(revision 21)
@@ -0,0 +1,11 @@
+- !python/new:test_pickle.ACustomState
+    state: !python/tuple [1, two, [3, 4, 5]]
+- !python/new:test_pickle.InitArgs [1, two, [3, 4, 5]]
+- !python/new:test_pickle.InitArgs
+    args: 1
+    kwds: {bar: two, baz: [3, 4, 5]}
+- !python/new:test_pickle.InitArgsWithState
+    args: [1, two, [3, 4, 5]]
+    state: [3, 4, 5]
+- !python/new:test_pickle.NewArgs [1, two, [3, 4, 5]]
+
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/syck-parser.c
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/syck-parser.c	(revision 20)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/syck-parser.c	(revision 20)
@@ -0,0 +1,192 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <error.h>
+#include <string.h>
+
+#include <syck.h>
+
+#define USAGE   \
+    "Usage:\n"  \
+    "\tsyck-parser filename [implicit_typing [taguri_expansion]]\n"   \
+    "where implicit_typing and taguri_expansion equal 1 or 0 (default: 1)\n"
+
+#define INDENT "  "
+
+SyckNode *copy_node(SyckNode *n)
+{
+    SyckNode *m;
+    long i;
+
+    switch (n->kind) {
+        case syck_str_kind:
+            m = syck_new_str2(n->data.str->ptr, n->data.str->len, n->data.str->style);
+            break;
+        case syck_seq_kind:
+            m = syck_alloc_seq();
+            for (i = 0; i < syck_seq_count(n); i++) {
+                syck_seq_add(m, syck_seq_read(n, i));
+            }
+            break;
+        case syck_map_kind:
+            m = syck_alloc_map();
+            for (i = 0; i < syck_map_count(n); i++) {
+                syck_map_add(m, syck_map_read(n, map_key, i), syck_map_read(n, map_value, i));
+            }
+            break;
+    }
+
+    if (n->type_id) {
+        m->type_id = strdup(n->type_id);
+    }
+/*    else {
+        m->type_id = strdup("");
+    }*/
+    if (n->anchor) {
+        m->anchor = strdup(n->anchor);
+    }
+/*    else {
+        m->anchor = strdup("");
+    }*/
+
+    return m;
+}
+
+void release(SyckParser *p, SYMID id)
+{
+    SyckNode *n;
+    int i;
+    
+    syck_lookup_sym(p, id, (char **)&n);
+
+    switch (n->kind) {
+        case syck_seq_kind:
+            for (i = 0; i < syck_seq_count(n); i++) {
+                release(p, syck_seq_read(n, i));
+            }
+            break;
+        case syck_map_kind:
+            for (i = 0; i < syck_map_count(n); i++) {
+                release(p, syck_map_read(n, map_key, i));
+                release(p, syck_map_read(n, map_value, i));
+            }
+            break;
+    }
+    syck_free_node(n);
+}
+
+SYMID node_handler(SyckParser *p, SyckNode *n)
+{
+    SyckNode *m = copy_node(n);
+    SYMID id = syck_add_sym(p, (char *)m);
+    
+    m->id = id;
+    return id;
+}
+
+void error_handler(SyckParser *p, char *str)
+{
+    errx(1, "Error handler is not implemented");
+}
+
+SyckNode *bad_anchor_handler(SyckParser *p, char *anchor)
+{
+    errx(1, "Bad anchor handler is not implemented");
+    return NULL;
+}
+
+void output(int indent, const char *template, ...)
+{
+    va_list ap;
+    int k;
+
+    for (k = 0; k < indent; k++) {
+        printf(INDENT);
+    }
+
+    va_start(ap, template);
+    vprintf(template, ap);
+    va_end(ap);
+
+    printf("\n");
+}
+
+void traverse(SyckParser *p, int indent, SYMID id)
+{
+    SyckNode *n;
+
+    int i;
+    
+    syck_lookup_sym(p, id, (char **)&n);
+
+    switch (n->kind) {
+        case syck_str_kind:
+            output(indent, "[%d] Node Scalar (%s):", id, n->type_id);
+            output(indent+1, "Value: '%s'", n->data.str->ptr);
+            break;
+        case syck_seq_kind:
+            output(indent, "[%d] Node Sequence (%s):", id, n->type_id);
+            for (i = 0; i < syck_seq_count(n); i++) {
+                output(indent+1, "Item #%d:", i+1);
+                traverse(p, indent+2, syck_seq_read(n, i));
+            }
+            break;
+        case syck_map_kind:
+            output(indent, "[%d] Node Mapping (%s):", id, n->type_id);
+            for (i = 0; i < syck_map_count(n); i++) {
+                output(indent+1, "Key #%d:", i+1);
+                traverse(p, indent+2, syck_map_read(n, map_key, i));
+                output(indent+1, "Value #%d:", i+1);
+                traverse(p, indent+2, syck_map_read(n, map_value, i));
+            }
+            break;
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    FILE *stream;
+    SyckParser *p;
+    char *filename;
+    int implicit_typing;
+    int taguri_expansion;
+    SYMID document;
+    int document_number = 0;
+
+    if (argc <= 1 || argc > 4) {
+        fprintf(stderr, USAGE);
+        exit(1);
+    }
+    filename = argv[1];
+    implicit_typing = !(argc >= 3 && strcmp(argv[2], "0") == 0);
+    taguri_expansion = !(argc >= 4 && strcmp(argv[3], "0") == 0);
+
+    p = syck_new_parser();
+
+    syck_parser_implicit_typing(p, implicit_typing);
+    syck_parser_taguri_expansion(p, taguri_expansion);
+
+    stream = fopen(argv[1], "r");
+    if (!stream) err(1, "Cannot open file");
+    syck_parser_file(p, stream, NULL);
+
+    syck_parser_handler(p, node_handler);
+//    syck_parser_error_handler(p, error_handler);
+    syck_parser_bad_anchor_handler(p, bad_anchor_handler);
+
+    output(0, "Stream '%s':", argv[1]);
+    document = syck_parse(p);
+    document_number ++;
+    while (!p->eof) {
+        output(1, "Document #%d:", document_number);
+        traverse(p, 2, document);
+        release(p, document);
+        document = syck_parse(p);
+        document_number ++;
+    }
+    output(0, "DONE.");
+
+    return 0;
+}
+
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_recursive.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_recursive.yml	(revision 17)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_recursive.yml	(revision 17)
@@ -0,0 +1,7 @@
+--- &id002
+- &id001 Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+- *id001
+- *id002
+
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_error.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_error.yml	(revision 4)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_error.yml	(revision 4)
@@ -0,0 +1,2 @@
+ - invalid
+- document
Index: /pysyck/tags/0.61.1/sandbox/syck-parser/test_typing.yml
===================================================================
--- /pysyck/tags/0.61.1/sandbox/syck-parser/test_typing.yml	(revision 4)
+++ /pysyck/tags/0.61.1/sandbox/syck-parser/test_typing.yml	(revision 4)
@@ -0,0 +1,12 @@
+---
+- 123
+- '123'
+- abcdefg
+- |-
+  123
+- true
+- false
+- 1.2345
+- 16-07-2005
+- {}
+- []
Index: /pysyck/tags/0.61.1/sandbox/yaml-current.html
===================================================================
--- /pysyck/tags/0.61.1/sandbox/yaml-current.html	(revision 12)
+++ /pysyck/tags/0.61.1/sandbox/yaml-current.html	(revision 12)
@@ -0,0 +1,13783 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+    <title>
+  YAML Ain't Markup Language (YAML)
+      Version 1.1
+    </title>
+    <link rel="stylesheet" href="single_html.css" type="text/css" />
+    <meta name="generator" content="DocBook XSL Stylesheets V1.65.1" />
+  </head>
+  <body>
+    <div class="book" lang="en" xml:lang="en">
+      <div class="titlepage">
+        <div>
+          <div>
+            <h1 class="title"><a id="id2396259"></a>
+  YAML Ain't Markup Language (<span class="trademark">YAML</span>&#8482;)
+      Version 1.1
+    </h1>
+          </div>
+          <div>
+            <h2 class="subtitle">
+      Working Draft 2004-12-28
+    </h2>
+          </div>
+          <div>
+            <div class="authorgroup">
+              <div class="author">
+                <h3 class="author"><span class="firstname">Oren</span> <span class="surname">Ben-Kiki</span></h3>
+                <tt class="email">&lt;<a href="mailto:oren@ben-kiki.org">oren@ben-kiki.org</a>&gt;</tt>
+              </div>
+              <div class="author">
+                <h3 class="author"><span class="firstname">Clark</span> <span class="surname">Evans</span></h3>
+                <tt class="email">&lt;<a href="mailto:cce@clarkevans.com">cce@clarkevans.com</a>&gt;</tt>
+              </div>
+              <div class="author">
+                <h3 class="author"><span class="firstname">Brian</span> <span class="surname">Ingerson</span></h3>
+                <tt class="email">&lt;<a href="mailto:ingy@ttul.org">ingy@ttul.org</a>&gt;</tt>
+              </div>
+            </div>
+          </div>
+          <div>
+            <p class="releaseinfo">
+      <span class="emphasis"><em>This version:</em></span>
+      <a href="http://yaml.org/spec/2004-12-28.html" target="_top">html</a>,
+      <a href="http://yaml.org/spec/2004-12-28.ps" target="_top">ps</a>,
+      <a href="http://yaml.org/spec/2004-12-28.pdf" target="_top">pdf</a>.<br />
+      <span class="emphasis"><em>Latest version:</em></span>
+      <a href="http://yaml.org/spec/current.html" target="_top">html</a>,
+      <a href="http://yaml.org/spec/current.ps" target="_top">ps</a>,
+      <a href="http://yaml.org/spec/current.pdf" target="_top">pdf</a>.
+    </p>
+          </div>
+          <div>
+            <p class="copyright">Copyright © 2001-2004 Oren Ben-Kiki, Clark Evans, Brian Ingerson</p>
+          </div>
+          <div>
+            <div class="legalnotice">
+      
+      This document may be freely copied provided it is not modified.
+    </div>
+          </div>
+          <div>
+            <div class="abstract">
+              <p class="title">
+                <b>Status of this Document</b>
+              </p>
+              <p>
+       This specification is a draft reflecting consensus reached by members of
+       the <a href="http://lists.sourceforge.net/lists/listinfo/yaml-core" target="_top">yaml-core
+       mailing list</a>. Any questions regarding this draft should be
+       raised on this list. We expect all further changes will be strictly
+       limited to wording corrections and fixing production bugs.
+
+      </p>
+              <p>
+        We wish to thank implementers who have tirelessly tracked earlier
+        versions of this specification, and our fabulous user community whose
+        feedback has both validated and clarified our direction.
+      </p>
+            </div>
+          </div>
+          <div>
+            <div class="abstract">
+              <p class="title">
+                <b>Abstract</b>
+              </p>
+              <p>
+        <span class="trademark">YAML</span>&#8482; (rhymes with &#8220;<span class="quote">camel</span>&#8221;) is a
+        human-friendly, cross language, Unicode based data serialization
+        language designed around the common native data structures of agile
+        programming languages. It is broadly useful for programming needs
+        ranging from configuration files to Internet messaging to object
+        persistence to data auditing. Together with the <a href="http://www.unicode.org/" target="_top">Unicode standard for characters</a>,
+        this specification provides all the information necessary to understand
+        YAML Version 1.1 and to creating programs that process YAML
+        information.
+      </p>
+            </div>
+          </div>
+        </div>
+        <div></div>
+        <hr />
+      </div>
+      <div class="toc">
+        <p>
+          <b>Table of Contents</b>
+        </p>
+        <dl>
+          <dt>
+            <span class="chapter">
+              <a href="#id2439001">1. Introduction</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2438200">1.1. Goals</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2438272">1.2. Prior Art</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2502047">1.3. Relation to XML</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2502086">1.4. Terminology</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#id2502311">2. Preview</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2502325">2.1. Collections</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2502724">2.2. Structures</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2503232">2.3. Scalars</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2503753">2.4. Tags</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2504215">2.5. Full Length Example</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#id2504309">3. Processing YAML Information</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2504671">3.1. Processes</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2504710">3.1.1. Represent</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2505138">3.1.2. Serialize</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2505379">3.1.3. Present</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2505613">3.1.4. Parse</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2505723">3.1.5. Compose</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2505832">3.1.6. Construct</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2506012">3.2. Information Models</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2506281">3.2.1. Representation Graph</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2506659">3.2.1.1. Nodes</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2506940">3.2.1.2. Tags</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2507367">3.2.1.3. Nodes Comparison</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2508190">3.2.2. Serialization Tree</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2508372">3.2.2.1. Keys Order</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2508656">3.2.2.2. Anchors and Aliases</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2508949">3.2.3. Presentation Stream</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2509255">3.2.3.1. Node Styles</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2509799">3.2.3.2. Scalar Formats</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2509980">3.2.3.3. Comments</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2510119">3.2.3.4. Directives</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2510274">3.3. Loading Failure Points</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2510726">3.3.1. Well-Formed and Identified</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2510888">3.3.2. Resolved</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2512215">3.3.3. Recognized and Valid</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2512548">3.3.4. Available</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#id2512702">4. Syntax</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2513154">4.1. Characters</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2513160">4.1.1. Character Set</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2513364">4.1.2. Character Encoding</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2513753">4.1.3. Indicator Characters</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2515898">4.1.4. Line Break Characters</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2516631">4.1.5. Miscellaneous Characters</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2517668">4.1.6. Escape Sequences</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2519180">4.2. Syntax Primitives</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2519186">4.2.1. Production Parameters</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2519916">4.2.2. Indentation Spaces</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2520528">4.2.3. Comments</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2521201">4.2.4. Separation Spaces</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2521681">4.2.5. Ignored Line Prefix</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2522356">4.2.6. Line Folding</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2523342">4.3. YAML Character Stream</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2523453">4.3.1. Directives</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2523874">4.3.1.1. YAML Directive</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2524297">4.3.1.2. TAG Directive</a>
+                        </span>
+                      </dt>
+                      <dd>
+                        <dl>
+                          <dt>
+                            <span class="sect4">
+                              <a href="#id2524672">4.3.1.2.1. Tag Prefixes</a>
+                            </span>
+                          </dt>
+                          <dt>
+                            <span class="sect4">
+                              <a href="#id2525159">4.3.1.2.2. Tag Handles</a>
+                            </span>
+                          </dt>
+                        </dl>
+                      </dd>
+                    </dl>
+                  </dd>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2525905">4.3.2. Document Boundary Markers</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2526349">4.3.3. Documents</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2527114">4.3.4. Complete Stream</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2527964">4.4. Nodes</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2528258">4.4.1. Node Anchors</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2528616">4.4.2. Node Tags</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2530054">4.4.3. Node Content</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2530982">4.4.4. Alias Nodes</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2531346">4.4.5. Complete Nodes</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2531352">4.4.5.1. Flow Nodes</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2531873">4.4.5.2. Block Nodes</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2532386">4.5. Scalar Styles</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2532632">4.5.1. Flow Scalar Styles</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2532720">4.5.1.1. Double Quoted</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2534365">4.5.1.2. Single Quoted</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2535812">4.5.1.3. Plain</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2537677">4.5.2. Block Scalar Header</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2537921">4.5.2.1. Block Style Indicator</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2538125">4.5.2.2. Block Indentation Indicator</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2538656">4.5.2.3. Block Chomping Indicator</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2539942">4.5.3. Block Scalar Styles</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2540046">4.5.3.1. Literal</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2540863">4.5.3.2. Folded</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#id2541922">4.6. Collection Styles</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2542214">4.6.1. Sequence Styles</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2542413">4.6.1.1. Flow Sequences</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2543032">4.6.1.2. Block Sequences</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id2543957">4.6.2. Mapping Styles</a>
+                    </span>
+                  </dt>
+                  <dd>
+                    <dl>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2544175">4.6.2.1. Flow Mappings</a>
+                        </span>
+                      </dt>
+                      <dt>
+                        <span class="sect3">
+                          <a href="#id2545757">4.6.2.2. Block Mappings</a>
+                        </span>
+                      </dt>
+                    </dl>
+                  </dd>
+                </dl>
+              </dd>
+            </dl>
+          </dd>
+          <dt>
+            <span class="appendix">
+              <a href="#id2546954">Terms Index</a>
+            </span>
+          </dt>
+        </dl>
+      </div>
+      <div class="chapter" lang="en" xml:lang="en">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="id2439001"></a>Chapter 1. Introduction</h2>
+            </div>
+          </div>
+          <div></div>
+        </div>
+        <p>
+      &#8220;<span class="quote">YAML Ain't Markup Language</span>&#8221; (abbreviated YAML) is a data
+      serialization language designed to be human-friendly and work well with
+      modern programming languages for common everyday tasks. This
+      specification is both an introduction to the YAML language and the
+      concepts supporting it and also a complete reference of the information
+      needed to develop <a id="id2439018" class="indexterm"></a><a href="#application/">applications</a>
+      for processing YAML.
+    </p>
+        <p>
+      Open, interoperable and readily understandable tools have advanced
+      computing immensely. YAML was designed from the start to be useful and
+      friendly to people working with data. It uses Unicode <a id="id2439140" class="indexterm"></a><a href="#printable character/">printable</a> characters, some of
+      which provide structural information and the rest containing the data
+      itself. YAML achieves a unique cleanness by minimizing the amount of
+      structural characters, and allowing the data to show itself in a natural
+      and meaningful way. For example, <a id="id2439159" class="indexterm"></a><a href="#indentation space/">indentation</a> may be used for structure, colons separate
+      <a id="id2439174" class="indexterm"></a><a href="#key/information model">mapping
+      key:</a> <a id="id2439191" class="indexterm"></a><a href="#value/information model">value</a> pairs, and dashes are used to
+      &#8220;<span class="quote">bullet</span>&#8221; lists.
+    </p>
+        <p>
+      There are myriad flavors of data structures, but they can all be
+      adequately <a id="id2439216" class="indexterm"></a><a href="#represent/">represented</a> with three
+      basic primitives: <a id="id2439229" class="indexterm"></a><a href="#mapping/information model">mappings</a> (hashes/dictionaries), <a id="id2439246" class="indexterm"></a><a href="#sequence/information model">sequences</a>
+      (arrays/lists) and <a id="id2438146" class="indexterm"></a><a href="#scalar/information model">scalars</a> (strings/numbers). YAML leverages these
+      primitives and adds a simple typing system and <a id="id2438165" class="indexterm"></a><a href="#alias/information model">aliasing</a> mechanism to form a
+      complete language for serializing any data structure. While most
+      programming languages can use YAML for data serialization, YAML excels in
+      those languages that are fundamentally built around the three basic
+      primitives. These include the new wave of agile languages such as Perl,
+      Python, PHP, Ruby and Javascript.
+    </p>
+        <p>
+      There are hundreds of different languages for programming, but only a
+      handful of languages for storing and transferring data. Even though its
+      potential is virtually boundless, YAML was specifically created to work
+      well for common use cases such as: configuration files, log files,
+      interprocess messaging, cross-language data sharing, object persistence
+      and debugging of complex data structures. When data is easy to view and
+      understand, programming becomes a simpler task.
+    </p>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2438200"></a>1.1. Goals</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        The design goals for YAML are:
+      </p>
+          <div class="orderedlist">
+            <ol type="1">
+              <li>
+                <p>
+            YAML is easily readable by humans.
+          </p>
+              </li>
+              <li>
+                <p>
+            YAML matches the native data structures of agile languages.
+          </p>
+              </li>
+              <li>
+                <p>
+            YAML data is portable between programming languages.
+          </p>
+              </li>
+              <li>
+                <p>
+            YAML has a consistent model to support generic tools.
+          </p>
+              </li>
+              <li>
+                <p>
+            YAML supports one-pass processing.
+          </p>
+              </li>
+              <li>
+                <p>
+            YAML is expressive and extensible.
+          </p>
+              </li>
+              <li>
+                <p>
+            YAML is easy to implement and use.
+          </p>
+              </li>
+            </ol>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2438272"></a>1.2. Prior Art</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        YAML's initial direction was set by the data serialization and markup
+        language discussions among <a href="http://www.docuverse.com/smldev/" target="_top">SML-DEV members</a>. Later
+        on it directly incorporated experience from Brian Ingerson's Perl
+        module <a href="http://search.cpan.org/doc/INGY/Data-Denter-0.13/Denter.pod" target="_top">Data::Denter</a>. Since then YAML has matured through ideas and
+        support from its user community.
+      </p>
+          <p>
+        YAML integrates and builds upon concepts described by <a href="http://cm.bell-labs.com/cm/cs/cbook/index.html" target="_top">C</a>, <a href="http://java.sun.com/" target="_top">Java</a>, <a href="http://www.perl.org/" target="_top">Perl</a>, <a href="http://www.python.org/" target="_top">Python</a>, <a href="http://www.ruby-lang.org/" target="_top">Ruby</a>, <a href="http://www.ietf.org/rfc/rfc0822.txt" target="_top">RFC0822</a> (MAIL),
+        <a href="http://www.ics.uci.edu/pub/ietf/html/rfc1866.txt" target="_top">RFC1866</a>
+        (HTML), <a href="http://www.ietf.org/rfc/rfc2045.txt" target="_top">RFC2045</a> (MIME),
+        <a href="http://www.ietf.org/rfc/rfc2396.txt" target="_top">RFC2396</a> (URI),
+        <a href="http://www.w3.org/TR/REC-xml.html" target="_top">XML</a>, <a href="http://www.saxproject.org/" target="_top">SAX</a> and <a href="http://www.w3.org/TR/SOAP" target="_top">SOAP</a>.
+      </p>
+          <p>
+        The syntax of YAML was motivated by Internet Mail (RFC0822) and remains
+        partially compatible with that standard. Further, borrowing from MIME
+        (RFC2045), YAML's top-level production is a <a id="id2438384" class="indexterm"></a><a href="#stream/information model">stream</a> of independent <a id="id2438401" class="indexterm"></a><a href="#document/information model">documents</a>;
+        ideal for message-based distributed processing systems.
+      </p>
+          <p>
+        YAML's <a id="id2438423" class="indexterm"></a><a href="#indentation space/">indentation</a> based
+        scoping is similar to Python's (without the ambiguities caused by
+        <a id="id2438438" class="indexterm"></a><a href="#tab/">tabs</a>). <a id="id2438450" class="indexterm"></a><a href="#block style/information model">Indented blocks</a> facilitate easy
+        inspection of the data's structure. YAML's <a id="id2438470" class="indexterm"></a><a href="#literal style/information model">literal style</a> leverages
+        this by enabling formatted text to be cleanly mixed within an <a id="id2438488" class="indexterm"></a><a href="#indentation space/">indented</a> structure without
+        troublesome <a id="id2438501" class="indexterm"></a><a href="#escaping in double quoted style/">escaping</a>. YAML also allows the use of traditional
+        <a id="id2438517" class="indexterm"></a><a href="#indicator/">indicator</a>-based scoping similar
+        to Perl's. Such <a id="id2438531" class="indexterm"></a><a href="#flow style/information model">flow content</a> can be freely nested inside <a id="id2438548" class="indexterm"></a><a href="#block style/information model">indented
+        blocks</a>.
+      </p>
+          <p>
+        YAML's <a id="id2438568" class="indexterm"></a><a href="#double quoted style/information model">double quoted style</a> uses familiar C-style <a id="id2438588" class="indexterm"></a><a href="#escaping in double quoted style/">escape sequences</a>.
+        This enables ASCII encoding of non-<a id="id2438603" class="indexterm"></a><a href="#printable character/">printable</a> or 8-bit (ISO 8859-1) characters such as
+        <a href="#ns-esc-8-bit">&#8220;<span class="quote"><b class="userinput"><tt>\x3B</tt></b></span>&#8221;</a>. Non-<a id="id2438630" class="indexterm"></a><a href="#printable character/">printable</a> 16-bit Unicode and
+        32-bit (ISO/IEC 10646) characters are supported with <a id="id2438644" class="indexterm"></a><a href="#escaping in double quoted style/">escape sequences</a>
+        such as <a href="#ns-esc-16-bit">&#8220;<span class="quote"><b class="userinput"><tt>\u003B</tt></b></span>&#8221;</a>
+        and <a href="#ns-esc-32-bit">&#8220;<span class="quote"><b class="userinput"><tt>\U0000003B</tt></b></span>&#8221;</a>.
+      </p>
+          <p>
+        Motivated by HTML's end-of-line normalization, YAML's <a id="id2501721" class="indexterm"></a><a href="#line folding/">line folding</a> employs an intuitive
+        method of handling <a id="id2501735" class="indexterm"></a><a href="#line break character/">line
+        breaks</a>. A single <a id="id2501750" class="indexterm"></a><a href="#line break character/">line
+        break</a> is <a id="id2501764" class="indexterm"></a><a href="#line folding/">folded</a>
+        into a single space, while <a id="id2501777" class="indexterm"></a><a href="#empty line/">empty
+        lines</a> are interpreted as <a id="id2501790" class="indexterm"></a><a href="#line break character/">line break</a> characters. This technique allows for
+        paragraphs to be word-wrapped without affecting the <a id="id2501805" class="indexterm"></a><a href="#canonical form/">canonical form</a> of the <a id="id2501819" class="indexterm"></a><a href="#content/information model">content</a>.
+      </p>
+          <p>
+        YAML's core type system is based on the requirements of agile languages
+        such as Perl, Python, and Ruby. YAML directly supports both <a id="id2501842" class="indexterm"></a><a href="#collection/information model">collection</a>
+        (<a id="id2501859" class="indexterm"></a><a href="#mapping/information model">mapping</a>, <a id="id2501875" class="indexterm"></a><a href="#sequence/information model">sequence</a>) and <a id="id2501891" class="indexterm"></a><a href="#scalar/information model">scalar
+        content</a>. Support for common types enables programmers to use
+        their language's native data structures for YAML manipulation, instead
+        of requiring a special document object model (DOM).
+      </p>
+          <p>
+        Like XML's SOAP, YAML supports <a id="id2501914" class="indexterm"></a><a href="#serialize/">serializing</a> native graph data structures
+        through an <a id="id2501928" class="indexterm"></a><a href="#alias/information model">aliasing</a> mechanism. Also like SOAP, YAML provides for
+        <a id="id2501946" class="indexterm"></a><a href="#application/">application</a>-defined <a id="id2501959" class="indexterm"></a><a href="#tag/information model">types</a>. This
+        allows YAML to <a id="id2501975" class="indexterm"></a><a href="#represent/">represent</a> rich
+        data structures required for modern distributed computing. YAML
+        provides globally unique <a id="id2501990" class="indexterm"></a><a href="#global tag/">type
+        names</a> using a namespace mechanism inspired by Java's DNS
+        based package naming convention and XML's URI based namespaces.
+      </p>
+          <p>
+        YAML was designed to support incremental interfaces that includes both
+        input pull-style and output push-style one-pass (SAX-like) interfaces.
+        Together these enable YAML to support the processing of large <a id="id2502013" class="indexterm"></a><a href="#document/information model">documents</a>,
+        such as a transaction log, or continuous <a id="id2502029" class="indexterm"></a><a href="#stream/information model">streams</a>, such as a feed from a
+        production machine.
+      </p>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2502047"></a>1.3. Relation to XML</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        Newcomers to YAML often search for its correlation to the eXtensible
+        Markup Language (XML). While the two languages may actually compete in
+        several application domains, there is no direct correlation between
+        them.
+      </p>
+          <p>
+        YAML is primarily a data serialization language. XML was designed to be
+        backwards compatible with the Standard Generalized Markup Language
+        (SGML) and thus had many design constraints placed on it that YAML does
+        not share. Inheriting SGML's legacy, XML is designed to support
+        structured documentation, where YAML is more closely targeted at data
+        structures and messaging. Where XML is a pioneer in many domains, YAML
+        is the result of lessons learned from XML and other technologies.
+      </p>
+          <p>
+        It should be mentioned that there are ongoing efforts to define
+        standard XML/YAML mappings. This generally requires that a subset of
+        each language be used. For more information on using both XML and YAML,
+        please visit <a href="http://yaml.org/xml/index.html" target="_top">http://yaml.org/xml/index.html</a>.
+      </p>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2502086"></a>1.4. Terminology</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+          This specification uses key words based on <a href="http://www.ietf.org/rfc/rfc2119.txt" target="_top">RFC2119</a> to indicate
+          requirement level. In particular, the following words are used to
+          describe the actions of a YAML <a id="id2502103" class="indexterm"></a><a href="#processor/">processor</a>:
+        </p>
+          <div class="variablelist">
+            <dl>
+              <dt>
+                <span class="term">May</span>
+              </dt>
+              <dd>
+                <p>
+                The word <a id="id2502131" class="indexterm"></a><a id="may/"></a
+            ><a href="#index-entry-may"
+            ><i class="firstterm"
+            >may</i></a
+          >, or the adjective
+                <a id="id2502145" class="indexterm"></a><a id="optional/"></a
+            ><a href="#index-entry-optional"
+            ><i class="firstterm"
+            >optional</i></a
+          >, mean that
+                conforming YAML <a id="id2502160" class="indexterm"></a><a href="#processor/">processors</a> are permitted, but
+                <a id="id2502173" class="indexterm"></a><a id="need not/"></a
+            ><a href="#index-entry-need not"
+            ><i class="firstterm"
+            >need not</i></a
+          > behave as
+                described.
+              </p>
+              </dd>
+              <dt>
+                <span class="term">Should</span>
+              </dt>
+              <dd>
+                <p>
+                The word <a id="id2502202" class="indexterm"></a><a id="should/"></a
+            ><a href="#index-entry-should"
+            ><i class="firstterm"
+            >should</i></a
+          >, or the
+                adjective <a id="id2502216" class="indexterm"></a><a id="recommended/"></a
+            ><a href="#index-entry-recommended"
+            ><i class="firstterm"
+            >recommended</i></a
+          >,
+                mean that there could be reasons for a YAML <a id="id2502231" class="indexterm"></a><a href="#processor/">processor</a> to deviate from the
+                behavior described, but that such deviation could hurt
+                interoperability and should therefore be advertised with
+                appropriate notice.
+              </p>
+              </dd>
+              <dt>
+                <span class="term">Must</span>
+              </dt>
+              <dd>
+                <p>
+                The word <a id="id2502261" class="indexterm"></a><a id="must/"></a
+            ><a href="#index-entry-must"
+            ><i class="firstterm"
+            >must</i></a
+          >, or the term
+                <a id="id2502275" class="indexterm"></a><a id="required/"></a
+            ><a href="#index-entry-required"
+            ><i class="firstterm"
+            >required</i></a
+          > or <a id="id2502289" class="indexterm"></a><a id="shall/"></a
+            ><a href="#index-entry-shall"
+            ><i class="firstterm"
+            >shall</i></a
+          >, mean that the behavior
+                described is an absolute requirement of the specification.
+              </p>
+              </dd>
+            </dl>
+          </div>
+        </div>
+      </div>
+      <div class="chapter" lang="en" xml:lang="en">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="id2502311"></a>Chapter 2. Preview</h2>
+            </div>
+          </div>
+          <div></div>
+        </div>
+        <p>
+      This section provides a quick glimpse into the expressive power of YAML.
+      It is not expected that the first-time reader grok all of the examples.
+      Rather, these selections are used as motivation for the remainder of the
+      specification.
+    </p>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2502325"></a>2.1. Collections</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+          YAML's <a id="id2502333" class="indexterm"></a><a href="#block collection style/information model">block collections</a> use
+          <a id="id2502352" class="indexterm"></a><a href="#indentation space/">indentation</a> for scope
+          and begin each entry on its own line. <a id="id2502366" class="indexterm"></a><a href="#block sequence style/information model">Block
+          sequences</a> indicate each entry with a dash and space (
+          <a id="id2502386" class="indexterm"></a><a href="#- block sequence entry/">&#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221;</a>). <a id="id2502405" class="indexterm"></a><a href="#mapping/information model">Mappings</a> use a colon and
+          space (<a id="id2502422" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>: </tt></b></span>&#8221;</a>) to mark each <a id="id2502440" class="indexterm"></a><a href="#key/information model">mapping
+          key</a>: <a id="id2502456" class="indexterm"></a><a href="#value/information model">value</a> pair.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2502482"></a><p class="title"><b>Example 2.1. 
+                Sequence of Scalars<br />
+                (ball players)
+              </b></p><pre class="programlisting"><span class="database">- Mark McGwire<br />- Sammy Sosa
+- Ken Griffey
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2502507"></a><p class="title"><b>Example 2.2. 
+                Mapping Scalars to Scalars<br />
+                (player statistics)
+              </b></p><pre class="programlisting"><span class="database">hr:  65<br />avg: 0.278
+rbi: 147
+</span></pre></div>
+          </td>
+            </tr>
+            <tr>
+              <td>
+            <div class="example"><a id="id2502532"></a><p class="title"><b>Example 2.3. 
+                Mapping Scalars to Sequences<br />
+                (ball clubs in each league)
+              </b></p><pre class="programlisting"><span class="database">american:<br />  - Boston Red Sox
+  - Detroit Tigers
+  - New York Yankees
+national:
+  - New York Mets
+  - Chicago Cubs
+  - Atlanta Braves
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2502559"></a><p class="title"><b>Example 2.4. 
+                Sequence of Mappings<br />
+                (players' statistics)
+              </b></p><pre class="programlisting"><span class="database">-<br />  name: Mark McGwire
+  hr:   65
+  avg:  0.278
+-
+  name: Sammy Sosa
+  hr:   63
+  avg:  0.288
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+          <p>
+          YAML also has <a id="id2502588" class="indexterm"></a><a href="#flow style/information model">flow styles</a>, using explicit <a id="id2502604" class="indexterm"></a><a href="#indicator/">indicators</a> rather than <a id="id2502617" class="indexterm"></a><a href="#indentation space/">indentation</a> to denote scope.
+          The <a id="id2502630" class="indexterm"></a><a href="#flow sequence style/information model">flow sequence</a> is written as a comma separated list
+          within square brackets. In a similar manner, the <a id="id2502651" class="indexterm"></a><a href="#flow mapping style/information model">flow
+          mapping</a> uses curly braces.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2502679"></a><p class="title"><b>Example 2.5. Sequence of Sequences</b></p><pre class="programlisting"><span class="database">- [name        , hr, avg  ]<br />- [Mark McGwire, 65, 0.278]
+- [Sammy Sosa  , 63, 0.288]
+
+
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2502702"></a><p class="title"><b>Example 2.6. Mapping of Mappings</b></p><pre class="programlisting"><span class="database">Mark McGwire: {hr: 65, avg: 0.278}<br />Sammy Sosa: {
+    hr: 63,
+    avg: 0.288
+  }
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2502724"></a>2.2. Structures</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+          YAML uses three dashes (<a id="id2502733" class="indexterm"></a><a href="#document boundary marker/">&#8220;<span class="quote"><b class="userinput"><tt>---</tt></b></span>&#8221;</a>) to separate <a id="id2502753" class="indexterm"></a><a href="#document/information model">documents</a>
+          within a <a id="id2502768" class="indexterm"></a><a href="#stream/information model">stream</a>. Three dots ( <a id="id2502786" class="indexterm"></a><a href="#document boundary marker/">&#8220;<span class="quote"><b class="userinput"><tt>...</tt></b></span>&#8221;</a>) indicate the end of
+          a document without starting a new one, for use in communication
+          channels. <a id="id2502805" class="indexterm"></a><a href="#comment/information model">Comment</a> lines begin with the Octothorpe (usually
+          called the &#8220;<span class="quote">hash</span>&#8221; or &#8220;<span class="quote">pound</span>&#8221; sign -
+          <a id="id2502830" class="indexterm"></a><a href="## comment/">&#8220;<span class="quote"><b class="userinput"><tt>#</tt></b></span>&#8221;</a>).
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2502858"></a><p class="title"><b>Example 2.7. 
+                Two Documents in a Stream<br />
+                (each with a leading comment)
+              </b></p><pre class="programlisting"><span class="database"># Ranking of 1998 home runs<br />---
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+# Team ranking
+---
+- Chicago Cubs
+- St Louis Cardinals
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2502884"></a><p class="title"><b>Example 2.8. 
+                Play by Play Feed<br />
+                from a Game
+              </b></p><pre class="programlisting"><span class="database">---<br />time: 20:03:20
+player: Sammy Sosa
+action: strike (miss)
+...
+---
+time: 20:03:47
+player: Sammy Sosa
+action: grand slam
+...
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+          <p>
+          Repeated <a id="id2502912" class="indexterm"></a><a href="#node/information model">nodes</a> are first <a id="id2502929" class="indexterm"></a><a href="#identified/">identified</a> by an <a id="id2502943" class="indexterm"></a><a href="#anchor/information model">anchor</a>
+          (marked with the ampersand - <a id="id2502961" class="indexterm"></a><a href="#&amp; anchor/">&#8220;<span class="quote"><b class="userinput"><tt>&amp;</tt></b></span>&#8221;</a>), and are then <a id="id2502979" class="indexterm"></a><a href="#alias/information model">aliased</a>
+          (referenced with an asterisk - <a id="id2502996" class="indexterm"></a><a href="#* alias/">&#8220;<span class="quote"><b class="userinput"><tt>*</tt></b></span>&#8221;</a>) thereafter.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2503024"></a><p class="title"><b>Example 2.9. 
+                Single Document with<br />
+                Two Comments
+              </b></p><pre class="programlisting"><span class="database">---<br />hr: # 1998 hr ranking
+  - Mark McGwire
+  - Sammy Sosa
+rbi:
+  # 1998 rbi ranking
+  - Sammy Sosa
+  - Ken Griffey
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2503050"></a><p class="title"><b>Example 2.10. 
+                Node for &#8220;<span class="quote"><b class="userinput"><tt>Sammy Sosa</tt></b></span>&#8221;<br />
+                appears twice in this document
+              </b></p><pre class="programlisting"><span class="database">---<br />hr:
+  - Mark McGwire
+  # Following node labeled SS
+  - &amp;SS Sammy Sosa
+rbi:
+  - *SS # Subsequent occurrence
+  - Ken Griffey
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+          <p>
+          A question mark and space <a id="id2503089" class="indexterm"></a><a href="#? mapping key/">(&#8220;<span class="quote"><b class="userinput"><tt>? </tt></b></span>&#8221;</a>) indicate a complex <a id="id2503109" class="indexterm"></a><a href="#key/information model">mapping key</a>.
+          Within a <a id="id2503124" class="indexterm"></a><a href="#block collection style/information model">block collection</a>, <a id="id2503142" class="indexterm"></a><a href="#key/information model">key:</a> <a id="id2503158" class="indexterm"></a><a href="#value/information model">value</a> pairs can start
+          immediately following the dash, colon or question mark.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2503185"></a><p class="title"><b>Example 2.11. Mapping between Sequences</b></p><pre class="programlisting"><span class="database">? - Detroit Tigers<br />  - Chicago cubs
+:
+  - 2001-07-23
+
+? [ New York Yankees,
+    Atlanta Braves ]
+: [ 2001-07-02, 2001-08-12,
+    2001-08-14 ]
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2503208"></a><p class="title"><b>Example 2.12. In-Line Nested Mapping</b></p><pre class="programlisting"><span class="database">---<br /># products purchased
+- item    : Super Hoop
+  quantity: 1
+- item    : Basketball
+  quantity: 4
+- item    : Big Shoes
+  quantity: 1
+
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2503232"></a>2.3. Scalars</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+          <a id="id2503239" class="indexterm"></a><a href="#scalar/information model">Scalar
+          content</a> can be written in <a id="id2503255" class="indexterm"></a><a href="#block style/information model">block</a> form using a <a id="id2503272" class="indexterm"></a><a href="#literal style/information model">literal
+          style</a> (<a id="id2503289" class="indexterm"></a><a href="#| literal style/">&#8220;<span class="quote"><b class="userinput"><tt>|</tt></b></span>&#8221;</a>) where all <a id="id2503308" class="indexterm"></a><a href="#line break character/">line breaks</a> count. Or they can be written
+          with the <a id="id2503322" class="indexterm"></a><a href="#folded style/information model">folded style</a> <a id="id2503340" class="indexterm"></a><a href="#&gt; folded style/">(&#8220;<span class="quote"><b class="userinput"><tt>&gt;</tt></b></span>&#8221;</a>) where each <a id="id2503361" class="indexterm"></a><a href="#line break character/">line break</a> is <a id="id2503375" class="indexterm"></a><a href="#line folding/">folded</a> to a space unless it ends an
+          <a id="id2503388" class="indexterm"></a><a href="#empty line/">empty</a> or a <a id="id2503400" class="indexterm"></a><a href="#more indented line/">&#8220;<span class="quote">more indented</span>&#8221;
+          line</a>.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2503426"></a><p class="title"><b>Example 2.13. 
+                In literals,<br />
+                newlines are preserved
+              </b></p><pre class="programlisting"><span class="database"># ASCII Art<br />--- |
+  \//||\/||
+  // ||  ||__
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2503451"></a><p class="title"><b>Example 2.14. 
+                In the plain scalar,<br />
+                newlines become spaces
+              </b></p><pre class="programlisting"><span class="database">---<br />  Mark McGwire's
+  year was crippled
+  by a knee injury.
+</span></pre></div>
+          </td>
+            </tr>
+            <tr>
+              <td>
+            <div class="example"><a id="id2503477"></a><p class="title"><b>Example 2.15. 
+                Folded newlines preserved<br />
+                for "more indented" and blank lines
+              </b></p><pre class="programlisting"><span class="database">&gt;<br /> Sammy Sosa completed another
+ fine season with great stats.
+
+   63 Home Runs
+   0.288 Batting Average
+
+ What a year!
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2503504"></a><p class="title"><b>Example 2.16. 
+                Indentation determines scope<br />
+                 
+              </b></p><pre class="programlisting"><span class="database">name: Mark McGwire<br />accomplishment: &gt;
+  Mark set a major league
+  home run record in 1998.
+stats: |
+  65 Home Runs
+  0.278 Batting Average
+
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+          <p>
+          YAML's <a id="id2503535" class="indexterm"></a><a href="#flow scalar style/information model">flow scalars</a> include the <a id="id2503554" class="indexterm"></a><a href="#plain style/information model">plain style</a> (most
+          examples thus far) and <a id="id2503573" class="indexterm"></a><a href="#quoted style/information model">quoted styles</a>. The <a id="id2503590" class="indexterm"></a><a href="#double quoted style/information model">double
+          quoted style</a> provides <a id="id2503607" class="indexterm"></a><a href="#escaping in double quoted style/">escape sequences</a>. The <a id="id2503621" class="indexterm"></a><a href="#single quoted style/information model">single
+          quoted style</a> is useful when <a id="id2503639" class="indexterm"></a><a href="#escaping in double quoted style/">escaping</a> is not needed. All <a id="id2503654" class="indexterm"></a><a href="#flow scalar style/information model">flow
+          scalars</a> can span multiple lines; <a id="id2503670" class="indexterm"></a><a href="#line break character/">line breaks</a> are always <a id="id2503684" class="indexterm"></a><a href="#line folding/">folded</a>.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2503707"></a><p class="title"><b>Example 2.17. Quoted Scalars</b></p><pre class="programlisting"><span class="database">unicode: "Sosa did fine.\u263A"<br />control: "\b1998\t1999\t2000\n"
+hexesc:  "\x13\x10 is \r\n"
+
+single: '"Howdy!" he cried.'
+quoted: ' # not a ''comment''.'
+tie-fighter: '|\-*-/|'
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2503731"></a><p class="title"><b>Example 2.18. Multi-line Flow Scalars</b></p><pre class="programlisting"><span class="database">plain:<br />  This unquoted scalar
+  spans many lines.
+
+quoted: "So does this
+  quoted scalar.\n"
+
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2503753"></a>2.4. Tags</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+          In YAML, <a id="id2503762" class="indexterm"></a><a href="#non-specific tag/">untagged nodes</a>
+          are given an type depending on the <a id="id2503776" class="indexterm"></a><a href="#application/">application</a>. The examples in this
+          specification generally use the <a href="http://yaml.org/type/seq.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>seq</tt></b></span>&#8221;</a>,
+          <a href="http://yaml.org/type/map.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>map</tt></b></span>&#8221;</a> and
+          <a href="http://yaml.org/type/str.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>str</tt></b></span>&#8221;</a>
+          types from the <a href="http://yaml.org/type/index.html" target="_top">YAML tag
+          repository</a>. A few examples also use the <a href="http://yaml.org/type/int.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>int</tt></b></span>&#8221;</a> and
+          <a href="http://yaml.org/type/float.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>float</tt></b></span>&#8221;</a>
+          types. The repository includes additional types such as <a href="http://yaml.org/type/null.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>null</tt></b></span>&#8221;</a>,
+          <a href="http://yaml.org/type/bool.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>bool</tt></b></span>&#8221;</a>,
+          <a href="http://yaml.org/type/set.html" target="_top">&#8220;<span class="quote"><b class="userinput"><tt>set</tt></b></span>&#8221;</a> and
+          others.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2503895"></a><p class="title"><b>Example 2.19. Integers</b></p><pre class="programlisting"><span class="database">canonical: 12345<br />decimal: +12,345
+sexagecimal: 3:25:45
+octal: 014
+hexadecimal: 0xC
+
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2503918"></a><p class="title"><b>Example 2.20. Floating Point</b></p><pre class="programlisting"><span class="database">canonical: 1.23015e+3<br />exponential: 12.3015e+02
+sexagecimal: 20:30.15
+fixed: 1,230.15
+negative infinity: -.inf
+not a number: .NaN
+</span></pre></div>
+          </td>
+            </tr>
+            <tr>
+              <td>
+            <div class="example"><a id="id2503941"></a><p class="title"><b>Example 2.21. Miscellaneous</b></p><pre class="programlisting"><span class="database">null: ~<br />true: y
+false: n
+string: '12345'
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2503963"></a><p class="title"><b>Example 2.22. Timestamps</b></p><pre class="programlisting"><span class="database">canonical: 2001-12-15T02:59:43.1Z<br />iso8601: 2001-12-14t21:59:43.10-05:00
+spaced: 2001-12-14 21:59:43.10 -5
+date: 2002-12-14
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+          <p>
+          Explicit typing is denoted with a <a id="id2503989" class="indexterm"></a><a href="#tag/information model">tag</a> using the exclamantion
+          point (<a id="id2504005" class="indexterm"></a><a href="#! tag indicator/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a>) symbol. <a id="id2504023" class="indexterm"></a><a href="#global tag/">Global tags</a> are URIs and may be
+          specified in a <a id="id2504036" class="indexterm"></a><a href="#tag shorthand/">shorthand</a>
+          form using a <a id="id2504051" class="indexterm"></a><a href="#tag handle/">handle</a>. <a id="id2504064" class="indexterm"></a><a href="#application/">Application</a>-specific <a id="id2504077" class="indexterm"></a><a href="#local tag/">local tags</a> may also be used.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2504100"></a><p class="title"><b>Example 2.23. Various Explicit Tags</b></p><pre class="programlisting"><span class="database">---<br />not-date: !!str 2002-04-28
+
+picture: !!binary |
+ R0lGODlhDAAMAIQAAP//9/X
+ 17unp5WZmZgAAAOfn515eXv
+ Pz7Y6OjuDg4J+fn5OTk6enp
+ 56enmleECcgggoBADs=
+
+application specific tag: !something |
+ The semantics of the tag
+ above may be different for
+ different documents.
+
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2504126"></a><p class="title"><b>Example 2.24. Global Tags</b></p><pre class="programlisting"><span class="database">%TAG ! tag:clarkevans.com,2002:<br />--- !shape
+  # Use the ! handle for presenting
+  # tag:clarkevans.com,2002:circle
+- !circle
+  center: &amp;ORIGIN {x: 73, y: 129}
+  radius: 7
+- !line
+  start: *ORIGIN
+  finish: { x: 89, y: 102 }
+- !label
+  start: *ORIGIN
+  color: 0xFFEEBB
+  text: Pretty vector drawing.
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2504168"></a><p class="title"><b>Example 2.25. Unordered Sets</b></p><pre class="programlisting"><span class="database"># sets are represented as a<br /># mapping where each key is
+# associated with the empty string
+--- !!set
+? Mark McGwire
+? Sammy Sosa
+? Ken Griff
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2504191"></a><p class="title"><b>Example 2.26. Ordered Mappings</b></p><pre class="programlisting"><span class="database"># ordered maps are represented as<br /># a sequence of mappings, with
+# each mapping having one key
+--- !!omap
+- Mark McGwire: 65
+- Sammy Sosa: 63
+- Ken Griffy: 58
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2504215"></a>2.5. Full Length Example</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+          Below are two full-length examples of YAML. On the left is a sample
+          invoice; on the right is a sample log file.
+        </p>
+          <table class="simplelist" border="0" summary="Simple list">
+            <tr>
+              <td>
+            <div class="example"><a id="id2504235"></a><p class="title"><b>Example 2.27. Invoice</b></p><pre class="programlisting"><span class="database">--- !&lt;tag:clarkevans.com,2002:invoice&gt;<br />invoice: 34843
+date   : 2001-01-23
+bill-to: &amp;id001
+    given  : Chris
+    family : Dumars
+    address:
+        lines: |
+            458 Walkman Dr.
+            Suite #292
+        city    : Royal Oak
+        state   : MI
+        postal  : 48046
+ship-to: *id001
+product:
+    - sku         : BL394D
+      quantity    : 4
+      description : Basketball
+      price       : 450.00
+    - sku         : BL4438H
+      quantity    : 1
+      description : Super Hoop
+      price       : 2392.00
+tax  : 251.42
+total: 4443.52
+comments:
+    Late afternoon is best.
+    Backup contact is Nancy
+    Billsmer @ 338-4338.
+</span></pre></div>
+          </td>
+              <td>
+            <div class="example"><a id="id2504280"></a><p class="title"><b>Example 2.28. Log File</b></p><pre class="programlisting"><span class="database">---<br />Time: 2001-11-23 15:01:42 -5
+User: ed
+Warning:
+  This is an error message
+  for the log file
+---
+Time: 2001-11-23 15:02:31 -5
+User: ed
+Warning:
+  A slightly different error
+  message.
+---
+Date: 2001-11-23 15:03:17 -5
+User: ed
+Fatal:
+  Unknown variable "bar"
+Stack:
+  - file: TopClass.py
+    line: 23
+    code: |
+      x = MoreObject("345\n")
+  - file: MoreClass.py
+    line: 58
+    code: |-
+      foo = bar
+
+
+
+</span></pre></div>
+          </td>
+            </tr>
+          </table>
+        </div>
+      </div>
+      <div class="chapter" lang="en" xml:lang="en">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="id2504309"></a>Chapter 3. Processing YAML Information</h2>
+            </div>
+          </div>
+          <div></div>
+        </div>
+        <p>
+      YAML is both a text format and a method for <a id="id2504318" class="indexterm"></a><a href="#present/">presenting</a> any data structure in this format.
+      Therefore, this specification defines two concepts: a class of data
+      objects called YAML <a id="id2504333" class="indexterm"></a><a href="#representation/">representations</a>, and a syntax for
+      <a id="id2504348" class="indexterm"></a><a href="#present/">presenting</a> YAML <a id="id2504360" class="indexterm"></a><a href="#representation/">representations</a> as a series of
+      characters, called a YAML <a id="id2504374" class="indexterm"></a><a href="#stream/information model">stream</a>. A YAML <a id="id2504390" class="indexterm"></a><a id="processor/"></a
+            ><a href="#index-entry-processor"
+            ><i class="firstterm"
+            >processor</i></a
+          > is a tool for converting
+      information between these complementary views. It is assumed that a YAML
+      processor does its work on behalf of another module, called an <a id="id2504406" class="indexterm"></a><a id="application/"></a
+            ><a href="#index-entry-application"
+            ><i class="firstterm"
+            >application</i></a
+          >. This chapter describes the
+      information structures a YAML processor must provide to or obtain from
+      the application.
+    </p>
+        <p>
+      YAML information is used in two ways: for machine processing, and for
+      human consumption. The challenge of reconciling these two perspectives is
+      best done in three distinct translation stages: <a id="id2504430" class="indexterm"></a><a href="#representation/">representation</a>, <a id="id2504443" class="indexterm"></a><a href="#serialization/">serialization</a>, and <a id="id2504457" class="indexterm"></a><a href="#presentation/">presentation</a>. <a id="id2504471" class="indexterm"></a><a href="#representation/">Representation</a> addresses how YAML
+      views native data structures to achieve portability between programming
+      environments. <a id="id2504486" class="indexterm"></a><a href="#serialization/">Serialization</a>
+      concerns itself with turning a YAML <a id="id2504499" class="indexterm"></a><a href="#representation/">representation</a> into a serial form,
+      that is, a form with sequential access constraints. <a id="id2504514" class="indexterm"></a><a href="#presentation/">Presentation</a> deals with the formatting
+      of a YAML <a id="id2504528" class="indexterm"></a><a href="#serialization/">serialization</a> as a
+      series of characters in a human-friendly manner.
+    </p>
+        <div class="figure">
+          <a id="id2504543"></a>
+          <p class="title">
+            <b>Figure 3.1. Processing Overview</b>
+          </p>
+          <div class="mediaobject">
+            <img src="overview2.png" alt="Processing Overview" />
+          </div>
+        </div>
+        <p>
+      A YAML processor need not expose the <a id="id2504568" class="indexterm"></a><a href="#serialization/">serialization</a> or <a id="id2504581" class="indexterm"></a><a href="#representation/">representation</a> stages. It may
+      translate directly between native data structures and a character
+      <a id="id2504596" class="indexterm"></a><a href="#stream/information model">stream</a>
+      (<a id="id2504612" class="indexterm"></a><a id="dump/"></a
+            ><a href="#index-entry-dump"
+            ><i class="firstterm"
+            >dump</i></a
+          > and <a id="id2504626" class="indexterm"></a><a id="load/"></a
+            ><a href="#index-entry-load"
+            ><i class="firstterm"
+            >load</i></a
+          > in the diagram above). However, such a
+      direct translation should take place so that the native data structures
+      are <a id="id2504642" class="indexterm"></a><a href="#construct/">constructed</a> only from
+      information available in the <a id="id2504656" class="indexterm"></a><a href="#representation/">representation</a>.
+    </p>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2504671"></a>3.1. Processes</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        This section details the processes shown in the diagram above. Note a
+        YAML <a id="id2504680" class="indexterm"></a><a href="#processor/">processor</a> need not provide
+        all these processes. For example, a YAML library may provide only YAML
+        input ability, for loading configuration files, or only output ability,
+        for sending data to other <a id="id2504696" class="indexterm"></a><a href="#application/">applications</a>.
+      </p>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2504710"></a>3.1.1. Represent</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          YAML <a id="id2504718" class="indexterm"></a><a id="represent/"></a
+            ><a href="#index-entry-represent"
+            ><i class="firstterm"
+            >represents</i></a
+          > any native
+          data structure using three <a id="id2504733" class="indexterm"></a><a href="#kind/">node
+          kinds</a>: the <a id="id2504747" class="indexterm"></a><a href="#sequence/information model">sequence</a>, the <a id="id2504763" class="indexterm"></a><a href="#mapping/information model">mapping</a> and
+          the <a id="id2504779" class="indexterm"></a><a href="#scalar/information model">scalar</a>. By <a id="id2504795" class="indexterm"></a><a href="#sequence/information model">sequence</a> we mean an ordered
+          series of entries, by <a id="id2504811" class="indexterm"></a><a href="#mapping/information model">mapping</a> we mean an unordered
+          association of <a id="id2504828" class="indexterm"></a><a href="#equality/">unique</a> <a id="id2504841" class="indexterm"></a><a href="#key/information model">keys</a> to
+          <a id="id2504857" class="indexterm"></a><a href="#value/information model">values</a>, and by <a id="id2504873" class="indexterm"></a><a href="#scalar/information model">scalar</a> we mean any datum with
+          opaque structure <a id="id2504890" class="indexterm"></a><a href="#present/">presentable</a> as
+          a series of Unicode characters. Combined, these primitives generate
+          directed graph structures. These primitives were chosen because they
+          are both powerful and familiar: the <a id="id2504906" class="indexterm"></a><a href="#sequence/information model">sequence</a> corresponds to a
+          Perl array and a Python list, the <a id="id2504922" class="indexterm"></a><a href="#mapping/information model">mapping</a> corresponds to a Perl
+          hash table and a Python dictionary. The <a id="id2504939" class="indexterm"></a><a href="#scalar/information model">scalar</a> represents strings,
+          integers, dates and other atomic data types.
+        </p>
+            <p>
+          Each YAML <a id="id2504959" class="indexterm"></a><a href="#node/information model">node</a> requires, in addition to its <a id="id2504976" class="indexterm"></a><a href="#kind/">kind</a> and <a id="id2504989" class="indexterm"></a><a href="#content/information model">content</a>, a <a id="id2505005" class="indexterm"></a><a href="#tag/information model">tag</a> specifying
+          its data type. Type specifiers are either <a id="id2505021" class="indexterm"></a><a href="#global tag/">global</a> URIs, or are <a id="id2505034" class="indexterm"></a><a href="#local tag/">local</a> in scope to a single <a id="id2505046" class="indexterm"></a><a href="#application/">application</a>. For example, an integer
+          is represented in YAML with a <a id="id2505061" class="indexterm"></a><a href="#scalar/information model">scalar</a> plus the <a id="id2505077" class="indexterm"></a><a href="#global tag/">global tag</a>
+          &#8220;<span class="quote"><b class="userinput"><tt>tag:yaml.org,2002:int</tt></b></span>&#8221;. Similarly, an invoice object,
+          particular to a given organization, could be represented as a
+          <a id="id2505098" class="indexterm"></a><a href="#mapping/information model">mapping</a> together with the <a id="id2505114" class="indexterm"></a><a href="#local tag/">local tag</a> &#8220;<span class="quote"><b class="userinput"><tt>!invoice</tt></b></span>&#8221;. This simple model
+          can represent any data structure independent of programming language.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2505138"></a>3.1.2. Serialize</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          For sequential access mediums, such as an event callback API, a YAML
+          <a id="id2505147" class="indexterm"></a><a href="#representation/">representation</a> must be
+          <a id="id2505160" class="indexterm"></a><a id="serialize/"></a
+            ><a href="#index-entry-serialize"
+            ><i class="firstterm"
+            >serialized</i></a
+          > to an ordered tree.
+          Since in a YAML <a id="id2505174" class="indexterm"></a><a href="#representation/">representation</a>, <a id="id2505187" class="indexterm"></a><a href="#key/information model">mapping keys</a>
+          are unordered and <a id="id2505204" class="indexterm"></a><a href="#node/information model">nodes</a> may be referenced more than once (have more
+          than one incoming &#8220;<span class="quote">arrow</span>&#8221;), the serialization process is
+          required to impose an <a id="id2505226" class="indexterm"></a><a href="#key order/">ordering</a>
+          on the <a id="id2505239" class="indexterm"></a><a href="#key/information model">mapping
+          keys</a> and to replace the second and subsequent references to
+          a given <a id="id2505255" class="indexterm"></a><a href="#node/information model">node</a> with place holders called <a id="id2505272" class="indexterm"></a><a href="#alias/information model">aliases</a>. YAML
+          does not specify how these <a id="id2505289" class="indexterm"></a><a id="serialization detail/"></a
+            ><a href="#index-entry-serialization detail"
+            ><i class="firstterm"
+            >serialization details</i></a
+          > are chosen. It is up to the
+          YAML <a id="id2505305" class="indexterm"></a><a href="#processor/">processor</a> to come up with
+          human-friendly <a id="id2505317" class="indexterm"></a><a href="#key order/">key order</a> and
+          <a id="id2505330" class="indexterm"></a><a href="#anchor/information model">anchor</a> names, possibly with the help of the <a id="id2505348" class="indexterm"></a><a href="#application/">application</a>. The result of this
+          process, a YAML <a id="id2505361" class="indexterm"></a><a href="#serialization/">serialization
+          tree</a>, can then be traversed to produce a series of event
+          calls for one-pass processing of YAML data.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2505379"></a>3.1.3. Present</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          The final output process is <a id="id2505387" class="indexterm"></a><a id="present/"></a
+            ><a href="#index-entry-present"
+            ><i class="firstterm"
+            >presenting</i></a
+          > the YAML <a id="id2505400" class="indexterm"></a><a href="#serialization/">serializations</a> as a character
+          <a id="id2505414" class="indexterm"></a><a href="#stream/information model">stream</a> in a human-friendly manner. To maximize human
+          readability, YAML offsers a rich set of stylistic options which go
+          far beyond the minimal functional needs of simple data storage.
+          Therefore the YAML <a id="id2505434" class="indexterm"></a><a href="#processor/">processor</a>
+          is required to introduce various <a id="id2505447" class="indexterm"></a><a id="presentation detail/"></a
+            ><a href="#index-entry-presentation detail"
+            ><i class="firstterm"
+            >presentation details</i></a
+          > when creating the <a id="id2505462" class="indexterm"></a><a href="#stream/information model">stream</a>, such
+          as the choice of <a id="id2505479" class="indexterm"></a><a href="#style/">node styles</a>, how
+          to <a id="id2505492" class="indexterm"></a><a href="#format/">format content</a>, the amount of
+          <a id="id2505506" class="indexterm"></a><a href="#indentation space/">indentation</a>, which
+          <a id="id2505519" class="indexterm"></a><a href="#tag handle/">tag handles</a> to use, the
+          <a id="id2505532" class="indexterm"></a><a href="#tag/information model">node
+          tags</a> to leave <a id="id2505548" class="indexterm"></a><a href="#non-specific tag/">unspecified</a>, the set of <a id="id2505561" class="indexterm"></a><a href="#directive/information model">directives</a> to provide and
+          possibly even what <a id="id2505579" class="indexterm"></a><a href="#comment/information model">comments</a> to add. While some of this can be done with
+          the help of of the <a id="id2505596" class="indexterm"></a><a href="#application/">application</a>, in general this process
+          should guided by the preferences of the user.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2505613"></a>3.1.4. Parse</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          <a id="id2505620" class="indexterm"></a><a id="parse/"></a
+            ><a href="#index-entry-parse"
+            ><i class="firstterm"
+            >Parsing</i></a
+          > is the inverse process of
+          <a id="id2505634" class="indexterm"></a><a href="#present/">presentation</a>, it takes a
+          <a id="id2505647" class="indexterm"></a><a href="#stream/information model">stream</a> of characters and produces a series of
+          events. Parsing discards all the <a id="id2505665" class="indexterm"></a><a href="#presentation detail/">details</a> introduced in the <a id="id2505679" class="indexterm"></a><a href="#present/">presentation</a> process, reporting only the
+          <a id="id2505693" class="indexterm"></a><a href="#serialization/">serialization</a> events.
+          Parsing can fail fue to <a id="id2505706" class="indexterm"></a><a href="#ill-formed stream/">ill-formed</a> input.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2505723"></a>3.1.5. Compose</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          <a id="id2505730" class="indexterm"></a><a id="compose/"></a
+            ><a href="#index-entry-compose"
+            ><i class="firstterm"
+            >Composing</i></a
+          > takes a series of
+          <a id="id2505744" class="indexterm"></a><a href="#serialization/">serialization</a> events and
+          produces a <a id="id2505758" class="indexterm"></a><a href="#representation/">representation
+          graph</a>. Composing discards all the <a id="id2505772" class="indexterm"></a><a href="#serialization detail/">serialization details</a>
+          introduced in the <a id="id2505787" class="indexterm"></a><a href="#serialize/">serialization</a> process, producing only
+          the <a id="id2505801" class="indexterm"></a><a href="#representation/">representation graph</a>.
+          Composing can fail due to any of several reasons, detailed <a id="id2505815" class="indexterm"></a><a href="#load failure point/">below</a>.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2505832"></a>3.1.6. Construct</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          The final input process is <a id="id2505840" class="indexterm"></a><a id="construct/"></a
+            ><a href="#index-entry-construct"
+            ><i class="firstterm"
+            >constructing</i></a
+          > native data structures
+          from the YAML <a id="id2505855" class="indexterm"></a><a href="#representation/">representation</a>. Construction must
+          be based only on the information available in the <a id="id2505869" class="indexterm"></a><a href="#representation/">representation</a>, and not on
+          additional <a id="id2505883" class="indexterm"></a><a href="#serialization/">serialization</a>
+          or <a id="id2505896" class="indexterm"></a><a href="#presentation detail/">presentation
+          details</a> such as <a id="id2505910" class="indexterm"></a><a href="#comment/information model">comments</a>, <a id="id2505926" class="indexterm"></a><a href="#directive/information model">directives</a>, <a id="id2505942" class="indexterm"></a><a href="#key order/">mapping key
+          order</a>, <a id="id2505954" class="indexterm"></a><a href="#style/">node styles</a>,
+          <a id="id2505966" class="indexterm"></a><a href="#format/">content format</a>, <a id="id2505979" class="indexterm"></a><a href="#indentation space/">indentation</a> levels etc.
+          Construction can fail due to the <a id="id2505993" class="indexterm"></a><a href="#unavailable tag/">unavailability</a> of the required native data types.
+        </p>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2506012"></a>3.2. Information Models</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        This section specifies the formal details of the results of the above
+        processes. To maximize data portability between programming languages
+        and implementations, users of YAML should be mindful of the distinction
+        between <a id="id2506024" class="indexterm"></a><a href="#serialization/">serialization</a> or
+        <a id="id2506037" class="indexterm"></a><a href="#presentation/">presentation</a> properties and
+        those which are part of the YAML <a id="id2506051" class="indexterm"></a><a href="#representation/">representation</a>. Thus, while imposing
+        a <a id="id2506064" class="indexterm"></a><a href="#key order/">order</a> on <a id="id2506077" class="indexterm"></a><a href="#key/information model">mapping keys</a> is
+        necessary for flattening YAML <a id="id2506094" class="indexterm"></a><a href="#representation/">representations</a> to a sequential
+        access medium, this <a id="id2506107" class="indexterm"></a><a href="#serialization detail/">serialization detail</a> must not be used to convey
+        <a id="id2506122" class="indexterm"></a><a href="#application/">application</a> level information.
+        In a similar manner, while <a id="id2506136" class="indexterm"></a><a href="#indentation space/">indentation</a> technique and a choice of a <a id="id2506150" class="indexterm"></a><a href="#style/">node style</a> are needed for the human
+        readability, these <a id="id2506162" class="indexterm"></a><a href="#presentation detail/">presentation
+        details</a> are neither part of the YAML <a id="id2506177" class="indexterm"></a><a href="#serialization/">serialization</a> nor the YAML <a id="id2506190" class="indexterm"></a><a href="#representation/">representation</a>. By carefully
+        separating properties needed for <a id="id2506204" class="indexterm"></a><a href="#serialization/">serialization</a> and <a id="id2506218" class="indexterm"></a><a href="#presentation/">presentation</a>, YAML <a id="id2506231" class="indexterm"></a><a href="#representation/">representations</a> of <a id="id2506244" class="indexterm"></a><a href="#application/">application</a> information will be
+        consistent and portable between various programming environments.
+      </p>
+          <div class="figure">
+            <a id="id2506260"></a>
+            <p class="title">
+              <b>Figure 3.2. Information Models</b>
+            </p>
+            <div class="mediaobject">
+              <img src="model2.png" alt="Information Models" />
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2506281"></a>3.2.1. Representation Graph</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          YAML's <a id="id2506289" class="indexterm"></a><a id="representation/"></a
+            ><a href="#index-entry-representation"
+            ><i class="firstterm"
+            >representation</i></a
+          > of
+          native data is a rooted, connected, directed graph of <a id="id2506305" class="indexterm"></a><a href="#tag/information model">tagged</a> <a id="id2506320" class="indexterm"></a><a href="#node/information model">nodes</a>. By
+          &#8220;<span class="quote">directed graph</span>&#8221; we mean a set of <a id="id2506340" class="indexterm"></a><a href="#node/information model">nodes</a> and
+          directed edges (&#8220;<span class="quote">arrows</span>&#8221;), where each edge connects one
+          <a id="id2506361" class="indexterm"></a><a href="#node/information model">node</a>
+          to another (see <a href="http://www.nist.gov/dads/HTML/directedGraph.html" target="_top"> a formal
+          definition</a>). All the <a id="id2506383" class="indexterm"></a><a href="#node/information model">nodes</a> must be reachable from
+          the <a id="id2506400" class="indexterm"></a><a id="root node/"></a
+            ><a href="#index-entry-root node"
+            ><i class="firstterm"
+            >root node</i></a
+          > via such edges.
+          Note that the YAML graph may include cycles, and a <a id="id2506414" class="indexterm"></a><a href="#node/information model">node</a> may have
+          more than one incoming edge.
+        </p>
+            <p>
+          <a id="id2506435" class="indexterm"></a><a href="#node/information model">Nodes</a>
+          that are defined in terms of other <a id="id2506451" class="indexterm"></a><a href="#node/information model">nodes</a> are <a id="id2506467" class="indexterm"></a><a href="#collection/information model">collections</a> and <a id="id2506483" class="indexterm"></a><a href="#node/information model">nodes</a> that are independent of
+          any other <a id="id2506500" class="indexterm"></a><a href="#node/information model">nodes</a> are <a id="id2506516" class="indexterm"></a><a href="#scalar/information model">scalars</a>. YAML supports two
+          <a id="id2506532" class="indexterm"></a><a href="#kind/">kinds</a> of <a id="id2506544" class="indexterm"></a><a href="#collection/information model">collection
+          nodes</a>, <a id="id2506560" class="indexterm"></a><a href="#sequence/information model">sequences</a> and <a id="id2506577" class="indexterm"></a><a href="#mapping/information model">mappings</a>. <a id="id2506592" class="indexterm"></a><a href="#mapping/information model">Mapping
+          nodes</a> are somewhat tricky because their <a id="id2506608" class="indexterm"></a><a href="#key/information model">keys</a> are
+          unordered and must be <a id="id2506624" class="indexterm"></a><a href="#equality/">unique</a>.
+        </p>
+            <div class="figure">
+              <a id="id2506638"></a>
+              <p class="title">
+                <b>Figure 3.3. Representation Model</b>
+              </p>
+              <div class="mediaobject">
+                <img src="represent2.png" alt="Representation Model" />
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2506659"></a>3.2.1.1. Nodes</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            YAML <a id="id2506667" class="indexterm"></a><a id="node/information model"></a
+            ><a href="#index-entry-node"
+            ><i class="firstterm"
+            >nodes</i></a
+          > have <a id="id2506686" class="indexterm"></a><a id="content/information model"></a
+            ><a href="#index-entry-content"
+            ><i class="firstterm"
+            >content</i></a
+          > of one of three
+            <a id="id2506703" class="indexterm"></a><a id="kind/"></a
+            ><a href="#index-entry-kind"
+            ><i class="firstterm"
+            >kinds</i></a
+          >: scalar, sequence, or
+            mapping. In addition, each node has a <a id="id2506718" class="indexterm"></a><a href="#tag/information model">tag</a> which serves to
+            restrict the set of possible values which the node's content can
+            have.
+          </p>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Scalar</span>
+                  </dt>
+                  <dd>
+                    <p>
+                  The content of a <a id="id2506751" class="indexterm"></a><a id="scalar/information model"></a
+            ><a href="#index-entry-scalar"
+            ><i class="firstterm"
+            >scalar</i></a
+          > node is an
+                  opaque datum that can be <a id="id2506772" class="indexterm"></a><a href="#present/">presented</a> as a series of zero or
+                  more Unicode characters.
+                </p>
+                  </dd>
+                  <dt>
+                    <span class="term">Sequence</span>
+                  </dt>
+                  <dd>
+                    <p>
+                  The content of a <a id="id2506799" class="indexterm"></a><a id="sequence/information model"></a
+            ><a href="#index-entry-sequence"
+            ><i class="firstterm"
+            >sequence</i></a
+          > node is an
+                  ordered series of zero or more nodes. In particular, a
+                  sequence may contain the same node more than once or it could
+                  even contain itself (directly or indirectly).
+                </p>
+                  </dd>
+                  <dt>
+                    <span class="term">Mapping</span>
+                  </dt>
+                  <dd>
+                    <p>
+                  The content of a <a id="id2506833" class="indexterm"></a><a id="mapping/information model"></a
+            ><a href="#index-entry-mapping"
+            ><i class="firstterm"
+            >mapping</i></a
+          > node is an
+                  unordered set of <a id="id2506851" class="indexterm"></a><a id="key/information model"></a
+            ><a href="#index-entry-key"
+            ><i class="firstterm"
+            >key:</i></a
+          > <a id="id2506869" class="indexterm"></a><a id="value/information model"></a
+            ><a href="#index-entry-value"
+            ><i class="firstterm"
+            >value</i></a
+          >
+                  node pairs, with the restriction that each of the keys is
+                  <a id="id2506887" class="indexterm"></a><a href="#equality/">unique</a>. YAML places no
+                  further restrictions on the nodes. In particular, keys may be
+                  arbitrary nodes, the same node may be used as the value of
+                  several key: value pairs, and a mapping could even
+                  contain itself as a key or a value (directly or indirectly).
+                </p>
+                  </dd>
+                </dl>
+              </div>
+              <p>
+            When appropriate, it is convenient to consider sequences and
+            mappings together, as <a id="id2506915" class="indexterm"></a><a id="collection/information model"></a
+            ><a href="#index-entry-collection"
+            ><i class="firstterm"
+            >collections</i></a
+          >. In this view,
+            sequences are treated as mappings with integer keys starting at
+            zero. Having a unified collections view for sequences and mappings
+            is helpful both for creating practical YAML tools and APIs and for
+            theoretical analysis.
+          </p>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2506940"></a>3.2.1.2. Tags</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            YAML <a id="id2506948" class="indexterm"></a><a href="#represent/">represents</a> type
+            information of native data structures with a simple identifier,
+            called a <a id="id2506962" class="indexterm"></a><a id="tag/information model"></a
+            ><a href="#index-entry-tag"
+            ><i class="firstterm"
+            >tag</i></a
+          >. <a id="id2506980" class="indexterm"></a><a id="global tag/"></a
+            ><a href="#index-entry-global tag"
+            ><i class="firstterm"
+            >Global
+            tags</i></a
+          > are are <a href="http://www.ietf.org/rfc/rfc2396.txt" target="_top">URIs</a> and hence
+            globally unique across all <a id="id2507000" class="indexterm"></a><a href="#application/">applications</a>. The
+            &#8220;<span class="quote"><b class="userinput"><tt>tag</tt></b></span>&#8221;: <a href="http://www.taguri.org" target="_top">URI
+            scheme</a> (<a href="http://yaml.org/spec/taguri.txt" target="_top">mirror</a>) is
+            recommended for all global YAML tags. In contrast, <a id="id2507033" class="indexterm"></a><a id="local tag/"></a
+            ><a href="#index-entry-local tag"
+            ><i class="firstterm"
+            >local tags</i></a
+          > are specific to a single
+            <a id="id2507047" class="indexterm"></a><a href="#application/">application</a>. Local tags
+            start with <a id="id2507061" class="indexterm"></a><a id="! local tag/"></a
+            ><a href="#index-entry-! local tag"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</i></a
+          >, are not URIs and are not
+            expected to be globally unique. YAML provides a <a id="id2507082" class="indexterm"></a><a href="#TAG directive/">&#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; directive</a> to
+            make tag notation less verbose; it also offers easy migration from
+            local to global tags. To ensure this, local tags are restricted to
+            the URI character set and use URI character <a id="id2507104" class="indexterm"></a><a href="#escaping in URI/">escaping</a>.
+          </p>
+              <p>
+            YAML does not mandate any special relationship between different
+            tags that begin with the same substring. Tags ending with URI
+            fragments (containing <a id="id2507124" class="indexterm"></a><a href="## comment/">&#8220;<span class="quote"><b class="userinput"><tt>#</tt></b></span>&#8221;</a>) are no exception; tags that
+            share the same base URI but differ in their fragment part are
+            considered to be different, independent tags. By convention,
+            fragments are used to identify different &#8220;<span class="quote">variants</span>&#8221; of
+            a tag, while &#8220;<span class="quote"><b class="userinput"><tt>/</tt></b></span>&#8221; is used to define nested tag
+            &#8220;<span class="quote">namespace</span>&#8221; hierarchies. However, this is merely a
+            convention, and each tag may employ its own rules. For example,
+            Perl tags may use &#8220;<span class="quote"><b class="userinput"><tt>::</tt></b></span>&#8221; to express namespace
+            hierarchies, Java tags may use &#8220;<span class="quote"><b class="userinput"><tt>.</tt></b></span>&#8221;, etc.
+          </p>
+              <p>
+            YAML tags are used to associate meta information with each <a id="id2507182" class="indexterm"></a><a href="#node/information model">node</a>. In
+            particular, each tag must specify the expected <a id="id2507200" class="indexterm"></a><a href="#kind/">node kind</a> (<a id="id2507212" class="indexterm"></a><a href="#scalar/information model">scalar</a>, <a id="id2507228" class="indexterm"></a><a href="#sequence/information model">sequence</a>, or <a id="id2507244" class="indexterm"></a><a href="#mapping/information model">mapping</a>). <a id="id2507259" class="indexterm"></a><a href="#scalar/information model">Scalar</a>
+            tags must also provide mechanism for converting <a id="id2507276" class="indexterm"></a><a href="#format/">formatted content</a> to a <a id="id2507289" class="indexterm"></a><a href="#canonical form/">canonical form</a> for supporting
+            <a id="id2507302" class="indexterm"></a><a href="#equality/">equality</a> testing.
+            Furthermore, a tag may provide additional information such as the
+            set of allowed <a id="id2507317" class="indexterm"></a><a href="#content/information model">content values</a> for validation, a mechanism for
+            <a id="id2507334" class="indexterm"></a><a href="#tag resolution/">tag resolution</a>, or any
+            other data that is applicable to all of the tag's <a id="id2507349" class="indexterm"></a><a href="#node/information model">nodes</a>.
+          </p>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2507367"></a>3.2.1.3. Nodes Comparison</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            Since YAML <a id="id2507374" class="indexterm"></a><a href="#mapping/information model">mappings</a> require <a id="id2507391" class="indexterm"></a><a href="#key/information model">key</a> uniqueness, <a id="id2507406" class="indexterm"></a><a href="#representation/">representations</a> must include a
+            mechanism for testing the equality of <a id="id2507421" class="indexterm"></a><a href="#node/information model">nodes</a>. This is non-trivial
+            since YAML allows various ways to <a id="id2507437" class="indexterm"></a><a href="#format/">format</a> a given <a id="id2507450" class="indexterm"></a><a href="#scalar/information model">scalar content</a>. For
+            example, the integer eleven can be written as &#8220;<span class="quote"><b class="userinput"><tt>013</tt></b></span>&#8221;
+            (octal) or &#8220;<span class="quote"><b class="userinput"><tt>0xB</tt></b></span>&#8221; (hexadecimal). If both forms are
+            used as <a id="id2507481" class="indexterm"></a><a href="#key/information model">keys</a> in the same <a id="id2507497" class="indexterm"></a><a href="#mapping/information model">mapping</a>, only a YAML
+            <a id="id2507513" class="indexterm"></a><a href="#processor/">processor</a> which recognizes
+            integer <a id="id2507526" class="indexterm"></a><a href="#format/">formats</a> would correctly
+            flag the duplicate <a id="id2507539" class="indexterm"></a><a href="#key/information model">key</a> as an error.
+          </p>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Canonical Form</span>
+                  </dt>
+                  <dd>
+                    <p>
+                  YAML supports the need for <a id="id2507570" class="indexterm"></a><a href="#scalar/information model">scalar</a> equality by
+                  requiring that every <a id="id2507586" class="indexterm"></a><a href="#scalar/information model">scalar</a> <a id="id2507602" class="indexterm"></a><a href="#tag/information model">tag</a>
+                  must specify a mechanism to producing the <a id="id2507618" class="indexterm"></a><a id="canonical form/"></a
+            ><a href="#index-entry-canonical form"
+            ><i class="firstterm"
+            >canonical form</i></a
+          > of any
+                  <a id="id2507632" class="indexterm"></a><a href="#format/">formatted content</a>. This
+                  form is a Unicode character string which <a id="id2507646" class="indexterm"></a><a href="#present/">presents</a> the <a id="id2507659" class="indexterm"></a><a href="#content/information model">content</a> and can be used for equality
+                  testing. While this requirement is stronger than a well
+                  defined equality operator, it has other uses, such as the
+                  production of digital signatures.
+                </p>
+                  </dd>
+                  <dt>
+                    <span class="term">Equality</span>
+                  </dt>
+                  <dd>
+                    <p>
+                   Two <a id="id2507692" class="indexterm"></a><a href="#node/information model">nodes</a> must have the same <a id="id2507709" class="indexterm"></a><a href="#tag/information model">tag</a>
+                   and <a id="id2507724" class="indexterm"></a><a href="#content/information model">content</a> to be <a id="id2507741" class="indexterm"></a><a id="equality/"></a
+            ><a href="#index-entry-equality"
+            ><i class="firstterm"
+            >equal</i></a
+          >. Since each <a id="id2507755" class="indexterm"></a><a href="#tag/information model">tag</a>
+                   applies to exactly one <a id="id2507771" class="indexterm"></a><a href="#kind/">kind</a>, this implies that the two
+                   <a id="id2507785" class="indexterm"></a><a href="#node/information model">nodes</a> must have the same <a id="id2507801" class="indexterm"></a><a href="#kind/">kind</a> to be equal. Two <a id="id2507814" class="indexterm"></a><a href="#scalar/information model">scalars</a> are equal only when their <a id="id2507830" class="indexterm"></a><a href="#tag/information model">tags</a>
+                   and canonical forms are equal character-by-character.
+                   Equality of <a id="id2507848" class="indexterm"></a><a href="#collection/information model">collections</a> is
+                   defined recursively. Two <a id="id2507865" class="indexterm"></a><a href="#sequence/information model">sequences</a> are equal
+                   only when they have the same <a id="id2507882" class="indexterm"></a><a href="#tag/information model">tag</a> and length, and
+                   each <a id="id2507897" class="indexterm"></a><a href="#node/information model">node</a> in one <a id="id2507914" class="indexterm"></a><a href="#sequence/information model">sequence</a> is equal to
+                   the corresponding <a id="id2507930" class="indexterm"></a><a href="#node/information model">node</a> in the other
+                   <a id="id2507945" class="indexterm"></a><a href="#sequence/information model">sequence</a>. Two <a id="id2507962" class="indexterm"></a><a href="#mapping/information model">mappings</a> are equal
+                   only when they have the same <a id="id2507978" class="indexterm"></a><a href="#tag/information model">tag</a> and an equal set
+                   of <a id="id2507994" class="indexterm"></a><a href="#key/information model">keys</a>, and each <a id="id2508010" class="indexterm"></a><a href="#key/information model">key</a> in this set is
+                   associated with equal <a id="id2508026" class="indexterm"></a><a href="#value/information model">values</a> in both
+                   <a id="id2508042" class="indexterm"></a><a href="#mapping/information model">mappings</a>.
+                </p>
+                  </dd>
+                  <dt>
+                    <span class="term">Identity</span>
+                  </dt>
+                  <dd>
+                    <p>
+                  Two <a id="id2508071" class="indexterm"></a><a href="#node/information model">nodes</a> are <a id="id2508088" class="indexterm"></a><a id="identity/"></a
+            ><a href="#index-entry-identity"
+            ><i class="firstterm"
+            >identical</i></a
+          > only when they
+                  <a id="id2508102" class="indexterm"></a><a href="#represent/">represent</a> the same
+                  native data structure. Typically, this corresponds to a
+                  single memory address. Identity should not be confused with
+                  equality; two equal <a id="id2508118" class="indexterm"></a><a href="#node/information model">nodes</a> need not have
+                  the same identity. A YAML <a id="id2508135" class="indexterm"></a><a href="#processor/">processor</a> may treat equal
+                  <a id="id2508148" class="indexterm"></a><a href="#scalar/information model">scalars</a> as if they were identical. In
+                  contrast, the separate identity of two distinct but equal
+                  <a id="id2508166" class="indexterm"></a><a href="#collection/information model">collections</a> must be preserved.
+                </p>
+                  </dd>
+                </dl>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2508190"></a>3.2.2. Serialization Tree</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          To express a YAML <a id="id2508198" class="indexterm"></a><a href="#representation/">representation</a> using a serial API,
+          it necessary to impose an <a id="id2508212" class="indexterm"></a><a href="#key order/">order</a> on <a id="id2508225" class="indexterm"></a><a href="#key/information model">mapping keys</a> and employ
+          <a id="id2508240" class="indexterm"></a><a href="#alias/information model">alias
+          nodes</a> to indicate a subsequent occurrence of a previously
+          encountered <a id="id2508257" class="indexterm"></a><a href="#node/information model">node</a>. The result of this process is a <a id="id2508274" class="indexterm"></a><a id="serialization/"></a
+            ><a href="#index-entry-serialization"
+            ><i class="firstterm"
+            >serialization tree</i></a
+          >, where each
+          <a id="id2508288" class="indexterm"></a><a href="#node/information model">node</a>
+          has an ordered set of children. This tree can be traversed for a
+          serial event based API. <a id="id2508306" class="indexterm"></a><a href="#construct/">Construction</a> of native structures from
+          the serial interface should not use <a id="id2508320" class="indexterm"></a><a href="#key order/">key
+          order</a> or <a id="id2508333" class="indexterm"></a><a href="#anchor/information model">anchors</a> for the preservation of important data.
+        </p>
+            <div class="figure">
+              <a id="id2508351"></a>
+              <p class="title">
+                <b>Figure 3.4. Serialization Model</b>
+              </p>
+              <div class="mediaobject">
+                <img src="serialize2.png" alt="Serialization Model" />
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2508372"></a>3.2.2.1. Keys Order</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            In the <a id="id2508380" class="indexterm"></a><a href="#representation/">representation</a>
+            model, <a id="id2508393" class="indexterm"></a><a href="#key/information model">mapping
+            keys</a> do not have an order. To <a id="id2508409" class="indexterm"></a><a href="#serialize/">serialize</a> a <a id="id2508422" class="indexterm"></a><a href="#mapping/information model">mapping</a>,
+            it is necessary to impose an <a id="id2508439" class="indexterm"></a><a id="key order/"></a
+            ><a href="#index-entry-key order"
+            ><i class="firstterm"
+            >ordering</i></a
+          > on its <a id="id2508453" class="indexterm"></a><a href="#key/information model">keys</a>. This order is a
+            <a id="id2508469" class="indexterm"></a><a href="#serialization detail/">serialization
+            detail</a> and should not be used when <a id="id2508483" class="indexterm"></a><a href="#compose/">composing</a> the <a id="id2508496" class="indexterm"></a><a href="#representation/">representation graph</a> (and hence
+            for the preservation of important data). In every case where
+            <a id="id2508512" class="indexterm"></a><a href="#node/information model">node</a> order is significant, a <a id="id2508528" class="indexterm"></a><a href="#sequence/information model">sequence</a>
+            must be used. For example, an ordered <a id="id2508545" class="indexterm"></a><a href="#mapping/information model">mapping</a> can be <a id="id2508560" class="indexterm"></a><a href="#represent/">represented</a> as a <a id="id2508573" class="indexterm"></a><a href="#sequence/information model">sequence</a>
+            of <a id="id2508589" class="indexterm"></a><a href="#mapping/information model">mappings</a>, where each <a id="id2508605" class="indexterm"></a><a href="#mapping/information model">mapping</a> is a single
+            <a id="id2508620" class="indexterm"></a><a href="#key/information model">key:</a> <a id="id2508637" class="indexterm"></a><a href="#value/information model">value</a> pair. YAML provides
+            convenient compact notation for this case.
+          </p>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2508656"></a>3.2.2.2. Anchors and Aliases</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            In the <a id="id2508664" class="indexterm"></a><a href="#representation/">representation
+            graph</a>, a <a id="id2508678" class="indexterm"></a><a href="#node/information model">node</a> may appear in more than one <a id="id2508695" class="indexterm"></a><a href="#collection/information model">collection</a>. When <a id="id2508712" class="indexterm"></a><a href="#serialize/">serializing</a> such data, the first
+            occurrence of the <a id="id2508725" class="indexterm"></a><a href="#node/information model">node</a> is <a id="id2508740" class="indexterm"></a><a id="identified/"></a
+            ><a href="#index-entry-identified"
+            ><i class="firstterm"
+            >identified</i></a
+          > by an <a id="id2508754" class="indexterm"></a><a id="anchor/information model"></a
+            ><a href="#index-entry-anchor"
+            ><i class="firstterm"
+            >anchor</i></a
+          > and
+            each subsequent occurrence is <a id="id2508773" class="indexterm"></a><a href="#serialize/">serialized</a> as an <a id="id2508785" class="indexterm"></a><a id="alias/information model"></a
+            ><a href="#index-entry-alias"
+            ><i class="firstterm"
+            >alias node</i></a
+          >
+            which refers back to this anchor. Otherwise, anchor names are a
+            <a id="id2508804" class="indexterm"></a><a href="#serialization detail/">serialization
+            detail</a> and are discarded once <a id="id2508818" class="indexterm"></a><a href="#compose/">composing</a> is completed. When <a id="id2508830" class="indexterm"></a><a href="#compose/">composing</a> a <a id="id2508843" class="indexterm"></a><a href="#representation/">representation graph</a> from
+            <a id="id2508856" class="indexterm"></a><a href="#serialize/">serialized</a> events, an alias
+            node refers to the most recent <a id="id2508870" class="indexterm"></a><a href="#node/information model">node</a> in the <a id="id2508886" class="indexterm"></a><a href="#serialization/">serialization</a> having the
+            specified anchor. Therefore, anchors need not be unique within a
+            <a id="id2508901" class="indexterm"></a><a href="#serialization/">serialization</a>. In
+            addition, an anchor need not have an alias node referring to it. It
+            is therefore possible to provide an anchor for all <a id="id2508917" class="indexterm"></a><a href="#node/information model">nodes</a> in
+            <a id="id2508932" class="indexterm"></a><a href="#serialization/">serialization</a>.
+          </p>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2508949"></a>3.2.3. Presentation Stream</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          A YAML <a id="id2508957" class="indexterm"></a><a id="presentation/"></a
+            ><a href="#index-entry-presentation"
+            ><i class="firstterm"
+            >presentation</i></a
+          > is a
+          <a id="id2508971" class="indexterm"></a><a id="stream/information model"></a
+            ><a href="#index-entry-stream"
+            ><i class="firstterm"
+            >stream</i></a
+          > of Unicode characters making use of of
+          <a id="id2508990" class="indexterm"></a><a href="#style/">styles</a>, <a id="id2509002" class="indexterm"></a><a href="#format/">formats</a>, <a id="id2509015" class="indexterm"></a><a href="#comment/information model">comments</a>, <a id="id2509030" class="indexterm"></a><a href="#directive/information model">directives</a> and other <a id="id2509046" class="indexterm"></a><a href="#presentation detail/">presentation details</a> to <a id="id2509060" class="indexterm"></a><a href="#present/">present</a> a YAML <a id="id2509072" class="indexterm"></a><a href="#serialization/">serialization</a> in a human readable
+          way. Although a YAML <a id="id2509086" class="indexterm"></a><a href="#processor/">processor</a>
+          may provide these <a id="id2509100" class="indexterm"></a><a href="#presentation detail/">details</a> when <a id="id2509114" class="indexterm"></a><a href="#parse/">parsing</a>, they should not be reflected in
+          the resulting <a id="id2509128" class="indexterm"></a><a href="#serialization/">serialization</a>. YAML allows several
+          <a id="id2509142" class="indexterm"></a><a href="#serialization/">serializations</a> to be
+          contained in the same YAML character stream as a series of <a id="id2509156" class="indexterm"></a><a id="document/information model"></a
+            ><a href="#index-entry-document"
+            ><i class="firstterm"
+            >documents</i></a
+          >
+          separated by <a id="id2509174" class="indexterm"></a><a href="#document boundary marker/">document
+          boundary markers</a>. Documents appearing in the same stream
+          are independent; that is, a <a id="id2509189" class="indexterm"></a><a href="#node/information model">node</a> must not appear in more
+          than one <a id="id2509206" class="indexterm"></a><a href="#serialization/">serialization
+          tree</a> or <a id="id2509219" class="indexterm"></a><a href="#representation/">representation
+          graph</a>.
+        </p>
+            <div class="figure">
+              <a id="id2509234"></a>
+              <p class="title">
+                <b>Figure 3.5. Presentation Model</b>
+              </p>
+              <div class="mediaobject">
+                <img src="present2.png" alt="Presentation Model" />
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2509255"></a>3.2.3.1. Node Styles</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            Each <a id="id2509263" class="indexterm"></a><a href="#node/information model">node</a> is presented in some <a id="id2509280" class="indexterm"></a><a id="style/"></a
+            ><a href="#index-entry-style"
+            ><i class="firstterm"
+            >style</i></a
+          >, depending on its <a id="id2509293" class="indexterm"></a><a href="#kind/">kind</a>. The node style is a <a id="id2509306" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and is
+            not reflected in the <a id="id2509321" class="indexterm"></a><a href="#serialization/">serialization
+            tree</a> or <a id="id2509335" class="indexterm"></a><a href="#representation/">representation
+            graph</a>. There are two groups of styles, <a id="id2509348" class="indexterm"></a><a id="block style/information model"></a
+            ><a href="#index-entry-block style"
+            ><i class="firstterm"
+            >block</i></a
+          >
+            and <a id="id2509366" class="indexterm"></a><a id="flow style/information model"></a
+            ><a href="#index-entry-flow style"
+            ><i class="firstterm"
+            >flow</i></a
+          >. Block styles use <a id="id2509384" class="indexterm"></a><a href="#indentation space/">indentation</a> to denote nesting
+            and scope within the <a id="id2509398" class="indexterm"></a><a href="#document/information model">document</a>. In contrast, flow
+            styles rely on explicit <a id="id2509415" class="indexterm"></a><a href="#indicator/">indicators</a> to denote nesting and
+            scope.
+          </p>
+              <p>
+            YAML provides a rich set of <a id="id2509432" class="indexterm"></a><a href="#scalar/information model">scalar styles</a>. <a id="id2509448" class="indexterm"></a><a id="block scalar style/information model"></a
+            ><a href="#index-entry-block scalar style"
+            ><i class="firstterm"
+            >Block
+            scalar styles</i></a
+          > include the <a id="id2509466" class="indexterm"></a><a id="literal style/information model"></a
+            ><a href="#index-entry-literal style"
+            ><i class="firstterm"
+            >literal style</i></a
+          > and
+            the <a id="id2509486" class="indexterm"></a><a id="folded style/information model"></a
+            ><a href="#index-entry-folded style"
+            ><i class="firstterm"
+            >folded style</i></a
+          >; <a id="id2509504" class="indexterm"></a><a id="flow scalar style/information model"></a
+            ><a href="#index-entry-flow scalar style"
+            ><i class="firstterm"
+            >flow scalar styles</i></a
+          > include
+            the <a id="id2509522" class="indexterm"></a><a id="plain style/information model"></a
+            ><a href="#index-entry-plain style"
+            ><i class="firstterm"
+            >plain style</i></a
+          > and two <a id="id2509541" class="indexterm"></a><a id="quoted style/information model"></a
+            ><a href="#index-entry-quoted style"
+            ><i class="firstterm"
+            >quoted styles</i></a
+          >, the
+            <a id="id2509559" class="indexterm"></a><a id="single quoted style/information model"></a
+            ><a href="#index-entry-single quoted style"
+            ><i class="firstterm"
+            >single quoted style</i></a
+          > and the <a id="id2509577" class="indexterm"></a><a id="double quoted style/information model"></a
+            ><a href="#index-entry-double quoted style"
+            ><i class="firstterm"
+            >double
+            quoted style</i></a
+          >. These styles offer a range of trade-offs
+            between expressive power and readability.
+          </p>
+              <p>
+            Normally, the <a id="id2509601" class="indexterm"></a><a href="#content/information model">content</a> of <a id="id2509618" class="indexterm"></a><a id="block collection style/information model"></a
+            ><a href="#index-entry-block collection style"
+            ><i class="firstterm"
+            >block collections</i></a
+          >
+            begins on the next line. In most cases, YAML also allows block
+            collections to start <a id="id2509638" class="indexterm"></a><a id="in-line style/information model"></a
+            ><a href="#index-entry-in-line style"
+            ><i class="firstterm"
+            >in-line</i></a
+          > for more compact
+            notation when nesting <a id="id2509657" class="indexterm"></a><a id="block sequence style/information model"></a
+            ><a href="#index-entry-block sequence style"
+            ><i class="firstterm"
+            >block sequences</i></a
+          > and
+            <a id="id2509675" class="indexterm"></a><a id="block mapping style/information model"></a
+            ><a href="#index-entry-block mapping style"
+            ><i class="firstterm"
+            >block mappings</i></a
+          > inside each other. When nesting
+            <a id="id2509694" class="indexterm"></a><a id="flow collection style/information model"></a
+            ><a href="#index-entry-flow collection style"
+            ><i class="firstterm"
+            >flow collections</i></a
+          >, a <a id="id2509713" class="indexterm"></a><a id="flow mapping style/information model"></a
+            ><a href="#index-entry-flow mapping style"
+            ><i class="firstterm"
+            >flow mapping</i></a
+          > with a
+            <a id="id2509733" class="indexterm"></a><a id="single pair style/information model"></a
+            ><a href="#index-entry-single pair style"
+            ><i class="firstterm"
+            >single key: value pair</i></a
+          > may be specified
+            directly inside a <a id="id2509752" class="indexterm"></a><a id="flow sequence style/information model"></a
+            ><a href="#index-entry-flow sequence style"
+            ><i class="firstterm"
+            >flow sequence</i></a
+          >, allowing for
+            a compact &#8220;<span class="quote">ordered mapping</span>&#8221; notation.
+          </p>
+              <div class="figure">
+                <a id="id2509776"></a>
+                <p class="title">
+                  <b>Figure 3.6. Kind/Style Combinations</b>
+                </p>
+                <div class="mediaobject">
+                  <img src="styles2.png" alt="Kind/Style Combinations" />
+                </div>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2509799"></a>3.2.3.2. Scalar Formats</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            YAML allows <a id="id2509807" class="indexterm"></a><a href="#scalar/information model">scalar content</a> to be <a id="id2509823" class="indexterm"></a><a href="#present/">presented</a> in several <a id="id2509836" class="indexterm"></a><a id="format/"></a
+            ><a href="#index-entry-format"
+            ><i class="firstterm"
+            >formats</i></a
+          >. For example, the boolean
+            &#8220;<span class="quote"><b class="userinput"><tt>true</tt></b></span>&#8221; might also be written as
+            &#8220;<span class="quote"><b class="userinput"><tt>yes</tt></b></span>&#8221;. <a id="id2509864" class="indexterm"></a><a href="#tag/information model">Tags</a> must specify a mechanism for converting any
+            formatted <a id="id2509882" class="indexterm"></a><a href="#scalar/information model">scalar content</a> to a <a id="id2509898" class="indexterm"></a><a href="#canonical form/">canonical form</a> for use in <a id="id2509911" class="indexterm"></a><a href="#equality/">equality</a> testing. Like <a id="id2509924" class="indexterm"></a><a href="#style/">node style</a>, the format is a <a id="id2509936" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and is
+            not reflected in the <a id="id2509951" class="indexterm"></a><a href="#serialization/">serialization
+            tree</a> and <a id="id2509965" class="indexterm"></a><a href="#representation/">representation
+            graph</a>.
+          </p>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2509980"></a>3.2.3.3. Comments</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            <a id="id2509988" class="indexterm"></a><a id="comment/information model"></a
+            ><a href="#index-entry-comment"
+            ><i class="firstterm"
+            >Comments</i></a
+          > are a <a id="id2510005" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and must not have any effect
+            on the <a id="id2510020" class="indexterm"></a><a href="#serialization/">serialization
+            tree</a> or <a id="id2510034" class="indexterm"></a><a href="#representation/">representation
+            graph</a>. In particular, comments are not associated with
+            a particular <a id="id2510048" class="indexterm"></a><a href="#node/information model">node</a>. The usual purpose of a comment is to
+            communicate between the human maintainers of a file. A typical
+            example is comments in a configuration file. Comments may not
+            appear inside <a id="id2510068" class="indexterm"></a><a href="#scalar/information model">scalars</a>, but may be interleaved with such <a id="id2510084" class="indexterm"></a><a href="#scalar/information model">scalars</a>
+            inside <a id="id2510099" class="indexterm"></a><a href="#collection/information model">collections</a>.
+          </p>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2510119"></a>3.2.3.4. Directives</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+            Each <a id="id2510127" class="indexterm"></a><a href="#document/information model">document</a> may be associated with a set of <a id="id2510143" class="indexterm"></a><a id="directive/information model"></a
+            ><a href="#index-entry-directive"
+            ><i class="firstterm"
+            >directives</i></a
+          >. A directive has a name and an optional
+            sequence of parameters. Directives are instructions to the YAML
+            <a id="id2510164" class="indexterm"></a><a href="#processor/">processor</a>, and like all
+            other <a id="id2510176" class="indexterm"></a><a href="#presentation detail/">presentation
+            details</a> are not reflected in the YAML <a id="id2510190" class="indexterm"></a><a href="#serialization/">serialization tree</a> or <a id="id2510204" class="indexterm"></a><a href="#representation/">representation graph</a>. This
+            version of YAML defines a two directives, <a id="id2510218" class="indexterm"></a><a href="#YAML directive/">&#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221;</a> and <a id="id2510236" class="indexterm"></a><a href="#TAG directive/">&#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221;</a>. All other
+            directives are <a id="id2510254" class="indexterm"></a><a href="#reserved directive/">reserved</a> for future versions of YAML.
+          </p>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2510274"></a>3.3. Loading Failure Points</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        The process of <a id="id2510282" class="indexterm"></a><a href="#load/">loading</a> native data
+        structures from a YAML <a id="id2510296" class="indexterm"></a><a href="#stream/information model">stream</a> has several potential <a id="id2510313" class="indexterm"></a><a id="load failure point/"></a
+            ><a href="#index-entry-load failure point"
+            ><i class="firstterm"
+            >failure points</i></a
+          >. The character <a id="id2510328" class="indexterm"></a><a href="#stream/information model">stream</a> may be
+        <a id="id2510344" class="indexterm"></a><a href="#ill-formed stream/">ill-formed</a>, <a id="id2510357" class="indexterm"></a><a href="#alias/information model">aliases</a> may be
+        <a id="id2510373" class="indexterm"></a><a href="#unidentified alias/">unidentified</a>,
+        <a id="id2510387" class="indexterm"></a><a href="#non-specific tag/">unspecified tags</a> may be
+        <a id="id2510400" class="indexterm"></a><a href="#unresolved tag/">unresolvable</a>, <a id="id2510414" class="indexterm"></a><a href="#tag/information model">tags</a> may be
+        <a id="id2510430" class="indexterm"></a><a href="#unrecognized tag/">unrecognized</a>, the
+        <a id="id2510445" class="indexterm"></a><a href="#content/information model">content</a> may be <a id="id2510461" class="indexterm"></a><a href="#invalid content/">invalid</a>, and a native type may be <a id="id2510476" class="indexterm"></a><a href="#unavailable tag/">unavailable</a>. Each of these failures
+        results with an incomplete loading.
+      </p>
+          <p>
+        A <a id="id2510493" class="indexterm"></a><a id="partial representation/"></a
+            ><a href="#index-entry-partial representation"
+            ><i class="firstterm"
+            >partial
+        representation</i></a
+          > need not <a id="id2510510" class="indexterm"></a><a href="#tag resolution/">resolve</a> the <a id="id2510522" class="indexterm"></a><a href="#tag/information model">tag</a> of each <a id="id2510538" class="indexterm"></a><a href="#node/information model">node</a>, and the
+        <a id="id2510554" class="indexterm"></a><a href="#canonical form/">canonical form</a> of <a id="id2510567" class="indexterm"></a><a href="#scalar/information model">scalar content</a>
+        need not be available. This weaker representation is useful for cases
+        of incomplete knowledge of the types used in the <a id="id2510585" class="indexterm"></a><a href="#document/information model">document</a>. In
+        contrast, a <a id="id2510600" class="indexterm"></a><a id="complete representation/"></a
+            ><a href="#index-entry-complete representation"
+            ><i class="firstterm"
+            >complete
+        representation</i></a
+          > specifies the <a id="id2510616" class="indexterm"></a><a href="#tag/information model">tag</a> of each <a id="id2510631" class="indexterm"></a><a href="#node/information model">node</a>, and
+        provides the <a id="id2510647" class="indexterm"></a><a href="#canonical form/">canonical form</a>
+        of <a id="id2510660" class="indexterm"></a><a href="#scalar/information model">scalar
+        content</a>, allowing for <a id="id2510676" class="indexterm"></a><a href="#equality/">equality</a> testing. A complete
+        representation is required in order to <a id="id2510690" class="indexterm"></a><a href="#construct/">construct</a> native data structures.
+      </p>
+          <div class="figure">
+            <a id="id2510704"></a>
+            <p class="title">
+              <b>Figure 3.7. Loading Failure Points</b>
+            </p>
+            <div class="mediaobject">
+              <img src="validity2.png" alt="Loading Failure Points" />
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2510726"></a>3.3.1. Well-Formed and Identified</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          A <a id="id2510734" class="indexterm"></a><a id="well-formed stream/"></a
+            ><a href="#index-entry-well-formed stream"
+            ><i class="firstterm"
+            >well-formed</i></a
+          >
+          character <a id="id2510750" class="indexterm"></a><a href="#stream/information model">stream</a> must match the productions specified in the
+          next chapter. Successful loading also requires that each <a id="id2510768" class="indexterm"></a><a href="#alias/information model">alias</a> shall
+          refer to a previous <a id="id2510784" class="indexterm"></a><a href="#node/information model">node</a> <a id="id2510800" class="indexterm"></a><a href="#identified/">identified</a> by the <a id="id2510812" class="indexterm"></a><a href="#anchor/information model">anchor</a>. A
+          YAML <a id="id2510828" class="indexterm"></a><a href="#processor/">processor</a> should reject
+          <a id="id2510840" class="indexterm"></a><a id="ill-formed stream/"></a
+            ><a href="#index-entry-ill-formed stream"
+            ><i class="firstterm"
+            >ill-formed streams</i></a
+          > and
+          <a id="id2510855" class="indexterm"></a><a id="unidentified alias/"></a
+            ><a href="#index-entry-unidentified alias"
+            ><i class="firstterm"
+            >unidentified aliases</i></a
+          >.
+          A YAML <a id="id2510870" class="indexterm"></a><a href="#processor/">processor</a> may recover
+          from syntax errors, possibly by ignoring certain parts of the input,
+          but it must provide a mechanism for reporting such errors.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2510888"></a>3.3.2. Resolved</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          It is not required that all the <a id="id2510896" class="indexterm"></a><a href="#tag/information model">tags</a> of the <a id="id2510912" class="indexterm"></a><a href="#complete representation/">complete representation</a>
+          be explicitly specified in the character <a id="id2510927" class="indexterm"></a><a href="#stream/information model">stream</a>. During <a id="id2510944" class="indexterm"></a><a href="#parse/">parsing</a>, <a id="id2510956" class="indexterm"></a><a href="#node/information model">nodes</a> that omit the <a id="id2510972" class="indexterm"></a><a href="#tag/information model">tag</a> are given a
+          <a id="id2510987" class="indexterm"></a><a id="non-specific tag/"></a
+            ><a href="#index-entry-non-specific tag"
+            ><i class="firstterm"
+            >non-specific tag</i></a
+          >:
+          <a id="id2511002" class="indexterm"></a><a id="? non-specific tag/"></a
+            ><a href="#index-entry-? non-specific tag"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</i></a
+          >
+          for <a id="id2511020" class="indexterm"></a><a href="#plain style/information model">plain scalars</a> and <a id="id2511037" class="indexterm"></a><a id="! non-specific tag/"></a
+            ><a href="#index-entry-! non-specific tag"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</i></a
+          > for all other <a id="id2511056" class="indexterm"></a><a href="#node/information model">nodes</a>. These
+          non-specific tags must be <a id="id2511072" class="indexterm"></a><a id="tag resolution/"></a
+            ><a href="#index-entry-tag resolution"
+            ><i class="firstterm"
+            >resolved</i></a
+          > to a <a id="id2511087" class="indexterm"></a><a id="specific tag/"></a
+            ><a href="#index-entry-specific tag"
+            ><i class="firstterm"
+            >specific tag</i></a
+          > (either a <a id="id2511102" class="indexterm"></a><a href="#local tag/">local tag</a> or a <a id="id2511115" class="indexterm"></a><a href="#global tag/">global
+          tag</a>) for a <a id="id2511127" class="indexterm"></a><a href="#complete representation/">complete representation</a> to be <a id="id2511142" class="indexterm"></a><a href="#compose/">composed</a>.
+        </p>
+            <p>
+          Resolving the <a id="id2511158" class="indexterm"></a><a href="#tag/information model">tag</a> of a <a id="id2511174" class="indexterm"></a><a href="#node/information model">node</a> must only depend on the
+          following three parameters: the non-specific tag of the <a id="id2511191" class="indexterm"></a><a href="#node/information model">node</a>, the path
+          leading from the <a id="id2511207" class="indexterm"></a><a href="#root node/">root node</a> to
+          the <a id="id2511221" class="indexterm"></a><a href="#node/information model">node</a>, and the <a id="id2511237" class="indexterm"></a><a href="#content/information model">content</a> (and hence the
+          <a id="id2511252" class="indexterm"></a><a href="#kind/">kind</a>) of the <a id="id2511265" class="indexterm"></a><a href="#node/information model">node</a>. In
+          particular, resolution must not consider <a id="id2511282" class="indexterm"></a><a href="#presentation detail/">presentation details</a> such as
+          <a id="id2511295" class="indexterm"></a><a href="#comment/information model">comments</a>, <a id="id2511312" class="indexterm"></a><a href="#indentation space/">indentation</a> and <a id="id2511324" class="indexterm"></a><a href="#style/">node
+          style</a>. Also, resolution must not consider the <a id="id2511338" class="indexterm"></a><a href="#content/information model">content</a> of
+          any other <a id="id2511354" class="indexterm"></a><a href="#node/information model">node</a>, except for the <a id="id2511370" class="indexterm"></a><a href="#content/information model">content</a> of the <a id="id2511386" class="indexterm"></a><a href="#key/information model">key nodes</a>
+          directly along the path leading from the <a id="id2511402" class="indexterm"></a><a href="#root node/">root node</a> to the resolved <a id="id2511415" class="indexterm"></a><a href="#node/information model">node</a>. In particular,
+          resolution must not consider the <a id="id2511432" class="indexterm"></a><a href="#content/information model">content</a> of a sibling <a id="id2511448" class="indexterm"></a><a href="#node/information model">node</a> in a
+          <a id="id2511463" class="indexterm"></a><a href="#collection/information model">collection</a> or the <a id="id2511480" class="indexterm"></a><a href="#content/information model">content</a> of the <a id="id2511496" class="indexterm"></a><a href="#value/information model">value node</a>
+          associated with a resolved <a id="id2511512" class="indexterm"></a><a href="#key/information model">key node</a>.
+        </p>
+            <p>
+          Tag resolution is specific to the <a id="id2511532" class="indexterm"></a><a href="#application/">application</a>, hence a YAML <a id="id2511545" class="indexterm"></a><a href="#processor/">processor</a> should provide a mechanism
+          allowing the <a id="id2511558" class="indexterm"></a><a href="#application/">application</a> to
+          specify the tag resolution rules. It is recommended that <a id="id2511573" class="indexterm"></a><a href="#node/information model">nodes</a> having
+          the &#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221; non-specific tag should be resolved as
+          &#8220;<span class="quote"><b class="userinput"><tt>tag:yaml.org,2002:seq</tt></b></span>&#8221;,
+          &#8220;<span class="quote"><b class="userinput"><tt>tag:yaml.org,2002:map</tt></b></span>&#8221; or
+          &#8220;<span class="quote"><b class="userinput"><tt>tag:yaml.org,2002:str</tt></b></span>&#8221; depending on the <a id="id2511617" class="indexterm"></a><a href="#node/information model">node's kind</a>.
+          This convention allows the author of a YAML character <a id="id2511634" class="indexterm"></a><a href="#stream/information model">stream</a> to
+          exert some measure of control over the tag resolution process. By
+          explicitly specifying a <a id="id2511652" class="indexterm"></a><a href="#plain style/information model">plain scalar</a> has the
+          &#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221; non-specific tag, the <a id="id2511675" class="indexterm"></a><a href="#node/information model">node</a> is resolved as a string,
+          as if it was <a id="id2511692" class="indexterm"></a><a href="#quoted style/information model">quoted</a> or written in a <a id="id2511708" class="indexterm"></a><a href="#block style/information model">block style</a>. Note,
+          however, that each <a id="id2511725" class="indexterm"></a><a href="#application/">application</a> may override this
+          behavior. For example, an <a id="id2511739" class="indexterm"></a><a href="#application/">application</a> may automatically detect
+          the type of programming language used in source code <a id="id2511753" class="indexterm"></a><a href="#present/">presented</a> as a non-<a id="id2511766" class="indexterm"></a><a href="#plain style/information model">plain</a>
+          <a id="id2511781" class="indexterm"></a><a href="#scalar/information model">scalar</a> and resolve it accordingly.
+        </p>
+            <p>
+          When a <a id="id2511802" class="indexterm"></a><a href="#node/information model">node</a> has more than one occurence (using an <a id="id2511819" class="indexterm"></a><a href="#anchor/information model">anchor</a> and
+          <a id="id2511834" class="indexterm"></a><a href="#alias/information model">alias
+          nodes</a>), tag resolution must depend only on the path to the
+          first occurence of the <a id="id2511851" class="indexterm"></a><a href="#node/information model">node</a>. Typically, the path leading to a <a id="id2511868" class="indexterm"></a><a href="#node/information model">node</a> is
+          sufficient to determine its specific tag. In cases where the path
+          does not imply a single specific tag, the resolution also needs to
+          consider the <a id="id2511886" class="indexterm"></a><a href="#content/information model">node content</a> to select amongst the set of possible
+          <a id="id2511903" class="indexterm"></a><a href="#tag/information model">tags</a>.
+          Thus, <a id="id2511918" class="indexterm"></a><a href="#plain style/information model">plain scalars</a> may be matched against a set of
+          regular expressions to provide automatic resolution of integers,
+          floats, timestamps and similar types. Similarly, the <a id="id2511938" class="indexterm"></a><a href="#content/information model">content</a> of
+          <a id="id2511954" class="indexterm"></a><a href="#mapping/information model">mapping
+          nodes</a> may be matched against sets of expected <a id="id2511970" class="indexterm"></a><a href="#key/information model">keys</a> to
+          automatically resolve points, complex numbers and similar types.
+        </p>
+            <p>
+          The combined effect of these rules is to ensure that tag resolution
+          can be performed as soon as a <a id="id2511992" class="indexterm"></a><a href="#node/information model">node</a> is first encountered in
+          the <a id="id2512009" class="indexterm"></a><a href="#stream/information model">stream</a>, typically before its <a id="id2512025" class="indexterm"></a><a href="#content/information model">content</a> is
+          <a id="id2512041" class="indexterm"></a><a href="#parse/">parsed</a>. Also, tag resolution only
+          requires refering to a relatively small number of previously parsed
+          <a id="id2512055" class="indexterm"></a><a href="#node/information model">nodes</a>. Thus, tag resolution in one-pass <a id="id2512071" class="indexterm"></a><a href="#processor/">processors</a> is both possible and
+          practical.
+        </p>
+            <p>
+          If a <a id="id2512088" class="indexterm"></a><a href="#document/information model">document</a> contains <a id="id2512104" class="indexterm"></a><a id="unresolved tag/"></a
+            ><a href="#index-entry-unresolved tag"
+            ><i class="firstterm"
+            >unresolved tags</i></a
+          >, the YAML <a id="id2512118" class="indexterm"></a><a href="#processor/">processor</a> is unable to <a id="id2512131" class="indexterm"></a><a href="#compose/">compose</a> a <a id="id2512143" class="indexterm"></a><a href="#complete representation/">complete representation</a> graph. In such a
+          case, the YAML <a id="id2512158" class="indexterm"></a><a href="#processor/">processor</a> may
+          <a id="id2512171" class="indexterm"></a><a href="#compose/">compose</a> an <a id="id2512183" class="indexterm"></a><a href="#partial representation/">partial representation</a>,
+          based on each <a id="id2512199" class="indexterm"></a><a href="#kind/">node's kind</a> and
+          allowing for non-specific tags.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2512215"></a>3.3.3. Recognized and Valid</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          To be <a id="id2512223" class="indexterm"></a><a id="valid content/"></a
+            ><a href="#index-entry-valid content"
+            ><i class="firstterm"
+            >valid</i></a
+          >, a <a id="id2512238" class="indexterm"></a><a href="#node/information model">node</a> must have
+          a <a id="id2512253" class="indexterm"></a><a href="#tag/information model">tag</a>
+          which is <a id="id2512269" class="indexterm"></a><a id="recognized tag/"></a
+            ><a href="#index-entry-recognized tag"
+            ><i class="firstterm"
+            >recognized</i></a
+          > by
+          the YAML <a id="id2512284" class="indexterm"></a><a href="#processor/">processor</a> and its
+          <a id="id2512296" class="indexterm"></a><a href="#content/information model">content</a> must satisfy the constraints imposed by this
+          <a id="id2512314" class="indexterm"></a><a href="#tag/information model">tag</a>.
+          If a <a id="id2512329" class="indexterm"></a><a href="#document/information model">document</a> contains a <a id="id2512345" class="indexterm"></a><a href="#scalar/information model">scalar node</a> with an <a id="id2512361" class="indexterm"></a><a id="unrecognized tag/"></a
+            ><a href="#index-entry-unrecognized tag"
+            ><i class="firstterm"
+            >unrecognized tag</i></a
+          > or <a id="id2512375" class="indexterm"></a><a id="invalid content/"></a
+            ><a href="#index-entry-invalid content"
+            ><i class="firstterm"
+            >invalid content</i></a
+          >, only a <a id="id2512390" class="indexterm"></a><a href="#partial representation/">partial representation</a> may
+          be <a id="id2512404" class="indexterm"></a><a href="#compose/">composed</a>. In contrast, a YAML
+          <a id="id2512417" class="indexterm"></a><a href="#processor/">processor</a> can always <a id="id2512430" class="indexterm"></a><a href="#compose/">compose</a> a <a id="id2512442" class="indexterm"></a><a href="#complete representation/">complete representation</a> for an unrecognized
+          or an invalid <a id="id2512457" class="indexterm"></a><a href="#collection/information model">collection</a>, since <a id="id2512474" class="indexterm"></a><a href="#collection/information model">collection</a> <a id="id2512489" class="indexterm"></a><a href="#equality/">equality</a> does not depend upon knowledge
+          of the <a id="id2512503" class="indexterm"></a><a href="#collection/information model">collection's</a> data type. However, such a <a id="id2512519" class="indexterm"></a><a href="#complete representation/">complete representation</a>
+          can not be used to <a id="id2512533" class="indexterm"></a><a href="#construct/">construct</a> a
+          native data structure.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2512548"></a>3.3.4. Available</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          In a given processing environment, there need not be an <a id="id2512557" class="indexterm"></a><a id="available tag/"></a
+            ><a href="#index-entry-available tag"
+            ><i class="firstterm"
+            >available</i></a
+          > native type corresponding
+          to a given <a id="id2512573" class="indexterm"></a><a href="#tag/information model">tag</a>. If a <a id="id2512589" class="indexterm"></a><a href="#tag/information model">node's tag</a> is <a id="id2512604" class="indexterm"></a><a id="unavailable tag/"></a
+            ><a href="#index-entry-unavailable tag"
+            ><i class="firstterm"
+            >unavailable</i></a
+          >, a YAML <a id="id2512618" class="indexterm"></a><a href="#processor/">processor</a> will not be able to <a id="id2512631" class="indexterm"></a><a href="#construct/">construct</a> a native data structure for
+          it. In this case, a <a id="id2512644" class="indexterm"></a><a href="#complete representation/">complete representation</a> may still be
+          <a id="id2512659" class="indexterm"></a><a href="#compose/">composed</a>, and an <a id="id2512671" class="indexterm"></a><a href="#application/">application</a> may wish to use this
+          <a id="id2512685" class="indexterm"></a><a href="#representation/">representation</a> directly.
+        </p>
+          </div>
+        </div>
+      </div>
+      <div class="chapter" lang="en" xml:lang="en">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="id2512702"></a>Chapter 4. Syntax</h2>
+            </div>
+          </div>
+          <div></div>
+        </div>
+        <p>
+      Following are the BNF productions defining the syntax of YAML character
+      <a id="id2512712" class="indexterm"></a><a href="#stream/syntax">streams</a>. To make
+      this chapter easier to follow, production names use Hungarian-style
+      notation:
+    </p>
+        <div class="variablelist">
+          <dl>
+            <dt>
+              <span class="term">
+                <b class="userinput">
+                  <tt>e-</tt>
+                </b>
+              </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching no characters.
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+                <b class="userinput">
+                  <tt>c-</tt>
+                </b>
+              </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching one or more characters starting and ending
+            with a special (non-space) character.
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+                <b class="userinput">
+                  <tt>b-</tt>
+                </b>
+              </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching a single <a id="id2512783" class="indexterm"></a><a href="#line break character/">line break</a>.
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+                <b class="userinput">
+                  <tt>nb-</tt>
+                </b>
+              </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching one or more characters starting and ending
+            with a non-<a id="id2512815" class="indexterm"></a><a href="#line break character/">break</a>
+            character.
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+                <b class="userinput">
+                  <tt>s-</tt>
+                </b>
+              </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching one or more characters starting and ending
+            with a space character.
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+                <b class="userinput">
+                  <tt>ns-</tt>
+                </b>
+              </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching one or more characters starting and ending
+            with a non-space character.
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+          <tt class="varname">X</tt><b class="userinput"><tt>-</tt></b><tt class="varname">Y</tt><b class="userinput"><tt>-</tt></b>
+        </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching a sequence of one or more characters,
+            starting with an <tt class="varname">X</tt><b class="userinput"><tt>-</tt></b>
+            character and ending with a
+            <tt class="varname">Y</tt><b class="userinput"><tt>-</tt></b> character.
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+                <b class="userinput">
+                  <tt>l-</tt>
+                </b>
+              </span>
+            </dt>
+            <dd>
+              <p>
+            A production matching one or more lines (shorthand for
+            <b class="userinput"><tt>s-b-</tt></b>).
+          </p>
+            </dd>
+            <dt>
+              <span class="term">
+          <tt class="varname">X</tt><b class="userinput"><tt>+</tt></b>,
+          <tt class="varname">X</tt><b class="userinput"><tt>-</tt></b><tt class="varname">Y</tt><b class="userinput"><tt>+</tt></b>
+        </span>
+            </dt>
+            <dd>
+              <p>
+            A production as above, with the additional property that the
+            <a id="id2512971" class="indexterm"></a><a href="#indentation space/">indentation</a> level
+            used is greater than the specified <tt class="varname">n</tt> parameter.
+          </p>
+            </dd>
+          </dl>
+        </div>
+        <p>
+      Productions are generally introduced in a &#8220;<span class="quote">bottom-up</span>&#8221; order;
+      basic productions are specified before the more complex productions using
+      them. Examples accompanying the productions list display sample YAML text
+      side-by-side with equivalent YAML text using only <a id="id2513004" class="indexterm"></a><a href="#flow collection style/syntax">flow collections</a> and
+      <a id="id2513022" class="indexterm"></a><a href="#double quoted style/syntax">double quoted
+      scalars</a>. For improved readability, the equivalent YAML text
+      uses the &#8220;<span class="quote"><b class="userinput"><tt>!!seq</tt></b></span>&#8221;, &#8220;<span class="quote"><b class="userinput"><tt>!!map</tt></b></span>&#8221; and
+      &#8220;<span class="quote"><b class="userinput"><tt>!!str</tt></b></span>&#8221; <a id="id2513060" class="indexterm"></a><a href="#tag shorthand/">shorthands</a> instead of the <a id="id2513074" class="indexterm"></a><a href="#verbatim tag/">verbatim</a> &#8220;<span class="quote"><b class="userinput"><tt>!&lt;tag:yaml.org,2002:seq&gt;</tt></b></span>&#8221;,
+      &#8220;<span class="quote"><b class="userinput"><tt>!&lt;tag:yaml.org,2002:map&gt;</tt></b></span>&#8221; and
+      &#8220;<span class="quote"><b class="userinput"><tt>!&lt;tag:yaml.org,2002:str&gt;</tt></b></span>&#8221; forms. These types are
+      used to <a id="id2513112" class="indexterm"></a><a href="#tag resolution/">resolve</a> all <a id="id2513125" class="indexterm"></a><a href="#non-specific tag/">untagged nodes</a>, except for a few
+      examples that use the &#8220;<span class="quote"><b class="userinput"><tt>!!int</tt></b></span>&#8221; and &#8220;<span class="quote"><b class="userinput"><tt>!!float</tt></b></span>&#8221;
+      types.
+    </p>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2513154"></a>4.1. Characters</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2513160"></a>4.1.1. Character Set</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            YAML <a id="id2513168" class="indexterm"></a><a href="#stream/syntax">streams</a>
+            use the <a id="id2513184" class="indexterm"></a><a id="printable character/"></a
+            ><a href="#index-entry-printable character"
+            ><i class="firstterm"
+            >printable</i></a
+          >
+            subset of the Unicode character set. On input, a YAML <a id="id2513200" class="indexterm"></a><a href="#processor/">processor</a> must accept all printable
+            ASCII characters, the space, <a id="id2513214" class="indexterm"></a><a href="#tab/">tab</a>,
+            <a id="id2513226" class="indexterm"></a><a href="#line break character/">line break</a>, and
+            all Unicode characters beyond #x9F. On output, a YAML <a id="id2513241" class="indexterm"></a><a href="#processor/">processor</a> must only produce these
+            acceptable characters, and should also <a id="id2513254" class="indexterm"></a><a href="#escaping in double quoted style/">escape</a> all non-printable Unicode
+            characters. The allowed character range explicitly excludes the
+            surrogate block <b class="userinput"><tt>#xD800-#xDFFF</tt></b>, DEL
+            <b class="userinput"><tt>#x7F</tt></b>, the C0 control block
+            <b class="userinput"><tt>#x0-#x1F</tt></b>, the C1 control block
+            <b class="userinput"><tt>#x80-#x9F</tt></b>, <b class="userinput"><tt>#xFFFE</tt></b> and
+            <b class="userinput"><tt>#xFFFF</tt></b>. Any such characters must be <a id="id2513307" class="indexterm"></a><a href="#present/">presented</a> using <a id="id2513320" class="indexterm"></a><a href="#escaping in double quoted style/">escape</a>
+            sequences.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[1]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-printable"></a>c-printable</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  #x9 | #xA | #xD | [#x20-#x7E]   
+                      /* 8 bit */<br />
+                | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] /* 16 bit */<br />
+                | [#x10000-#x10FFFF]      
+                         
+                    /* 32 bit */
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2513364"></a>4.1.2. Character Encoding</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            All characters mentioned in this specification are Unicode code
+            points. Each such code point is written as one or more octets
+            depending on the <a id="id2513376" class="indexterm"></a><a id="character encoding/"></a
+            ><a href="#index-entry-character encoding"
+            ><i class="firstterm"
+            >character
+            encoding</i></a
+          > used. Note that in UTF-16, characters above
+            <b class="userinput"><tt>#xFFFF</tt></b> are written as four octets, using a
+            surrogate pair. A YAML <a id="id2513398" class="indexterm"></a><a href="#processor/">processor</a> must support the UTF-16 and
+            UTF-8 character encodings. If a character <a id="id2513412" class="indexterm"></a><a href="#stream/syntax">stream</a> does not begin with a <a id="id2513428" class="indexterm"></a><a id="byte order mark/"></a
+            ><a href="#index-entry-byte order mark"
+            ><i class="firstterm"
+            >byte order mark</i></a
+          >
+            (<b class="userinput"><tt>#FEFF</tt></b>), the character encoding shall be
+            UTF-8. Otherwise it shall be either UTF-8, UTF-16 LE or UTF-16 BE
+            as indicated by the byte order mark. On output, it is recommended
+            that a byte order mark should only be emitted for UTF-16 character
+            encodings. Note that the UTF-32 encoding is explicitly not
+            supported. For more information about the byte order mark and the
+            Unicode character encoding schemes see the Unicode <a href="http://www.unicode.org/unicode/faq/utf_bom.html" target="_top">FAQ</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[2]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-byte-order-mark"></a>c-byte-order-mark</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #xFEFF
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            In the examples, byte order mark characters are displayed as
+            &#8220;<span class="quote"><b class="userinput"><tt>&#8660;</tt></b></span>&#8221;.
+          </p>
+            <div class="example">
+              <a id="id2438013"></a>
+              <p class="title">
+                <b>Example 4.1. Byte Order Mark</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="filename">&#8660;</tt># Comment only.<br /></span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-byte-order-mark">c-byte-order-mark</a></tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database"># This stream contains no<br /># documents, only comments.
+</span></pre>
+              </td>
+                </tr>
+              </table>
+            </div>
+            <div class="example">
+              <a id="id2438080"></a>
+              <p class="title">
+                <b>Example 4.2. Invalid Byte Order Mark</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="screen"><span class="database"># Invalid use of BOM<br /><tt class="filename">&#8660;</tt># inside a
+# document.
+</span></pre>
+              </td>
+                  <td>
+<pre class="screen"><span class="database">ERROR:<br /> A <tt class="filename">BOM</tt> must not appear
+ inside a document.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2513753"></a>4.1.3. Indicator Characters</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          <a id="id2513761" class="indexterm"></a><a id="indicator/"></a
+            ><a href="#index-entry-indicator"
+            ><i class="firstterm"
+            >Indicators</i></a
+          > are characters that
+          have special semantics used to describe the structure and <a id="id2513776" class="indexterm"></a><a href="#content/syntax">content</a> of a YAML
+          <a id="id2513793" class="indexterm"></a><a href="#document/syntax">document</a>.
+        </p>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2513817" class="indexterm"></a><a href="#- block sequence entry/">&#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221;</a> denotes a <a id="id2513835" class="indexterm"></a><a href="#block sequence style/syntax">blocks
+                equence</a> entry.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[3]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-sequence-entry"></a>c-sequence-entry</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">-</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2513881" class="indexterm"></a><a href="#? mapping key/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</a> denotes a <a id="id2513899" class="indexterm"></a><a href="#key/syntax">mapping key</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[4]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-mapping-key"></a>c-mapping-key</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">?</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2513943" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>:</tt></b></span>&#8221;</a> denotes a <a id="id2513961" class="indexterm"></a><a href="#value/syntax">mapping value</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[5]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-mapping-value"></a>c-mapping-value</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">:</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2513999"></a>
+              <p class="title">
+                <b>Example 4.3. Block Structure Indicators</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">sequence<span class="property">:</span><br /><tt class="filename">-</tt> one
+<tt class="filename">-</tt> two
+mapping<span class="property">:</span>
+  <tt class="literal">?</tt> sky
+  <span class="property">:</span> blue
+  <tt class="literal">?</tt> sea <span class="property">:</span> green
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-sequence-entry">c-sequence-entry</a></tt>
+  <tt class="literal"><a href="#c-mapping-key">c-mapping-key</a></tt>
+  <span class="property"><a href="#c-mapping-value">c-mapping-value</a></span>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "sequence"
+  : !!seq [
+    !!str "one", !!str "two"
+  ],
+  ? !!str "mapping"
+  : !!map {
+    ? !!str "sky" : !!str "blue",
+    ? !!str "sea" : !!str "green",
+  }
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514138" class="indexterm"></a><a href="#, end flow entry/">&#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221;</a> ends a <a id="id2514157" class="indexterm"></a><a href="#flow collection style/syntax">flow
+                collection</a> entry.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[6]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-collect-entry"></a>c-collect-entry</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">,</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514202" class="indexterm"></a><a href="#[ start flow sequence/">&#8220;<span class="quote"><b class="userinput"><tt>[</tt></b></span>&#8221;</a> starts a <a id="id2514222" class="indexterm"></a><a href="#flow sequence style/syntax">flow
+                sequence</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[7]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-sequence-start"></a>c-sequence-start</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">[</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514268" class="indexterm"></a><a href="#] end flow sequence/">&#8220;<span class="quote"><b class="userinput"><tt>]</tt></b></span>&#8221;</a> ends a <a id="id2514288" class="indexterm"></a><a href="#flow sequence style/syntax">flow
+                sequence</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[8]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-sequence-end"></a>c-sequence-end</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">]</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514333" class="indexterm"></a><a href="#{ start flow mapping/">&#8220;<span class="quote"><b class="userinput"><tt>{</tt></b></span>&#8221;</a> starts a <a id="id2514352" class="indexterm"></a><a href="#flow mapping style/syntax">flow
+                mapping</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[9]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-mapping-start"></a>c-mapping-start</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">{</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514398" class="indexterm"></a><a href="#} end flow mapping/">&#8220;<span class="quote"><b class="userinput"><tt>}</tt></b></span>&#8221;</a> ends a <a id="id2514417" class="indexterm"></a><a href="#flow mapping style/syntax">flow
+                mapping</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[10]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-mapping-end"></a>c-mapping-end</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">}</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2514455"></a>
+              <p class="title">
+                <b>Example 4.4. Flow Collection Indicators</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">sequence: <tt class="filename">[</tt> one<span class="property">,</span> two<span class="property">,</span> <tt class="filename">]</tt><br />mapping: <tt class="literal">{</tt> sky: blue<span class="property">,</span> sea: green <tt class="literal">}</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-sequence-start">c-sequence-start</a></tt> <tt class="filename"><a href="#c-sequence-end">c-sequence-end</a></tt>
+  <tt class="literal"><a href="#c-mapping-start">c-mapping-start</a></tt>  <tt class="literal"><a href="#c-mapping-end">c-mapping-end</a></tt>
+  <span class="property"><a href="#c-collect-entry">c-collect-entry</a></span>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "sequence"
+  : !!seq [
+    !!str "one", !!str "two"
+  ],
+  ? !!str "mapping"
+  : !!map {
+    ? !!str "sky" : !!str "blue",
+    ? !!str "sea" : !!str "green",
+  }
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514610" class="indexterm"></a><a href="## comment/">&#8220;<span class="quote"><b class="userinput"><tt> #</tt></b></span>&#8221;</a> denotes a <a id="id2514628" class="indexterm"></a><a href="#comment/syntax">comment</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[11]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-comment"></a>c-comment</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">#</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2514666"></a>
+              <p class="title">
+                <b>Example 4.5. Comment Indicator</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="filename">#</tt> Comment only.<br /></span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-comment">c-comment</a></tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database"># This stream contains no<br /># documents, only comments.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514739" class="indexterm"></a><a href="#&amp; anchor/">&#8220;<span class="quote"><b class="userinput"><tt>&amp;</tt></b></span>&#8221;</a> denotes a <a id="id2514757" class="indexterm"></a><a href="#anchor/syntax">node's anchor
+                property</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[12]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-anchor"></a>c-anchor</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">&amp;</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514802" class="indexterm"></a><a href="#* alias/">&#8220;<span class="quote"><b class="userinput"><tt>*</tt></b></span>&#8221;</a>
+                denotes an <a id="id2514820" class="indexterm"></a><a href="#alias/syntax">alias
+                node</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[13]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-alias"></a>c-alias</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">*</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2514865" class="indexterm"></a><a href="#! tag indicator/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a> denotes a <a id="id2514883" class="indexterm"></a><a href="#tag/syntax">node's tag</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[14]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-tag"></a>c-tag</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">!</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2514920"></a>
+              <p class="title">
+                <b>Example 4.6. Node Property Indicators</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">anchored: <span class="property">!</span>local <tt class="filename">&amp;</tt>anchor value<br />alias: <tt class="literal">*</tt>anchor
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-anchor">c-anchor</a></tt>
+  <tt class="literal"><a href="#c-alias">c-alias</a></tt>
+  <span class="property"><a href="#c-tag">c-tag</a></span>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "anchored"
+  : !local &amp;A1 "value",
+  ? !!str "alias"
+  : *A1,
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2515029" class="indexterm"></a><a href="#| literal style/">&#8220;<span class="quote"><b class="userinput"><tt>|</tt></b></span>&#8221;</a> denotes a <a id="id2515047" class="indexterm"></a><a href="#literal style/syntax">literal block
+                scalar</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[15]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-literal"></a>c-literal</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">|</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2515093" class="indexterm"></a><a href="#&gt; folded style/">&#8220;<span class="quote"><b class="userinput"><tt>&gt;</tt></b></span>&#8221;</a> denotes a <a id="id2515112" class="indexterm"></a><a href="#folded style/syntax">folded block
+                scalar</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[16]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-folded"></a>c-folded</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">&gt;</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2515150"></a>
+              <p class="title">
+                <b>Example 4.7. Block Scalar Indicators</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">literal: <tt class="filename">|</tt><br />  text
+folded: <tt class="literal">&gt;</tt>
+  text
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-literal">c-literal</a></tt>
+  <tt class="literal"><a href="#c-folded">c-folded</a></tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "literal"
+  : !!str "text\n",
+  ? !!str "folded"
+  : !!str "text\n",
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2515240" class="indexterm"></a><a href="#' single quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>'</tt></b></span>&#8221;</a> surrounds a <a id="id2515259" class="indexterm"></a><a href="#single quoted style/syntax">single quoted
+                flow scalar</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[17]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-single-quote"></a>c-single-quote</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">'</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2515306" class="indexterm"></a><a href="#&quot; double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>"</tt></b></span>&#8221;</a> surrounds a <a id="id2515325" class="indexterm"></a><a href="#double quoted style/syntax">double quoted
+                flow scalar</a>.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[18]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-double-quote"></a>c-double-quote</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">"</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2515364"></a>
+              <p class="title">
+                <b>Example 4.8. Quoted Scalar Indicators</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">single: <tt class="filename">'</tt>text<tt class="filename">'</tt><br />double: <tt class="literal">"</tt>text<tt class="literal">"</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-single-quote">c-single-quote</a></tt>
+  <tt class="literal"><a href="#c-double-quote">c-double-quote</a></tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "double"
+  : !!str "text",
+  ? !!str "single"
+  : !!str "text",
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2515466" class="indexterm"></a><a href="#% directive/">&#8220;<span class="quote"><b class="userinput"><tt>%</tt></b></span>&#8221;</a>
+                denotes a <a id="id2515485" class="indexterm"></a><a href="#directive/syntax">directive</a> line.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[19]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-directive"></a>c-directive</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">%</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2515524"></a>
+              <p class="title">
+                <b>Example 4.9. Directive Indicator</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="filename">%</tt>YAML 1.1<br />--- text
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-directive">c-directive</a></tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "text"
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                The <a id="id2515596" class="indexterm"></a><a id="@ reserved indicator/"></a
+            ><a href="#index-entry-@ reserved indicator"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>@</tt></b></span>&#8221;</i></a
+          > and <a id="id2515616" class="indexterm"></a><a id="` reserved indicator/"></a
+            ><a href="#index-entry-` reserved indicator"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>`</tt></b></span>&#8221;</i></a
+          > are <a id="id2515636" class="indexterm"></a><a id="reserved indicator/"></a
+            ><a href="#index-entry-reserved indicator"
+            ><i class="firstterm"
+            >reserved</i></a
+          > for future use.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[20]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-reserved"></a>c-reserved</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">@</span>&#8221; | &#8220;<span class="quote">`</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2515676"></a>
+              <p class="title">
+                <b>Example 4.10. Invalid use of Reserved Indicators</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="screen"><span class="database">commercial-at: <tt class="filename">@</tt>text<br />grave-accent: <tt class="filename">`</tt>text
+</span></pre>
+              </td>
+                  <td>
+<pre class="screen"><span class="database">ERROR:<br /> <tt class="filename">Reserved indicators</tt> can't
+ start a plain scalar.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Any indicator character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[21]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-indicator"></a>c-indicator</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#c-sequence-entry">&#8220;<span class="quote">-</span>&#8221;</a>
+                | <a href="#c-mapping-key">&#8220;<span class="quote">?</span>&#8221;</a>
+                | <a href="#c-mapping-value">&#8220;<span class="quote">:</span>&#8221;</a>
+                | <a href="#c-collect-entry">&#8220;<span class="quote">,</span>&#8221;</a>
+                | <a href="#c-sequence-start">&#8220;<span class="quote">[</span>&#8221;</a>
+                | <a href="#c-sequence-end">&#8220;<span class="quote">]</span>&#8221;</a>
+                | <a href="#c-mapping-start">&#8220;<span class="quote">{</span>&#8221;</a>
+                | <a href="#c-mapping-end">&#8220;<span class="quote">}</span>&#8221;</a><br />
+                | <a href="#c-comment">&#8220;<span class="quote">#</span>&#8221;</a>
+                | <a href="#c-anchor">&#8220;<span class="quote">&amp;</span>&#8221;</a>
+                | <a href="#c-alias">&#8220;<span class="quote">*</span>&#8221;</a>
+                | <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                | <a href="#c-literal">&#8220;<span class="quote">|</span>&#8221;</a>
+                | <a href="#c-folded">&#8220;<span class="quote">&gt;</span>&#8221;</a>
+                | <a href="#c-single-quote">&#8220;<span class="quote">'</span>&#8221;</a>
+                | <a href="#c-double-quote">&#8220;<span class="quote">"</span>&#8221;</a><br />
+                | <a href="#c-directive">&#8220;<span class="quote">%</span>&#8221;</a>
+                | <a href="#c-reserved">&#8220;<span class="quote">@</span>&#8221;
+                | &#8220;<span class="quote">`</span>&#8221;</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2515898"></a>4.1.4. Line Break Characters</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            The Unicode standard defines the following <a id="id2515907" class="indexterm"></a><a id="line break character/"></a
+            ><a href="#index-entry-line break character"
+            ><i class="firstterm"
+            >line break</i></a
+          > characters:
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[22]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-line-feed"></a>b-line-feed</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #xA /*LF*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[23]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-carriage-return"></a>b-carriage-return</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #xD /*CR*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[24]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-next-line"></a>b-next-line</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #x85 /*NEL*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[25]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-line-separator"></a>b-line-separator</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #x2028 /*LS*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[26]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-paragraph-separator"></a>b-paragraph-separator</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #x2029 /*PS*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            A YAML <a id="id2515996" class="indexterm"></a><a href="#processor/">processor</a> must accept
+            all the possible Unicode line break characters.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[27]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-char"></a>b-char</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#b-line-feed">b-line-feed</a>
+                | <a href="#b-carriage-return">b-carriage-return</a>
+                | <a href="#b-next-line">b-next-line</a><br />
+                | <a href="#b-line-separator">b-line-separator</a>
+                | <a href="#b-paragraph-separator">b-paragraph-separator</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Line breaks can be grouped into two categories. <a id="id2516056" class="indexterm"></a><a id="specific line break/"></a
+            ><a href="#index-entry-specific line break"
+            ><i class="firstterm"
+            >Specific line breaks</i></a
+          > have
+            well-defined semantics for breaking text into lines and paragraphs,
+            and must be preserved by the YAML <a id="id2516073" class="indexterm"></a><a href="#processor/">processor</a> inside <a id="id2516086" class="indexterm"></a><a href="#scalar/syntax">scalar content</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[28]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-specific"></a>b-specific</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-line-separator">b-line-separator</a>
+                | <a href="#b-paragraph-separator">b-paragraph-separator</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            <a id="id2516131" class="indexterm"></a><a id="generic line break/"></a
+            ><a href="#index-entry-generic line break"
+            ><i class="firstterm"
+            >Generic line breaks</i></a
+          >
+            do not carry a meaning beyond &#8220;<span class="quote">ending a line</span>&#8221;. Unlike
+            specific line breaks, there are several widely used forms for
+            generic line breaks.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[29]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-generic"></a>b-generic</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  ( <a href="#b-carriage-return">b-carriage-return</a>
+                <a href="#b-line-feed">b-line-feed</a> ) /* DOS, Windows */<br />
+                | <a href="#b-carriage-return">b-carriage-return</a>
+                         
+                      /* Macintosh */<br />
+                | <a href="#b-line-feed">b-line-feed</a>
+                         
+                         
+                  /* UNIX */<br />
+                | <a href="#b-next-line">b-next-line</a>
+                         
+                         
+                  /* Unicode */
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Generic line breaks inside <a id="id2516212" class="indexterm"></a><a href="#scalar/syntax">scalar content</a> must be <a id="id2516227" class="indexterm"></a><a id="line break normalization/"></a
+            ><a href="#index-entry-line break normalization"
+            ><i class="firstterm"
+            >normalized</i></a
+          > by the YAML
+            <a id="id2516243" class="indexterm"></a><a href="#processor/">processor</a>. Each such line
+            break must be <a id="id2516256" class="indexterm"></a><a href="#parse/">parsed</a> into a
+            single line feed character. The original line break form is a
+            <a id="id2516270" class="indexterm"></a><a href="#presentation detail/">presentation
+            detail</a> and must not be used to convey <a id="id2516285" class="indexterm"></a><a href="#content/information model">content
+            information</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[30]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-as-line-feed"></a>b-as-line-feed</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-generic">b-generic</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[31]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-normalized"></a>b-normalized</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-as-line-feed">b-as-line-feed</a>
+                | <a href="#b-specific">b-specific</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Normalization does not apply to ignored (<a id="id2516347" class="indexterm"></a><a href="#escaped (ignored) line break/">escaped</a> or <a id="id2516363" class="indexterm"></a><a href="#chomping/">chomped</a>) generic line breaks.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[32]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-ignored-generic"></a>b-ignored-generic</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-generic">b-generic</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Outside <a id="id2516400" class="indexterm"></a><a href="#scalar/syntax">scalar
+            content</a>, YAML allows any line break to be used to
+            terminate lines.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[33]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-ignored-any"></a>b-ignored-any</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-generic">b-generic</a>
+                | <a href="#b-specific">b-specific</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+          On output, a YAML <a id="id2516446" class="indexterm"></a><a href="#processor/">processor</a> is
+          free to <a id="id2516459" class="indexterm"></a><a href="#present/">present</a> line breaks
+          using whatever convention is most appropriate, though specific line
+          breaks must be preserved in <a id="id2516473" class="indexterm"></a><a href="#scalar/syntax">scalar content</a>. These rules are
+          compatible with <a href="http://www.unicode.org/unicode/reports/tr13/" target="_top">Unicode's newline
+          guidelines</a>.
+        </p>
+            <p>
+            In the examples, line break characters are displayed as follows:
+            &#8220;<span class="quote"><b class="userinput"><tt>&#8595;</tt></b></span>&#8221; or no glyph for a generic line break,
+            &#8220;<span class="quote"><b class="userinput"><tt>&#8659;</tt></b></span>&#8221; for a line separator and
+            &#8220;<span class="quote"><b class="userinput"><tt>¶</tt></b></span>&#8221; for a paragraph separator.
+          </p>
+            <div class="example">
+              <a id="id2516526"></a>
+              <p class="title">
+                <b>Example 4.11. Line Break Characters</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">|<br />  Generic line break (no glyph)
+  Generic line break (glyphed)<tt class="filename">&#8595;</tt>
+  Line separator<tt class="literal">&#8659;</tt>
+  Paragraph separator<span class="property">¶</span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#b-generic">b-generic</a></tt> <tt class="literal"><a href="#b-line-separator">b-line-separator</a></tt>
+  <span class="property"><a href="#b-paragraph-separator">b-paragraph-separator</a></span>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />--- !!str
+"Generic line break (no glyph)\n\
+ Generic line break (glyphed)\n\
+ Line separator\u2028\
+ Paragraph separator\u2029"
+</span></pre>
+              </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2516631"></a>4.1.5. Miscellaneous Characters</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            The YAML syntax productions make use of the following character
+            range definitions:
+          </p>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A non-<a id="id2516649" class="indexterm"></a><a href="#line break character/">break</a>
+                character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[34]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="nb-char"></a>nb-char</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-printable">c-printable</a>
+                - <a href="#b-char">b-char</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                An ignored space character outside <a id="id2516699" class="indexterm"></a><a href="#scalar/syntax">scalar content</a>. Such spaces are
+                used for <a id="id2516715" class="indexterm"></a><a href="#indentation space/">indentation</a> and <a id="id2516729" class="indexterm"></a><a href="#separation space/">separation</a> between tokens. To maintain
+                portability, <a id="id2516745" class="indexterm"></a><a id="tab/"></a
+            ><a href="#index-entry-tab"
+            ><i class="firstterm"
+            >tab</i></a
+          > characters
+                must not be used in these cases, since different systems treat
+                tabs differently. Note that most modern editors may be
+                configured so that pressing the tab key results in the
+                insertion of an appropriate number of spaces.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[35]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-ignored-space"></a>s-ignored-space</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #x20 /*SP*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2516782"></a>
+              <p class="title">
+                <b>Example 4.12. Invalid Use of Tabs</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="screen"><span class="database"># Tabs do's and don'ts:<br /># comment: <tt class="filename">&#8594;</tt>
+quoted: "Quoted <tt class="filename">&#8594;</tt>"
+block: |
+  void main() {
+  <tt class="filename">&#8594;</tt>printf("Hello, world!\n");
+  }
+elsewhere:<tt class="literal">&#8594;</tt># separation
+<tt class="literal">&#8594;</tt>indentation, in<tt class="literal">&#8594;</tt>plain scalar
+</span></pre>
+            </td>
+                  <td>
+<pre class="screen"><span class="database">ERROR:<br /> Tabs <tt class="filename">may</tt> appear inside
+ comments and quoted or
+ block scalar content.
+ Tabs <tt class="literal">must not</tt> appear
+ elsewhere, such as
+ in indentation and
+ separation spaces.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A <a id="id2516884" class="indexterm"></a><a id="white space/"></a
+            ><a href="#index-entry-white space"
+            ><i class="firstterm"
+            >white space</i></a
+          >
+                character in <a id="id2516900" class="indexterm"></a><a href="#quoted style/syntax">quoted</a> or <a id="id2516916" class="indexterm"></a><a href="#block scalar style/syntax">block scalar
+                content</a>:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[36]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-white"></a>s-white</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                #x9 /*TAB*/ | #x20 /*SP*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            In the examples, tab characters are displayed as the glyph
+            &#8220;<span class="quote"><b class="userinput"><tt>&#8594;</tt></b></span>&#8221;. Space characters are sometimes displayed
+            as the glyph &#8220;<span class="quote"><b class="userinput"><tt>·</tt></b></span>&#8221; for clarity.
+          </p>
+            <div class="example">
+              <a id="id2516974"></a>
+              <p class="title">
+                <b>Example 4.13. Tabs and Spaces</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="literal">·</tt><tt class="literal">·</tt>"Text<tt class="literal">·</tt>containing<tt class="literal">·</tt><tt class="literal">·</tt><tt class="literal">·</tt><br /><tt class="literal">·</tt><tt class="literal">·</tt>both<tt class="literal">·</tt>space<tt class="literal">·</tt>and<tt class="filename">&#8594;</tt>
+<tt class="literal">·</tt><tt class="literal">·</tt><tt class="filename">&#8594;</tt>tab<tt class="filename">&#8594;</tt>characters"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename">#x9 (TAB)</tt> <tt class="literal">#x20 (SP)</tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />--- !!str
+"Text·containing·\
+ both·space·and·\
+ tab&#8594;characters"
+</span></pre>
+              </td>
+                </tr>
+              </table>
+            </div>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                An ignored white space character inside <a id="id2517122" class="indexterm"></a><a href="#scalar/syntax">scalar content</a>:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[37]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-ignored-white"></a>s-ignored-white</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-white">s-white</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A non space (and non-<a id="id2517168" class="indexterm"></a><a href="#line break character/">break</a>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[38]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-char"></a>ns-char</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#nb-char">nb-char</a> - <a href="#s-white">s-white</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A decimal digit for numbers:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[39]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-dec-digit"></a>ns-dec-digit</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                [#x30-#x39] /*0-9*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A hexadecimal digit for <a id="id2517244" class="indexterm"></a><a href="#escaping in double quoted style/">escape sequences</a>:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[40]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-hex-digit"></a>ns-hex-digit</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#ns-dec-digit">ns-dec-digit</a>
+                | [#x41-#x46] /*A-F*/ | [#x61-#x66] /*a-f*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                An ASCII letter (alphabetic) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[41]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-ascii-letter"></a>ns-ascii-letter</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                [#x41-#x5A] /*A-Z*/ | [#x61-#x7A] /*a-z*/
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A word (alphanumeric) character for identifiers:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[42]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-word-char"></a>ns-word-char</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#ns-dec-digit">ns-dec-digit</a>
+                | <a href="#ns-ascii-letter">ns-ascii-letter</a>
+                | &#8220;<span class="quote">-</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                A URI character for <a id="id2517359" class="indexterm"></a><a href="#tag/syntax">tags</a>, as specified in <a href="http://www.ietf.org/rfc/rfc2396.txt" target="_top">RFC2396</a> with
+                the addition of the <a id="id2517380" class="indexterm"></a><a href="#[ start flow sequence/">&#8220;<span class="quote"><b class="userinput"><tt>[</tt></b></span>&#8221;</a> and <a id="id2517399" class="indexterm"></a><a href="#] end flow sequence/">&#8220;<span class="quote"><b class="userinput"><tt>]</tt></b></span>&#8221;</a> for presenting
+                IPv6 addresses as proposed in <a href="http://www.ietf.org/rfc/rfc2732.txt" target="_top">RFC2732</a>. A
+                limited form of 8-bit <a id="id2517424" class="indexterm"></a><a id="escaping in URI/"></a
+            ><a href="#index-entry-escaping in URI"
+            ><i class="firstterm"
+            >escaping</i></a
+          > is available using the <a id="id2517440" class="indexterm"></a><a id="% escaping in URI/"></a
+            ><a href="#index-entry-% escaping in URI"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>%</tt></b></span>&#8221;</i></a
+          >
+                character. By convention, URIs containing 16 and 32 bit Unicode
+                characters are <a id="id2517460" class="indexterm"></a><a href="#character encoding/">encoded</a> in UTF-8, and then each octet is
+                written as a separate character.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[43]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-uri-char"></a>ns-uri-char</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#ns-word-char">ns-word-char</a>
+                | &#8220;<span class="quote">%</span>&#8221; <a href="#ns-hex-digit">ns-hex-digit</a>
+                <a href="#ns-hex-digit">ns-hex-digit</a><br />
+                | &#8220;<span class="quote">;</span>&#8221; | &#8220;<span class="quote">/</span>&#8221; | &#8220;<span class="quote">?</span>&#8221;
+                | &#8220;<span class="quote">:</span>&#8221; | &#8220;<span class="quote">@</span>&#8221; | &#8220;<span class="quote">&amp;</span>&#8221;
+                | &#8220;<span class="quote">=</span>&#8221; | &#8220;<span class="quote">+</span>&#8221; | &#8220;<span class="quote">$</span>&#8221;
+                | &#8220;<span class="quote">,</span>&#8221;<br />
+                | &#8220;<span class="quote">_</span>&#8221; | &#8220;<span class="quote">.</span>&#8221; | &#8220;<span class="quote">!</span>&#8221;
+                | &#8220;<span class="quote">~</span>&#8221; | &#8220;<span class="quote">*</span>&#8221; | &#8220;<span class="quote">'</span>&#8221;
+                | &#8220;<span class="quote">(</span>&#8221; | &#8220;<span class="quote">)</span>&#8221; | &#8220;<span class="quote">[</span>&#8221;
+                | &#8220;<span class="quote">]</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                The <a id="id2517589" class="indexterm"></a><a href="#! named handle/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a> character is used to
+                indicate the end of a <a id="id2517609" class="indexterm"></a><a href="#named tag handle/">named
+                tag handle</a>; hence its use in <a id="id2517623" class="indexterm"></a><a href="#tag shorthand/">tag shorthands</a> is restricted.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[44]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-tag-char"></a>ns-tag-char</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#ns-uri-char">ns-uri-char</a>
+                - <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2517668"></a>4.1.6. Escape Sequences</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            All non-<a id="id2517676" class="indexterm"></a><a href="#printable character/">printable</a>
+            characters must be <a id="id2517690" class="indexterm"></a><a href="#present/">presented</a>
+            as <a id="id2517703" class="indexterm"></a><a id="escaping in double quoted style/"></a
+            ><a href="#index-entry-escaping in double quoted style"
+            ><i class="firstterm"
+            >escape
+            sequences</i></a
+          >. Each escape sequences must be <a id="id2517720" class="indexterm"></a><a href="#parse/">parsed</a> into the appropriate Unicode
+            character. The original escape sequence form is a <a id="id2517734" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and
+            must not be used to convey <a id="id2517748" class="indexterm"></a><a href="#content/information model">content information</a>. YAML
+            escape sequences use the <a id="id2517765" class="indexterm"></a><a id="\ escaping in double quoted style/"></a
+            ><a href="#index-entry-\ escaping in double quoted style"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>\</tt></b></span>&#8221;</i></a
+          > notation common to most
+            modern computer languages. Note that escape sequences are only
+            interpreted in <a id="id2517787" class="indexterm"></a><a href="#double quoted style/syntax">double quoted scalars</a>. In all other
+            <a id="id2517803" class="indexterm"></a><a href="#scalar/syntax">scalar
+            styles</a>, the <a id="id2517819" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\</tt></b></span>&#8221;</a> character has no special
+            meaning and non-<a id="id2517840" class="indexterm"></a><a href="#printable character/">printable</a> characters are not available.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[45]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-escape"></a>c-escape</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">\</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            YAML escape sequences are a superset of C's escape sequences:
+          </p>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII null (<b class="userinput"><tt>#x0</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[46]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-null"></a>ns-esc-null</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">0</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII bell (<b class="userinput"><tt>#x7</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[47]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-bell"></a>ns-esc-bell</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">a</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII backspace (<b class="userinput"><tt>#x8</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[48]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-backspace"></a>ns-esc-backspace</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">b</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII horizontal <a id="id2518009" class="indexterm"></a><a href="#tab/">tab</a>
+                (<b class="userinput"><tt>#x9</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[49]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-horizontal-tab"></a>ns-esc-horizontal-tab</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">t</span>&#8221;
+                | <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                #x9
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII <a id="id2518071" class="indexterm"></a><a href="#generic line break/">line
+                feed</a> (<b class="userinput"><tt>#xA</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[50]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-line-feed"></a>ns-esc-line-feed</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">n</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII vertical tab (<b class="userinput"><tt>#xB</tt></b>)
+                character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[51]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-vertical-tab"></a>ns-esc-vertical-tab</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">v</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII form feed (<b class="userinput"><tt>#xC</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[52]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-form-feed"></a>ns-esc-form-feed</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">f</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII <a id="id2518211" class="indexterm"></a><a href="#generic line break/">carriage
+                return</a> (<b class="userinput"><tt>#xD</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[53]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-carriage-return"></a>ns-esc-carriage-return</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">r</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII escape (<b class="userinput"><tt>#x1B</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[54]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-escape"></a>ns-esc-escape</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">e</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII space (<b class="userinput"><tt>#x20</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[55]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-space"></a>ns-esc-space</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                #x20
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII double quote (<a id="id2518348" class="indexterm"></a><a href="#&quot; double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>"</tt></b></span>&#8221;</a>):
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[56]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-double-quote"></a>ns-esc-double-quote</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                <a href="#c-double-quote">&#8220;<span class="quote">"</span>&#8221;</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped ASCII back slash (<a id="id2518406" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\</tt></b></span>&#8221;</a>):
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[57]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-backslash"></a>ns-esc-backslash</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped Unicode <a id="id2518463" class="indexterm"></a><a href="#generic line break/">next
+                line</a> (<b class="userinput"><tt>#x85</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[58]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-next-line"></a>ns-esc-next-line</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">N</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped Unicode non-breaking space
+                (<b class="userinput"><tt>#xA0</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[59]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-non-breaking-space"></a>ns-esc-non-breaking-space</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">_</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped Unicode <a id="id2518560" class="indexterm"></a><a href="#specific line break/">line
+                separator</a> (<b class="userinput"><tt>#x2028</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[60]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-line-separator"></a>ns-esc-line-separator</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">L</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped Unicode <a id="id2518618" class="indexterm"></a><a href="#specific line break/">paragraph separator</a>
+                (<b class="userinput"><tt>#x2029</tt></b>) character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[61]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-paragraph-separator"></a>ns-esc-paragraph-separator</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">P</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped 8-bit Unicode character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[62]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-8-bit"></a>ns-esc-8-bit</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">x</span>&#8221; ( <a href="#ns-hex-digit">ns-hex-digit</a> x 2 )
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped 16-bit Unicode character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[63]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-16-bit"></a>ns-esc-16-bit</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">u</span>&#8221; ( <a href="#ns-hex-digit">ns-hex-digit</a> x 4 )
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Escaped 32-bit Unicode character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[64]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-32-bit"></a>ns-esc-32-bit</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                &#8220;<span class="quote">U</span>&#8221; ( <a href="#ns-hex-digit">ns-hex-digit</a> x 8 )
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Any escaped character:
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[65]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-esc-char"></a>ns-esc-char</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#ns-esc-null">ns-esc-null</a>
+                | <a href="#ns-esc-bell">ns-esc-bell</a>
+                | <a href="#ns-esc-backspace">ns-esc-backspace</a><br />
+                | <a href="#ns-esc-horizontal-tab">ns-esc-horizontal-tab</a>
+                | <a href="#ns-esc-line-feed">ns-esc-line-feed</a><br />
+                | <a href="#ns-esc-vertical-tab">ns-esc-vertical-tab</a>
+                | <a href="#ns-esc-form-feed">ns-esc-form-feed</a><br />
+                | <a href="#ns-esc-carriage-return">ns-esc-carriage-return</a>
+                | <a href="#ns-esc-escape">ns-esc-escape</a>
+                | <a href="#ns-esc-space">ns-esc-space</a><br />
+                | <a href="#ns-esc-double-quote">ns-esc-double-quote</a>
+                | <a href="#ns-esc-backslash">ns-esc-backslash</a><br />
+                | <a href="#ns-esc-next-line">ns-esc-next-line</a>
+                | <a href="#ns-esc-non-breaking-space">ns-esc-non-breaking-space</a><br />
+                | <a href="#ns-esc-line-separator">ns-esc-line-separator</a>
+                | <a href="#ns-esc-paragraph-separator">ns-esc-paragraph-separator</a><br />
+                | <a href="#ns-esc-8-bit">ns-esc-8-bit</a>
+                | <a href="#ns-esc-16-bit">ns-esc-16-bit</a>
+                | <a href="#ns-esc-32-bit">ns-esc-32-bit</a><br />
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2518920"></a>
+              <p class="title">
+                <b>Example 4.14. Escaped Characters</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">"Fun with <tt class="filename">\\</tt><br /> <tt class="filename">\"</tt> <tt class="filename">\a</tt> <tt class="filename">\b</tt> <tt class="filename">\e</tt> <tt class="filename">\f</tt> <tt class="filename">\&#8595;</tt>
+ <tt class="filename">\n</tt> <tt class="filename">\r</tt> <tt class="filename">\t</tt> <tt class="filename">\v</tt> <tt class="filename">\0</tt> <tt class="filename">\&#8659;</tt>
+ <tt class="filename">\ </tt> <tt class="filename">\_</tt> <tt class="filename">\N</tt> <tt class="filename">\L</tt> <tt class="filename">\P</tt> <tt class="filename">\¶</tt>
+ <tt class="filename">\x41</tt> <tt class="filename">\u0041</tt> <tt class="filename">\U00000041</tt>"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-esc-char">ns-esc-char</a></tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+"Fun with \x5C
+ \x22 \x07 \x08 \x1B \0C
+ \x0A \x0D \x09 \x0B \x00
+ \x20 \xA0 \x85 \u2028 \u2029
+ A A A"
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="example">
+              <a id="id2519104"></a>
+              <p class="title">
+                <b>Example 4.15. Invalid Escaped Characters</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="screen"><span class="database">Bad escapes:<br />  "\<tt class="filename">c</tt>
+  \x<tt class="literal">q-</tt>"
+</span></pre>
+              </td>
+                  <td>
+<pre class="screen"><span class="database">ERROR:<br />- <tt class="filename">c</tt> is an invalid escaped character.
+- <tt class="literal">q</tt> and <tt class="literal">-</tt> are invalid hex digits.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2519180"></a>4.2. Syntax Primitives</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2519186"></a>4.2.1. Production Parameters</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          As YAML's syntax is designed for maximal readability, it makes heavy
+          use of the context that each syntactical entity appears in. For
+          notational compactness, this is expressed using parameterized BNF
+          productions. The set of parameters and the range of allowed values
+          depend on the specific production. The full list of possible
+          parameters and their values is:
+        </p>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">
+              Indentation: <tt class="varname">n</tt> or <tt class="varname">m</tt>
+            </span>
+                </dt>
+                <dd>
+                  <p>
+                Since the character <a id="id2519224" class="indexterm"></a><a href="#stream/syntax">stream</a> depends upon <a id="id2519240" class="indexterm"></a><a href="#indentation space/">indentation</a> level to
+                delineate blocks, many productions are parameterized by it. In
+                some cases, the notations &#8220;<span class="quote"><b class="userinput"><tt>production(&lt;n)</tt></b></span>&#8221;,
+                &#8220;<span class="quote"><b class="userinput"><tt>production(&#8804;n)</tt></b></span>&#8221; and
+                &#8220;<span class="quote"><b class="userinput"><tt>production(&gt;n)</tt></b></span>&#8221; are used; these are
+                shorthands for &#8220;<span class="quote"><b class="userinput"><tt>production(m)</tt></b></span>&#8221; for some specific
+                <tt class="varname">m</tt> where
+                0 &#8804; <tt class="varname">m</tt> &lt; <tt class="varname">n</tt>,
+                0 &#8804; <tt class="varname">m</tt> &#8804; <tt class="varname">n</tt> and
+                <tt class="varname">m</tt> &gt; <tt class="varname">n</tt>,
+                respectively.
+              </p>
+                </dd>
+                <dt>
+                  <span class="term">Context: <tt class="varname">c</tt></span>
+                </dt>
+                <dd>
+                  <p>
+                YAML supports two groups of <a id="id2519329" class="indexterm"></a><a id="context/"></a
+            ><a href="#index-entry-context"
+            ><i class="firstterm"
+            >contexts</i></a
+          >, distinguishing between
+                <a id="id2519343" class="indexterm"></a><a href="#block style/syntax">block
+                styles</a> and <a id="id2519361" class="indexterm"></a><a href="#flow style/syntax">flow styles</a>. In the <a id="id2519377" class="indexterm"></a><a href="#block style/syntax">block
+                styles</a>, <a id="id2519393" class="indexterm"></a><a href="#indentation space/">indentation</a> is used to delineate structure.
+                Due to the fact that the <a id="id2519408" class="indexterm"></a><a href="#- block sequence entry/">&#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221;</a> character denoting a
+                <a id="id2519426" class="indexterm"></a><a href="#block sequence style/syntax">block sequence</a> entry is perceived
+                as an <a id="id2519443" class="indexterm"></a><a href="#indentation space/">indentation</a> character, some productions
+                distinguish between the <a id="id2519458" class="indexterm"></a><a href="#block-in context/">block-in</a> context (inside a <a id="id2519472" class="indexterm"></a><a href="#block sequence style/syntax">block
+                sequence</a>) and the <a id="id2519488" class="indexterm"></a><a href="#block-out context/">block-out</a> context (outside one). In the
+                <a id="id2519504" class="indexterm"></a><a href="#flow style/syntax">flow
+                styles</a>, explicit <a id="id2519519" class="indexterm"></a><a href="#indicator/">indicators</a> are used to delineate
+                structure. As <a id="id2519532" class="indexterm"></a><a href="#plain style/syntax">plain scalars</a> have no such
+                <a id="id2519549" class="indexterm"></a><a href="#indicator/">indicators</a>, they are the
+                most context sensitive, distinguishing between being nested
+                inside a <a id="id2519563" class="indexterm"></a><a href="#flow collection style/syntax">flow collection</a> (<a id="id2519580" class="indexterm"></a><a href="#flow-in context/">flow-in</a> context) or being
+                outside one (<a id="id2519596" class="indexterm"></a><a href="#flow-out context/">flow-out</a> context). YAML also provides a
+                terse and intuitive syntax for <a id="id2519611" class="indexterm"></a><a href="#simple key/">simple keys</a>. <a id="id2519625" class="indexterm"></a><a href="#plain style/syntax">Plain scalars</a> in this (<a id="id2519640" class="indexterm"></a><a href="#flow-key context/">flow-key</a>) context are the
+                most restricted, for readability and implementation reasons.
+              </p>
+                </dd>
+                <dt>
+                  <span class="term">(Scalar) Style: <tt class="varname">s</tt></span>
+                </dt>
+                <dd>
+                  <p>
+                <a id="id2519672" class="indexterm"></a><a href="#scalar/syntax">Scalar
+                content</a> may be <a id="id2519688" class="indexterm"></a><a href="#present/">presented</a> in one of five <a id="id2519700" class="indexterm"></a><a href="#scalar/syntax">styles</a>: the
+                <a id="id2519716" class="indexterm"></a><a href="#plain style/syntax">plain</a>, <a id="id2519731" class="indexterm"></a><a href="#double quoted style/syntax">double quoted</a> and
+                <a id="id2519748" class="indexterm"></a><a href="#single quoted style/syntax">single quoted</a> <a id="id2519764" class="indexterm"></a><a href="#flow style/syntax">flow styles</a>,
+                and the <a id="id2519779" class="indexterm"></a><a href="#literal style/syntax">literal</a> and <a id="id2519795" class="indexterm"></a><a href="#folded style/syntax">folded</a>
+                <a id="id2519810" class="indexterm"></a><a href="#block style/syntax">block
+                styles</a>.
+              </p>
+                </dd>
+                <dt>
+                  <span class="term">(Block) Chomping: <tt class="varname">t</tt></span>
+                </dt>
+                <dd>
+                  <p>
+                Block scalars offer three possible mechanisms for <a id="id2519842" class="indexterm"></a><a href="#chomping/">chomping</a> any trailing <a id="id2519855" class="indexterm"></a><a href="#line break character/">line breaks</a>: <a id="id2519868" class="indexterm"></a><a href="#strip chomping/">strip</a>, <a id="id2519883" class="indexterm"></a><a href="#clip chomping/">clip</a> and <a id="id2519897" class="indexterm"></a><a href="#keep chomping/">keep</a>.
+              </p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2519916"></a>4.2.2. Indentation Spaces</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            In a YAML character <a id="id2519924" class="indexterm"></a><a href="#stream/syntax">stream</a>, structure is often determined
+            from <a id="id2519941" class="indexterm"></a><a id="indentation space/"></a
+            ><a href="#index-entry-indentation space"
+            ><i class="firstterm"
+            >indentation</i></a
+          >,
+            where indentation is defined as a <a id="id2519956" class="indexterm"></a><a href="#line break character/">line break</a> character (or the start of the
+            <a id="id2519970" class="indexterm"></a><a href="#stream/syntax">stream</a>)
+            followed by zero or more space characters. Note that indentation
+            must not contain any <a id="id2519988" class="indexterm"></a><a href="#tab/">tab</a>
+            characters. The amount of indentation is a <a id="id2520000" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> used
+            exclusively to delineate structure and is otherwise ignored. In
+            particular, indentation characters must never be considered part of
+            a <a id="id2520016" class="indexterm"></a><a href="#content/information model">node's
+            content information</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[66]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-indent(n)"></a>s-indent(n)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-ignored-space">s-ignored-space</a> x n
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2520054"></a>
+              <p class="title">
+                <b>Example 4.16. Indentation Spaces</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><span class="property">··</span># Leading comment line spaces are<br /><span class="property">···</span># neither content nor indentation.
+<span class="property">····</span>
+Not indented:
+<tt class="filename">·</tt>By one space: |
+<tt class="filename">····</tt>By four
+<tt class="filename">····</tt><tt class="literal">··</tt>spaces
+<tt class="filename">·</tt>Flow style: [    # Leading spaces
+<tt class="filename">··</tt><span class="property">·</span>By two,        # in flow style
+<tt class="filename">··</tt>Also by two,    # are neither
+<tt class="filename">··</tt><span class="property">&#8594;</span>Still by two   # content nor
+<tt class="filename">··</tt><span class="property">··</span>]             # indentation.
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-indent(n)">s-indent(n)</a></tt> <tt class="literal">Content</tt>
+  <span class="property">Neither content nor indentation</span>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "Not indented"
+  : !!map {
+      ? !!str "By one space"
+      : !!str "By four\n  spaces\n",
+      ? !!str "Flow style"
+      : !!seq [
+          !!str "By two",
+          !!str "Still by two",
+          !!str "Again by two",
+        ]
+    }
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <p>
+          In general, a <a id="id2520220" class="indexterm"></a><a href="#node/syntax">node</a> must be indented further than its
+          parent <a id="id2520236" class="indexterm"></a><a href="#node/syntax">node</a>. All
+          sibling <a id="id2520252" class="indexterm"></a><a href="#node/syntax">nodes</a>
+          must use the exact same indentation level, however the <a id="id2520268" class="indexterm"></a><a href="#content/syntax">content</a> of each
+          sibling <a id="id2520284" class="indexterm"></a><a href="#node/syntax">node</a> may
+          be further indented independently. The <a id="id2520299" class="indexterm"></a><a href="#- block sequence entry/">&#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221;</a>, <a id="id2520318" class="indexterm"></a><a href="#? mapping key/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</a> and <a id="id2520335" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>:</tt></b></span>&#8221;</a> characters used to denote
+          <a id="id2520353" class="indexterm"></a><a href="#block collection style/syntax">block
+          collection</a> entries are perceived by people to be part of
+          the indentation. Hence the indentation rules are slightly more
+          flexible when dealing with these <a id="id2520373" class="indexterm"></a><a href="#indicator/">indicators</a>. First, a <a id="id2520386" class="indexterm"></a><a href="#block sequence style/syntax">block
+          sequence</a> need not be indented relative to its parent
+          <a id="id2520403" class="indexterm"></a><a href="#node/syntax">node</a>, unless
+          that <a id="id2520418" class="indexterm"></a><a href="#node/syntax">node</a> is
+          also a <a id="id2520433" class="indexterm"></a><a href="#block sequence style/syntax">block sequence</a>. Second, compact <a id="id2520450" class="indexterm"></a><a href="#in-line style/syntax">in-line</a>
+          notations allow a nested <a id="id2520467" class="indexterm"></a><a href="#collection/syntax">collection</a> to begin immediately
+          following the <a id="id2520485" class="indexterm"></a><a href="#indicator/">indicator</a> (where
+          the <a id="id2520497" class="indexterm"></a><a href="#indicator/">indicator</a> is counted as
+          part of the indentation). This provides for an intuitive <a id="id2520510" class="indexterm"></a><a href="#collection/syntax">collection</a> nesting
+          syntax.
+        </p>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2520528"></a>4.2.3. Comments</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            An explicit <a id="id2520536" class="indexterm"></a><a id="comment/syntax"></a
+            ><a href="#index-entry-comment"
+            ><i class="firstterm"
+            >comment</i></a
+          > is is marked by a <a id="id2520553" class="indexterm"></a><a id="# comment/"></a
+            ><a href="#index-entry-# comment"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>#</tt></b></span>&#8221; indicator</i></a
+          >.
+            Comments are a <a id="id2520572" class="indexterm"></a><a href="#presentation detail/">presentation
+            detail</a> and must have no effect on the <a id="id2520587" class="indexterm"></a><a href="#serialization/">serialization tree</a> (and hence the
+            <a id="id2520601" class="indexterm"></a><a href="#representation/">representation graph</a>).
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[67]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-nb-comment-text"></a>c-nb-comment-text</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-comment">&#8220;<span class="quote">#</span>&#8221;</a>
+                <a href="#nb-char">nb-char</a>*
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Comments always span to the end of the line.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[68]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-b-comment"></a>c-b-comment</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-nb-comment-text">c-nb-comment-text</a>?
+                <a href="#b-ignored-any">b-ignored-any</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Outside <a id="id2520674" class="indexterm"></a><a href="#scalar/syntax">scalar
+            content</a>, comments may appear on a line of their own,
+            independent of the <a id="id2520691" class="indexterm"></a><a href="#indentation space/">indentation</a> level. Note that <a id="id2520704" class="indexterm"></a><a href="#tab/">tab</a> characters must not be used and that
+            <a id="id2520717" class="indexterm"></a><a href="#empty line/">empty lines</a> outside
+            <a id="id2520730" class="indexterm"></a><a href="#scalar/syntax">scalar
+            content</a> are taken to be (empty) comment lines.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[69]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-comment"></a>l-comment</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-ignored-space">s-ignored-space</a>*
+                <a href="#c-b-comment">c-b-comment</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2520772"></a>
+              <p class="title">
+                <b>Example 4.17. Comment Lines</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><span class="honorific"><tt class="literal">··<tt class="filename"># Comment&#8595;</tt></tt></span><br /><span class="honorific"><tt class="literal">···<tt class="filename">&#8595;</tt></tt></span>
+<span class="honorific"><tt class="literal"><tt class="filename">&#8595;</tt></tt></span>
+</span></pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database"># This stream contains no<br /># documents, only comments.
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-b-comment">c-b-comment</a></tt> <tt class="literal"><a href="#l-comment">l-comment</a></tt>
+</pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <p>
+            When a comment follows another syntax element, it must be <a id="id2520879" class="indexterm"></a><a href="#separation space/">separated</a> from it by space
+            characters. Like the comment itself, such characters are not
+            considered part of the <a id="id2520894" class="indexterm"></a><a href="#content/information model">content information</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[70]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-b-comment"></a>s-b-comment</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                ( <a href="#s-ignored-space">s-ignored-space</a>+
+                <a href="#c-nb-comment-text">c-nb-comment-text</a> )?<br />
+                <a href="#b-ignored-any">b-ignored-any</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2520943"></a>
+              <p class="title">
+                <b>Example 4.18. Comments Ending a Line</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">key:<span class="honorific"><tt class="literal">····<tt class="filename"># Comment</tt>&#8595;</tt></span><br />  value<tt class="literal">&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-nb-comment-text">c-nb-comment-text</a></tt> <tt class="literal"><a href="#s-b-comment">s-b-comment</a></tt>
+</pre>
+              </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "key"
+  : !!str "value"
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <p>
+            In most cases, when a line may end with a comment, YAML allows it
+            to be followed by additional comment lines.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[71]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-l-comments"></a>c-l-comments</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-b-comment">c-b-comment</a>
+                <a href="#l-comment">l-comment</a>*
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[72]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-l-comments"></a>s-l-comments</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-b-comment">s-b-comment</a>
+                <a href="#l-comment">l-comment</a>*
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2521086"></a>
+              <p class="title">
+                <b>Example 4.19. Multi-Line Comments</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">key:<span class="honorific"><span class="property"><tt class="filename">····# Comment&#8595;</tt><br /><tt class="literal">········# lines&#8595;</tt></span></span>
+  value<span class="honorific"><span class="property"><tt class="filename">&#8595;</tt>
+<tt class="literal">&#8595;</tt></span></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-b-comment">s-b-comment</a></tt> <tt class="literal"><a href="#l-comment">l-comment</a></tt> <span class="property"><a href="#s-l-comments">s-l-comments</a></span>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "key"
+  : !!str "value"
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2521201"></a>4.2.4. Separation Spaces</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            Outside <a id="id2521210" class="indexterm"></a><a href="#scalar/syntax">scalar
+            content</a>, YAML uses space characters for <a id="id2521226" class="indexterm"></a><a id="separation space/"></a
+            ><a href="#index-entry-separation space"
+            ><i class="firstterm"
+            >separation</i></a
+          > between tokens.
+            Note that separation must not contain <a id="id2521242" class="indexterm"></a><a href="#tab/">tab</a> characters. Seperation spaces are a
+            <a id="id2521254" class="indexterm"></a><a href="#presentation detail/">presentation
+            detail</a> used exclusively to delineate structure and are
+            otherwise ignored; in particular, such characters must never be
+            considered part of a <a id="id2521271" class="indexterm"></a><a href="#content/information model">node's content information</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[73]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-separate(n,c)"></a>s-separate(n,c)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <tt class="varname">c</tt> = block-out &#8658;
+                <a href="#s-separate-lines(n)">s-separate-lines(n)</a><br />
+                <tt class="varname">c</tt> = block-in  &#8658;
+                <a href="#s-separate-lines(n)">s-separate-lines(n)</a><br />
+                <tt class="varname">c</tt> = flow-out  &#8658;
+                <a href="#s-separate-lines(n)">s-separate-lines(n)</a><br />
+                <tt class="varname">c</tt> = flow-in   &#8658;
+                <a href="#s-separate-lines(n)">s-separate-lines(n)</a><br />
+                <tt class="varname">c</tt> = flow-key  &#8658;
+                <a href="#s-separate-spaces">s-separate-spaces</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                YAML usually allows separation spaces to include a <a id="id2521362" class="indexterm"></a><a href="#comment/syntax">comment</a> ending
+                the line and additional <a id="id2521378" class="indexterm"></a><a href="#comment/syntax">comment</a> lines. Note that the token
+                following the separation <a id="id2521394" class="indexterm"></a><a href="#comment/syntax">comment</a> lines must be properly
+                <a id="id2521410" class="indexterm"></a><a href="#indentation space/">indented</a>, even
+                though there is no such restriction on the separation <a id="id2521424" class="indexterm"></a><a href="#comment/syntax">comment</a> lines
+                themselves.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[74]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-separate-lines(n)"></a>s-separate-lines(n)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-space">s-ignored-space</a>+<br />
+                | ( <a href="#s-l-comments">s-l-comments</a>
+                <a href="#s-indent(n)">s-indent(n)</a>
+                <a href="#s-ignored-space">s-ignored-space</a>* )
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Inside <a id="id2521488" class="indexterm"></a><a href="#simple key/">simple keys</a>,
+                however, separation spaces are confined to the current line.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[75]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-separate-spaces"></a>s-separate-spaces</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-ignored-space">s-ignored-space</a>+
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2521526"></a>
+              <p class="title">
+                <b>Example 4.20. Separation Spaces</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">{<tt class="filename">·</tt>first:<tt class="filename">·</tt>Sammy,<tt class="filename">·</tt>last:<tt class="filename">·</tt>Sosa<tt class="filename">·</tt>}:<span class="honorific"><tt class="literal">&#8595;<br /># Statistics:
+<span class="property">··</span></tt></span>hr:<span class="honorific"><tt class="literal">··# Home runs
+····</tt></span>65
+<span class="property">··</span>avg:<span class="honorific"><tt class="literal">·# Average
+<span class="property">····</span></tt></span>0.278
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-separate-spaces">s-separate-spaces</a></tt>
+  <tt class="literal"><a href="#s-separate-lines(n)">s-separate-lines(n)</a></tt>
+  <span class="property"><a href="#s-indent(n)">s-indent(n)</a></span>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!map {
+    ? !!str "first"
+    : !!str "Sammy",
+    ? !!str "last"
+    : !!str "Sosa"
+  }
+  : !!map {
+    ? !!str "hr"
+    : !!int "65",
+    ? !!str "avg"
+    : !!float "0.278"
+  }
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2521681"></a>4.2.5. Ignored Line Prefix</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            YAML discards the &#8220;<span class="quote">empty</span>&#8221; <a id="id2521693" class="indexterm"></a><a id="ignored line prefix/"></a
+            ><a href="#index-entry-ignored line prefix"
+            ><i class="firstterm"
+            >prefix</i></a
+          > of each <a id="id2521708" class="indexterm"></a><a href="#scalar/syntax">scalar content</a> line. This prefix
+            always includes the <a id="id2521724" class="indexterm"></a><a href="#indentation space/">indentation</a>, and depending on the scalar style may
+            also include all leading <a id="id2521740" class="indexterm"></a><a href="#white space/">white
+            space</a>. The ignored prefix is a <a id="id2521754" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and
+            must never be considered part of a <a id="id2521768" class="indexterm"></a><a href="#content/information model">node's content information</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[76]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-ignored-prefix(n,s)"></a>s-ignored-prefix(n,s)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <tt class="varname">s</tt> = plain   &#8658;
+                <a href="#s-ignored-prefix-plain(n)">s-ignored-prefix-plain(n)</a><br />
+                <tt class="varname">s</tt> = double  &#8658;
+                <a href="#s-ignored-prefix-quoted(n)">s-ignored-prefix-quoted(n)</a><br />
+                <tt class="varname">s</tt> = single  &#8658;
+                <a href="#s-ignored-prefix-quoted(n)">s-ignored-prefix-quoted(n)</a><br />
+                <tt class="varname">s</tt> = literal &#8658;
+                <a href="#s-ignored-prefix-block(n)">s-ignored-prefix-block(n)</a><br />
+                <tt class="varname">s</tt> = folded  &#8658;
+                <a href="#s-ignored-prefix-block(n)">s-ignored-prefix-block(n)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Plain scalars must not contain any <a id="id2521860" class="indexterm"></a><a href="#tab/">tab</a> characters, and all leading spaces
+                are always discarded.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[77]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-ignored-prefix-plain(n)"></a>s-ignored-prefix-plain(n)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-indent(n)">s-indent(n)</a>
+                <a href="#s-ignored-space">s-ignored-space</a>*
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Quoted scalars may contain <a id="id2521909" class="indexterm"></a><a href="#tab/">tab</a>
+                characters. Again, all leading <a id="id2521922" class="indexterm"></a><a href="#white space/">white space</a> is always discarded.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[78]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-ignored-prefix-quoted(n)"></a>s-ignored-prefix-quoted(n)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-indent(n)">s-indent(n)</a>
+                <a href="#s-ignored-white">s-ignored-white</a>*
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="itemizedlist">
+              <ul type="disc">
+                <li>
+                  <p>
+                Block scalars rely on <a id="id2521971" class="indexterm"></a><a href="#indentation space/">indentation</a>; hence leading <a id="id2521985" class="indexterm"></a><a href="#white space/">white space</a>, if any, is not
+                discarded.
+              </p>
+                </li>
+              </ul>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[79]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="s-ignored-prefix-block(n)"></a>s-ignored-prefix-block(n)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-indent(n)">s-indent(n)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2522022"></a>
+              <p class="title">
+                <b>Example 4.21. Ignored Prefix</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">plain: text<br /><span class="honorific"><tt class="filename"><tt class="constant">·</tt>·</tt></span>lines
+quoted: "text
+<span class="honorific"><tt class="literal"><tt class="constant">·</tt>·&#8594;</tt></span>lines"
+block: |
+<span class="honorific"><span class="property"><tt class="constant">··</tt></span></span>text
+<span class="honorific"><span class="property"><tt class="constant">··</tt></span></span>·&#8594;lines
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-ignored-prefix-plain(n)">s-ignored-prefix-plain(n)</a></tt>
+  <tt class="literal"><a href="#s-ignored-prefix-quoted(n)">s-ignored-prefix-quoted(n)</a></tt>
+  <span class="property"><a href="#s-ignored-prefix-block(n)">s-ignored-prefix-block(n)</a></span>
+  <tt class="constant"><a href="#s-indent(n)">s-indent(n)</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "plain"
+  : !!str "text lines",
+  ? !!str "quoted"
+  : !!str "text lines",
+  ? !!str "block"
+  : !!str "text·&#8594;lines\n"
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <p>
+            An <a id="id2522158" class="indexterm"></a><a id="empty line/"></a
+            ><a href="#index-entry-empty line"
+            ><i class="firstterm"
+            >empty line</i></a
+          > line consists
+            of the ignored prefix followed by a <a id="id2522173" class="indexterm"></a><a href="#line break character/">line break</a>. When trailing <a id="id2522187" class="indexterm"></a><a href="#block scalar style/syntax">block
+            scalars</a>, such lines can also be interpreted as (empty)
+            <a id="id2522203" class="indexterm"></a><a href="#comment/syntax">comment</a>
+            lines. YAML provides a <a id="id2522220" class="indexterm"></a><a href="#chomping/">chomping</a> mechanism to resolve this
+            ambiguity.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[80]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-empty(n,s)"></a>l-empty(n,s)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                ( <a href="#s-indent(n)">s-indent(&lt;n)</a>
+                | <a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,s)</a> )<br />
+                <a href="#b-normalized">b-normalized</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2522268"></a>
+              <p class="title">
+                <b>Example 4.22. Empty Lines</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">- foo
+<tt class="filename">·&#8595;</tt>
+  bar
+- |-
+  foo
+<tt class="filename">·&#8595;</tt>
+  bar
+<tt class="literal">··&#8595;</tt>
+</span></pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq {
+  !!str "foo\nbar",
+  !!str "foo\n\nbar"
+}
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-empty(n,s)">l-empty(n,s)</a></tt>
+  <tt class="literal"><a href="#l-comment">l-comment</a></tt>
+</pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2522356"></a>4.2.6. Line Folding</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            <a id="id2522364" class="indexterm"></a><a id="line folding/"></a
+            ><a href="#index-entry-line folding"
+            ><i class="firstterm"
+            >Line folding</i></a
+          > allows long
+            lines to be broken for readability, while retaining the original
+            semantics of a single long line. When folding is done, any <a id="id2522382" class="indexterm"></a><a href="#line break character/">line break</a> ending an
+            <a id="id2522396" class="indexterm"></a><a href="#empty line/">empty line</a> is preserved. In
+            addition, any <a id="id2522409" class="indexterm"></a><a href="#specific line break/">specific line
+            breaks</a> are also preserved, even when ending a
+            non-<a id="id2522424" class="indexterm"></a><a href="#empty line/">empty line</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[81]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-l-folded-specific(n,s)"></a>b-l-folded-specific(n,s)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-specific">b-specific</a>
+                <a href="#l-empty(n,s)">l-empty(n,s)</a>*
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Hence, folding only applies to <a id="id2522466" class="indexterm"></a><a href="#generic line break/">generic line breaks</a> that end non-<a id="id2522480" class="indexterm"></a><a href="#empty line/">empty lines</a>. If the following line
+            is also not <a id="id2522493" class="indexterm"></a><a href="#empty line/">empty</a>, the
+            <a id="id2522505" class="indexterm"></a><a href="#generic line break/">generic line break</a>
+            is converted to a single space (<b class="userinput"><tt>#x20</tt></b>).
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[82]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-l-folded-as-space"></a>b-l-folded-as-space</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-generic">b-generic</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            If the following line is <a id="id2522549" class="indexterm"></a><a href="#empty line/">empty
+            line</a>, the <a id="id2522562" class="indexterm"></a><a href="#generic line break/">generic
+            line break</a> is ignored.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[83]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-l-folded-trimmed(n,s)"></a>b-l-folded-trimmed(n,s)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#b-ignored-generic">b-ignored-generic</a>
+                <a href="#l-empty(n,s)">l-empty(n,s)</a>+
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Thus, a folded non-<a id="id2522605" class="indexterm"></a><a href="#empty line/">empty
+            line</a> may end with one of three possible folded line break
+            forms. The original form of such a folded line break is a <a id="id2522620" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and
+            must not be used to convey <a id="id2522635" class="indexterm"></a><a href="#content/information model">node's content information</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[84]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="b-l-folded-any(n,s)"></a>b-l-folded-any(n,s)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#b-l-folded-specific(n,s)">b-l-folded-specific(n,s)</a><br />
+                | <a href="#b-l-folded-as-space">b-l-folded-as-space</a><br />
+                | <a href="#b-l-folded-trimmed(n,s)">b-l-folded-trimmed(n,s)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2522685"></a>
+              <p class="title">
+                <b>Example 4.23. Line Folding</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">&gt;-<br />  specific<tt class="filename">&#8659;</tt>
+  trimmed<tt class="literal">&#8595;
+··&#8595;
+·&#8595;
+&#8595;</tt>
+  as<span class="property">&#8595;</span>
+  space
+</span></pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />--- !!str
+"specific\L\
+ trimmed\n\n\n\
+ as space"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#b-l-folded-specific(n,s)">b-l-folded-specific(n,s)</a></tt>
+  <tt class="literal"><a href="#b-l-folded-as-space">b-l-folded-as-space</a></tt>
+  <span class="property"><a href="#b-l-folded-trimmed(n,s)">b-l-folded-trimmed(n,s)</a></span>
+</pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <p>
+          The above rules are common to both the <a id="id2522792" class="indexterm"></a><a href="#folded style/syntax">folded block style</a> and the
+          <a id="id2522808" class="indexterm"></a><a href="#flow scalar style/syntax">scalar flow
+          styles</a>. Folding does distinguish between the <a id="id2522827" class="indexterm"></a><a href="#folded style/syntax">folded block
+          style</a> and the <a id="id2522843" class="indexterm"></a><a href="#flow scalar style/syntax">scalar flow styles</a> in the following way:
+        </p>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">Block Folding</span>
+                </dt>
+                <dd>
+                  <p>
+                In the <a id="id2522872" class="indexterm"></a><a href="#folded style/syntax">folded block style</a>, folding does
+                not apply to <a id="id2522889" class="indexterm"></a><a href="#line break character/">line
+                breaks</a> or <a id="id2522902" class="indexterm"></a><a href="#empty line/">empty
+                lines</a> that preced or follow a text line containing
+                leading <a id="id2522917" class="indexterm"></a><a href="#white space/">white space</a>.
+                Note that such a line may consist of only such leading <a id="id2522931" class="indexterm"></a><a href="#white space/">white space</a>; an <a id="id2522944" class="indexterm"></a><a href="#empty line/">empty</a> <a id="id2522956" class="indexterm"></a><a href="#block style/syntax">block</a> line is confined to
+                (optional) <a id="id2522973" class="indexterm"></a><a href="#indentation space/">indentation</a> spaces only. Further, the final
+                <a id="id2522987" class="indexterm"></a><a href="#line break character/">line break</a>
+                and <a id="id2523000" class="indexterm"></a><a href="#empty line/">empty lines</a> are
+                subject to <a id="id2523013" class="indexterm"></a><a href="#chomping/">chomping</a>, and
+                are never folded. The combined effect of these rules is that
+                each &#8220;<span class="quote">paragraph</span>&#8221; is interpreted as a line,
+                <a id="id2523032" class="indexterm"></a><a href="#empty line/">empty lines</a> are used to
+                <a id="id2523045" class="indexterm"></a><a href="#present/">present</a> a line feed, the
+                formatting of <a id="id2523058" class="indexterm"></a><a href="#more indented line/">&#8220;<span class="quote">more
+                indented</span>&#8221; lines</a> is preserved, and final
+                <a id="id2523075" class="indexterm"></a><a href="#line break character/">line breaks</a>
+                may be included or excluded from the <a id="id2523089" class="indexterm"></a><a href="#content/information model">node's content
+                information</a> as appropriate.
+              </p>
+                </dd>
+                <dt>
+                  <span class="term">Flow Folding</span>
+                </dt>
+                <dd>
+                  <p>
+                Folding in <a id="id2523120" class="indexterm"></a><a href="#flow style/syntax">flow styles</a> provides more relaxed,
+                less powerful semantics. <a id="id2523136" class="indexterm"></a><a href="#flow style/syntax">Flow styles</a> typically depend on
+                explicit <a id="id2523152" class="indexterm"></a><a href="#indicator/">indicators</a> to
+                convey structure, rather than <a id="id2523165" class="indexterm"></a><a href="#indentation space/">indentation</a>. Hence, in <a id="id2523179" class="indexterm"></a><a href="#flow style/syntax">flow styles</a>, spaces
+                preceding or following the text in a line are a <a id="id2523196" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and
+                must not be considered a part of the <a id="id2523210" class="indexterm"></a><a href="#content/information model">node's content
+                information</a>. Once all such spaces have been
+                discarded, folding proceeds as described above. In contrast
+                with the <a id="id2523228" class="indexterm"></a><a href="#folded style/syntax">block folded style</a>, all <a id="id2523244" class="indexterm"></a><a href="#line break character/">line breaks</a> are
+                folded, without exception, and a line consisting only of spaces
+                is considered to be an <a id="id2523259" class="indexterm"></a><a href="#empty line/">empty
+                line</a>, regardless of the number of spaces. The
+                combined effect of these processing rules is that each
+                &#8220;<span class="quote">paragraph</span>&#8221; is interpreted as a line, <a id="id2523278" class="indexterm"></a><a href="#empty line/">empty lines</a> are used to <a id="id2523291" class="indexterm"></a><a href="#present/">present</a> a line feed, and text can
+                be freely <a id="id2523304" class="indexterm"></a><a href="#more indented line/">&#8220;<span class="quote">more
+                indented</span>&#8221;</a> without affecting the <a id="id2523319" class="indexterm"></a><a href="#content/information model">node's content
+                information</a>.
+              </p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2523342"></a>4.3. YAML Character Stream</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        A YAML character <a id="id2523350" class="indexterm"></a><a href="#stream/syntax">stream</a> may contain several YAML <a id="id2523366" class="indexterm"></a><a href="#document/syntax">documents</a>, denoted by
+        <a id="id2523382" class="indexterm"></a><a href="#document boundary marker/">document boundary
+        markers</a>. Each <a id="id2523396" class="indexterm"></a><a href="#document/syntax">document</a> <a id="id2523411" class="indexterm"></a><a href="#present/">presents</a> a single independent <a id="id2523423" class="indexterm"></a><a href="#root node/">root node</a> and may be preceded by a series
+        of <a id="id2523437" class="indexterm"></a><a href="#directive/syntax">directives</a>.
+      </p>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2523453"></a>4.3.1. Directives</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            <a id="id2523461" class="indexterm"></a><a id="directive/syntax"></a
+            ><a href="#index-entry-directive"
+            ><i class="firstterm"
+            >Directives</i></a
+          > are instructions to the
+            YAML <a id="id2523479" class="indexterm"></a><a href="#processor/">processor</a>. Like
+            <a id="id2523491" class="indexterm"></a><a href="#comment/syntax">comments</a>,
+            directives are <a id="id2523507" class="indexterm"></a><a href="#presentation detail/">presentation
+            details</a> and are not reflected in the <a id="id2523522" class="indexterm"></a><a href="#serialization/">serialization tree</a> (and hence the
+            <a id="id2523535" class="indexterm"></a><a href="#representation/">representation graph</a>).
+            This specification defines two directives, <a id="id2523549" class="indexterm"></a><a href="#YAML directive/">&#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221;</a> and <a id="id2523567" class="indexterm"></a><a href="#TAG directive/">&#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221;</a>, and
+            <a id="id2523584" class="indexterm"></a><a id="reserved directive/"></a
+            ><a href="#index-entry-reserved directive"
+            ><i class="firstterm"
+            >reserves</i></a
+          > all other
+            directives for future use. There is no way to define private
+            directives. This is intentional.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[85]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-directive"></a>l-directive</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#l-yaml-directive">l-yaml-directive</a>
+                | <a href="#l-tag-directive">l-tag-directive</a>
+                | <a href="#l-reserved-directive">l-reserved-directive</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Each directive is specified on a separate non-<a id="id2523635" class="indexterm"></a><a href="#indentation space/">indented</a> line starting with
+            the <a id="id2523649" class="indexterm"></a><a id="% directive/"></a
+            ><a href="#index-entry-% directive"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>%</tt></b></span>&#8221;
+            indicator</i></a
+          >, followed by the directive name and a
+            space-separated list of parameters. The semantics of these tokens
+            depend on the specific directive. A YAML <a id="id2523672" class="indexterm"></a><a href="#processor/">processor</a> should ignore unknown
+            directives with an appropriate warning.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[86]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-reserved-directive"></a>l-reserved-directive</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-directive">&#8220;<span class="quote">%</span>&#8221;</a>
+                <a href="#ns-directive-name">ns-directive-name</a><br />
+                ( <a href="#s-ignored-space">s-ignored-space</a>+
+                  <a href="#ns-directive-parameter">ns-directive-parameter</a> )*<br />
+                <a href="#s-l-comments">s-l-comments</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[87]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-directive-name"></a>ns-directive-name</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#ns-char">ns-char</a>+
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[88]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-directive-parameter"></a>ns-directive-parameter</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#ns-char">ns-char</a>+
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2523766"></a>
+              <p class="title">
+                <b>Example 4.24. Reserved Directives</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><span class="honorific"><tt class="filename">%<tt class="literal">FOO</tt>  <span class="property">bar</span> <span class="property">baz</span> # Should be ignored<br />               # with a warning.</tt></span>
+--- "foo"
+</span></pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />--- !!str
+"foo"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-reserved-directive">l-reserved-directive</a></tt>
+  <tt class="literal"><a href="#ns-directive-name">ns-directive-name</a></tt>
+  <span class="property"><a href="#ns-directive-parameter">ns-directive-parameter</a></span>
+</pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2523874"></a>4.3.1.1. &#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221; Directive</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The <a id="id2523888" class="indexterm"></a><a id="YAML directive/"></a
+            ><a href="#index-entry-YAML directive"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221;
+              directive</i></a
+          > specifies the version of YAML the <a id="id2523909" class="indexterm"></a><a href="#document/syntax">document</a> adheres
+              to. This specification defines version &#8220;<span class="quote"><b class="userinput"><tt>1.1</tt></b></span>&#8221;. A
+              version 1.1 YAML <a id="id2523933" class="indexterm"></a><a href="#processor/">processor</a>
+              should accept <a id="id2523945" class="indexterm"></a><a href="#document/syntax">documents</a> with an explicit
+              &#8220;<span class="quote"><b class="userinput"><tt>%YAML 1.1</tt></b></span>&#8221; directive, as well as <a id="id2523969" class="indexterm"></a><a href="#document/syntax">documents</a> lacking
+              a &#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221; directive. <a id="id2523991" class="indexterm"></a><a href="#document/syntax">Documents</a> with a
+              &#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221; directive specifying a higher minor version
+              (e.g. &#8220;<span class="quote"><b class="userinput"><tt>%YAML 1.2</tt></b></span>&#8221;) should be processed with
+              an appropriate warning. <a id="id2524023" class="indexterm"></a><a href="#document/syntax">Documents</a> with a
+              &#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221; directive specifying a higher major version
+              (e.g. &#8220;<span class="quote"><b class="userinput"><tt>%YAML 2.0</tt></b></span>&#8221;) should be rejected with an
+              appropriate error message.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[89]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-yaml-directive"></a>l-yaml-directive</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-directive">&#8220;<span class="quote">%</span>&#8221;</a>
+                  &#8220;<span class="quote">Y</span>&#8221; &#8220;<span class="quote">A</span>&#8221;
+                  &#8220;<span class="quote">M</span>&#8221; &#8220;<span class="quote">L</span>&#8221; <br />
+                  <a href="#s-ignored-space">s-ignored-space</a>+
+                  <a href="#ns-yaml-version">ns-yaml-version</a><br />
+                  <a href="#s-l-comments">s-l-comments</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[90]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-yaml-version"></a>ns-yaml-version</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-dec-digit">ns-dec-digit</a>+
+                  &#8220;<span class="quote">.</span>&#8221;
+                  <a href="#ns-dec-digit">ns-dec-digit</a>+
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2524135"></a>
+                <p class="title">
+                  <b>Example 4.25. &#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221; directive</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><span class="honorific"><tt class="filename">%YAML <tt class="literal">1.2</tt> # Attempt parsing<br />           # with a warning</tt></span>
+---
+"foo"
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "foo"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-yaml-directive">l-yaml-directive</a></tt> <tt class="literal"><a href="#ns-yaml-version">ns-yaml-version</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              It is an error to specify more than one
+              &#8220;<span class="quote"><b class="userinput"><tt>YAML</tt></b></span>&#8221; directive for the same document, even if
+              both occurences give the same version number.
+            </p>
+              <div class="example">
+                <a id="id2524239"></a>
+                <p class="title">
+                  <b>Example 4.26. Invalid Repeated YAML directive</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="screen"><span class="database">%YAML 1.1<br />%<tt class="filename">YAML</tt> 1.1
+foo
+</span></pre>
+                </td>
+                    <td>
+<pre class="screen"><span class="database">ERROR:<br />The <tt class="filename">YAML</tt> directive must only be
+given at most once per document.
+</span></pre>
+                </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2524297"></a>4.3.1.2. &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; Directive</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The <a id="id2524311" class="indexterm"></a><a id="TAG directive/"></a
+            ><a href="#index-entry-TAG directive"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221;
+              directive</i></a
+          > establishes a <a id="id2524331" class="indexterm"></a><a href="#tag shorthand/">shorthand</a> notation for specifying <a id="id2524345" class="indexterm"></a><a href="#tag/syntax">node tags</a>. Each
+              &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; directive associates a <a id="id2524367" class="indexterm"></a><a href="#tag handle/">handle</a> with a <a id="id2524380" class="indexterm"></a><a href="#tag prefix/">prefix</a>, allowing for compact and readable
+              <a id="id2524395" class="indexterm"></a><a href="#tag/syntax">tag</a> notation.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[91]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-tag-directive"></a>l-tag-directive</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-directive">&#8220;<span class="quote">%</span>&#8221;</a>
+                  &#8220;<span class="quote">T</span>&#8221; &#8220;<span class="quote">A</span>&#8221; &#8220;<span class="quote">G</span>&#8221; <br />
+                  <a href="#s-ignored-space">s-ignored-space</a>+
+                  <a href="#c-tag-handle">c-tag-handle</a><br />
+                  <a href="#s-ignored-space">s-ignored-space</a>+
+                  <a href="#ns-tag-prefix">ns-tag-prefix</a><br />
+                  <a href="#s-l-comments">s-l-comments</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2524471"></a>
+                <p class="title">
+                  <b>Example 4.27. &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; directive</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><span class="honorific"><tt class="filename">%TAG <tt class="literal">!yaml!</tt> <span class="property">tag:yaml.org,2002:</span>&#8595;</tt></span><br />---
+!yaml!str "foo"
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "foo"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-tag-directive">l-tag-directive</a></tt>
+  <tt class="literal"><a href="#c-tag-handle">c-tag-handle</a></tt> <span class="property"><a href="#ns-tag-prefix">ns-tag-prefix</a></span>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              It is an error to specify more than one &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221;
+              directive for the same <a id="id2524587" class="indexterm"></a><a href="#tag handle/">handle</a> in the same document, even if both
+              occurences give the same <a id="id2524602" class="indexterm"></a><a href="#tag prefix/">prefix</a>.
+            </p>
+              <div class="example">
+                <a id="id2524616"></a>
+                <p class="title">
+                  <b>Example 4.28. Invalid Repeated TAG directive</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="screen"><span class="database">%TAG ! !foo<br />%TAG <tt class="filename">!</tt> !foo
+bar
+</span></pre>
+                </td>
+                    <td>
+<pre class="screen"><span class="database">ERROR:<br />The TAG directive must only
+be given at most once per
+<tt class="filename">handle</tt> in the same document.
+</span></pre>
+                </td>
+                  </tr>
+                </table>
+              </div>
+              <div class="sect4" lang="en" xml:lang="en">
+                <div class="titlepage">
+                  <div>
+                    <div>
+                      <h5 class="title"><a id="id2524672"></a>4.3.1.2.1. Tag Prefixes</h5>
+                    </div>
+                  </div>
+                  <div></div>
+                </div>
+                <p>
+                There are two <a id="id2524681" class="indexterm"></a><a id="tag prefix/"></a
+            ><a href="#index-entry-tag prefix"
+            ><i class="firstterm"
+            >tag
+                prefix</i></a
+          > variants:
+              </p>
+                <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                  <tr>
+                    <td>
+                      <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                        <tr>
+                          <td align="left" valign="top" class="productioncounter">[92]</td>
+                          <td align="right" valign="top" class="productionlhs"><a id="ns-tag-prefix"></a>ns-tag-prefix</td>
+                          <td valign="top" class="productionseperator" align="center">
+                            <tt>::=</tt>
+                          </td>
+                          <td valign="top" class="productionrhs">
+                    <a href="#ns-local-tag-prefix">ns-local-tag-prefix</a>
+                    | <a href="#ns-global-tag-prefix">ns-global-tag-prefix</a>
+                  </td>
+                          <td align="left" valign="top" class="productioncomment"> </td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+                </table>
+                <div class="variablelist">
+                  <dl>
+                    <dt>
+                      <span class="term">Local Tags</span>
+                    </dt>
+                    <dd>
+                      <p>
+                      If the prefix begins with a <a id="id2524736" class="indexterm"></a><a href="#! local tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a> character, <a id="id2524756" class="indexterm"></a><a href="#tag shorthand/">shorthands</a> using the
+                      <a id="id2524770" class="indexterm"></a><a href="#tag handle/">handle</a> are
+                      expanded to a <a id="id2524782" class="indexterm"></a><a href="#local tag/">local
+                      tag</a> beginning with <a id="id2524796" class="indexterm"></a><a href="#! local tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a>. Note that such a
+                      <a id="id2524814" class="indexterm"></a><a href="#tag/syntax">tag</a>
+                      is intentionally not a valid URI, since its semantics are
+                      specific to the <a id="id2524830" class="indexterm"></a><a href="#application/">application</a>. In
+                      particular, two <a id="id2524844" class="indexterm"></a><a href="#document/syntax">documents</a> in the same
+                      <a id="id2524860" class="indexterm"></a><a href="#stream/syntax">stream</a> may assign different
+                      semantics to the same <a id="id2524876" class="indexterm"></a><a href="#local tag/">local
+                      tag</a>.
+                    </p>
+                    </dd>
+                  </dl>
+                </div>
+                <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                  <tr>
+                    <td>
+                      <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                        <tr>
+                          <td align="left" valign="top" class="productioncounter">[93]</td>
+                          <td align="right" valign="top" class="productionlhs"><a id="ns-local-tag-prefix"></a>ns-local-tag-prefix</td>
+                          <td valign="top" class="productionseperator" align="center">
+                            <tt>::=</tt>
+                          </td>
+                          <td valign="top" class="productionrhs">
+                  <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                    <a href="#ns-uri-char">ns-uri-char</a>*
+                  </td>
+                          <td align="left" valign="top" class="productioncomment"> </td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+                </table>
+                <div class="variablelist">
+                  <dl>
+                    <dt>
+                      <span class="term">Global Tags</span>
+                    </dt>
+                    <dd>
+                      <p>
+                      If the prefix begins with a character other than <a id="id2524934" class="indexterm"></a><a href="#! local tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a>, it
+                      must to be a valid URI prefix, and should contain at
+                      least the scheme and the authority. <a id="id2524953" class="indexterm"></a><a href="#tag shorthand/">Shorthands</a> using the associated
+                      <a id="id2524968" class="indexterm"></a><a href="#tag handle/">handle</a> are
+                      expanded to globally unique URI tags, and their semantics
+                      is consistent across <a id="id2524982" class="indexterm"></a><a href="#application/">applications</a>. In
+                      particular, two <a id="id2524995" class="indexterm"></a><a href="#document/syntax">documents</a> in different
+                      <a id="id2525012" class="indexterm"></a><a href="#stream/syntax">streams</a> must assign the same
+                      semantics to the same <a id="id2525028" class="indexterm"></a><a href="#global tag/">global tag</a>.
+                    </p>
+                    </dd>
+                  </dl>
+                </div>
+                <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                  <tr>
+                    <td>
+                      <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                        <tr>
+                          <td align="left" valign="top" class="productioncounter">[94]</td>
+                          <td align="right" valign="top" class="productionlhs"><a id="ns-global-tag-prefix"></a>ns-global-tag-prefix</td>
+                          <td valign="top" class="productionseperator" align="center">
+                            <tt>::=</tt>
+                          </td>
+                          <td valign="top" class="productionrhs">
+                    <a href="#ns-tag-char">ns-tag-char</a>
+                    <a href="#ns-uri-char">ns-uri-char</a>*
+                  </td>
+                          <td align="left" valign="top" class="productioncomment"> </td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+                </table>
+                <div class="example">
+                  <a id="id2525071"></a>
+                  <p class="title">
+                    <b>Example 4.29. Tag Prefixes</b>
+                  </p>
+                  <table class="simplelist" border="0" summary="Simple list">
+                    <tr>
+                      <td>
+<pre class="programlisting"><span class="database">%TAG !      <tt class="filename">!foo</tt><br />%TAG !yaml! <tt class="literal">tag:yaml.org,2002:</tt>
+---
+- !bar "baz"
+- !yaml!str "string"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-local-tag-prefix">ns-local-tag-prefix</a></tt> <tt class="literal"><a href="#ns-global-tag-prefix">ns-global-tag-prefix</a></tt>
+</pre>
+                </td>
+                      <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !&lt;!foobar&gt; "bar",
+  !&lt;tag:yaml.org,2002:str&gt; "string"
+]
+</span></pre>
+                </td>
+                    </tr>
+                  </table>
+                </div>
+              </div>
+              <div class="sect4" lang="en" xml:lang="en">
+                <div class="titlepage">
+                  <div>
+                    <div>
+                      <h5 class="title"><a id="id2525159"></a>4.3.1.2.2. Tag Handles</h5>
+                    </div>
+                  </div>
+                  <div></div>
+                </div>
+                <p>
+                The <a id="id2525167" class="indexterm"></a><a id="tag handle/"></a
+            ><a href="#index-entry-tag handle"
+            ><i class="firstterm"
+            >tag handle</i></a
+          > exactly
+                matches the prefix of the affected <a id="id2525182" class="indexterm"></a><a href="#tag shorthand/">shorthand</a>. There are three tag handle
+                variants:
+              </p>
+                <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                  <tr>
+                    <td>
+                      <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                        <tr>
+                          <td align="left" valign="top" class="productioncounter">[95]</td>
+                          <td align="right" valign="top" class="productionlhs"><a id="c-tag-handle"></a>c-tag-handle</td>
+                          <td valign="top" class="productionseperator" align="center">
+                            <tt>::=</tt>
+                          </td>
+                          <td valign="top" class="productionrhs">
+                      <a href="#c-primary-tag-handle">c-primary-tag-handle</a><br />
+                    | <a href="#c-secondary-tag-handle">ns-secondary-tag-handle</a><br />
+                    | <a href="#c-named-tag-handle">c-named-tag-handle</a>
+                  </td>
+                          <td align="left" valign="top" class="productioncomment"> </td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+                </table>
+                <div class="variablelist">
+                  <dl>
+                    <dt>
+                      <span class="term">Primary Handle</span>
+                    </dt>
+                    <dd>
+                      <p>
+                      The <a id="id2525243" class="indexterm"></a><a id="primary tag handle/"></a
+            ><a href="#index-entry-primary tag handle"
+            ><i class="firstterm"
+            >primary tag
+                      handle</i></a
+          > is a single <a id="id2525258" class="indexterm"></a><a href="#! tag indicator/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a> character. This
+                      allows using the most compact possible notation for a
+                      single &#8220;<span class="quote">primary</span>&#8221; name space. By default, the
+                      prefix associated with this handle is <a id="id2525284" class="indexterm"></a><a href="#! local tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a>.
+                      Thus, by default, <a id="id2525302" class="indexterm"></a><a href="#tag shorthand/">shorthands</a> using this handle are
+                      interpreted as <a id="id2525316" class="indexterm"></a><a href="#local tag/">local
+                      tags</a>. It is possible to override this behavior
+                      by providing an explicit &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; directive
+                      associating a different prefix for this handle. This
+                      provides smooth migration from using <a id="id2525339" class="indexterm"></a><a href="#local tag/">local tags</a> to using
+                      <a id="id2525352" class="indexterm"></a><a href="#global tag/">global tags</a> by a
+                      simple addition of a single &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221;
+                      directive.
+                    </p>
+                    </dd>
+                  </dl>
+                </div>
+                <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                  <tr>
+                    <td>
+                      <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                        <tr>
+                          <td align="left" valign="top" class="productioncounter">[96]</td>
+                          <td align="right" valign="top" class="productionlhs"><a id="c-primary-tag-handle"></a>c-primary-tag-handle</td>
+                          <td valign="top" class="productionseperator" align="center">
+                            <tt>::=</tt>
+                          </td>
+                          <td valign="top" class="productionrhs">
+                    <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                  </td>
+                          <td align="left" valign="top" class="productioncomment"> </td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+                </table>
+                <div class="example">
+                  <a id="id2525400"></a>
+                  <p class="title">
+                    <b>Example 4.30. Migrating from Local to Global Tags</b>
+                  </p>
+                  <table class="simplelist" border="0" summary="Simple list">
+                    <tr>
+                      <td>
+<pre class="programlisting"><span class="database"># Private application:<br />!foo "bar"
+</span></pre>
+<pre class="programlisting"><span class="database"># Migrated to global:<br />%TAG ! tag:ben-kiki.org,2000:app/
+---
+!foo "bar"
+</span></pre>
+                </td>
+                      <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!&lt;!foo&gt; "bar"
+</span></pre>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!&lt;tag:ben-kiki.org,2000:app/foo&gt; "bar"
+</span></pre>
+                </td>
+                    </tr>
+                  </table>
+                </div>
+                <div class="variablelist">
+                  <dl>
+                    <dt>
+                      <span class="term">Secondary Handle</span>
+                    </dt>
+                    <dd>
+                      <p>
+                      The <a id="id2525484" class="indexterm"></a><a id="secondary tag handle/"></a
+            ><a href="#index-entry-secondary tag handle"
+            ><i class="firstterm"
+            >secondary tag
+                      handle</i></a
+          > is written as <a id="id2525500" class="indexterm"></a><a href="#! tag indicator/">&#8220;<span class="quote"><b class="userinput"><tt>!!</tt></b></span>&#8221;</a>. This allows
+                      using a compact notation for a single
+                      &#8220;<span class="quote">secondary</span>&#8221; name space. By default, the
+                      prefix associated with this handle is
+                      &#8220;<span class="quote"><b class="userinput"><tt>tag:yaml.org,2002:</tt></b></span>&#8221; used by the <a href="http://yaml.org/type/index.html" target="_top">YAML tag
+                      repository</a> providing recommended <a id="id2525538" class="indexterm"></a><a href="#tag/information model">tags</a> for increasing the portability of
+                      YAML <a id="id2525556" class="indexterm"></a><a href="#document/syntax">documents</a> between different
+                      <a id="id2525572" class="indexterm"></a><a href="#application/">applications</a>. It
+                      is possible to override this behavior by providing an
+                      explicit &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; directive associating a
+                      different prefix for this handle.
+                    </p>
+                    </dd>
+                  </dl>
+                </div>
+                <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                  <tr>
+                    <td>
+                      <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                        <tr>
+                          <td align="left" valign="top" class="productioncounter">[97]</td>
+                          <td align="right" valign="top" class="productionlhs"><a id="c-secondary-tag-handle"></a>ns-secondary-tag-handle</td>
+                          <td valign="top" class="productionseperator" align="center">
+                            <tt>::=</tt>
+                          </td>
+                          <td valign="top" class="productionrhs">
+                    <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                    <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                  </td>
+                          <td align="left" valign="top" class="productioncomment"> </td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+                </table>
+                <div class="variablelist">
+                  <dl>
+                    <dt>
+                      <span class="term">Named Handles</span>
+                    </dt>
+                    <dd>
+                      <p>
+                      A <a id="id2525640" class="indexterm"></a><a id="named tag handle/"></a
+            ><a href="#index-entry-named tag handle"
+            ><i class="firstterm"
+            >named tag
+                      handle</i></a
+          > surrounds the non-empty name with
+                      <a id="id2525656" class="indexterm"></a><a id="! named handle/"></a
+            ><a href="#index-entry-! named handle"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</i></a
+          > characters. A handle
+                      name must only be used in a <a id="id2525677" class="indexterm"></a><a href="#tag shorthand/">shorthand</a> if an explicit
+                      &#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; directive has associated some prefix
+                      with it. The name of the handle is a <a id="id2525699" class="indexterm"></a><a href="#presentation detail/">presentation
+                      detail</a> and is not part of the <a id="id2525713" class="indexterm"></a><a href="#content/information model">node's
+                      content information</a>. In particular, the YAML
+                      <a id="id2525730" class="indexterm"></a><a href="#processor/">processor</a> need not
+                      preserve the handle name once <a id="id2525744" class="indexterm"></a><a href="#parse/">parsing</a> is completed.
+                    </p>
+                    </dd>
+                  </dl>
+                </div>
+                <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                  <tr>
+                    <td>
+                      <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                        <tr>
+                          <td align="left" valign="top" class="productioncounter">[98]</td>
+                          <td align="right" valign="top" class="productionlhs"><a id="c-named-tag-handle"></a>c-named-tag-handle</td>
+                          <td valign="top" class="productionseperator" align="center">
+                            <tt>::=</tt>
+                          </td>
+                          <td valign="top" class="productionrhs">
+                    <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                    <a href="#ns-word-char">ns-word-char</a>+
+                    <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                  </td>
+                          <td align="left" valign="top" class="productioncomment"> </td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+                </table>
+                <div class="example">
+                  <a id="id2525794"></a>
+                  <p class="title">
+                    <b>Example 4.31. Tag Handles</b>
+                  </p>
+                  <table class="simplelist" border="0" summary="Simple list">
+                    <tr>
+                      <td>
+<pre class="programlisting"><span class="database"># Explicitly specify default settings:<br />%TAG <tt class="filename">!</tt>     !
+%TAG <tt class="literal">!!</tt>    tag:yaml.org,2002:
+# Named handles have no default:
+%TAG <span class="property">!o!</span> tag:ben-kiki.org,2000:
+---
+- !foo "bar"
+- !!str "string"
+- !o!type "baz"
+</span></pre>
+                </td>
+                      <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !&lt;!foo&gt; "bar",
+  !&lt;tag:yaml.org,2002:str&gt; "string"
+  !&lt;tag:ben-kiki.org,2000:type&gt; "baz"
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-primary-tag-handle">c-primary-tag-handle</a></tt>
+  <tt class="literal"><a href="#c-secondary-tag-handle">c-secondary-tag-handle</a></tt>
+  <span class="property"><a href="#c-named-tag-handle">c-named-tag-handle</a></span>
+</pre>
+                </td>
+                    </tr>
+                  </table>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2525905"></a>4.3.2. Document Boundary Markers</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            YAML <a id="id2525913" class="indexterm"></a><a href="#stream/syntax">streams</a>
+            use <a id="id2525929" class="indexterm"></a><a id="document boundary marker/"></a
+            ><a href="#index-entry-document boundary marker"
+            ><i class="firstterm"
+            >document boundary
+            markers</i></a
+          > to allow more than one <a id="id2525944" class="indexterm"></a><a href="#document/syntax">document</a> to be
+            contained in the same <a id="id2525961" class="indexterm"></a><a href="#stream/syntax">stream</a>. Such markers are a <a id="id2525976" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and are
+            used exclusively to convey structure. A line beginning with
+            &#8220;<span class="quote"><b class="userinput"><tt>---</tt></b></span>&#8221; may be used to explicitly denote the beginning
+            of a new YAML <a id="id2525999" class="indexterm"></a><a href="#document/syntax">document</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[99]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-document-start"></a>c-document-start</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">-</span>&#8221; &#8220;<span class="quote">-</span>&#8221; &#8220;<span class="quote">-</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            When YAML is used as the format of a communication channel, it is
+            useful to be able to indicate the end of a <a id="id2526046" class="indexterm"></a><a href="#document/syntax">document</a> without
+            closing the <a id="id2526062" class="indexterm"></a><a href="#stream/syntax">stream</a>, independent of starting the
+            next <a id="id2526078" class="indexterm"></a><a href="#document/syntax">document</a>. Lacking such a marker, the
+            YAML <a id="id2526094" class="indexterm"></a><a href="#processor/">processor</a> reading the
+            <a id="id2526106" class="indexterm"></a><a href="#stream/syntax">stream</a> would
+            be forced to wait for the header of the next <a id="id2526122" class="indexterm"></a><a href="#document/syntax">document</a> (that may
+            be long time in coming) in order to detect the end of the previous
+            one. To support this scenario, a YAML <a id="id2526140" class="indexterm"></a><a href="#document/syntax">document</a> may be terminated by an
+            explicit end line denoted by &#8220;<span class="quote"><b class="userinput"><tt>...</tt></b></span>&#8221;, followed by
+            optional <a id="id2526163" class="indexterm"></a><a href="#comment/syntax">comments</a>. To ease the task of
+            concatenating YAML <a id="id2526180" class="indexterm"></a><a href="#stream/syntax">streams</a>, the end marker may be
+            repeated.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[100]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-document-end"></a>c-document-end</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                &#8220;<span class="quote">.</span>&#8221; &#8220;<span class="quote">.</span>&#8221; &#8220;<span class="quote">.</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[101]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-document-suffix"></a>l-document-suffix</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                ( <a href="#c-document-end">c-document-end</a>
+                <a href="#s-l-comments">s-l-comments</a> )+
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2526244"></a>
+              <p class="title">
+                <b>Example 4.32. Document Boundary Markers</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="filename">---</tt>&#8595;<br />foo
+<tt class="literal">...
+# Repeated end marker.
+...&#8595;</tt>
+<tt class="filename">---</tt>&#8595;
+bar
+# No end marker.
+<tt class="filename">---</tt>&#8595;
+baz
+<tt class="literal">...&#8595;</tt>
+</span></pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "foo"
+%YAML 1.1
+---
+!!str "bar"
+%YAML 1.1
+---
+!!str "baz"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-document-start">c-document-start</a></tt> <tt class="literal"><a href="#l-document-suffix">l-document-suffix</a></tt>
+</pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2526349"></a>4.3.3. Documents</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          A YAML <a id="id2526357" class="indexterm"></a><a id="document/syntax"></a
+            ><a href="#index-entry-document"
+            ><i class="firstterm"
+            >document</i></a
+          > is a single native data
+          structure <a id="id2526375" class="indexterm"></a><a href="#present/">presented</a> as a single
+          <a id="id2526387" class="indexterm"></a><a href="#root node/">root</a> <a id="id2526400" class="indexterm"></a><a href="#node/syntax">node</a>. <a id="id2526414" class="indexterm"></a><a href="#presentation detail/">Presentation details</a> such as <a id="id2526429" class="indexterm"></a><a href="#directive/syntax">directives</a>, <a id="id2526444" class="indexterm"></a><a href="#comment/syntax">comments</a>, <a id="id2526459" class="indexterm"></a><a href="#indentation space/">indentation</a> and <a id="id2526472" class="indexterm"></a><a href="#style/">styles</a> are not considered part of the
+          <a id="id2526485" class="indexterm"></a><a href="#content/information model">content
+          information</a> of the document.
+        </p>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">Explicit Documents</span>
+                </dt>
+                <dd>
+                  <p>
+                  An <a id="id2526515" class="indexterm"></a><a id="explicit document/"></a
+            ><a href="#index-entry-explicit document"
+            ><i class="firstterm"
+            >explicit
+                  document</i></a
+          > begins with a <a id="id2526530" class="indexterm"></a><a href="#document boundary marker/">document start marker</a> followed by
+                  the <a id="id2526545" class="indexterm"></a><a href="#presentation/">presentation</a> of
+                  the <a id="id2526558" class="indexterm"></a><a href="#root node/">root node</a>. The
+                  <a id="id2526571" class="indexterm"></a><a href="#node/syntax">node</a> may
+                  begin in the same line as the <a id="id2526587" class="indexterm"></a><a href="#document boundary marker/">document start marker</a>. If the
+                  explicit document's <a id="id2526602" class="indexterm"></a><a href="#node/syntax">node</a> is <a id="id2526617" class="indexterm"></a><a href="#completely empty node/">completely empty</a>,
+                  it is assumed to be an empty <a id="id2526633" class="indexterm"></a><a href="#plain style/syntax">plain scalar</a> with no specified
+                  <a id="id2526649" class="indexterm"></a><a href="#node property/">properties</a>.
+                  Optional <a id="id2526664" class="indexterm"></a><a href="#document boundary marker/">document
+                  end marker(s)</a> may follow the document.
+                </p>
+                </dd>
+              </dl>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[102]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-explicit-document"></a>l-explicit-document</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-document-start">c-document-start</a><br />
+                ( <a href="#s-l+block-node(n,c)">s-l+block-node(-1,block-in)</a>
+                | <a href="#s-l-empty-block">s-l-empty-block</a> )<br />
+                <a href="#l-document-suffix">l-document-suffix</a>?
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">Implicit Documents</span>
+                </dt>
+                <dd>
+                  <p>
+                  An <a id="id2526734" class="indexterm"></a><a id="implicit document/"></a
+            ><a href="#index-entry-implicit document"
+            ><i class="firstterm"
+            >implicit
+                  document</i></a
+          > does not begin with a <a id="id2526749" class="indexterm"></a><a href="#document boundary marker/">document start
+                  marker</a>. In this case, the <a id="id2526763" class="indexterm"></a><a href="#root node/">root node</a> must not be <a id="id2526777" class="indexterm"></a><a href="#present/">presented</a> as a <a id="id2526789" class="indexterm"></a><a href="#completely empty node/">completely empty
+                  node</a>. Again, optional <a id="id2526804" class="indexterm"></a><a href="#document boundary marker/">document end marker(s)</a> may follow
+                  the document.
+                </p>
+                </dd>
+              </dl>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[103]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-implicit-document"></a>l-implicit-document</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#s-ignored-space">s-ignored-space</a>*
+                <a href="#ns-l+block-node(n,c)">ns-l+block-node(-1,block-in)</a><br />
+                <a href="#l-document-suffix">l-document-suffix</a>?
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+          In general, the document's <a id="id2526858" class="indexterm"></a><a href="#node/syntax">node</a> is <a id="id2526873" class="indexterm"></a><a href="#indentation space/">indented</a> as if it has a parent <a id="id2526888" class="indexterm"></a><a href="#indentation space/">indented</a> at -1 spaces. Since a
+          <a id="id2526901" class="indexterm"></a><a href="#node/syntax">node</a> must be
+          more <a id="id2526916" class="indexterm"></a><a href="#indentation space/">indented</a> that its
+          parent <a id="id2526929" class="indexterm"></a><a href="#node/syntax">node</a>,
+          this allows the document's <a id="id2526945" class="indexterm"></a><a href="#node/syntax">node</a> to be <a id="id2526960" class="indexterm"></a><a href="#indentation space/">indented</a> at zero or more spaces. Note that <a id="id2526974" class="indexterm"></a><a href="#flow scalar style/syntax">flow scalar</a>
+          continuation lines must be <a id="id2526990" class="indexterm"></a><a href="#indentation space/">indented</a> by at least one space, even if their first
+          line is not <a id="id2527005" class="indexterm"></a><a href="#indentation space/">indented</a>.
+        </p>
+            <div class="example">
+              <a id="id2527018"></a>
+              <p class="title">
+                <b>Example 4.33. Documents</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="filename">"Root flow<br /> scalar"</tt>
+--- <tt class="literal">!!str &gt;
+ Root block
+ scalar</tt>
+---
+# Root collection:
+<tt class="literal">foo : bar
+... # Is optional.</tt>
+---
+# Explicit document may be empty.
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-implicit-document">l-implicit-document</a></tt> <tt class="literal"><a href="#l-explicit-document">l-explicit-document</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "Root flow scalar"
+%YAML 1.1
+---
+!!str "Root block scalar"
+%YAML 1.1
+---
+!!map {
+  ? !!str "foo"
+  : !!str "bar"
+}
+---
+!!str ""
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2527114"></a>4.3.4. Complete Stream</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            A sequence of bytes is a YAML character <a id="id2527122" class="indexterm"></a><a id="stream/syntax"></a
+            ><a href="#index-entry-stream"
+            ><i class="firstterm"
+            >stream</i></a
+          > if, taken as a whole, it
+            complies with the <a href="#l-yaml-stream"><b class="userinput"><tt>l-yaml-stream</tt></b></a>
+            production. The stream begins with a prefix containing an optional
+            <a id="id2527153" class="indexterm"></a><a href="#byte order mark/">byte order mark</a>
+            denoting its <a id="id2527167" class="indexterm"></a><a href="#character encoding/">character
+            encoding</a>, followed by optional <a id="id2527182" class="indexterm"></a><a href="#comment/syntax">comments</a>. Note that the stream may
+            contain no <a id="id2527198" class="indexterm"></a><a href="#document/syntax">documents</a>, even if it contains a
+            non-empty prefix. In particular, a stream containing no chareacters
+            is valid and contains no <a id="id2527215" class="indexterm"></a><a href="#document/syntax">documents</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[104]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-yaml-stream"></a>l-yaml-stream</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-byte-order-mark">c-byte-order-mark</a>?
+                <a href="#l-comment">l-comment</a>*<br />
+                ( <a href="#l-first-document">l-first-document</a>
+                <a href="#l-next-document">l-next-document</a>* )?
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2527268"></a>
+              <p class="title">
+                <b>Example 4.34. Empty Stream</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="filename">&#8660;# A stream may contain<br /># no documents.</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-yaml-stream">l-yaml-stream</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database"># This stream contains no<br /># documents, only comments.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <p>
+            The first <a id="id2527337" class="indexterm"></a><a href="#document/syntax">document</a> may be <a id="id2527353" class="indexterm"></a><a href="#implicit document/">implicit</a> (omit the <a id="id2527367" class="indexterm"></a><a href="#document boundary marker/">document start
+            marker</a>). In such a case it must not specify any <a id="id2527381" class="indexterm"></a><a href="#directive/syntax">directives</a> and
+            will be <a id="id2527397" class="indexterm"></a><a href="#parse/">parsed</a> using the default
+            settings. If the <a id="id2527410" class="indexterm"></a><a href="#document/syntax">document</a> is <a id="id2527425" class="indexterm"></a><a href="#explicit document/">explicit</a> (begins with an <a id="id2527440" class="indexterm"></a><a href="#document boundary marker/">document start
+            marker</a>), it may specify <a id="id2527455" class="indexterm"></a><a href="#directive/syntax">directives</a> to control its <a id="id2527470" class="indexterm"></a><a href="#parse/">parsing</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[105]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-first-document"></a>l-first-document</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                ( <a href="#l-implicit-document">l-implicit-document</a><br />
+                | ( <a href="#l-directive">l-directive</a>*
+                <a href="#l-explicit-document">l-explicit-document</a> ) )
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2527516"></a>
+              <p class="title">
+                <b>Example 4.35. First Document</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"># Implicit document. Root<br /># collection (mapping) node.
+<tt class="filename">foo : bar</tt>
+</span></pre>
+<pre class="programlisting"><span class="database"># Explicit document. Root<br /># scalar (literal) node.
+<tt class="filename">--- |
+ Text content</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-first-document">l-first-document</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "Text content\n"
+</span></pre>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "foo"
+  : !!str "bar"
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <p>
+            To ease the task of concatenating character streams, following
+            <a id="id2527618" class="indexterm"></a><a href="#document/syntax">documents</a>
+            may begin with a <a id="id2527634" class="indexterm"></a><a href="#byte order mark/">byte order
+            mark</a> and <a id="id2527648" class="indexterm"></a><a href="#comment/syntax">comments</a>, though the same <a id="id2527663" class="indexterm"></a><a href="#character encoding/">character encoding</a> must be
+            used through the stream. Each following <a id="id2527677" class="indexterm"></a><a href="#document/syntax">document</a> must be <a id="id2527692" class="indexterm"></a><a href="#explicit document/">explicit</a> (begin with a
+            <a id="id2527706" class="indexterm"></a><a href="#document boundary marker/">document start
+            marker</a>). If the <a id="id2527720" class="indexterm"></a><a href="#document/syntax">document</a> specifies no <a id="id2527735" class="indexterm"></a><a href="#directive/syntax">directives</a>, it is
+            <a id="id2527751" class="indexterm"></a><a href="#parse/">parsed</a> using the same settings
+            as the previous <a id="id2527764" class="indexterm"></a><a href="#document/syntax">document</a>. If the <a id="id2527780" class="indexterm"></a><a href="#document/syntax">document</a> does
+            specify any <a id="id2527795" class="indexterm"></a><a href="#directive/syntax">directives</a>, all <a id="id2527811" class="indexterm"></a><a href="#directive/syntax">directives</a> of
+            previous <a id="id2527826" class="indexterm"></a><a href="#document/syntax">documents</a>, if any, are ignored.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[106]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="l-next-document"></a>l-next-document</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-byte-order-mark">c-byte-order-mark</a>?
+                <a href="#l-comment">l-comment</a>*<br />
+                <a href="#l-directive">l-directive</a>*
+                <a href="#l-explicit-document">l-explicit-document</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2527879"></a>
+              <p class="title">
+                <b>Example 4.36. Next Documents</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">! "First document"<br /><tt class="filename">---
+!foo "No directives"</tt>
+<tt class="filename">%TAG ! !foo
+---
+!bar "With directives"</tt>
+<tt class="filename">%YAML 1.1
+---
+!baz "Reset settings"</tt>
+</span></pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "First document"
+---
+!&lt;!foo&gt; "No directives"
+---
+!&lt;!foobar&gt; "With directives"
+---
+!&lt;!baz&gt; "Reset settings"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-next-document">l-next-document</a></tt>
+</pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2527964"></a>4.4. Nodes</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+          Each <a id="id2527972" class="indexterm"></a><a id="node/syntax"></a
+            ><a href="#index-entry-node"
+            ><i class="firstterm"
+            >presentation
+          node</i></a
+          > may have two optional <a id="id2527989" class="indexterm"></a><a id="node property/"></a
+            ><a href="#index-entry-node property"
+            ><i class="firstterm"
+            >properties</i></a
+          >, <a id="id2528004" class="indexterm"></a><a href="#anchor/syntax">anchor</a> and <a id="id2528019" class="indexterm"></a><a href="#tag/syntax">tag</a>, in addition to its <a id="id2528033" class="indexterm"></a><a href="#content/syntax">content</a>. Node
+          properties may be specified in any order before the <a id="id2528050" class="indexterm"></a><a href="#content/syntax">node's content</a>, and
+          either or both may be omitted from the character <a id="id2528066" class="indexterm"></a><a href="#stream/syntax">stream</a>.
+        </p>
+          <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+            <tr>
+              <td>
+                <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                  <tr>
+                    <td align="left" valign="top" class="productioncounter">[107]</td>
+                    <td align="right" valign="top" class="productionlhs"><a id="c-ns-properties(n,c)"></a>c-ns-properties(n,c)</td>
+                    <td valign="top" class="productionseperator" align="center">
+                      <tt>::=</tt>
+                    </td>
+                    <td valign="top" class="productionrhs">
+                ( <a href="#c-ns-tag-property">c-ns-tag-property</a><br />
+                  (
+              <a href="#s-separate(n,c)">s-separate(n,c)</a>
+              <a href="#c-ns-anchor-property">c-ns-anchor-property</a> )? )<br />
+              | ( <a href="#c-ns-anchor-property">c-ns-anchor-property</a><br />
+                  (
+              <a href="#s-separate(n,c)">s-separate(n,c)</a>
+              <a href="#c-ns-tag-property">c-ns-tag-property</a> )? )
+            </td>
+                    <td align="left" valign="top" class="productioncomment"> </td>
+                  </tr>
+                </table>
+              </td>
+            </tr>
+          </table>
+          <div class="example">
+            <a id="id2528136"></a>
+            <p class="title">
+              <b>Example 4.37. Node Properties</b>
+            </p>
+            <table class="simplelist" border="0" summary="Simple list">
+              <tr>
+                <td>
+<pre class="programlisting"><span class="database"><span class="honorific"><span class="property"><tt class="literal">!!str</tt><br /> <tt class="filename">&amp;a1</tt></span></span>&#8595;
+  "foo" : <span class="honorific"><span class="property"><tt class="literal">!!str</tt></span></span> bar
+<span class="honorific"><span class="property"><tt class="filename">&amp;a2</tt></span></span> baz : *a1
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-ns-anchor-property">c-ns-anchor-property</a></tt> <tt class="literal"><a href="#c-ns-tag-property">c-ns-tag-property</a></tt>
+  <span class="property"><a href="#c-ns-properties(n,c)">c-ns-properties(n,c)</a></span>
+</pre>
+          </td>
+                <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? &amp;A1 !!str "foo"
+  : !!str "bar",
+  ? !!str &amp;A2 "baz"
+  : *a1
+}
+</span></pre>
+          </td>
+              </tr>
+            </table>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2528258"></a>4.4.1. Node Anchors</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            The <a id="id2528267" class="indexterm"></a><a id="anchor/syntax"></a
+            ><a href="#index-entry-anchor"
+            ><i class="firstterm"
+            >anchor
+            property</i></a
+          > marks a <a id="id2528284" class="indexterm"></a><a href="#node/syntax">node</a> for future reference. An anchor
+            is denoted by the <a id="id2528300" class="indexterm"></a><a id="&amp; anchor/"></a
+            ><a href="#index-entry-&amp; anchor"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>&amp;</tt></b></span>&#8221; indicator</i></a
+          >. An <a id="id2528320" class="indexterm"></a><a href="#alias/syntax">alias node</a> can then be
+            used to indicate additional inclusions of the anchored node by
+            specifying its anchor. An anchored node need not be referenced by
+            any <a id="id2528339" class="indexterm"></a><a href="#alias/syntax">alias
+            node</a>; in particular, it is valid for all <a id="id2528355" class="indexterm"></a><a href="#node/syntax">nodes</a> to be anchored.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[108]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-ns-anchor-property"></a>c-ns-anchor-property</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-anchor">&#8220;<span class="quote">&amp;</span>&#8221;</a>
+                <a href="#ns-anchor-name">ns-anchor-name</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <p>
+            Note that as a <a id="id2528401" class="indexterm"></a><a href="#serialization detail/">serialization detail</a>, the anchor name is
+            preserved in the <a id="id2528416" class="indexterm"></a><a href="#serialization/">serialization
+            tree</a>. However, it is not reflected in the <a id="id2528430" class="indexterm"></a><a href="#representation/">representation</a> graph and must
+            not be used to convey <a id="id2528443" class="indexterm"></a><a href="#content/information model">content information</a>. In
+            particular, the YAML <a id="id2528460" class="indexterm"></a><a href="#processor/">processor</a> need not preserve the
+            anchor name once the <a id="id2528474" class="indexterm"></a><a href="#representation/">representation</a> is <a id="id2528487" class="indexterm"></a><a href="#compose/">composed</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[109]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-anchor-name"></a>ns-anchor-name</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#ns-char">ns-char</a>+
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2528521"></a>
+              <p class="title">
+                <b>Example 4.38. Node Anchors</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">First occurence: <span class="honorific"><tt class="filename">&amp;<tt class="literal">anchor</tt></tt></span> Value<br />Second occurence: *<tt class="literal">anchor</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-ns-anchor-property">c-ns-anchor-property</a></tt>
+  <tt class="literal"><a href="#ns-anchor-name">ns-anchor-name</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "First occurence"
+  : &amp;A !!str "Value",
+  ? !!str "Second occurence"
+  : *A
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2528616"></a>4.4.2. Node Tags</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            The <a id="id2528624" class="indexterm"></a><a id="tag/syntax"></a
+            ><a href="#index-entry-tag"
+            ><i class="firstterm"
+            >tag
+            property</i></a
+          > identifies the type of the native data structure
+            <a id="id2528642" class="indexterm"></a><a href="#present/">presented</a> by the <a id="id2528655" class="indexterm"></a><a href="#node/syntax">node</a>. A tag is denoted
+            by the <a id="id2528670" class="indexterm"></a><a id="! tag indicator/"></a
+            ><a href="#index-entry-! tag indicator"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;
+            indicator</i></a
+          >. In contrast with <a id="id2528691" class="indexterm"></a><a href="#anchor/syntax">anchors</a>, tags are an inherent part of
+            the <a id="id2528708" class="indexterm"></a><a href="#representation/">representation</a>
+            graph.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[110]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-ns-tag-property"></a>c-ns-tag-property</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#c-verbatim-tag">c-verbatim-tag</a>
+                | <a href="#c-ns-shorthand-tag">c-ns-shorthand-tag</a><br />
+                | <a href="#c-ns-non-specific-tag">c-ns-non-specific-tag</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">Verbatim Tags</span>
+                </dt>
+                <dd>
+                  <p>
+                  A tag may be written <a id="id2528767" class="indexterm"></a><a id="verbatim tag/"></a
+            ><a href="#index-entry-verbatim tag"
+            ><i class="firstterm"
+            >verbatim</i></a
+          > by surrounding it with the <a id="id2528783" class="indexterm"></a><a id="&lt; &#8230; &gt; verbatim tag/"></a
+            ><a href="#index-entry-&lt; &#8230; &gt; verbatim tag"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>&lt;</tt></b></span>&#8221; and
+                  &#8220;<span class="quote"><b class="userinput"><tt>&gt;</tt></b></span>&#8221;</i></a
+          > characters. In this case, the
+                  YAML <a id="id2528812" class="indexterm"></a><a href="#processor/">processor</a> must
+                  deliver the verbatim tag as-is to the <a id="id2528825" class="indexterm"></a><a href="#application/">application</a>. In particular,
+                  verbatim tags are not subject to <a id="id2528839" class="indexterm"></a><a href="#tag resolution/">tag resolution</a>. A verbatim tag must
+                  either begin with a <a id="id2528854" class="indexterm"></a><a href="#! local tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a> (a <a id="id2528871" class="indexterm"></a><a href="#local tag/">local tag</a>) or be a valid URI (a <a id="id2528884" class="indexterm"></a><a href="#global tag/">global tag</a>).
+                </p>
+                </dd>
+              </dl>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[111]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-verbatim-tag"></a>c-verbatim-tag</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+                &#8220;<span class="quote">&lt;</span>&#8221;
+                <a href="#ns-uri-char">ns-uri-char</a>+
+                &#8220;<span class="quote">&gt;</span>&#8221;
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2528935"></a>
+              <p class="title">
+                <b>Example 4.39. Verbatim Tags</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"><tt class="filename">!&lt;tag:yaml.org,2002:str&gt;</tt> foo :<br />  <tt class="filename">!&lt;!bar&gt;</tt> baz
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-verbatim-tag">c-verbatim-tag</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !&lt;tag:yaml.org,2002:str&gt; "foo"
+  : !&lt;!bar&gt; "baz"
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="example">
+              <a id="id2529010"></a>
+              <p class="title">
+                <b>Example 4.40. Invalid Verbatim Tags</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="screen"><span class="database">- !&lt;<tt class="filename">!</tt>&gt; foo<br />- !&lt;<tt class="literal">$:?</tt>&gt; bar
+</span></pre>
+            </td>
+                  <td>
+<pre class="screen"><span class="database">ERROR:<br />- Verbatim tags aren't resolved,
+  so <tt class="filename">!</tt> is invalid.
+- The <tt class="literal">$:?</tt> tag is neither a global
+  URI tag nor a local tag starting
+  with &#8220;<span class="quote">!</span>&#8221;.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">Tag Shorthands</span>
+                </dt>
+                <dd>
+                  <p>
+                  A <a id="id2529094" class="indexterm"></a><a id="tag shorthand/"></a
+            ><a href="#index-entry-tag shorthand"
+            ><i class="firstterm"
+            >tag shorthand</i></a
+          >
+                  consists of a valid <a id="id2529110" class="indexterm"></a><a href="#tag handle/">tag
+                  handle</a> followed by a non-empty suffix. The <a id="id2529124" class="indexterm"></a><a href="#tag handle/">tag handle</a> must be associated
+                  with a <a id="id2529137" class="indexterm"></a><a href="#tag prefix/">prefix</a>, either
+                  by default or by using a <a id="id2529150" class="indexterm"></a><a href="#TAG directive/">&#8220;<span class="quote"><b class="userinput"><tt>TAG</tt></b></span>&#8221; directive</a>. The
+                  resulting <a id="id2529170" class="indexterm"></a><a href="#parse/">parsed</a> tag is
+                  the concatenation of the prefix and the suffix, and must
+                  either begin with <a id="id2529184" class="indexterm"></a><a href="#! local tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a> (a <a id="id2529202" class="indexterm"></a><a href="#local tag/">local tag</a>) or be a valid URI (a <a id="id2529215" class="indexterm"></a><a href="#global tag/">global tag</a>). When the <a id="id2529228" class="indexterm"></a><a href="#primary tag handle/">primary tag handle</a> is
+                  used, the suffix must not contain any <a id="id2529244" class="indexterm"></a><a href="#! named handle/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a>
+                  character, as this would cause the tag shorthand to be
+                  interpreted as having a <a id="id2529264" class="indexterm"></a><a href="#named tag handle/">named tag handle</a>. If the <a id="id2529277" class="indexterm"></a><a href="#! named handle/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a>
+                  character exists in the suffix of a tag using the <a id="id2529295" class="indexterm"></a><a href="#primary tag handle/">primary tag handle</a>, it
+                  must be <a id="id2529309" class="indexterm"></a><a href="#escaping in URI/">escaped</a>
+                  as <a id="id2529322" class="indexterm"></a><a href="#% escaping in URI/">&#8220;<span class="quote"><b class="userinput"><tt>%21</tt></b></span>&#8221;</a>, and the parser should
+                  expand this particular escape sequence before passing the tag
+                  to the application. This behavior is consistent with the URI
+                  character quoting rules (specifically, section 2.3 of <a href="http://www.ietf.org/rfc/rfc2396.txt" target="_top">RFC2396</a>),
+                  and ensures the choice of <a id="id2529353" class="indexterm"></a><a href="#tag handle/">tag
+                  handle</a> remains a <a id="id2529365" class="indexterm"></a><a href="#presentation/">presentation detail</a> and is
+                  not reflected in the <a id="id2529379" class="indexterm"></a><a href="#serialization/">serialization tree</a> (and
+                  hence the <a id="id2529393" class="indexterm"></a><a href="#representation/">representation</a> graph). In
+                  particular, the <a id="id2529407" class="indexterm"></a><a href="#tag handle/">tag
+                  handle</a> may be discarded once <a id="id2529420" class="indexterm"></a><a href="#parse/">parsing</a> is completed.
+                </p>
+                </dd>
+              </dl>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[112]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-ns-shorthand-tag"></a>c-ns-shorthand-tag</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  ( <a href="#c-primary-tag-handle">c-primary-tag-handle</a>
+                <a href="#ns-tag-char">ns-tag-char</a>+ )<br />
+                | ( <a href="#c-secondary-tag-handle">ns-secondary-tag-handle</a>
+                <a href="#ns-uri-char">ns-uri-char</a>+ )<br />
+                | ( <a href="#c-named-tag-handle">c-named-tag-handle</a>
+                <a href="#ns-uri-char">ns-uri-char</a>+ )
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2529487"></a>
+              <p class="title">
+                <b>Example 4.41. Tag Shorthands</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">%TAG !o! tag:ben-kiki.org,2000:<br />---
+- <tt class="filename">!local</tt> foo
+- <tt class="filename">!!str</tt> bar
+- <tt class="filename">!o!type</tt> baz
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-ns-shorthand-tag">c-ns-shorthand-tag</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !&lt;!local&gt; "foo",
+  !&lt;tag:yaml.org,2002:str&gt; "bar",
+  !&lt;tag:ben-kiki.org,2000:type&gt; "baz",
+]
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="example">
+              <a id="id2529570"></a>
+              <p class="title">
+                <b>Example 4.42. Invalid Shorthand Tags</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="screen"><span class="database">%TAG !o! tag:ben-kiki.org,2000:<br />---
+- <tt class="filename">!$a!</tt>b foo
+- <tt class="literal">!o!</tt> bar
+- <span class="property">!h!</span>type baz
+</span></pre>
+            </td>
+                  <td>
+<pre class="screen"><span class="database">ERROR:<br />- The <tt class="filename">!$a!</tt> looks like a handle.
+- The <tt class="literal">!o!</tt> handle has no suffix.
+- The <span class="property">!h!</span> handle wasn't declared.
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">Non-Specific Tags</span>
+                </dt>
+                <dd>
+                  <p>
+                  If a <a id="id2529663" class="indexterm"></a><a href="#node/syntax">node</a> has no tag property, it is
+                  assigned a <a id="id2529678" class="indexterm"></a><a href="#non-specific tag/">non-specific
+                  tag</a>: <a id="id2529692" class="indexterm"></a><a href="#? non-specific tag/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</a> for <a id="id2529711" class="indexterm"></a><a href="#plain style/syntax">plain scalars</a> and
+                  <a id="id2529727" class="indexterm"></a><a href="#! non-specific tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;</a> for all other <a id="id2529747" class="indexterm"></a><a href="#node/syntax">nodes</a>. <a id="id2529761" class="indexterm"></a><a href="#non-specific tag/">Non-specific tags</a> must
+                  be <a id="id2529775" class="indexterm"></a><a href="#tag resolution/">resolved</a> to a
+                  <a id="id2529788" class="indexterm"></a><a href="#specific tag/">specific tag</a> for a
+                  <a id="id2529803" class="indexterm"></a><a href="#complete representation/">complete
+                  representation</a> graph to be <a id="id2529818" class="indexterm"></a><a href="#compose/">composed</a>. It is also possible for
+                  the tag property to explicitly specify the <a id="id2529832" class="indexterm"></a><a href="#node/syntax">node</a> has the
+                  <a id="id2529846" class="indexterm"></a><a href="#! non-specific tag/">&#8220;<span class="quote"><b class="userinput"><tt>!</tt></b></span>&#8221;
+                  non-specific tag</a>. This is only useful for <a id="id2529866" class="indexterm"></a><a href="#plain style/syntax">plain
+                  scalars</a>, causing them to be <a id="id2529882" class="indexterm"></a><a href="#tag resolution/">resolved</a> as if they were non-<a id="id2529896" class="indexterm"></a><a href="#plain style/syntax">plain</a>
+                  (hence, by the common <a id="id2529912" class="indexterm"></a><a href="#tag resolution/">tag
+                  resolution</a> convention, as
+                  &#8220;<span class="quote"><b class="userinput"><tt>tag:yaml.org,2002:str</tt></b></span>&#8221;). There is no way to
+                  explicitly set the tag to the <a id="id2529934" class="indexterm"></a><a href="#? non-specific tag/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221; non-specific</a>
+                  tag. This is intentional.
+                </p>
+                </dd>
+              </dl>
+            </div>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[113]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-ns-non-specific-tag"></a>c-ns-non-specific-tag</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-tag">&#8220;<span class="quote">!</span>&#8221;</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2529980"></a>
+              <p class="title">
+                <b>Example 4.43. Non-Specific Tags</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database"># Assuming conventional resolution:<br />- "12"
+- 12
+- <tt class="filename">!</tt> 12
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-ns-non-specific-tag">c-ns-non-specific-tag</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !&lt;tag:yaml.org,2002:str&gt; "12",
+  !&lt;tag:yaml.org,2002:int&gt; "12",
+  !&lt;tag:yaml.org,2002:str&gt; "12",
+]
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2530054"></a>4.4.3. Node Content</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            <a id="id2530062" class="indexterm"></a><a id="content/syntax"></a
+            ><a href="#index-entry-content"
+            ><i class="firstterm"
+            >Node
+            content</i></a
+          > may be <a id="id2530079" class="indexterm"></a><a href="#present/">presented</a> in either a <a id="id2530091" class="indexterm"></a><a href="#flow style/syntax">flow style</a> or a
+            <a id="id2530107" class="indexterm"></a><a href="#block style/syntax">block
+            style</a>. <a id="id2530123" class="indexterm"></a><a href="#block style/syntax">Block content</a> always extends to the
+            end of a line and uses <a id="id2530138" class="indexterm"></a><a href="#indentation space/">indentation</a> to denote structure, while <a id="id2530153" class="indexterm"></a><a href="#flow style/syntax">flow content</a>
+            starts and ends at some non-space character within a line and uses
+            <a id="id2530169" class="indexterm"></a><a href="#indicator/">indicators</a> to denote
+            structure. Each collection <a id="id2530183" class="indexterm"></a><a href="#kind/">kind</a>
+            can be presented in a single <a id="id2530196" class="indexterm"></a><a href="#flow collection style/syntax">flow collection style</a> or a
+            single <a id="id2530213" class="indexterm"></a><a href="#block collection style/syntax">block collection style</a>. However, each
+            collection <a id="id2530230" class="indexterm"></a><a href="#kind/">kind</a> also provides
+            compact <a id="id2530243" class="indexterm"></a><a href="#in-line style/syntax">in-line</a> forms for common cases.
+            <a id="id2530260" class="indexterm"></a><a href="#scalar/syntax">Scalar
+            content</a> may be <a id="id2530275" class="indexterm"></a><a href="#present/">presented</a> in the <a id="id2530287" class="indexterm"></a><a href="#plain style/syntax">plain style</a> or
+            one of the two <a id="id2530303" class="indexterm"></a><a href="#quoted style/syntax">quoted styles</a> (the <a id="id2530319" class="indexterm"></a><a href="#single quoted style/syntax">single quoted
+            style</a> and the <a id="id2530335" class="indexterm"></a><a href="#double quoted style/syntax">double quoted style</a>). Regardless of
+            style, <a id="id2530352" class="indexterm"></a><a href="#scalar/syntax">scalar
+            content</a> must always be <a id="id2530367" class="indexterm"></a><a href="#indentation space/">indented</a> by at least one space. In contrast,
+            <a id="id2530382" class="indexterm"></a><a href="#collection/syntax">collection
+            content</a> need not be <a id="id2530397" class="indexterm"></a><a href="#indentation space/">indented</a> (note that the <a id="id2530411" class="indexterm"></a><a href="#indentation space/">indentation</a> of the first
+            <a id="id2530424" class="indexterm"></a><a href="#flow scalar style/syntax">flow
+            scalar</a> line is determined by the <a id="id2530440" class="indexterm"></a><a href="#block collection style/syntax">block collection</a> it
+            is nested in, if any).
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[114]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-flow-scalar(n,c)"></a>ns-flow-scalar(n,c)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#ns-plain(n,c)">c-plain(max(n,1),c)</a><br />
+                | <a href="#c-single-quoted(n,c)">c-single-quoted(max(n,1),c)</a><br />
+                | <a href="#c-double-quoted(n,c)">c-double-quoted(max(n,1),c)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[115]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-flow-collection(n,c)"></a>c-flow-collection(n,c)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-flow-sequence(n,c)">c-flow-sequence(n,c)</a>
+                | <a href="#c-flow-mapping(n,c)">c-flow-mapping(n,c)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[116]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="ns-flow-content(n,c)"></a>ns-flow-content(n,c)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#ns-flow-scalar(n,c)">ns-flow-scalar(n,c)</a>
+                | <a href="#c-flow-collection(n,c)">c-flow-collection(n,c)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[117]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-l+block-scalar(n)"></a>c-l+block-scalar(n)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-l+folded(n)">c-l+folded(max(n,0))</a>
+                | <a href="#c-l+literal(n)">c-l+literal(max(n,0))</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[118]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-l-block-collection(n,c)"></a>c-l-block-collection(n,c)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-l-block-sequence(n,c)">c-l-block-sequence(n,c)</a>
+                | <a href="#c-l-block-mapping(n)">c-l-block-mapping(n)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[119]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-l+block-content(n,c)"></a>c-l+block-content(n,c)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                  <a href="#c-l+block-scalar(n)">c-l+block-scalar(n)</a><br />
+                | <a href="#c-l-block-collection(n,c)">c-l-block-collection(&gt;n,c)</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2530616"></a>
+              <p class="title">
+                <b>Example 4.44. Mandatory Scalar Indentation</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">---<br />foo:
+<tt class="filename">·</tt>"bar
+<tt class="filename">·</tt>baz"
+---
+"foo
+<tt class="literal">·</tt>bar"
+---
+foo
+<tt class="literal">·</tt>bar
+--- |
+<tt class="literal">·</tt>foo
+...
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename">Normal "more-indented" indentation</tt>
+  <tt class="literal">Mandatory for "non-indented" scalar</tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "foo"
+  : !!str "bar baz"
+}
+%YAML 1.1
+---
+!!str "foo bar"
+%YAML 1.1
+---
+!!str "foo bar"
+%YAML 1.1
+---
+!!str "foo bar\n"
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="example">
+              <a id="id2530709"></a>
+              <p class="title">
+                <b>Example 4.45. Flow Content</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">---<br />scalars:
+  plain: !!str <tt class="filename">some text</tt>&#8595;
+  quoted:
+    single: <tt class="filename">'some text'</tt>&#8595;
+    double: <tt class="filename">"some text"</tt>&#8595;
+collections:
+  sequence: !!seq <span class="honorific"><tt class="literal">[ !str entry,
+    <tt class="constant"># Mapping entry:&#8595;</tt>
+      key: value ]</tt></span>&#8595;
+  mapping: <tt class="literal">{ key: value }</tt>&#8595;
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-flow-scalar(n,c)">ns-flow-scalar</a></tt>
+  <tt class="literal"><a href="#c-flow-collection(n,c)">c-flow-collection</a></tt>
+  <span class="property"><a href="#c-b-comment">not content</a></span>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />--- !!map {
+  ? !!str "scalars" : !!map {
+      ? !!str "plain"
+      : !!str "some text",
+      ? !!str "quoted"
+      : !!map {
+        ? !!str "single"
+        : !!str "some text",
+        ? !!str "double"
+        : !!str "some text"
+  } },
+  ? !!str "collections": : !!map {
+    ? !!str "sequence" : !!seq [
+      ? !!str "entry",
+      : !!map {
+        ? !!str "key" : !!str "value"
+    } ],
+    ? !!str "mapping": : !!map {
+      ? !!str "key" : !!str "value"
+} } }
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="example">
+              <a id="id2530847"></a>
+              <p class="title">
+                <b>Example 4.46. Block Content</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">block styles:<br />  scalars:
+    literal: !!str <tt class="filename">|
+      #!/usr/bin/perl
+      print "Hello, world!\n";&#8595;</tt>
+    folded: <tt class="filename">&gt;
+      This sentence
+      is false.&#8595;</tt>
+  collections: !!seq
+    sequence: !!seq <span class="honorific"><tt class="literal"><span class="property"># Entry:&#8595;</span>
+      - entry
+      <span class="property"># Mapping entry:&#8595;</span>
+      - key: value&#8595;</tt></span>
+    mapping: <tt class="literal">&#8595;
+      key: value&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-l+block-scalar(n)">c-l+block-scalar</a></tt>
+  <tt class="literal"><a href="#c-l-block-collection(n,c)">c-l-block-collection</a></tt>
+  <span class="property"><a href="#c-b-comment">not content</a></span>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "block styles" : !!map {
+    ? !!str "scalars" : !!map {
+      ? !!str "literal"
+      : !!str "#!!/usr/bin/perl\n\
+          print \"Hello,
+          world!!\\n\";\n",
+      ? !!str "folded"
+      : !!str "This sentence
+          is false.\n"
+    },
+    ? !!str "collections" : !!map {
+      ? !!str "sequence" : !!seq [
+        !!str "entry",
+        !!map {
+          ? !!str "key" : !!str "value"
+        }
+      ],
+      ? !!str "mapping" : !!map {
+        ? !!str "key" : !!str "value"
+} } } }
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2530982"></a>4.4.4. Alias Nodes</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            Subsequent occurrences of a previously <a id="id2530991" class="indexterm"></a><a href="#serialize/">serialized</a> node are <a id="id2531004" class="indexterm"></a><a href="#present/">presented</a> as <a id="id2531016" class="indexterm"></a><a id="alias/syntax"></a
+            ><a href="#index-entry-alias"
+            ><i class="firstterm"
+            >alias nodes</i></a
+          >, denoted by the <a id="id2531034" class="indexterm"></a><a id="* alias/"></a
+            ><a href="#index-entry-* alias"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>*</tt></b></span>&#8221; indicator</i></a
+          >. The first
+            occurrence of the <a id="id2531053" class="indexterm"></a><a href="#node/syntax">node</a> must be marked by an <a id="id2531069" class="indexterm"></a><a href="#anchor/syntax">anchor</a> to allow
+            subsequent occurrences to be <a id="id2531085" class="indexterm"></a><a href="#present/">presented</a> as alias nodes. An alias node
+            refers to the most recent preceding <a id="id2531099" class="indexterm"></a><a href="#node/syntax">node</a> having the same <a id="id2531114" class="indexterm"></a><a href="#anchor/syntax">anchor</a>. It is an
+            error to have an alias node use an <a id="id2531130" class="indexterm"></a><a href="#anchor/syntax">anchor</a> that does not previously occur
+            in the <a id="id2531146" class="indexterm"></a><a href="#document/syntax">document</a>. It is not an error to
+            specify an <a id="id2531162" class="indexterm"></a><a href="#anchor/syntax">anchor</a> that is not used by any alias
+            node. Note that an alias node must not specify any <a id="id2531179" class="indexterm"></a><a href="#node property/">properties</a> or <a id="id2531192" class="indexterm"></a><a href="#content/syntax">content</a>, as these
+            were already specified at the first occurrence of the <a id="id2531209" class="indexterm"></a><a href="#node/syntax">node</a>.
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[120]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-ns-alias-node"></a>c-ns-alias-node</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-alias">&#8220;<span class="quote">*</span>&#8221;</a>
+                <a href="#ns-anchor-name">ns-anchor-name</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2531251"></a>
+              <p class="title">
+                <b>Example 4.47. Alias Nodes</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">First occurence: &amp;<tt class="literal">anchor</tt> Value<br />Second occurence: <span class="honorific"><tt class="filename">*<tt class="literal">anchor</tt></tt></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-ns-alias-node">c-ns-alias-node</a></tt>
+  <tt class="literal"><a href="#ns-anchor-name">ns-anchor-name</a></tt>
+</pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "First occurence"
+  : &amp;A !!str "Value",
+  ? !!str "Second occurence"
+  : *A
+}
+</span></pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2531346"></a>4.4.5. Complete Nodes</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2531352"></a>4.4.5.1. Flow Nodes</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              A complete <a id="id2531360" class="indexterm"></a><a id="flow style/syntax"></a
+            ><a href="#index-entry-flow style"
+            ><i class="firstterm"
+            >flow
+              node</i></a
+          > is either an <a id="id2531378" class="indexterm"></a><a href="#alias/syntax">alias node</a> <a id="id2531393" class="indexterm"></a><a href="#present/">presenting</a> a second occurence of a
+              previous <a id="id2531406" class="indexterm"></a><a href="#node/syntax">node</a>, or consists of the <a id="id2531422" class="indexterm"></a><a href="#node property/">node properties</a> followed by the
+              <a id="id2531435" class="indexterm"></a><a href="#content/syntax">node's
+              content</a>. A <a id="id2531451" class="indexterm"></a><a href="#node/syntax">node</a> with empty <a id="id2531466" class="indexterm"></a><a href="#content/syntax">content</a> is
+              considered to be an empty <a id="id2531483" class="indexterm"></a><a href="#plain style/syntax">plain scalar</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[121]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-flow-node(n,c)"></a>ns-flow-node(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#c-ns-alias-node">c-ns-alias-node</a>
+                  | <a href="#ns-flow-content(n,c)">ns-flow-content(n,c)</a><br />
+                  | ( <a href="#c-ns-properties(n,c)">c-ns-properties(n,c)</a><br />
+                      (
+                    /* empty plain scalar content */<br />
+                      | (
+                    <a href="#s-separate(n,c)">s-separate(n,c)</a>
+                  <a href="#ns-flow-content(n,c)">ns-flow-content(n,c)</a> ) ) )
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2531550"></a>
+                <p class="title">
+                  <b>Example 4.48. Flow Nodes in Flow Context</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">[<br />  <span class="honorific"><tt class="filename"><tt class="literal">Without properties</tt></tt></span>,
+  <span class="honorific"><tt class="filename">&amp;anchor <tt class="literal">"Anchored"</tt></tt></span>,
+  <span class="honorific"><tt class="filename">!!str <tt class="literal">'Tagged'</tt></tt></span>,
+  <tt class="filename">*anchor</tt>, # Alias node
+  <tt class="filename">!!str</tt>,   # Empty plain scalar
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-flow-node(n,c)">ns-flow-node(n,c)</a></tt> <tt class="literal"><a href="#ns-flow-content(n,c)">ns-flow-content(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "Without properties",
+  &amp;A !!str "Anchored",
+  !!str "Tagged",
+  *A,
+  !!str "",
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Since both the <a id="id2531678" class="indexterm"></a><a href="#node property/">node's
+              properties</a> and <a id="id2531692" class="indexterm"></a><a href="#content/syntax">node content</a> are optional, this
+              allows for a <a id="id2531707" class="indexterm"></a><a id="completely empty node/"></a
+            ><a href="#index-entry-completely empty node"
+            ><i class="firstterm"
+            >completely
+              empty node</i></a
+          >. Completely empty nodes are only valid when
+              following some explicit <a id="id2531724" class="indexterm"></a><a href="#indicator/">indicator</a> for their existance.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[122]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="e-empty-flow"></a>e-empty-flow</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  /* empty plain scalar node */
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              In the examples, completely empty nodes are displayed as the
+              glyph &#8220;<span class="quote"><b class="userinput"><tt>°</tt></b></span>&#8221;. Note that this glyph corresponds to
+              a position in the characters <a id="id2531768" class="indexterm"></a><a href="#stream/syntax">stream</a> rather than to an actual
+              character.
+            </p>
+              <div class="example">
+                <a id="id2531786"></a>
+                <p class="title">
+                  <b>Example 4.49. Completely Empty Flow Nodes</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">{<br />  ? foo :<tt class="filename">°</tt>,
+  ?<tt class="filename">°</tt> : bar,
+  ?<tt class="filename">°</tt> :<tt class="filename">°</tt>,
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#e-empty-flow">e-empty-flow</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "foo"
+  : !!str "",
+  ? !!str "",
+  : !!str "bar",
+  ? !!str "",
+  : !!str ""
+}
+</span></pre>
+                </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2531873"></a>4.4.5.2. Block Nodes</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              A complete <a id="id2531881" class="indexterm"></a><a id="block style/syntax"></a
+            ><a href="#index-entry-block style"
+            ><i class="firstterm"
+            >block node</i></a
+          > consists of the <a id="id2531898" class="indexterm"></a><a href="#node property/">node's properties</a> followed by
+              the <a id="id2531912" class="indexterm"></a><a href="#content/syntax">node's
+              content</a>. In addition, a block node may consist of a
+              (possibly <a id="id2531929" class="indexterm"></a><a href="#completely empty node/">completely
+              empty</a>) <a id="id2531943" class="indexterm"></a><a href="#flow style/syntax">flow node</a> followed by a <a id="id2531959" class="indexterm"></a><a href="#line break character/">line break</a> (with
+              optional <a id="id2531972" class="indexterm"></a><a href="#comment/syntax">comments</a>).
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[123]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l+flow-in-block(n,c)"></a>ns-l+flow-in-block(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-flow-node(n,c)">ns-flow-node(n+1,flow-out)</a>
+                  <a href="#s-l-comments">s-l-comments</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[124]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l+block-in-block(n,c)"></a>ns-l+block-in-block(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#c-ns-properties(n,c)">c-ns-properties(n+1,c)</a>
+                  <a href="#s-separate(n,c)">s-separate(n+1,c)</a> )?<br />
+                  <a href="#c-l+block-content(n,c)">c-l+block-content(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[125]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l+block-node(n,c)"></a>ns-l+block-node(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#ns-l+block-in-block(n,c)">ns-l+block-in-block(n,c)</a><br />
+                  | <a href="#ns-l+flow-in-block(n,c)">ns-l+flow-in-block(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[126]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l+block-node(n,c)"></a>s-l+block-node(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-separate(n,c)">s-separate(n+1,c)</a>
+                  <a href="#ns-l+block-node(n,c)">ns-l+block-node(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2532095"></a>
+                <p class="title">
+                  <b>Example 4.50. Block Nodes</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">-<span class="honorific"><span class="property">·<tt class="filename">"flow in block"&#8595;</tt></span></span><br />-<span class="honorific"><span class="property">·<tt class="literal">&gt;
+ Block scalar&#8595;</tt></span></span>
+-<span class="honorific"><span class="property">·<tt class="literal">!!map # Block collection
+  foo : bar&#8595;</tt></span></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-l+flow-in-block(n,c)">ns-l+flow-in-block(n,c)</a></tt>
+  <tt class="literal"><a href="#ns-l+block-in-block(n,c)">ns-l+block-in-block(n,c)</a></tt>
+  <span class="property"><a href="#s-l+block-node(n,c)">s-l+block-node(n,c)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "",
+  !!map {
+    ? !!str "foo"
+    : !!str "",
+    ? !!str "",
+    : !!str "bar",
+    ? !!str "",
+    : !!str ""
+  }
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              A block node always spans to the end of the line, even when
+              <a id="id2532221" class="indexterm"></a><a href="#completely empty node/">completely
+              empty</a>. <a id="id2532236" class="indexterm"></a><a href="#completely empty node/">Completely empty</a> block nodes may only appear when
+              there is some explicit <a id="id2532251" class="indexterm"></a><a href="#indicator/">indicator</a> for their existance.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[127]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l-empty-block"></a>s-l-empty-block</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#e-empty-flow">e-empty-flow</a>
+                  <a href="#s-l-comments">s-l-comments</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2532289"></a>
+                <p class="title">
+                  <b>Example 4.51. Completely Empty Block Nodes</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">seq:<br />-<tt class="filename">° # Empty plain scalar&#8595;</tt>
+- ? foo
+  :<tt class="filename">°&#8595;</tt>
+  ?<tt class="filename">°&#8595;</tt>
+  : bar,
+  ?<tt class="filename">°&#8595;</tt>
+  :<tt class="filename">°&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-l-empty-block">s-l-empty-block</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "",
+  !!map {
+    ? !!str "foo"
+    : !!str "",
+    ? !!str "",
+    : !!str "bar",
+    ? !!str "",
+    : !!str ""
+  }
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2532386"></a>4.5. Scalar Styles</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        YAML provides a rich set of <a id="id2532395" class="indexterm"></a><a id="scalar/syntax"></a
+            ><a href="#index-entry-scalar"
+            ><i class="firstterm"
+            >scalar styles</i></a
+          > to choose from, depending
+        upon the readability requirements: three <a id="id2532414" class="indexterm"></a><a href="#flow scalar style/syntax">scalar flow styles</a> (the <a id="id2532430" class="indexterm"></a><a href="#plain style/syntax">plain style</a> and the
+        two <a id="id2532446" class="indexterm"></a><a id="quoted style/syntax"></a
+            ><a href="#index-entry-quoted style"
+            ><i class="firstterm"
+            >quoted
+        styles</i></a
+          >: <a id="id2532462" class="indexterm"></a><a href="#single quoted style/syntax">single quoted</a> and <a id="id2532478" class="indexterm"></a><a href="#double quoted style/syntax">double quoted</a>), and two
+        <a id="id2532495" class="indexterm"></a><a href="#block scalar style/syntax">scalar block
+        styles</a> (the <a id="id2532510" class="indexterm"></a><a href="#literal style/syntax">literal style</a> and the <a id="id2532526" class="indexterm"></a><a href="#folded style/syntax">folded style</a>).
+        <a id="id2532542" class="indexterm"></a><a href="#comment/syntax">Comments</a> may
+        precede or follow scalar content, but must not appear inside it. Scalar
+        node style is a <a id="id2532559" class="indexterm"></a><a href="#presentation detail/">presentation
+        detail</a> and must not be used to convey <a id="id2532572" class="indexterm"></a><a href="#content/information model">content
+        information</a>, with the exception that <a id="id2532589" class="indexterm"></a><a href="#non-specific tag/">untagged</a> <a id="id2532602" class="indexterm"></a><a href="#plain style/syntax">plain scalars</a> are <a id="id2532618" class="indexterm"></a><a href="#tag resolution/">resolved</a> in a distinct way.
+      </p>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2532632"></a>4.5.1. Flow Scalar Styles</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          All <a id="id2532640" class="indexterm"></a><a id="flow scalar style/syntax"></a
+            ><a href="#index-entry-flow scalar style"
+            ><i class="firstterm"
+            >flow
+          scalar styles</i></a
+          > may span multiple lines, except when used
+          in <a id="id2532659" class="indexterm"></a><a href="#simple key/">simple keys</a>. Flow scalars
+          are subject to (flow) <a id="id2532672" class="indexterm"></a><a href="#line folding/">line
+          folding</a>. This allows flow scalar content to be broken
+          anywhere a single space character (<b class="userinput"><tt>#x20</tt></b>)
+          separates non-space characters, at the cost of requiring an <a id="id2532694" class="indexterm"></a><a href="#empty line/">empty line</a> to <a id="id2532706" class="indexterm"></a><a href="#present/">present</a> each line feed character.
+        </p>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2532720"></a>4.5.1.1. Double Quoted</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The <a id="id2532729" class="indexterm"></a><a id="double quoted style/syntax"></a
+            ><a href="#index-entry-double quoted style"
+            ><i class="firstterm"
+            >double quoted style</i></a
+          > is specified by
+              surrounding <a id="id2532747" class="indexterm"></a><a id="&quot; double quoted style/"></a
+            ><a href="#index-entry-&quot; double quoted style"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>"</tt></b></span>&#8221; indicators</i></a
+          >. This is the only
+              <a id="id2532768" class="indexterm"></a><a href="#scalar/syntax">scalar
+              style</a> capable of expressing arbitrary strings,
+              by using <a id="id2532784" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\</tt></b></span>&#8221;</a> <a id="id2532803" class="indexterm"></a><a href="#escaping in double quoted style/">escape sequences</a>. Therefore, the
+              <a id="id2532817" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\</tt></b></span>&#8221;</a> and &#8220;<span class="quote"><b class="userinput"><tt>"</tt></b></span>&#8221;
+              characters must also be <a id="id2532843" class="indexterm"></a><a href="#\ escaping in double quoted style/">escaped</a> when present in double quoted
+              content. Note it is an error for double quoted content to contain
+              invalid <a id="id2532860" class="indexterm"></a><a href="#escaping in double quoted style/">escape
+              sequences</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[128]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-double-char"></a>nb-double-char</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#nb-char">nb-char</a>
+                  - <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                  - <a href="#c-double-quote">&#8220;<span class="quote">"</span>&#8221;</a> )
+                  | <a href="#ns-esc-char">ns-esc-char</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[129]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-double-char"></a>ns-double-char</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-double-char">nb-double-char</a>
+                  - <a href="#s-white">s-white</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Double quoted scalars are restricted to a single line when
+              contained inside a <a id="id2532940" class="indexterm"></a><a href="#simple key/">simple
+              key</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[130]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-double-quoted(n,c)"></a>c-double-quoted(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-double-quote">&#8220;<span class="quote">"</span>&#8221;</a>
+                  <a href="#nb-double-text(n,c)">nb-double-text(n,c)</a>
+                  <a href="#c-double-quote">&#8220;<span class="quote">"</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[131]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-double-text(n,c)"></a>nb-double-text(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">c</tt> = flow-out &#8658;
+                  <a href="#nb-double-any(n)">nb-double-any(n)</a><br />
+                  <tt class="varname">c</tt> = flow-in  &#8658;
+                  <a href="#nb-double-any(n)">nb-double-any(n)</a><br />
+                  <tt class="varname">c</tt> = flow-key &#8658;
+                  <a href="#nb-double-single">nb-double-single</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[132]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-double-any(n)"></a>nb-double-any(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-double-single">nb-double-single</a>
+                  | <a href="#nb-double-multi(n)">nb-double-multi(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2533054"></a>
+                <p class="title">
+                  <b>Example 4.52. Double Quoted Scalars</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><span class="honorific"><span class="property">"<tt class="filename">simple key</tt>"</span></span> : {<br />  <span class="honorific"><span class="property">"<tt class="filename">also simple</tt>"</span></span> : value,
+  ? <span class="honorific"><span class="property">"<tt class="literal">not a
+  simple key</tt>"</span></span> : <span class="honorific"><span class="property">"<tt class="literal">any
+  value</tt>"</span></span>
+}
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#nb-double-single">nb-double-single</a></tt> <tt class="literal"><a href="#nb-double-multi(n)">nb-double-multi(n)</a></tt>
+  <span class="property"><a href="#c-double-quoted(n,c)">c-double-quoted(n,c)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "simple key"
+  : !!map {
+    ? !!str "also simple"
+    : !!str "value",
+    ? !!str "not a simple key"
+    : !!str "any value"
+  }
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              A single line double quoted scalar is a sequence of (possibly
+              <a id="id2533194" class="indexterm"></a><a href="#escaping in double quoted style/">escaped</a>) non-<a id="id2533209" class="indexterm"></a><a href="#line break character/">break</a> Unicode characters. All characters are
+              considered <a id="id2533224" class="indexterm"></a><a href="#content/syntax">content</a>, including any leading or
+              trailing <a id="id2533240" class="indexterm"></a><a href="#white space/">white space</a>
+              characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[133]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-double-single"></a>nb-double-single</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-double-char">nb-double-char</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              In a multi-line double quoted scalar, <a id="id2533278" class="indexterm"></a><a href="#line break character/">line breaks</a> are subject to flow line
+              <a id="id2533292" class="indexterm"></a><a href="#line folding/">folding</a>, and any
+              trailing <a id="id2533306" class="indexterm"></a><a href="#white space/">white space</a> is
+              excluded from the <a id="id2533319" class="indexterm"></a><a href="#content/syntax">content</a>. However, an <a id="id2533334" class="indexterm"></a><a id="escaped (ignored) line break/"></a
+            ><a href="#index-entry-escaped (ignored) line break"
+            ><i class="firstterm"
+            >escaped line
+              break</i></a
+          > (using a <a id="id2533350" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\</tt></b></span>&#8221;</a>) is excluded from the
+              <a id="id2533370" class="indexterm"></a><a href="#content/syntax">content</a>,
+              while <a id="id2533386" class="indexterm"></a><a href="#white space/">white space</a>
+              preceding it is preserved. This allows double quoted content to
+              be broken at arbitrary positions.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[134]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l-double-folded(n)"></a>s-l-double-folded(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-white">s-ignored-white</a>*
+                  <a href="#b-l-folded-any(n,s)">b-l-folded-any(n,double)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[135]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l-double-escaped(n)"></a>s-l-double-escaped(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-white">s-white</a>*
+                  <a href="#c-escape">&#8220;<span class="quote">\</span>&#8221;</a>
+                  <a href="#b-ignored-any">b-ignored-any</a><br />
+                  <a href="#l-empty(n,s)">l-empty(n,double)</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[136]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l-double-break(n)"></a>s-l-double-break(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-l-double-folded(n)">s-l-double-folded(n)</a>
+                  | <a href="#s-l-double-escaped(n)">s-l-double-escaped(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2533487"></a>
+                <p class="title">
+                  <b>Example 4.53. Double Quoted Line Breaks</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> "as space<span class="honorific"><tt class="filename"><span class="property">&#8594;</span>&#8595;</tt></span><br /> trimmed<span class="honorific"><tt class="filename"><span class="property">·</span>&#8595;
+&#8595;</tt></span>
+ specific<tt class="filename">&#8659;
+&#8595;</tt>
+ escaped<span class="honorific"><tt class="literal"><tt class="constant">&#8594;</tt>\¶
+·&#8595;</tt></span>
+ none"
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "as space \
+  trimmed\n\
+  specific\L\n\
+  escaped\t\
+  none"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-l-double-folded(n)">s-l-double-folded(n)</a></tt> <tt class="literal"><a href="#s-l-double-escaped(n)">s-l-double-escaped(n)</a></tt>
+  <span class="property"><a href="#s-ignored-white">s-ignored-white</a></span>      <tt class="constant"><a href="#s-white">s-white (Content)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              A multi-line double quoted scalar consists of a (possibly empty)
+              first line, any number of inner lines, and a final (possibly
+              empty) last line.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[137]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-double-multi(n)"></a>nb-double-multi(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-l-double-first(n)">nb-l-double-first(n)</a><br />
+                  <a href="#l-double-inner(n)">l-double-inner(n)</a>*<br />
+                  <a href="#s-nb-double-last(n)">s-nb-double-last(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Leading <a id="id2533663" class="indexterm"></a><a href="#white space/">white space</a> in
+              the first line is considered <a id="id2533677" class="indexterm"></a><a href="#content/syntax">content</a> only if followed by a
+              non-space character or an escaped (ignored) line break.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[138]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-l-double-first(n)"></a>nb-l-double-first(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#nb-double-char">nb-double-char</a>*
+                  <a href="#ns-double-char">ns-double-char</a> )?<br />
+                  <a href="#s-l-double-break(n)">s-l-double-break(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2533727"></a>
+                <p class="title">
+                  <b>Example 4.54. First Double Quoted Line</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- "<tt class="filename">&#8595;</tt><br />  last"
+- "<span class="honorific"><tt class="filename"><tt class="literal">·&#8594;</tt>&#8595;</tt></span>
+  last"
+- "<tt class="filename">·&#8594;first&#8595;</tt>
+  last"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#nb-l-double-first(n)">nb-l-double-first(n)</a></tt> <tt class="literal"><a href="#s-ignored-white">s-ignored-white</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str " last",
+  !!str " last",
+  !!str " \tfirst last",
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              All leading and trailing <a id="id2533826" class="indexterm"></a><a href="#white space/">white
+              space</a> of an inner lines are excluded from the <a id="id2533840" class="indexterm"></a><a href="#content/syntax">content</a>. Note that
+              such while <a id="id2533856" class="indexterm"></a><a href="#ignored line prefix/">prefix white
+              space</a> may contain <a id="id2533871" class="indexterm"></a><a href="#tab/">tab</a>
+              characters, line <a id="id2533884" class="indexterm"></a><a href="#indentation space/">indentation</a> is restricted to space characters
+              only. It is possible to force considering leading <a id="id2533899" class="indexterm"></a><a href="#white space/">white space</a> as <a id="id2533912" class="indexterm"></a><a href="#content/syntax">content</a> by
+              <a id="id2533927" class="indexterm"></a><a href="#escaping in double quoted style/">escaping</a> the first character (<a id="id2533942" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\·</tt></b></span>&#8221;</a>, <a id="id2533960" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\&#8594;</tt></b></span>&#8221;</a> or <a id="id2533979" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\t</tt></b></span>&#8221;</a>).
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[139]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-double-inner(n)"></a>l-double-inner(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,double)</a>
+                  <a href="#ns-double-char">ns-double-char</a><br />
+                  ( <a href="#nb-double-char">nb-double-char</a>*
+                    <a href="#ns-double-char">ns-double-char</a> )?<br />
+                  <a href="#s-l-double-break(n)">s-l-double-break(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2534042"></a>
+                <p class="title">
+                  <b>Example 4.55. Inner Double Quoted Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> "first<br /><span class="honorific"><tt class="filename"><tt class="literal">·&#8594;</tt>inner 1<span class="property">&#8594;&#8595;</span></tt></span>
+<span class="honorific"><tt class="filename"><tt class="literal">·</tt>\·inner 2<span class="property">·\&#8595;</span></tt></span>
+ last"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-double-inner(n)">l-double-inner(n)</a></tt>
+  <tt class="literal"><a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,s)</a></tt> <span class="property"><a href="#s-l-double-break(n)">s-l-double-break(n)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "first \
+  inner 1  \
+  inner 2 \
+  last"
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              The leading <a id="id2534163" class="indexterm"></a><a href="#ignored line prefix/">prefix</a> <a id="id2534177" class="indexterm"></a><a href="#white space/">white
+              space</a> of the last line is stripped in the same way as
+              for inner lines. Trailing <a id="id2534192" class="indexterm"></a><a href="#white space/">white
+              space</a> is considered <a id="id2534204" class="indexterm"></a><a href="#content/syntax">content</a> only if preceded by a
+              non-space character.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[140]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-nb-double-last(n)"></a>s-nb-double-last(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,double)</a><br />
+                  ( <a href="#ns-double-char">ns-double-char</a>
+                    <a href="#nb-double-char">nb-double-char</a>* )?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2534255"></a>
+                <p class="title">
+                  <b>Example 4.56. Last Double Quoted Line</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- "first<br /><span class="honorific"><tt class="filename"><tt class="literal">··&#8594;</tt>"</tt></span>
+- "first
+
+<span class="honorific"><tt class="filename"><tt class="literal">··&#8594;</tt>last"</tt></span>
+- "first
+ inner
+<span class="honorific"><tt class="filename"><tt class="literal">·</tt>\·&#8594;last"</tt></span>
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "first ",
+  !!str "first\nlast",
+  !!str "first inner  \tlast",
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-nb-double-last(n)">s-nb-double-last(n)</a></tt>
+  <tt class="literal"><a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,s)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2534365"></a>4.5.1.2. Single Quoted</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The <a id="id2534373" class="indexterm"></a><a id="single quoted style/syntax"></a
+            ><a href="#index-entry-single quoted style"
+            ><i class="firstterm"
+            >single quoted style</i></a
+          > is specified by
+              surrounding <a id="id2534392" class="indexterm"></a><a id="' single quoted style/"></a
+            ><a href="#index-entry-' single quoted style"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>'</tt></b></span>&#8221; indicators</i></a
+          >. Therefore, within
+              a single quoted scalar such characters need to be repeated. This
+              is the only form of <a id="id2534415" class="indexterm"></a><a id="escaping in single quoted style/"></a
+            ><a href="#index-entry-escaping in single quoted style"
+            ><i class="firstterm"
+            >escaping</i></a
+          > performed in single quoted scalars. In
+              particular, the <a id="id2534432" class="indexterm"></a><a href="#\ escaping in double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>\</tt></b></span>&#8221;</a> and <a id="id2534450" class="indexterm"></a><a href="#&quot; double quoted style/">&#8220;<span class="quote"><b class="userinput"><tt>"</tt></b></span>&#8221;</a> characters may
+              be freely used. This restricts single quoted scalars to <a id="id2534470" class="indexterm"></a><a href="#printable character/">printable</a> characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[141]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-quoted-quote"></a>c-quoted-quote</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-single-quote">&#8220;<span class="quote">'</span>&#8221;</a>
+                  <a href="#c-single-quote">&#8220;<span class="quote">'</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[142]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-single-char"></a>nb-single-char</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#nb-char">nb-char</a>
+                  - <a href="#c-single-quote">&#8220;<span class="quote">"</span>&#8221;</a> )
+                  | <a href="#c-quoted-quote">c-quoted-quote</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[143]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-single-char"></a>ns-single-char</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-single-char">nb-single-char</a>
+                  - <a href="#s-white">s-white</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2534564"></a>
+                <p class="title">
+                  <b>Example 4.57. Single Quoted Quotes</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> 'here<tt class="filename">''</tt>s to "quotes"'<br /></span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-quoted-quote">single-quoted-quote</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "here's to \"quotes\""
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Single quoted scalars are restricted to a single line when
+              contained inside a <a id="id2534636" class="indexterm"></a><a href="#simple key/">simple
+              key</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[144]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-single-quoted(n,c)"></a>c-single-quoted(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-single-quote">&#8220;<span class="quote">'</span>&#8221;</a>
+                  <a href="#nb-single-text(n,c)">nb-single-text(n,c)</a>
+                  <a href="#c-single-quote">&#8220;<span class="quote">'</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[145]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-single-text(n,c)"></a>nb-single-text(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">c</tt> = flow-out &#8658;
+                  <a href="#nb-single-any(n)">nb-single-any(n)</a><br />
+                  <tt class="varname">c</tt> = flow-in  &#8658;
+                  <a href="#nb-single-any(n)">nb-single-any(n)</a><br />
+                  <tt class="varname">c</tt> = flow-key &#8658;
+                  <a href="#nb-single-single">nb-single-single(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[146]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-single-any(n)"></a>nb-single-any(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-single-single">nb-single-single(n)</a>
+                  | <a href="#nb-single-multi(n)">nb-single-multi(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2534749"></a>
+                <p class="title">
+                  <b>Example 4.58. Single Quoted Scalars</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><span class="honorific"><span class="property">'<tt class="filename">simple key</tt>'</span></span> : {<br />  <span class="honorific"><span class="property">'<tt class="filename">also simple</tt>'</span></span> : value,
+  ? <span class="honorific"><span class="property">'<tt class="literal">not a
+  simple key</tt>'</span></span> : <span class="honorific"><span class="property">'<tt class="literal">any
+  value</tt>'</span></span>
+}
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#nb-single-single">nb-single-single</a></tt> <tt class="literal"><a href="#nb-single-multi(n)">nb-single-multi(n)</a></tt>
+  <span class="property"><a href="#c-single-quoted(n,c)">c-single-quoted(n,c)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "simple key"
+  : !!map {
+    ? !!str "also simple"
+    : !!str "value",
+    ? !!str "not a simple key"
+    : !!str "any value"
+  }
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              A single line single quoted scalar is a sequence of non-<a id="id2534889" class="indexterm"></a><a href="#line break character/">break</a> <a id="id2534903" class="indexterm"></a><a href="#printable character/">printable</a> characters. All
+              characters are considered <a id="id2534917" class="indexterm"></a><a href="#content/syntax">content</a>, including any leading or
+              trailing <a id="id2534933" class="indexterm"></a><a href="#white space/">white space</a>
+              characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[147]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-single-single"></a>nb-single-single(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-single-char">nb-single-char</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              In a multi-line single quoted scalar, <a id="id2534971" class="indexterm"></a><a href="#line break character/">line breaks</a> are subject to (flow)
+              <a id="id2534986" class="indexterm"></a><a href="#line folding/">line folding</a>, and any
+              trailing <a id="id2534999" class="indexterm"></a><a href="#white space/">white space</a> is
+              excluded from the <a id="id2535013" class="indexterm"></a><a href="#content/syntax">content</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[148]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l-single-break(n)"></a>s-l-single-break(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-white">s-ignored-white</a>*
+                  <a href="#b-l-folded-any(n,s)">b-l-folded-any(n,single)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2535055"></a>
+                <p class="title">
+                  <b>Example 4.59. Single Quoted Line Breaks</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> 'as space<span class="honorific"><tt class="filename"><span class="property">&#8594;</span>&#8595;</tt></span><br /> trimmed<span class="honorific"><tt class="filename"><span class="property">·</span>&#8595;
+&#8595;</tt></span>
+ specific<tt class="filename">&#8659;
+&#8595;</tt>
+ none'
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "as space \
+  trimmed\n\
+  specific\L\n\
+  none"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-l-single-break(n)">s-l-single-break(n)</a></tt>
+  <span class="property"><a href="#s-ignored-white">s-ignored-white</a></span> <tt class="constant"><a href="#s-white">s-white (Content)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              A multi-line single quoted scalar consists of a (possibly empty)
+              first line, any number of inner lines, and a final (possibly
+              empty) last line.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[149]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-single-multi(n)"></a>nb-single-multi(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-l-single-first(n)">nb-l-single-first(n)</a><br />
+                  <a href="#l-single-inner(n)">l-single-inner(n)</a>*<br />
+                  <a href="#s-nb-single-last(n)">s-nb-single-last(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Leading <a id="id2535207" class="indexterm"></a><a href="#white space/">white space</a> in
+              the first line is considered <a id="id2535220" class="indexterm"></a><a href="#content/syntax">content</a> only if followed by a
+              non-space character.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[150]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-l-single-first(n)"></a>nb-l-single-first(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#nb-single-char">nb-single-char</a>*
+                  <a href="#ns-single-char">ns-single-char</a> )?<br />
+                  <a href="#s-l-single-break(n)">s-l-single-break(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2535270"></a>
+                <p class="title">
+                  <b>Example 4.60. First Single Quoted Line</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- '<tt class="filename">&#8595;</tt><br />  last'
+- '<span class="honorific"><tt class="filename"><tt class="literal">·&#8594;</tt>&#8595;</tt></span>
+  last'
+- '<tt class="filename">·&#8594;first&#8595;</tt>
+  last'
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#nb-l-single-first(n)">nb-l-single-first(n)</a></tt> <tt class="literal"><a href="#s-ignored-white">s-ignored-white</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str " last",
+  !!str " last",
+  !!str " \tfirst last",
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              All leading and trailing <a id="id2535369" class="indexterm"></a><a href="#white space/">white
+              space</a> of inner lines is excludced from the <a id="id2535383" class="indexterm"></a><a href="#content/syntax">content</a>. Note that
+              while <a id="id2535399" class="indexterm"></a><a href="#ignored line prefix/">prefix white
+              space</a> may contain <a id="id2535413" class="indexterm"></a><a href="#tab/">tab</a>
+              characters, line <a id="id2535426" class="indexterm"></a><a href="#indentation space/">indentation</a> is restricted to space characters
+              only. Unlike <a id="id2535441" class="indexterm"></a><a href="#double quoted style/syntax">double quoted scalars</a>, it is
+              impossible to force the inclusion of the leading or trailing
+              spaces in the <a id="id2535457" class="indexterm"></a><a href="#content/syntax">content</a>. Therefore, single quoted
+              scalars lines can only be broken where a single space character
+              separates two non-space characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[151]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-single-inner(n)"></a>l-single-inner(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,single)</a>
+                  <a href="#ns-single-char">ns-single-char</a><br />
+                  ( <a href="#nb-single-char">nb-single-char</a>*
+                    <a href="#ns-single-char">ns-single-char</a> )?<br />
+                  <a href="#s-l-single-break(n)">s-l-single-break(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2535521"></a>
+                <p class="title">
+                  <b>Example 4.61. Inner Single Quoted Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> 'first<br /><span class="honorific"><tt class="filename"><tt class="literal">·&#8594;</tt>inner<span class="property">&#8594;&#8595;</span></tt></span>
+ last'
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-single-inner(n)">l-single-inner(n)</a></tt>
+  <tt class="literal"><a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,s)</a></tt> <span class="property"><a href="#s-l-single-break(n)">s-l-single-break(n)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "first \
+  inner \
+  last"
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              The leading <a id="id2535623" class="indexterm"></a><a href="#ignored line prefix/">prefix</a> <a id="id2535637" class="indexterm"></a><a href="#white space/">white
+              space</a> of the last line is stripped in the same way as
+              for inner lines. Trailing <a id="id2535651" class="indexterm"></a><a href="#white space/">white
+              space</a> is considered <a id="id2535664" class="indexterm"></a><a href="#content/syntax">content</a> only if preceded by a
+              non-space character.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[152]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-nb-single-last(n)"></a>s-nb-single-last(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,single)</a><br />
+                  ( <a href="#ns-single-char">ns-single-char</a>
+                    <a href="#nb-single-char">nb-single-char</a>* )?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2535715"></a>
+                <p class="title">
+                  <b>Example 4.62. Last Single Quoted Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- 'first<br /><span class="honorific"><tt class="filename"><tt class="literal">··&#8594;</tt>'</tt></span>
+- 'first
+
+<span class="honorific"><tt class="filename"><tt class="literal">··&#8594;</tt>last'</tt></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-nb-single-last(n)">s-nb-double-last(n)</a></tt> <tt class="literal"><a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,s)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "first ",
+  !!str "first\nlast",
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2535812"></a>4.5.1.3. Plain</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The <a id="id2535820" class="indexterm"></a><a id="plain style/syntax"></a
+            ><a href="#index-entry-plain style"
+            ><i class="firstterm"
+            >plain
+              style</i></a
+          > uses no identifying <a id="id2535838" class="indexterm"></a><a href="#indicator/">indicators</a>, and is therefore the
+              most most limited and most <a id="id2535851" class="indexterm"></a><a href="#context/">context</a> sensitive <a id="id2535865" class="indexterm"></a><a href="#scalar/syntax">scalar style</a>. Plain
+              scalars can never contain any <a id="id2535881" class="indexterm"></a><a href="#tab/">tab</a> characters. They also must not
+              contain the <a id="id2535894" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>: </tt></b></span>&#8221;</a> and <a id="id2535912" class="indexterm"></a><a href="## comment/">&#8220;<span class="quote"><b class="userinput"><tt> #</tt></b></span>&#8221;</a> character sequences
+              as these combinations cause ambiguity with <a id="id2535931" class="indexterm"></a><a href="#key/syntax">key:</a> <a id="id2535945" class="indexterm"></a><a href="#value/syntax">value</a> pairs and <a id="id2535961" class="indexterm"></a><a href="#comment/syntax">comments</a>. Inside
+              <a id="id2535977" class="indexterm"></a><a href="#flow collection style/syntax">flow
+              collections</a>, plain scalars are further restricted to
+              avoid containing the <a id="id2535994" class="indexterm"></a><a href="#[ start flow sequence/">&#8220;<span class="quote"><b class="userinput"><tt>[</tt></b></span>&#8221;</a>, <a id="id2536012" class="indexterm"></a><a href="#] end flow sequence/">&#8220;<span class="quote"><b class="userinput"><tt>]</tt></b></span>&#8221;</a>, <a id="id2536030" class="indexterm"></a><a href="#{ start flow mapping/">&#8220;<span class="quote"><b class="userinput"><tt>{</tt></b></span>&#8221;</a>, <a id="id2536048" class="indexterm"></a><a href="#} end flow mapping/">&#8220;<span class="quote"><b class="userinput"><tt>}</tt></b></span>&#8221;</a> and
+              <a id="id2536065" class="indexterm"></a><a href="#, end flow entry/">&#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221;</a>
+              characters as these would cause ambiguity with the <a id="id2536083" class="indexterm"></a><a href="#flow collection style/syntax">flow
+              collection</a> structure (hence the need for the <a id="id2536099" class="indexterm"></a><a id="flow-in context/"></a
+            ><a href="#index-entry-flow-in context"
+            ><i class="firstterm"
+            >flow-in context</i></a
+          > and the
+              <a id="id2536115" class="indexterm"></a><a id="flow-out context/"></a
+            ><a href="#index-entry-flow-out context"
+            ><i class="firstterm"
+            >flow-out context</i></a
+          >).
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[153]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-plain-char(c)"></a>nb-plain-char(c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">c</tt> = flow-out &#8658; <a href="#nb-plain-char-out">nb-plain-char-out</a><br />
+                  <tt class="varname">c</tt> = flow-in  &#8658; <a href="#nb-plain-char-in">nb-plain-char-in</a><br />
+                  <tt class="varname">c</tt> = flow-key &#8658; <a href="#nb-plain-char-in">nb-plain-char-in</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[154]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-plain-char-out"></a>nb-plain-char-out</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    ( <a href="#nb-char">nb-char</a>
+                  - <a href="#c-mapping-value">&#8220;<span class="quote">:</span>&#8221;</a>
+                  - <a href="#c-comment">&#8220;<span class="quote">#</span>&#8221;</a>
+                  - #x9 /*TAB*/ )<br />
+                  | ( <a href="#ns-plain-char(c)">ns-plain-char(flow-out)</a>
+                  <a href="#c-comment">&#8220;<span class="quote">#</span>&#8221;</a> )<br />
+                  | ( <a href="#c-mapping-value">&#8220;<span class="quote">:</span>&#8221;</a>
+                  <a href="#ns-plain-char(c)">ns-plain-char(flow-out)</a> )
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[155]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="nb-plain-char-in"></a>nb-plain-char-in</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-plain-char-out">nb-plain-char-out</a>
+                  - <a href="#c-collect-entry">&#8220;<span class="quote">,</span>&#8221;</a>
+                  - <a href="#c-sequence-start">&#8220;<span class="quote">[</span>&#8221;</a>
+                  - <a href="#c-sequence-end">&#8220;<span class="quote">]</span>&#8221;</a>
+                  - <a href="#c-mapping-start">&#8220;<span class="quote">{</span>&#8221;</a>
+                  - <a href="#c-mapping-end">&#8220;<span class="quote">}</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[156]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-plain-char(c)"></a>ns-plain-char(c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#nb-plain-char(c)">nb-plain-char(c)</a> - #x20 /*SP*/
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              The first plain character is further restricted to avoid most
+              <a id="id2536311" class="indexterm"></a><a href="#indicator/">indicators</a> as these would
+              cause ambiguity with various YAML structures. However, the first
+              character may be <a id="id2536326" class="indexterm"></a><a href="#- block sequence entry/">&#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221;</a>, <a id="id2536344" class="indexterm"></a><a href="#? mapping key/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</a> or <a id="id2536361" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>:</tt></b></span>&#8221;</a> provided it is followed by a
+              non-space character.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[157]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-plain-first-char(c)"></a>ns-plain-first-char(c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    ( <a href="#ns-plain-char(c)">ns-plain-char(c)</a>
+                  - <a href="#c-indicator">c-indicator</a> )<br />
+                  | ( ( <a href="#c-sequence-entry">&#8220;<span class="quote">-</span>&#8221;</a>
+                  | <a href="#c-mapping-key">&#8220;<span class="quote">?</span>&#8221;</a>
+                  | <a href="#c-mapping-value">&#8220;<span class="quote">:</span>&#8221;</a> )
+                  <a href="#ns-plain-char(c)">ns-plain-char(c)</a> )
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2536437"></a>
+                <p class="title">
+                  <b>Example 4.63. Plain Characters</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"># Outside flow collection:<br />- <tt class="filename">::</tt>std::vector
+- <tt class="filename">U</tt>p<tt class="literal">,</tt> up and away!
+- <tt class="filename">-1</tt>23
+# Inside flow collection:
+- [ <tt class="filename">::</tt>std::vector,
+  "Up<span class="property">,</span> up and away!",
+  <tt class="filename">-1</tt>23 ]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-plain-first-char(c)">ns-plain-first-char(c)</a></tt>
+  <tt class="literal"><a href="#ns-plain-char(c)">ns-plain-char(c)</a></tt> <span class="property">Not ns-plain-char(c)</span>
+</pre>
+            </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "::std::vector",
+  !!str "Up, up and away!",
+  !!int "-123",
+  !!seq [
+    !!str "::std::vector",
+    !!str "Up, up and away!",
+    !!int "-123",
+  ]
+]
+</span></pre>
+            </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Plain scalars are restricted to a single line when contained
+              inside a <a id="id2536564" class="indexterm"></a><a href="#simple key/">simple key</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[158]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-plain(n,c)"></a>ns-plain(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">c</tt> = flow-out &#8658; <a href="#ns-plain-multi(n,c)">ns-plain-multi(n,c)</a>?<br />
+                  <tt class="varname">c</tt> = flow-in  &#8658; <a href="#ns-plain-multi(n,c)">ns-plain-multi(n,c)</a>?<br />
+                  <tt class="varname">c</tt> = flow-key &#8658; <a href="#ns-plain-single(c)">ns-plain-single(c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2536625"></a>
+                <p class="title">
+                  <b>Example 4.64. Plain Scalars</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><tt class="filename">simple key</tt> : {<br />  <tt class="filename">also simple</tt> : value,
+  ? <tt class="literal">not a
+  simple key</tt> : <tt class="literal">any
+  value</tt>
+}
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-plain-single(c)">ns-plain-single(c)</a></tt> <tt class="literal"><a href="#ns-plain-multi(n,c)">ns-plain-multi(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "simple key"
+  : !!map {
+    ? !!str "also simple"
+    : !!str "value",
+    ? !!str "not a simple key"
+    : !!str "any value"
+  }
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              The first line of any <a id="id2536726" class="indexterm"></a><a href="#flow scalar style/syntax">flow scalar</a> is <a id="id2536742" class="indexterm"></a><a href="#indentation space/">indented</a> according to the
+              <a id="id2536756" class="indexterm"></a><a href="#collection/syntax">collection</a> it is contained in.
+              Therefore, there are two cases where a plain scalar begins on the
+              first column of a line, without any preceding <a id="id2536774" class="indexterm"></a><a href="#indentation space/">indentation</a> spaces: a plain
+              scalar used as a <a id="id2536787" class="indexterm"></a><a href="#simple key/">simple
+              key</a> of a non-indented <a id="id2536800" class="indexterm"></a><a href="#block mapping style/syntax">block mapping</a>, and any plain
+              scalar nested in a non-indented <a id="id2536819" class="indexterm"></a><a href="#flow collection style/syntax">flow collection</a>. In these
+              cases, the first line of the plain scalar must not conflict with
+              a <a id="id2536838" class="indexterm"></a><a href="#document boundary marker/">document boundary
+              marker</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[159]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-forbidden-content"></a>l-forbidden-content</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  /* start of line */<br />
+                  ( <a href="#c-document-start">c-document-start</a>
+                  | <a href="#c-document-end">c-document-end</a> )<br />
+                  /* space or end of line */
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2536884"></a>
+                <p class="title">
+                  <b>Example 4.65. Forbidden Non-Indented Plain Scalar Content</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">---<br /><tt class="filename">---·</tt>||| : foo
+<tt class="literal">...·</tt>&gt;&gt;&gt;: bar
+---
+[
+<tt class="filename">---&#8595;</tt>
+,
+<tt class="literal">...·</tt>,
+{
+<tt class="filename">---·</tt>:
+<tt class="literal">...·</tt># Nested
+}
+]
+...
+</span></pre>
+              </td>
+                    <td>
+<pre class="screen"><span class="database">ERROR:<br /> The <tt class="filename">---</tt> and <tt class="literal">...</tt> document
+ start and end markers must
+ not be specified as the
+ first content line of a
+ non-indented plain scalar.
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              YAML provides several easy ways to <a id="id2536980" class="indexterm"></a><a href="#present/">present</a> such <a id="id2536993" class="indexterm"></a><a href="#content/syntax">content</a> without
+              conflicting with the <a id="id2537009" class="indexterm"></a><a href="#document boundary marker/">document boundary markers</a>. For example:
+            </p>
+              <div class="example">
+                <a id="id2537024"></a>
+                <p class="title">
+                  <b>Example 4.66. Document Marker Scalar Content</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><tt class="literal">---</tt><br />"<tt class="filename">---</tt>" : foo
+<tt class="filename">...</tt>: bar
+---
+[
+<tt class="filename">---</tt>,
+<tt class="filename">...</tt>,
+{
+? <tt class="filename">---</tt>
+: <tt class="filename">...</tt>
+}
+]
+<tt class="literal">...</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  Content <tt class="filename">---</tt> and <tt class="filename">...</tt>
+  Document marker <tt class="literal">---</tt> and <tt class="literal">...</tt>
+</pre>
+                </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "---"
+  : !!str "foo",
+  ? !!str "...",
+  : !!str "bar"
+}
+%YAML 1.1
+---
+!!seq [
+  !!str "---",
+  !!str "...",
+  !!map {
+    ? !!str "---"
+    : !!str "..."
+  }
+]
+</span></pre>
+                </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Thus, a single line plain scalar is a sequence of valid plain
+              non-<a id="id2537146" class="indexterm"></a><a href="#line break character/">break</a>
+              <a id="id2537160" class="indexterm"></a><a href="#printable character/">printable</a>
+              characters, beginning and ending with non-space character and not
+              conflicting with a <a id="id2537175" class="indexterm"></a><a href="#document boundary marker/">document boundary markers</a>. All characters are
+              considered <a id="id2537189" class="indexterm"></a><a href="#content/syntax">content</a>, including any inner space
+              characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[160]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-plain-single(c)"></a>ns-plain-single(c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    ( <a href="#ns-plain-first-char(c)">ns-plain-first-char(c)</a><br />
+                      ( <a href="#nb-plain-char(c)">nb-plain-char(c)</a>*
+                  <a href="#ns-plain-char(c)">ns-plain-char(c)</a> )? )<br />
+                  - <a href="#l-forbidden-content">l-forbidden-content</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              In a multi-line plain scalar, <a id="id2537249" class="indexterm"></a><a href="#line break character/">line breaks</a> are subject to (flow) <a id="id2537264" class="indexterm"></a><a href="#line folding/">line folding</a>. Any <a id="id2537277" class="indexterm"></a><a href="#ignored line prefix/">prefix</a> and trailing
+              spaces are excluded from the <a id="id2537291" class="indexterm"></a><a href="#content/syntax">content</a>. Like <a id="id2537307" class="indexterm"></a><a href="#single quoted style/syntax">single quoted
+              scalars</a>, in plain scalars it is impossible to force the
+              inclusion of the leading or trailing spaces in the <a id="id2537324" class="indexterm"></a><a href="#content/syntax">content</a>.
+              Therefore, plain scalars lines can only be broken where a single
+              space character separates two non-space characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[161]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l-plain-break(n)"></a>s-l-plain-break(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-ignored-white">s-ignored-white</a>*
+                  <a href="#b-l-folded-any(n,s)">b-l-folded-any(n,plain)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2537370"></a>
+                <p class="title">
+                  <b>Example 4.67. Plain Line Breaks</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> as space<span class="honorific"><tt class="filename"><span class="property">&#8594;</span>&#8595;</tt></span><br /> trimmed<span class="honorific"><tt class="filename"><span class="property">·</span>&#8595;
+&#8595;</tt></span>
+ specific<tt class="filename">&#8659;
+&#8595;</tt>
+ none
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "as space \
+  trimmed\n\
+  specific\L\n\
+  none"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-l-plain-break(n)">s-l-plain-break(n)</a></tt>
+  <span class="property"><a href="#s-ignored-white">s-ignored-white</a></span>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              A multi-line plain scalar contains additional continuation lines
+              following the first line.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[162]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-plain-multi(n,c)"></a>ns-plain-multi(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-plain-single(c)">ns-plain-single(c)</a>
+                  <a href="#s-ns-plain-more(n,c)">s-ns-plain-more(n,c)</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Each continuation line must contain at least one non-space
+              character. Note that it may be preceded by any number of <a id="id2537506" class="indexterm"></a><a href="#empty line/">empty lines</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[163]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-ns-plain-more(n,c)"></a>s-ns-plain-more(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-l-plain-break(n)">s-l-plain-break(n)</a><br />
+                  <a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,plain)</a>
+                  <a href="#ns-plain-char(c)">ns-plain-char(c)</a><br />
+                  ( <a href="#nb-plain-char(c)">nb-plain-char(c)</a>*
+                  <a href="#ns-plain-char(c)">ns-plain-char(c)</a> )?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2537564"></a>
+                <p class="title">
+                  <b>Example 4.68. Plain Scalars</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> <tt class="filename">first line</tt><span class="honorific"><tt class="constant"><tt class="literal">·&#8595;<br />···&#8595;</tt>
+<span class="property">··</span>more line</tt></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-plain-single(c)">ns-plain-single(c)</a></tt> <tt class="literal"><a href="#s-l-plain-break(n)">s-l-plain-break(n)</a></tt>
+  <span class="property"><a href="#s-ignored-prefix(n,s)">s-ignored-prefix(n,s)</a></span> <tt class="constant"><a href="#s-ns-plain-more(n,c)">s-ns-plain-more(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "first line\n\
+      more line"
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2537677"></a>4.5.2. Block Scalar Header</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+            <a id="id2537685" class="indexterm"></a><a href="#block scalar style/syntax">Block
+            scalars</a> are specified by several <a id="id2537702" class="indexterm"></a><a href="#indicator/">indicators</a> given in a <a id="id2537714" class="indexterm"></a><a id="block scalar header/"></a
+            ><a href="#index-entry-block scalar header"
+            ><i class="firstterm"
+            >header</i></a
+          > preceding the
+            <a id="id2537729" class="indexterm"></a><a href="#content/syntax">content</a>
+            itself. The header is followed by an ignored <a id="id2537746" class="indexterm"></a><a href="#line break character/">line break</a> (with an optional <a id="id2537760" class="indexterm"></a><a href="#comment/syntax">comment</a>).
+          </p>
+            <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+              <tr>
+                <td>
+                  <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                    <tr>
+                      <td align="left" valign="top" class="productioncounter">[164]</td>
+                      <td align="right" valign="top" class="productionlhs"><a id="c-b-block-header(s,m,t)"></a>c-b-block-header(s,m,t)</td>
+                      <td valign="top" class="productionseperator" align="center">
+                        <tt>::=</tt>
+                      </td>
+                      <td valign="top" class="productionrhs">
+                <a href="#c-style-indicator(s)">c-style-indicator(s)</a><br />
+                ( ( <a href="#c-indentation-indicator(m)">c-indentation-indicator(m)</a><br />
+                    <a href="#c-chomping-indicator(t)">c-chomping-indicator(t)</a> )<br />
+                | ( <a href="#c-chomping-indicator(t)">c-chomping-indicator(t)</a><br />
+                    <a href="#c-indentation-indicator(m)">c-indentation-indicator(m)</a> ) )<br />
+                <a href="#s-b-comment">s-b-comment</a>
+              </td>
+                      <td align="left" valign="top" class="productioncomment"> </td>
+                    </tr>
+                  </table>
+                </td>
+              </tr>
+            </table>
+            <div class="example">
+              <a id="id2537830"></a>
+              <p class="title">
+                <b>Example 4.69. Block Scalar Header</b>
+              </p>
+              <table class="simplelist" border="0" summary="Simple list">
+                <tr>
+                  <td>
+<pre class="programlisting"><span class="database">- <tt class="filename">| # Just the style&#8595;</tt><br /> literal
+- <tt class="filename">&gt;1 # Indentation indicator&#8595;</tt>
+ ·folded
+- <tt class="filename">|+ # Chomping indicator&#8595;</tt>
+ keep
+
+- <tt class="filename">&gt;-1 # Both indicators&#8595;</tt>
+ ·strip
+
+</span></pre>
+            </td>
+                  <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "literal\n",
+  !!str "·folded\n",
+  !!str "keep\n\n",
+  !!str "·strip",
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-b-block-header(s,m,t)">c-b-block-header(s,m,t)</a></tt>
+</pre>
+            </td>
+                </tr>
+              </table>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2537921"></a>4.5.2.1. Block Style Indicator</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The first character of the <a id="id2537930" class="indexterm"></a><a href="#block scalar header/">block scalar header</a> is either <a id="id2537945" class="indexterm"></a><a id="| literal style/"></a
+            ><a href="#index-entry-| literal style"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>|</tt></b></span>&#8221;</i></a
+          > for a
+              <a id="id2537965" class="indexterm"></a><a href="#literal style/syntax">literal
+              scalar</a> or <a id="id2537981" class="indexterm"></a><a id="&gt; folded style/"></a
+            ><a href="#index-entry-&gt; folded style"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>&gt;</tt></b></span>&#8221;</i></a
+          > for a <a id="id2538001" class="indexterm"></a><a href="#folded style/syntax">folded
+              scalar</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[165]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-style-indicator(s)"></a>c-style-indicator(s)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  s = literal &#8658; <a href="#c-literal">&#8220;<span class="quote">|</span>&#8221;</a><br />
+                  s = folded  &#8658; <a href="#c-folded">&#8220;<span class="quote">&gt;</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2538050"></a>
+                <p class="title">
+                  <b>Example 4.70. Block Style Indicator</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- <tt class="filename">|</tt><br /> literal
+- <tt class="filename">&gt;</tt>
+ folded
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-style-indicator(s)">c-style-indicator(s)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "literal\n",
+  !!str "folded\n",
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2538125"></a>4.5.2.2. Block Indentation Indicator</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              Typically, the <a id="id2538133" class="indexterm"></a><a href="#indentation space/">indentation</a> level of a <a id="id2538147" class="indexterm"></a><a href="#block scalar style/syntax">block scalar</a> is
+              detected from its first non-<a id="id2538164" class="indexterm"></a><a href="#empty line/">empty</a> line. This detection fails when this line
+              contains leading space characters (note it may safely start with
+              a <a id="id2538179" class="indexterm"></a><a href="#tab/">tab</a> or a <a id="id2538191" class="indexterm"></a><a href="## comment/">&#8220;<span class="quote"><b class="userinput"><tt>#</tt></b></span>&#8221;</a> character). When detection
+              fails, YAML requires that the <a id="id2538210" class="indexterm"></a><a href="#indentation space/">indentation</a> level for the <a id="id2538223" class="indexterm"></a><a href="#content/syntax">content</a> be given
+              using an explicit <a id="id2538239" class="indexterm"></a><a id="indentation indicator/"></a
+            ><a href="#index-entry-indentation indicator"
+            ><i class="firstterm"
+            >indentation indicator</i></a
+          >. This level is
+              specified as the integer number of the additional <a id="id2538256" class="indexterm"></a><a href="#indentation space/">indentation</a> spaces used for
+              the <a id="id2538269" class="indexterm"></a><a href="#content/syntax">content</a>. If the <a id="id2538284" class="indexterm"></a><a href="#block scalar style/syntax">block
+              scalar</a> begins with leading <a id="id2538300" class="indexterm"></a><a href="#empty line/">empty lines</a> followed by a non-<a id="id2538314" class="indexterm"></a><a href="#empty line/">empty line</a>, the <a id="id2538326" class="indexterm"></a><a href="#indentation space/">indentation</a> level is
+              deduced from the non-<a id="id2538340" class="indexterm"></a><a href="#empty line/">empty
+              line</a>. In this case, it is an error for any such leading
+              <a id="id2538354" class="indexterm"></a><a href="#empty line/">empty line</a> to contain
+              more spaces than the <a id="id2538367" class="indexterm"></a><a href="#indentation space/">indentation</a> level deduced from the non-<a id="id2538381" class="indexterm"></a><a href="#empty line/">empty</a> line. It is always valid to
+              specify an indentation indicator for a <a id="id2538395" class="indexterm"></a><a href="#block scalar style/syntax">block scalar</a> node,
+              though a YAML <a id="id2538412" class="indexterm"></a><a href="#processor/">processor</a>
+              should only do so in cases where detection will fail.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[166]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-indentation-indicator(m)"></a>c-indentation-indicator(m)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  explicit(m) &#8658; <a href="#ns-dec-digit">ns-dec-digit</a>
+                    - &#8220;<span class="quote">0</span>&#8221;<br />
+                  detect(m)   &#8658; /* empty */
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2538456"></a>
+                <p class="title">
+                  <b>Example 4.71. Block Indentation Indicator</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- |<br /><tt class="literal">·</tt>detected
+- &gt;
+<tt class="literal">·</tt>
+<tt class="literal">··</tt>
+<tt class="literal">··</tt># detected
+- |1
+<tt class="literal">·</tt>·explicit
+- &gt;
+<tt class="literal">·</tt>&#8594;
+<tt class="literal">·</tt>detected
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "detected\n",
+  !!str "\n\n# detected\n",
+  !!str "·explicit\n",
+  !!str "\t·detected\n",
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-indentation-indicator(m)">c-indentation-indicator(m)</a></tt>
+  <tt class="literal"><a href="#s-indent(n)">s-indent(n)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <div class="example">
+                <a id="id2538572"></a>
+                <p class="title">
+                  <b>Example 4.72. Invalid Block Scalar Indentation Indicators</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="screen"><span class="database">- |<br />·<tt class="filename">·</tt>
+·text
+- &gt;
+··text
+<tt class="literal">·</tt>text
+- |1
+<span class="property">·</span>text
+</span></pre>
+              </td>
+                    <td>
+<pre class="screen"><span class="database">ERROR:<br />- A leading all-space line must
+  not have too many <tt class="filename">spaces</tt>.
+- A following text line must
+  not be <tt class="literal">less indented</tt>.
+- The text is <span class="property">less indented</span>
+  than the indicated level.
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2538656"></a>4.5.2.3. Block Chomping Indicator</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              YAML supports three possible block <a id="id2538665" class="indexterm"></a><a id="chomping/"></a
+            ><a href="#index-entry-chomping"
+            ><i class="firstterm"
+            >chomping</i></a
+          > methods:
+            </p>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Strip</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    <a id="id2538692" class="indexterm"></a><a id="strip chomping/"></a
+            ><a href="#index-entry-strip chomping"
+            ><i class="firstterm"
+            >Stripping</i></a
+          > is
+                    specified using the <a id="id2538708" class="indexterm"></a><a id="- strip chomping/"></a
+            ><a href="#index-entry-- strip chomping"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221; chomping indicator</i></a
+          >.
+                    In this case, the <a id="id2538729" class="indexterm"></a><a href="#line break character/">line break</a> character of the last
+                    non-<a id="id2538744" class="indexterm"></a><a href="#empty line/">empty line</a> (if
+                    any) is excluded from the <a id="id2538757" class="indexterm"></a><a href="#scalar/syntax">scalar's content</a>. Any trailing
+                    <a id="id2538773" class="indexterm"></a><a href="#empty line/">empty lines</a> are
+                    considered to be (empty) <a id="id2538786" class="indexterm"></a><a href="#comment/syntax">comment</a> lines and are also
+                    discarded.
+                  </p>
+                  </dd>
+                  <dt>
+                    <span class="term">Clip</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    <a id="id2538816" class="indexterm"></a><a id="clip chomping/"></a
+            ><a href="#index-entry-clip chomping"
+            ><i class="firstterm"
+            >Clipping</i></a
+          > the
+                    default behavior used if no explicit chomping indicator is
+                    specified. In this case, The <a id="id2538832" class="indexterm"></a><a href="#line break character/">line break</a> character of the last
+                    non-<a id="id2538847" class="indexterm"></a><a href="#empty line/">empty line</a> (if
+                    any) is preserved in the <a id="id2538860" class="indexterm"></a><a href="#scalar/syntax">scalar's content</a>. However, any
+                    trailing <a id="id2538876" class="indexterm"></a><a href="#empty line/">empty
+                    lines</a> are considered to be (empty) <a id="id2538890" class="indexterm"></a><a href="#comment/syntax">comment</a>
+                    lines and are discarded.
+                  </p>
+                  </dd>
+                  <dt>
+                    <span class="term">Keep</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    <a id="id2538919" class="indexterm"></a><a id="keep chomping/"></a
+            ><a href="#index-entry-keep chomping"
+            ><i class="firstterm"
+            >Keeping</i></a
+          > is
+                    specified using the <a id="id2538934" class="indexterm"></a><a id="+ keep chomping/"></a
+            ><a href="#index-entry-+ keep chomping"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>+</tt></b></span>&#8221; chomping indicator</i></a
+          >.
+                    In this case, the <a id="id2538956" class="indexterm"></a><a href="#line break character/">line break</a> character of the last
+                    non-<a id="id2538971" class="indexterm"></a><a href="#empty line/">empty line</a> (if
+                    any) is preserved in the <a id="id2538984" class="indexterm"></a><a href="#scalar/syntax">scalar's content</a>. In addition,
+                    any trailing <a id="id2539000" class="indexterm"></a><a href="#empty line/">empty
+                    lines</a> are each considered to <a id="id2539013" class="indexterm"></a><a href="#present/">present</a> a single trailng
+                    <a id="id2539026" class="indexterm"></a><a href="#content/syntax">content</a> <a id="id2539041" class="indexterm"></a><a href="#line break character/">line break</a>. Note that these
+                    <a id="id2539056" class="indexterm"></a><a href="#line break character/">line
+                    breaks</a> are not subject to <a id="id2539069" class="indexterm"></a><a href="#line folding/">folding</a>.
+                  </p>
+                  </dd>
+                </dl>
+              </div>
+              <p>
+              The chomping method ised is a <a id="id2539091" class="indexterm"></a><a href="#presentation detail/">presentation detail</a> and is not reflected in the
+              <a id="id2539106" class="indexterm"></a><a href="#serialization/">serialization tree</a>
+              (and hence the <a id="id2539119" class="indexterm"></a><a href="#representation/">representation</a> graph).
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[167]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-chomping-indicator(t)"></a>c-chomping-indicator(t)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">t</tt> = strip &#8658;
+                  &#8220;<span class="quote">-</span>&#8221;<br />
+                  <tt class="varname">t</tt> = clip  &#8658;
+                    /* empty */<br />
+                  <tt class="varname">t</tt> = keep  &#8658;
+                  &#8220;<span class="quote">+</span>&#8221;
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Thus, the final <a id="id2539176" class="indexterm"></a><a href="#line break character/">line
+              break</a> of a <a id="id2539189" class="indexterm"></a><a href="#block scalar style/syntax">block scalar</a> may be included or
+              excluded from the <a id="id2539207" class="indexterm"></a><a href="#content/syntax">content</a>, depending on the specified
+              chomping indicator.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[168]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="b-chomped-last(t)"></a>b-chomped-last(t)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">t</tt> = strip &#8658;
+                  <a href="#b-strip-last">b-strip-last</a><br />
+                  <tt class="varname">t</tt> = clip  &#8658;
+                  <a href="#b-keep-last">b-keep-last</a><br />
+                  <tt class="varname">t</tt> = keep  &#8658;
+                  <a href="#b-keep-last">b-keep-last</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[169]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="b-strip-last"></a>b-strip-last</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#b-ignored-any">b-ignored-any</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[170]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="b-keep-last"></a>b-keep-last</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#b-normalized">b-normalized</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2539303"></a>
+                <p class="title">
+                  <b>Example 4.73. Chomping Final Line Break</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">strip: |-<br />  text<tt class="filename">¶</tt>
+clip: |
+  text<tt class="literal">&#8595;</tt>
+keep: |+
+  text<tt class="literal">&#8659;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#b-strip-last">b-strip-last</a></tt>
+  <tt class="literal"><a href="#b-keep-last">b-keep-last</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "strip"
+  : !!str "text",
+  ? !!str "clip"
+  : !!str "text\n",
+  ? !!str "keep"
+  : !!str "text\L",
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Similarly, <a id="id2539398" class="indexterm"></a><a href="#empty line/">empty lines</a>
+              immediately following the <a id="id2539412" class="indexterm"></a><a href="#block scalar style/syntax">block scalar</a> may be interpreted
+              either as <a id="id2539429" class="indexterm"></a><a href="#present/">presenting</a>
+              trailing <a id="id2539441" class="indexterm"></a><a href="#line break character/">line
+              breaks</a> or as (empty) <a id="id2539455" class="indexterm"></a><a href="#comment/syntax">comment</a> lines, depending on the
+              specified chomping indicator.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[171]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-chomped-empty(n,t)"></a>l-chomped-empty(n,t)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">t</tt> = strip &#8658;
+                  <a href="#l-strip-empty(n)">l-strip-empty(n)</a><br />
+                  <tt class="varname">t</tt> = clip  &#8658;
+                  <a href="#l-strip-empty(n)">l-strip-empty(n)</a><br />
+                  <tt class="varname">t</tt> = keep  &#8658;
+                  <a href="#l-keep-empty(n)">l-keep-empty(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[172]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-strip-empty(n)"></a>l-strip-empty(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#s-indent(n)">s-indent(&#8804;n)</a>
+                  <a href="#b-ignored-any">b-ignored-any</a> )*
+                  <a href="#l-trail-comments(n)">l-trail-comments(n)</a>?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[173]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-keep-empty(n)"></a>l-keep-empty(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#l-empty(n,s)">l-empty(n,literal)</a>*
+                  <a href="#l-trail-comments(n)">l-trail-comments(n)</a>?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Explicit <a id="id2539574" class="indexterm"></a><a href="#comment/syntax">comment</a> lines may then follow. To
+              prevent ambiguity, the first such <a id="id2539591" class="indexterm"></a><a href="#comment/syntax">comment</a> line must be less <a id="id2539606" class="indexterm"></a><a href="#indentation space/">indented</a> than the <a id="id2539619" class="indexterm"></a><a href="#block scalar style/syntax">block scalar
+              content</a>. Additional <a id="id2539636" class="indexterm"></a><a href="#comment/syntax">comment</a> lines, if any, are not so
+              restricted.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[174]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-trail-comments(n)"></a>l-trail-comments(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-indent(n)">s-indent(&lt;n)</a>
+                  <a href="#c-nb-comment-text">c-nb-comment-text</a>
+                  <a href="#b-ignored-any">b-ignored-any</a><br />
+                  <a href="#l-comment">l-comment</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2539690"></a>
+                <p class="title">
+                  <b>Example 4.74. Block Scalar Chomping</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"> # Strip<br />  # Comments:
+strip: |-
+  # text¶
+<span class="honorific"><tt class="filename">··&#8659;
+<span class="property">·# Clip
+··# comments:
+&#8595;</span></tt></span>
+clip: |
+  # text&#8595;
+<span class="honorific"><tt class="filename">·¶
+<span class="property">·# Keep
+··# comments:
+&#8595;</span></tt></span>
+keep: |+
+  # text&#8659;
+<span class="honorific"><tt class="literal">&#8595;
+<span class="property">·# Trail
+··# comments.</span></tt></span>
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  ? !!str "strip"
+  : !!str "text",
+  ? !!str "clip"
+  : !!str "text\n",
+  ? !!str "keep"
+  : !!str "text\L\n",
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-strip-empty(n)">l-strip-empty(n)</a></tt>
+  <tt class="literal"><a href="#l-keep-empty(n)">l-keep-empty(n)</a></tt>
+  <span class="property"><a href="#l-trail-comments(n)">l-trail-comments(n)</a></span>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Note that if a <a id="id2539818" class="indexterm"></a><a href="#block scalar style/syntax">block scalar</a> consists of only
+              <a id="id2539835" class="indexterm"></a><a href="#empty line/">empty lines</a>, then these
+              lines are considered trailing lines and hence are affected by
+              chomping.
+            </p>
+              <div class="example">
+                <a id="id2539850"></a>
+                <p class="title">
+                  <b>Example 4.75. Empty Scalar Chomping</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">strip: &gt;-<br /><tt class="filename">&#8595;</tt>
+clip: &gt;
+<tt class="filename">&#8595;</tt>
+keep: |+
+<tt class="literal">&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-strip-empty(n)">l-strip-empty(n)</a></tt>
+  <tt class="literal"><a href="#l-keep-empty(n)">l-keep-empty(n)</a></tt>
+</pre>
+                </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  ? !!str "strip"
+  : !!str "",
+  ? !!str "clip"
+  : !!str "",
+  ? !!str "keep"
+  : !!str "\n",
+]
+</span></pre>
+                </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2539942"></a>4.5.3. Block Scalar Styles</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          YAML provides two <a id="id2539951" class="indexterm"></a><a id="block scalar style/syntax"></a
+            ><a href="#index-entry-block scalar style"
+            ><i class="firstterm"
+            >Block scalar styles</i></a
+          >, <a id="id2539969" class="indexterm"></a><a href="#literal style/syntax">literal</a> and
+          <a id="id2539985" class="indexterm"></a><a href="#folded style/syntax">folded</a>.
+          The block scalar <a id="id2540001" class="indexterm"></a><a href="#content/syntax">content</a> is is ended by a less-<a id="id2540016" class="indexterm"></a><a href="#indentation space/">indented</a> line or the end of the
+          characters <a id="id2540030" class="indexterm"></a><a href="#stream/syntax">stream</a>.
+        </p>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2540046"></a>4.5.3.1. Literal</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The <a id="id2540054" class="indexterm"></a><a id="literal style/syntax"></a
+            ><a href="#index-entry-literal style"
+            ><i class="firstterm"
+            >literal
+              style</i></a
+          > is the simplest, most restricted and most
+              readable <a id="id2540072" class="indexterm"></a><a href="#scalar/syntax">scalar
+              style</a>. It is especially suitable for source code or
+              other text containing significant use of <a id="id2540090" class="indexterm"></a><a href="#indicator/">indicators</a>, <a id="id2540102" class="indexterm"></a><a href="#escaping in double quoted style/">escape
+              sequences</a> and <a id="id2540116" class="indexterm"></a><a href="#line break character/">line breaks</a>. In particular, literal content
+              lines may begin with a <a id="id2540132" class="indexterm"></a><a href="#tab/">tab</a> or a
+              <a id="id2540144" class="indexterm"></a><a href="## comment/">&#8220;<span class="quote"><b class="userinput"><tt>#</tt></b></span>&#8221;</a>
+              character.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[175]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-l+literal(n)"></a>c-l+literal(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-b-block-header(s,m,t)">c-b-block-header(literal,m,t)</a><br />
+                  <a href="#l-literal-content(n,t)">l-literal-content(n+m,t)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2540191"></a>
+                <p class="title">
+                  <b>Example 4.76. Literal Scalar</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><tt class="filename">| # Simple block scalar&#8595;</tt><br /><tt class="literal"> literal&#8595;
+ &#8594;text&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-b-block-header(s,m,t)">c-b-block-header(s,m,t)</a></tt>
+  <tt class="literal"><a href="#l-literal-content(n,t)">l-literal-content(n,t)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "literal\n\
+        \ttext\n"
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Inside literal scalars, each non-<a id="id2540278" class="indexterm"></a><a href="#empty line/">empty line</a> may be preceded by any number of
+              <a id="id2540292" class="indexterm"></a><a href="#empty line/">empty lines</a>. No
+              processing is performed on these lines except for stripping the
+              <a id="id2540306" class="indexterm"></a><a href="#indentation space/">indentation</a>. In
+              particular, such lines are never <a id="id2540320" class="indexterm"></a><a href="#line folding/">folded</a>. Literal non-<a id="id2540333" class="indexterm"></a><a href="#empty line/">empty lines</a> may include only spaces, <a id="id2540346" class="indexterm"></a><a href="#tab/">tabs</a>, and other <a id="id2540359" class="indexterm"></a><a href="#printable character/">printable</a> characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[176]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-literal-text(n)"></a>l-nb-literal-text(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#l-empty(n,s)">l-empty(n,block)</a>*
+                  <a href="#s-indent(n)">s-indent(n)</a>
+                  <a href="#nb-char">nb-char</a>+
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              The <a id="id2540408" class="indexterm"></a><a href="#line break character/">line break</a>
+              following a non-<a id="id2540422" class="indexterm"></a><a href="#empty line/">empty</a>
+              inner literal line is <a id="id2540435" class="indexterm"></a><a href="#line break normalization/">normalized</a>. Again, such <a id="id2540451" class="indexterm"></a><a href="#line break character/">line breaks</a> are never
+              <a id="id2540464" class="indexterm"></a><a href="#line folding/">folded</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[177]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-literal-inner(n)"></a>l-literal-inner(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#l-nb-literal-text(n)">l-nb-literal-text(n)</a>
+                  <a href="#b-normalized">b-normalized</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2540503"></a>
+                <p class="title">
+                  <b>Example 4.77. Inner Literal Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">|<br /><span class="honorific"><tt class="literal"><tt class="filename">·
+··
+··literal</tt>&#8595;</tt></span>
+<tt class="filename">·
+··text</tt>&#8595;
+&#8595;
+·# Comment
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "\nliteral\n\ntext\n"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-nb-literal-text(n)">l-nb-literal-text(n)</a></tt>
+  <tt class="literal"><a href="#l-nb-literal-inner(n)">l-nb-literal-inner(n)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              The <a id="id2540599" class="indexterm"></a><a href="#line break character/">line break</a>
+              following the final non-<a id="id2540613" class="indexterm"></a><a href="#empty line/">empty</a> literal line is subject to <a id="id2540626" class="indexterm"></a><a href="#chomping/">chomping</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[178]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-literal-last(n,t)"></a>l-literal-last(n,t)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#l-nb-literal-text(n)">l-nb-literal-text(n)</a>
+                  <a href="#b-chomped-last(t)">b-chomped-last(t)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Trailing <a id="id2540668" class="indexterm"></a><a href="#empty line/">empty lines</a>
+              following the last literal non-<a id="id2540681" class="indexterm"></a><a href="#empty line/">empty line</a>, if any, are also subject to <a id="id2540694" class="indexterm"></a><a href="#chomping/">chomping</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[179]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-literal-content(n,t)"></a>l-literal-content(n,t)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#l-nb-literal-inner(n)">l-literal-inner(n)</a>*
+                  <a href="#l-nb-literal-last(n,t)">l-literal-last(n,t)</a> )?<br />
+                  <a href="#l-chomped-empty(n,t)">l-chomped-empty(n,t)</a>?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2540742"></a>
+                <p class="title">
+                  <b>Example 4.78. Last Literal Line</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">|<br /><tt class="filename">·
+··
+··literal</tt>&#8595;
+<span class="honorific"><tt class="literal"><tt class="filename">·
+··text</tt><span class="property">&#8595;</span>
+<tt class="constant">&#8595;</tt></tt></span>
+·# Comment
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!str "\nliteral\n\ntext\n"
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-nb-literal-text(n)">l-nb-literal-text(n)</a></tt>
+  <tt class="literal"><a href="#l-nb-literal-last(n,t)">l-nb-literal-last(n,t)</a></tt>
+  <span class="property"><a href="#b-chomped-last(t)">b-chomped-last(t)</a></span>
+  <tt class="constant"><a href="#l-chomped-empty(n,t)">l-chomped-empty(n,t)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2540863"></a>4.5.3.2. Folded</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              The <a id="id2540871" class="indexterm"></a><a id="folded style/syntax"></a
+            ><a href="#index-entry-folded style"
+            ><i class="firstterm"
+            >folded
+              style</i></a
+          > is similar to the <a id="id2540888" class="indexterm"></a><a href="#literal style/syntax">literal style</a>. However,
+              unlike <a id="id2540905" class="indexterm"></a><a href="#literal style/syntax">literal content</a>, folded content is
+              subject to (block) <a id="id2540922" class="indexterm"></a><a href="#line folding/">line
+              folding</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[180]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-l+folded(n)"></a>c-l+folded(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-b-block-header(s,m,t)">c-b-block-header(folded,m,t)</a><br />
+                  <a href="#l-folded-content(n,t)">l-folded-content(n+m,t)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2540965"></a>
+                <p class="title">
+                  <b>Example 4.79. Folded Scalar</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><tt class="filename">&gt; # Simple folded scalar&#8595;</tt><br /><tt class="literal"> folded&#8595;
+ text&#8595;
+ &#8594;lines&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-b-block-header(s,m,t)">c-b-block-header(s,m,t)</a></tt>
+  <tt class="literal"><a href="#l-folded-content(n,t)">l-folded-content(n,t)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "folded text\n\
+        \ttext\n"
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              <a id="id2541050" class="indexterm"></a><a href="#line folding/">Line folding</a> allows
+              long <a id="id2541064" class="indexterm"></a><a href="#content/syntax">content</a> lines to be broken anywhere
+              a single space character separates two non-space characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[181]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-nb-folded-text(n)"></a>s-nb-folded-line(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-indent(n)">s-indent(n)</a>
+                  <a href="#ns-char">ns-char</a>
+                  <a href="#nb-char">nb-char</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[182]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-folded-lines(n)"></a>l-nb-folded-lines(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#s-nb-folded-text(n)">s-nb-folded-line(n)</a><br />
+                    <a href="#b-l-folded-any(n,s)">b-l-folded-any(n,folded)</a> )*<br />
+                  <a href="#s-nb-folded-text(n)">s-nb-folded-line(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2541144"></a>
+                <p class="title">
+                  <b>Example 4.80. Folded Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">&gt;<br /><tt class="filename">·folded&#8595;
+·line&#8595;
+&#8595;
+·next
+·line</tt>&#8595;
+
+   * bullet
+   * list
+
+<tt class="filename">·last&#8595;
+·line</tt>&#8595;
+
+# Comment
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "folded line\n\
+        next line\n\
+        \  * bullet\n\
+        \  * list\n\
+        last line\n"
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-nb-folded-lines(n)">l-nb-folded-lines(n)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Lines starting with <a id="id2541225" class="indexterm"></a><a href="#white space/">white
+              space</a> characters (<a id="id2541238" class="indexterm"></a><a id="more indented line/"></a
+            ><a href="#index-entry-more indented line"
+            ><i class="firstterm"
+            >&#8220;<span class="quote">more indented</span>&#8221; lines</i></a
+          >) are not
+              <a id="id2541256" class="indexterm"></a><a href="#line folding/">folded</a>. Note that
+              folded scalars, like <a id="id2541270" class="indexterm"></a><a href="#literal style/syntax">literal scalars</a>, may contain
+              <a id="id2541286" class="indexterm"></a><a href="#tab/">tab</a> characters. However, any
+              such characters must be properly <a id="id2541300" class="indexterm"></a><a href="#indentation space/">indented</a> using only space characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[183]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="b-l-spaced(n)"></a>b-l-spaced(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#b-normalized">b-normalized</a>
+                  <a href="#l-empty(n,s)">l-empty(n,folded)</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[184]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-nb-spaced-text(n)"></a>s-nb-spaced-text(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-indent(n)">s-indent(n)</a>
+                  <a href="#s-white">s-white</a>
+                  <a href="#nb-char">nb-char</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[185]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-spaced-lines(n)"></a>l-nb-spaced-lines(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#s-nb-spaced-text(n)">s-nb-spaced-text(n)</a>
+                  <a href="#b-l-spaced(n)">b-l-spaced(n)</a> )*<br />
+                  <a href="#s-nb-spaced-text(n)">s-nb-spaced-text(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2541396"></a>
+                <p class="title">
+                  <b>Example 4.81. Spaced Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">&gt;<br /> folded
+ line
+
+ next
+ line
+
+<tt class="filename">···* bullet&#8595;
+···* list</tt>&#8595;
+
+ last
+ line
+
+# Comment
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "folded line\n\
+        next line\n\
+        \  * bullet\n\
+        \  * list\n\
+        last line\n"
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#l-nb-spaced-lines(n)">l-nb-spaced-lines(n)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Folded content may start with either line type. If the <a id="id2541471" class="indexterm"></a><a href="#content/syntax">content</a> begins
+              with a &#8220;<span class="quote">more indented</span>&#8221; line (starting with spaces),
+              an <a id="id2541491" class="indexterm"></a><a href="#indentation indicator/">indentation
+              indicator</a> must be specified in the block header. Note
+              that leading <a id="id2541508" class="indexterm"></a><a href="#empty line/">empty lines</a>
+              and <a id="id2541520" class="indexterm"></a><a href="#empty line/">empty lines</a>
+              separating lines of a different type are never <a id="id2541534" class="indexterm"></a><a href="#line folding/">folded</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[186]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-start-with-folded(n)"></a>l-nb-start-with-folded(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#l-empty(n,s)">l-empty(n,block)</a>*
+                  <a href="#l-nb-folded-lines(n)">l-nb-folded-lines(n)</a><br />
+                  ( <a href="#b-normalized">b-normalized</a>
+                  <a href="#l-nb-start-with-spaced(n)">l-nb-start-with-spaced(n)</a> )?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[187]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-start-with-spaced(n)"></a>l-nb-start-with-spaced(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#l-empty(n,s)">l-empty(n,block)</a>*
+                  <a href="#l-nb-spaced-lines(n)">l-nb-spaced-lines(n)</a><br />
+                  ( <a href="#b-normalized">b-normalized</a>
+                  <a href="#l-nb-start-with-folded(n)">l-nb-start-with-folded(n)</a> )?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[188]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-nb-start-with-any(n)"></a>l-nb-start-with-any(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#l-nb-start-with-folded(n)">l-nb-start-with-folded(n)</a><br />
+                  | <a href="#l-nb-start-with-spaced(n)">l-nb-start-with-spaced(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2541646"></a>
+                <p class="title">
+                  <b>Example 4.82. Empty Separation Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">&gt;<br /> folded
+ line
+
+ next
+ line<tt class="filename">&#8595;</tt>
+<tt class="literal">&#8595;</tt>
+   * bullet
+   * list<tt class="filename">&#8595;</tt>
+<tt class="literal">&#8595;</tt>
+ last
+ line
+
+# Comment
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "folded line\n\
+        next line\n\
+        \  * bullet\n\
+        \  * list\n\
+        last line\n"
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#b-normalized">b-normalized</a></tt> <tt class="literal"><a href="#l-empty(n,s)">l-empty(n,s)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              The final <a id="id2541747" class="indexterm"></a><a href="#line break character/">line
+              break</a>, and trailing <a id="id2541761" class="indexterm"></a><a href="#empty line/">empty
+              lines</a>, if any, are subject to <a id="id2541774" class="indexterm"></a><a href="#chomping/">chomping</a> and are never <a id="id2541787" class="indexterm"></a><a href="#line folding/">folded</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[189]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-folded-content(n,t)"></a>l-folded-content(n,t)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  ( <a href="#l-nb-start-with-any(n)">l-nb-start-with-any(n)</a>
+                  <a href="#b-chomped-last(t)">b-chomped-last(t)</a> )?<br />
+                  <a href="#l-chomped-empty(n,t)">l-chomped-empty(n,t)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2541833"></a>
+                <p class="title">
+                  <b>Example 4.83. Final Empty Lines</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">&gt;<br /> folded
+ line
+
+ next
+ line
+
+   * bullet
+   * list
+
+ last
+ line<tt class="filename">&#8595;</tt>
+<tt class="literal">&#8595;</tt>
+# Comment
+</span></pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "folded line\n\
+        next line\n\
+        \  * bullet\n\
+        \  * list\n\
+        last line\n"
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#b-chomped-last(t)">b-chomped-last(t)</a></tt> <tt class="literal"><a href="#l-chomped-empty(n,t)">l-chomped-empty(n,t)</a></tt>
+</pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" lang="en" xml:lang="en">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="id2541922"></a>4.6. Collection Styles</h2>
+              </div>
+            </div>
+            <div></div>
+          </div>
+          <p>
+        <a id="id2541930" class="indexterm"></a><a id="collection/syntax"></a
+            ><a href="#index-entry-collection"
+            ><i class="firstterm"
+            >Collection
+        content</i></a
+          > can be presented in a single <a id="id2541948" class="indexterm"></a><a id="flow collection style/syntax"></a
+            ><a href="#index-entry-flow collection style"
+            ><i class="firstterm"
+            >flow style</i></a
+          > and a single
+        <a id="id2541967" class="indexterm"></a><a id="block collection style/syntax"></a
+            ><a href="#index-entry-block collection style"
+            ><i class="firstterm"
+            >block
+        style</i></a
+          > for each of the two <a id="id2541985" class="indexterm"></a><a href="#kind/">collection
+        kinds</a> (<a id="id2541998" class="indexterm"></a><a href="#sequence/syntax">sequence</a> and <a id="id2542015" class="indexterm"></a><a href="#mapping/syntax">mapping</a>). In addition, YAML provides
+        several <a id="id2542032" class="indexterm"></a><a href="#in-line style/syntax">in-line</a> compact syntax forms for improved
+        readability of common special cases. In all cases, the collection style
+        is a <a id="id2542050" class="indexterm"></a><a href="#presentation detail/">presentation
+        detail</a> and must not be used to convey <a id="id2542063" class="indexterm"></a><a href="#content/information model">content
+        information</a>.
+      </p>
+          <p>
+          A flow collection may be nested within a block collection (<a id="id2542083" class="indexterm"></a><a href="#flow-out context/">flow-out context</a>), nested within
+          another flow collection (<a id="id2542097" class="indexterm"></a><a href="#flow-in context/">flow-in
+          context</a>), or be a part of a <a id="id2542111" class="indexterm"></a><a href="#simple key/">simple key</a> (<a id="id2542124" class="indexterm"></a><a href="#flow-key context/">flow-key context</a>). Flow collection entries are
+          separated by the <a id="id2542138" class="indexterm"></a><a id=", end flow entry/"></a
+            ><a href="#index-entry-, end flow entry"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221; indicator</i></a
+          >. The final
+          &#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221; may be ommitted. This does not cause ambiguity
+          because flow collection entries can never be <a id="id2542167" class="indexterm"></a><a href="#completely empty node/">completely empty</a>.
+        </p>
+          <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+            <tr>
+              <td>
+                <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                  <tr>
+                    <td align="left" valign="top" class="productioncounter">[190]</td>
+                    <td align="right" valign="top" class="productionlhs"><a id="in-flow(c)"></a>in-flow(c)</td>
+                    <td valign="top" class="productionseperator" align="center">
+                      <tt>::=</tt>
+                    </td>
+                    <td valign="top" class="productionrhs">
+              <tt class="varname">c</tt> = flow-out &#8658; flow-in<br />
+              <tt class="varname">c</tt> = flow-in  &#8658; flow-in<br />
+              <tt class="varname">c</tt> = flow-key &#8658; flow-key
+            </td>
+                    <td align="left" valign="top" class="productioncomment"> </td>
+                  </tr>
+                </table>
+              </td>
+            </tr>
+          </table>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2542214"></a>4.6.1. Sequence Styles</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          <a id="id2542222" class="indexterm"></a><a id="sequence/syntax"></a
+            ><a href="#index-entry-sequence"
+            ><i class="firstterm"
+            >Sequence
+          content</i></a
+          > is an ordered collection of sub-<a id="id2542240" class="indexterm"></a><a href="#node/syntax">nodes</a>. <a id="id2542254" class="indexterm"></a><a href="#comment/syntax">Comments</a> may be
+          interleaved between the sub-<a id="id2542270" class="indexterm"></a><a href="#node/syntax">nodes</a>. Sequences may be <a id="id2542285" class="indexterm"></a><a href="#present/">presented</a> in a <a id="id2542298" class="indexterm"></a><a href="#flow sequence style/syntax">flow style</a> or a <a id="id2542315" class="indexterm"></a><a href="#block sequence style/syntax">block
+          style</a>. YAML provides compact notations for <a id="id2542331" class="indexterm"></a><a href="#in-line style/syntax">in-line</a> nesting
+          of a <a id="id2542347" class="indexterm"></a><a href="#collection/syntax">collection</a> in a <a id="id2542362" class="indexterm"></a><a href="#block sequence style/syntax">block sequence</a> and for
+          nesting a <a id="id2542379" class="indexterm"></a><a href="#single pair style/syntax">single pair mapping</a> in a <a id="id2542397" class="indexterm"></a><a href="#flow sequence style/syntax">flow
+          sequence</a>.
+        </p>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2542413"></a>4.6.1.1. Flow Sequences</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              <a id="id2542421" class="indexterm"></a><a id="flow sequence style/syntax"></a
+            ><a href="#index-entry-flow sequence style"
+            ><i class="firstterm"
+            >Flow
+              sequence content</i></a
+          > is denoted by surrounding <a id="id2542439" class="indexterm"></a><a id="[ start flow sequence/"></a
+            ><a href="#index-entry-[ start flow sequence"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>[</tt></b></span>&#8221;</i></a
+          > and
+              <a id="id2542459" class="indexterm"></a><a id="] end flow sequence/"></a
+            ><a href="#index-entry-] end flow sequence"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>]</tt></b></span>&#8221;</i></a
+          > characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[191]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-flow-sequence(n,c)"></a>c-flow-sequence(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-sequence-start">&#8220;<span class="quote">[</span>&#8221;</a>
+                  <a href="#s-separate(n,c)">s-separate(n,c)</a>?<br />
+                  <a href="#ns-s-flow-seq-inner(n,c)">ns-s-flow-seq-inner(n,c)</a>*<br />
+                  <a href="#ns-s-flow-seq-last(n,c)">ns-s-flow-seq-last(n,c)</a>?<br />
+                  <a href="#c-sequence-end">&#8220;<span class="quote">]</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Sequence entries are separated by a <a id="id2542532" class="indexterm"></a><a href="#, end flow entry/">&#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221;</a> character.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[192]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-seq-inner(n,c)"></a>ns-s-flow-seq-inner(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-s-flow-seq-entry(n,c)">ns-s-flow-seq-entry(n,c)</a>
+                  <a href="#c-collect-entry">&#8220;<span class="quote">,</span>&#8221;</a>
+                  <a href="#s-separate(n,c)">s-separate(n,c)</a>?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              The final entry may omit the <a id="id2542586" class="indexterm"></a><a href="#, end flow entry/">&#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221;</a> character. This does not
+              cause ambiguity since sequence entries must not be <a id="id2542606" class="indexterm"></a><a href="#completely empty node/">completely empty</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[193]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-seq-last(n,c)"></a>ns-s-flow-seq-last(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-s-flow-seq-entry(n,c)">ns-s-flow-seq-entry(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2542640"></a>
+                <p class="title">
+                  <b>Example 4.84. Flow Sequence</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- <tt class="filename">[</tt> <tt class="literal">inner, </tt><tt class="literal">inner, </tt><tt class="filename">]</tt><br />- <tt class="filename">[</tt><tt class="literal">inner,</tt><span class="property">last</span><tt class="filename">]</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-sequence-start">c-sequence-start</a></tt> <tt class="filename"><a href="#c-sequence-end">c-sequence-end</a></tt>
+  <tt class="literal"><a href="#ns-s-flow-seq-inner(n,c)">ns-s-flow-seq-inner(n,c)</a></tt>
+  <span class="property"><a href="#ns-s-flow-seq-last(n,c)">ns-s-flow-seq-last(n,c)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!seq [
+    !!str "inner",
+    !!str "inner",
+  ],
+  !!seq [
+    !!str "inner",
+    !!str "last",
+  ],
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Any <a id="id2542778" class="indexterm"></a><a href="#flow style/syntax">flow
+              node</a> may be used as a flow sequence entry. In addition,
+              YAML provides a compact form for the case where a flow sequence
+              entry is a <a id="id2542796" class="indexterm"></a><a href="#mapping/syntax">mapping</a> with a <a id="id2542812" class="indexterm"></a><a href="#single pair style/syntax">single
+              key: value pair</a>, and neither the <a id="id2542829" class="indexterm"></a><a href="#mapping/syntax">mapping node</a> nor
+              its single <a id="id2542844" class="indexterm"></a><a href="#key/syntax">key
+              node</a> have any <a id="id2542859" class="indexterm"></a><a href="#node property/">properties</a> specified.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[194]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-seq-entry(n,c)"></a>ns-s-flow-seq-entry(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    ( <a href="#ns-flow-node(n,c)">ns-flow-node(n,<a href="#in-flow(c)">in-flow(c)</a>)</a><br />
+                      <a href="#s-separate(n,c)">s-separate(n,<a href="#in-flow(c)">in-flow(c)</a>)</a>? )<br />
+                  | <a href="#ns-s-flow-single-pair(n,c)">ns-s-flow-single-pair(n,<a href="#in-flow(c)">in-flow(c)</a>)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2542926"></a>
+                <p class="title">
+                  <b>Example 4.85. Flow Sequence Entries</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">[<br /><tt class="filename">"double
+ quoted"</tt>, <tt class="filename">'single
+           quoted'</tt>,
+<tt class="filename">plain
+ text</tt>, <tt class="filename">[ nested ]</tt>,
+<tt class="literal">single: pair </tt>,
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-flow-node(n,c)">ns-flow-node(n,c)</a></tt>
+  <tt class="literal"><a href="#ns-s-flow-single-pair(n,c)">ns-s-flow-single-pair(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "double quoted",
+  !!str "single quoted",
+  !!str "plain text",
+  !!seq [
+    !!str "nested",
+  ],
+  !!map {
+    ? !!str "single"
+    : !!str "pair"
+  }
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2543032"></a>4.6.1.2. Block Sequences</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              A <a id="id2543040" class="indexterm"></a><a id="block sequence style/syntax"></a
+            ><a href="#index-entry-block sequence style"
+            ><i class="firstterm"
+            >block sequence</i></a
+          > is simply a series of
+              entries, each <a id="id2543060" class="indexterm"></a><a href="#present/">presenting</a> a
+              single <a id="id2543072" class="indexterm"></a><a href="#node/syntax">node</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[195]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-l-block-sequence(n,c)"></a>c-l-block-sequence(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-l-comments">c-l-comments</a>
+                  <a href="#l-block-seq-entry(n,c)">l-block-seq-entry(n,c)</a>+
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2543114"></a>
+                <p class="title">
+                  <b>Example 4.86. Block Sequence</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">block: <tt class="filename"># Block<br />       # sequence&#8595;</tt>
+<tt class="literal">- one&#8595;</tt>
+<tt class="literal">- two : three&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-l-comments">c-l-comments</a></tt>
+  <tt class="literal"><a href="#l-block-seq-entry(n,c)">l-block-seq-entry(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "block"
+  : !!seq [
+    !!str "one",
+    !!str "two"
+  ]
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Each block sequence entry is denoted by a leading <a id="id2543210" class="indexterm"></a><a id="- block sequence entry/"></a
+            ><a href="#index-entry-- block sequence entry"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221;
+              indicator</i></a
+          >, <a id="id2543230" class="indexterm"></a><a href="#separation space/">separated</a> by spaces from the entry <a id="id2543245" class="indexterm"></a><a href="#node/syntax">node</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[196]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-block-seq-entry(n,c)"></a>l-block-seq-entry(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-indent(n)">s-indent(seq-spaces(n,c))</a>
+                  <a href="#c-sequence-entry">&#8220;<span class="quote">-</span>&#8221;</a><br />
+                  <a href="#s-l+block-indented(n,c)">s-l+block-indented(seq-spaces(n,c),c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              People read the &#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221; character as part of the
+              <a id="id2543307" class="indexterm"></a><a href="#indentation space/">indentation</a>.
+              Hence, block sequence entries require one less space of <a id="id2543321" class="indexterm"></a><a href="#indentation space/">indentation</a>, unless the
+              block sequence is nested within another block sequence (hence the
+              need for the <a id="id2543336" class="indexterm"></a><a id="block-in context/"></a
+            ><a href="#index-entry-block-in context"
+            ><i class="firstterm"
+            >block-in
+              context</i></a
+          > and <a id="id2543351" class="indexterm"></a><a id="block-out context/"></a
+            ><a href="#index-entry-block-out context"
+            ><i class="firstterm"
+            >block-out context</i></a
+          >).
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[197]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="seq-spaces(n,c)"></a>seq-spaces(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <tt class="varname">c</tt> = block-out &#8658; n-1<br />
+                  <tt class="varname">c</tt> = block-in  &#8658; n
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2543394"></a>
+                <p class="title">
+                  <b>Example 4.87. Block Sequence Entry Indentation</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">block:<br /><tt class="literal">- one</tt>
+<span class="honorific"><tt class="literal">-
+<tt class="filename">·</tt><tt class="literal">- two</tt></tt></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-indent(n)">s-indent(n)</a></tt>
+  <tt class="literal"><a href="#s-l+block-indented(n,c)">s-l+block-indented(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "block"
+  : !!seq [
+    !!str "one",
+    !!seq [
+      !!str "two"
+    ]
+  ]
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              The entry <a id="id2543491" class="indexterm"></a><a href="#node/syntax">node</a> may be either <a id="id2543506" class="indexterm"></a><a href="#completely empty node/">completely empty</a>, a
+              normal <a id="id2543520" class="indexterm"></a><a href="#block style/syntax">block
+              node</a>, or use a compact in-line form.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[198]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l+block-indented(n,c)"></a>s-l+block-indented(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#s-l-empty-block">s-l-empty-block</a><br />
+                  | <a href="#s-l+block-node(n,c)">s-l+block-node(n,c)</a><br />
+                  | <a href="#s-l+block-in-line(n)">s-l+block-in-line(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              The compact <a id="id2543574" class="indexterm"></a><a id="in-line style/syntax"></a
+            ><a href="#index-entry-in-line style"
+            ><i class="firstterm"
+            >in-line</i></a
+          > form may be used in the
+              common case when the block sequence entry is itself a <a id="id2543593" class="indexterm"></a><a href="#block collection style/syntax">block
+              collection</a>, and neither the <a id="id2543609" class="indexterm"></a><a href="#collection/syntax">collection</a>
+              entry nor its first nested <a id="id2543626" class="indexterm"></a><a href="#node/syntax">node</a> have any <a id="id2543640" class="indexterm"></a><a href="#node property/">properties</a> specified. In this case, the
+              nested <a id="id2543655" class="indexterm"></a><a href="#collection/syntax">collection</a> may be specified in the
+              same line as the &#8220;<span class="quote"><b class="userinput"><tt>-</tt></b></span>&#8221; character, and any following
+              spaces are considered part of the in-line nested <a id="id2543679" class="indexterm"></a><a href="#collection/syntax">collection's</a>
+              <a id="id2543694" class="indexterm"></a><a href="#indentation space/">indentation</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[199]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l+block-in-line(n)"></a>s-l+block-in-line(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-indent(n)">s-indent(m&gt;0)</a><br />
+                  ( <a href="#ns-l-in-line-sequence(n)">ns-l-in-line-sequence(n+1+m)</a><br />
+                  | <a href="#ns-l-in-line-mapping(n)">ns-l-in-line-mapping(n+1+m)</a> )
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              An <a id="id2543749" class="indexterm"></a><a id="in-line sequence style/"></a
+            ><a href="#index-entry-in-line sequence style"
+            ><i class="firstterm"
+            >in-line block
+              sequence</i></a
+          > begins with an <a id="id2543766" class="indexterm"></a><a href="#indentation space/">indented</a> same-line sequence entry, followed by
+              optional additional normal block sequence entries, properly
+              <a id="id2543782" class="indexterm"></a><a href="#indentation space/">indented</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[200]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l-in-line-sequence(n)"></a>ns-l-in-line-sequence(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-sequence-entry">&#8220;<span class="quote">-</span>&#8221;</a>
+                  <a href="#s-l+block-indented(n,c)">s-l+block-indented(n,block-out)</a><br />
+                  <a href="#l-block-seq-entry(n,c)">l-block-seq-entry(n,block-out)</a>*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2543832"></a>
+                <p class="title">
+                  <b>Example 4.88. Block Sequence Entry Types</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">-<tt class="filename"> # Empty</tt><br />-<tt class="literal"> |
+ block node</tt>
+-<span class="honorific"><span class="property"> -<tt class="literal"> one # in-line</tt>
+  -<tt class="literal"> two # sequence</tt></span></span>
+-<span class="honorific"><span class="property"><tt class="literal"> one: two # in-line
+           # mapping</tt></span></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#s-l-empty-block">s-l-empty-block</a></tt>
+  <tt class="literal"><a href="#s-l+block-node(n,c)">s-l+block-node(n,c)</a></tt>
+  <span class="property"><a href="#s-l+block-in-line(n)">s-l+block-in-line(n)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!str "",
+  !!str "block node\n",
+  !!seq [
+    !!str "one",
+    !!str "two",
+  ]
+  !!map {
+    ? !!str "one"
+    : !!str "two",
+  }
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" lang="en" xml:lang="en">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id2543957"></a>4.6.2. Mapping Styles</h3>
+                </div>
+              </div>
+              <div></div>
+            </div>
+            <p>
+          A <a id="id2543966" class="indexterm"></a><a id="mapping/syntax"></a
+            ><a href="#index-entry-mapping"
+            ><i class="firstterm"
+            >mapping
+          node</i></a
+          > is an unordered collection of <a id="id2543984" class="indexterm"></a><a id="key/syntax"></a
+            ><a href="#index-entry-key"
+            ><i class="firstterm"
+            >key:</i></a
+          > <a id="id2544000" class="indexterm"></a><a id="value/syntax"></a
+            ><a href="#index-entry-value"
+            ><i class="firstterm"
+            >value</i></a
+          > pairs. Of necessity, these pairs
+          are <a id="id2544017" class="indexterm"></a><a href="#present/">presented</a> in some <a id="id2544029" class="indexterm"></a><a href="#key order/">order</a> in the characters <a id="id2544042" class="indexterm"></a><a href="#stream/syntax">stream</a>. As a <a id="id2544058" class="indexterm"></a><a href="#serialization detail/">serialization detail</a>, this
+          <a id="id2544071" class="indexterm"></a><a href="#key order/">key order</a> is preserved in the
+          <a id="id2544084" class="indexterm"></a><a href="#serialization/">serialization tree</a>.
+          However it is not reflected in the <a id="id2544098" class="indexterm"></a><a href="#representation/">representation graph</a> and hence
+          must not be used when <a id="id2544113" class="indexterm"></a><a href="#construct/">constructing</a> native data structures. It
+          is an error for two <a id="id2544126" class="indexterm"></a><a href="#equality/">equal</a> keys
+          to appear in the same mapping value. In such a case the YAML <a id="id2544140" class="indexterm"></a><a href="#processor/">processor</a> may continue, ignoring the
+          second key: value pair and issuing an appropriate warning. This
+          strategy preserves a consistent information model for one-pass and
+          random access <a id="id2544161" class="indexterm"></a><a href="#application/">applications</a>.
+        </p>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2544175"></a>4.6.2.1. Flow Mappings</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              <a id="id2544183" class="indexterm"></a><a id="flow mapping style/syntax"></a
+            ><a href="#index-entry-flow mapping style"
+            ><i class="firstterm"
+            >Flow
+              mapping content</i></a
+          > is denoted by surrounding <a id="id2544201" class="indexterm"></a><a id="{ start flow mapping/"></a
+            ><a href="#index-entry-{ start flow mapping"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>{</tt></b></span>&#8221;</i></a
+          > and
+              <a id="id2544221" class="indexterm"></a><a id="} end flow mapping/"></a
+            ><a href="#index-entry-} end flow mapping"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>}</tt></b></span>&#8221;</i></a
+          > characters.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[201]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-flow-mapping(n,c)"></a>c-flow-mapping(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-mapping-start">&#8220;<span class="quote">{</span>&#8221;</a>
+                  <a href="#s-separate(n,c)">s-separate(n,c)</a>?<br />
+                  <a href="#ns-s-flow-map-inner(n,c)">ns-s-flow-map-inner(n,c)</a>*<br />
+                  <a href="#ns-s-flow-map-last(n,c)">ns-s-flow-map-last(n,c)</a>?<br />
+                  <a href="#c-mapping-end">&#8220;<span class="quote">}</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Mapping entries are separated by a <a id="id2544293" class="indexterm"></a><a href="#, end flow entry/">&#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221;</a> character.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[202]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-map-inner(n,c)"></a>ns-s-flow-map-inner(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-s-flow-map-entry(n,c)">ns-s-flow-map-entry(n,c)</a>
+                  <a href="#c-collect-entry">&#8220;<span class="quote">,</span>&#8221;</a>
+                  <a href="#s-separate(n,c)">s-separate(n,c)</a>?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              The final entry may omit the <a id="id2544347" class="indexterm"></a><a href="#, end flow entry/">&#8220;<span class="quote"><b class="userinput"><tt>,</tt></b></span>&#8221;</a> character. This does not
+              cause ambiguity since mapping entries must not be <a id="id2544367" class="indexterm"></a><a href="#completely empty node/">completely empty</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[203]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-map-last(n,c)"></a>ns-s-flow-map-last(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-s-flow-map-entry(n,c)">ns-s-flow-map-entry(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2544402"></a>
+                <p class="title">
+                  <b>Example 4.89. Flow Mappings</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- <tt class="filename">{</tt> <tt class="literal">inner : entry , </tt><tt class="literal">also: inner , </tt><tt class="filename">}</tt><br />- <tt class="filename">{</tt><tt class="literal">inner: entry,</tt><span class="property">last : entry</span><tt class="filename">}</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-mapping-start">c-mapping-start</a></tt> <tt class="filename"><a href="#c-mapping-end">c-mapping-end</a></tt>
+  <tt class="literal"><a href="#ns-s-flow-map-inner(n,c)">ns-s-flow-map-inner(n,c)</a></tt>
+  <span class="property"><a href="#ns-s-flow-map-last(n,c)">ns-s-flow-map-last(n,c)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!map {
+    ? !!str "inner"
+    : !!str "entry",
+    ? !!str "also"
+    : !!str "inner"
+  },
+  !!map {
+    ? !!str "inner"
+    : !!str "entry",
+    ? !!str "last"
+    : !!str "entry"
+  }
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Flow mappings allow two forms of keys: explicit and simple.
+            </p>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Explicit Keys</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    An <a id="id2544556" class="indexterm"></a><a id="explicit key/"></a
+            ><a href="#index-entry-explicit key"
+            ><i class="firstterm"
+            >explicit key</i></a
+          >
+                    is denoted by the <a id="id2544571" class="indexterm"></a><a id="? mapping key/"></a
+            ><a href="#index-entry-? mapping key"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221; indicator</i></a
+          >, followed by
+                    <a id="id2544592" class="indexterm"></a><a href="#separation space/">separation</a>
+                    spaces.
+                  </p>
+                  </dd>
+                </dl>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[204]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-flow-separated(n,c)"></a>s-flow-separated(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    ( <a href="#s-separate(n,c)">s-separate(n,c)</a>
+                  <a href="#ns-flow-node(n,c)">ns-flow-node(n,<a href="#in-flow(c)">in-flow(c)</a>)</a><br />
+                      <a href="#s-separate(n,c)">s-separate(n,c)</a>? )<br />
+                  | ( <a href="#e-empty-flow">e-empty-flow</a>
+                  <a href="#s-separate(n,c)">s-separate(n,c)</a> )
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[205]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-s-flow-explicit-key(n,c)"></a>c-s-flow-explicit-key(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-mapping-key">&#8220;<span class="quote">?</span>&#8221;</a>
+                  <a href="#s-flow-separated(n,c)">s-flow-separated(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Simple Keys</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    A <a id="id2544696" class="indexterm"></a><a id="simple key/"></a
+            ><a href="#index-entry-simple key"
+            ><i class="firstterm"
+            >simple key</i></a
+          > has no
+                    identifying mark. It is recognized as being a key either
+                    due to being inside a flow mapping, or by being followed by
+                    an explicit value. Hence, to avoid unbound lookahead in
+                    YAML <a id="id2544715" class="indexterm"></a><a href="#processor/">processors</a>,
+                    simple keys are restricted to a single line and must not
+                    span more than 1024 <a id="id2544729" class="indexterm"></a><a href="#stream/syntax">stream</a> characters (hence the
+                    need for the <a id="id2544746" class="indexterm"></a><a id="flow-key context/"></a
+            ><a href="#index-entry-flow-key context"
+            ><i class="firstterm"
+            >flow-key
+                    context</i></a
+          >). Note the 1024 character limit is in
+                    terms of Unicode characters rather than stream octets, and
+                    that it includes the <a id="id2544764" class="indexterm"></a><a href="#separation space/">separation</a> following the key itself.
+                  </p>
+                  </dd>
+                </dl>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[206]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-simple-key(n,c)"></a>ns-s-flow-simple-key(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-flow-node(n,c)">ns-flow-node(n,flow-key)</a>
+                  <a href="#s-flow-separated(n,c)">s-flow-separated(n,c)</a>?
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2544809"></a>
+                <p class="title">
+                  <b>Example 4.90. Flow Mapping Keys</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">{<br /><tt class="filename">? </tt>: value # Empty key
+<tt class="filename">? explicit
+ key</tt>: value,
+<tt class="literal">simple key </tt>: value
+<tt class="literal">[ collection, simple, key ]</tt>: value
+}
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-s-flow-explicit-key(n,c)">c-s-flow-explicit-key(n,c)</a></tt>
+  <tt class="literal"><a href="#ns-s-flow-simple-key(n,c)">ns-s-flow-simple-key(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str ""
+  : !!str "value",
+  ? !!str "explicit key"
+  : !!str "value",
+  ? !!str "simple key"
+  : !!str "value",
+  ? !!seq [
+    !!str "collection",
+    !!str "simple",
+    !!str "key"
+  ]
+  : !!str "value"
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <div class="example">
+                <a id="id2544911"></a>
+                <p class="title">
+                  <b>Example 4.91. Invalid Flow Mapping Keys</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="screen"><span class="database">{<br /><tt class="filename">multi-line
+ simple key</tt> : value,
+<tt class="literal">very long ...(&gt;1KB)... key</tt>: value
+}
+</span></pre>
+              </td>
+                    <td>
+<pre class="screen"><span class="database">ERROR:<br />- A simple key is restricted
+  to only <tt class="filename">one line</tt>.
+- A simple key msut not be
+  longer than <tt class="literal">1024</tt> bytes.
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Flow mappings also allow two forms of values, explicit and
+              <a id="id2544984" class="indexterm"></a><a href="#completely empty node/">completely
+              empty</a>.
+            </p>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Explicit Values</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    An <a id="id2545011" class="indexterm"></a><a id="explicit value/"></a
+            ><a href="#index-entry-explicit value"
+            ><i class="firstterm"
+            >explicit
+                    value</i></a
+          > is denoted by the <a id="id2545027" class="indexterm"></a><a id=": mapping value/"></a
+            ><a href="#index-entry-: mapping value"
+            ><i class="firstterm"
+            >&#8220;<span class="quote"><b class="userinput"><tt>:</tt></b></span>&#8221; indicator</i></a
+          >,
+                    followed by <a id="id2545048" class="indexterm"></a><a href="#separation space/">separation</a> spaces.
+                  </p>
+                  </dd>
+                </dl>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[207]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-s-flow-explicit-value(n,c)"></a>c-s-flow-explicit-value(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-mapping-value">&#8220;<span class="quote">:</span>&#8221;</a>
+                  <a href="#s-flow-separated(n,c)">s-flow-separated(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2545093"></a>
+                <p class="title">
+                  <b>Example 4.92. Flow Mapping Values</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">{<br />key <tt class="filename">: value</tt>,
+empty<tt class="filename">:° # empty value&#8595;</tt>
+}
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-s-flow-explicit-value(n,c)">c-s-flow-explicit-value(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "key"
+  : !!str "value",
+  ? !!str "empty"
+  : !!str "",
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              Thus, there are four possible combinations for a flow mapping
+              entry:
+            </p>
+              <div class="itemizedlist">
+                <ul type="disc">
+                  <li>
+                    <p>
+                  Explicit key and explicit value:
+                </p>
+                  </li>
+                </ul>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[208]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-s-flow-explicit-explicit(n,c)"></a>c-s-flow-explicit-explicit(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-s-flow-explicit-key(n,c)">c-s-flow-explicit-key(n,c)</a><br />
+                  <a href="#c-s-flow-explicit-value(n,c)">c-s-flow-explicit-value(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="itemizedlist">
+                <ul type="disc">
+                  <li>
+                    <p>
+                    Explicit key and <a id="id2545219" class="indexterm"></a><a href="#completely empty node/">completely empty</a> value:
+                </p>
+                  </li>
+                </ul>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[209]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-s-flow-explicit-empty(n,c)"></a>c-s-flow-explicit-empty(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-s-flow-explicit-key(n,c)">c-s-flow-explicit-key(n,c)</a>
+                  <a href="#e-empty-flow">e-empty-flow</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="itemizedlist">
+                <ul type="disc">
+                  <li>
+                    <p>
+                    Simple key and explicit value:
+                </p>
+                  </li>
+                </ul>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[210]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-simple-explicit(n,c)"></a>ns-s-flow-simple-explicit(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-s-flow-simple-key(n,c)">ns-s-flow-simple-key(n,c)</a><br />
+                  <a href="#c-s-flow-explicit-value(n,c)">c-s-flow-explicit-value(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="itemizedlist">
+                <ul type="disc">
+                  <li>
+                    <p>
+                  Simple key and <a id="id2545306" class="indexterm"></a><a href="#completely empty node/">completely empty</a> value:
+                </p>
+                  </li>
+                </ul>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[211]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-simple-empty(n,c)"></a>ns-s-flow-simple-empty(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-s-flow-simple-key(n,c)">ns-s-flow-simple-key(n,c)</a>
+                  <a href="#e-empty-flow">e-empty-flow</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <p>
+              Inside flow mappings, all four combinations may be used.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[212]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-map-entry(n,c)"></a>ns-s-flow-map-entry(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#c-s-flow-explicit-explicit(n,c)">c-s-flow-explicit-explicit(n,c)</a><br />
+                  | <a href="#c-s-flow-explicit-empty(n,c)">c-s-flow-explicit-empty(n,c)</a><br />
+                  | <a href="#ns-s-flow-simple-explicit(n,c)">ns-s-flow-simple-explicit(n,c)</a><br />
+                  | <a href="#ns-s-flow-simple-empty(n,c)">ns-s-flow-simple-empty(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2545394"></a>
+                <p class="title">
+                  <b>Example 4.93. Flow Mapping Key: Value Pairs</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">{<br /><tt class="filename">? explicit key1 : Explicit value</tt>,
+<tt class="filename">? explicit key2 :° </tt>, # Explicit empty
+<tt class="literal">? explicit key3,</tt>     # Empty value
+<span class="property">simple key1 : explicit value</span>,
+<span class="property">simple key2 :° </span>,     # Explicit empty
+<tt class="constant">simple key3</tt>,         # Empty value
+}
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-s-flow-explicit-explicit(n,c)">c-s-flow-explicit-explicit(n,c)</a></tt>
+  <tt class="literal"><a href="#c-s-flow-explicit-empty(n,c)">c-s-flow-explicit-empty(n,c)</a></tt>
+  <span class="property"><a href="#ns-s-flow-simple-explicit(n,c)">ns-s-flow-simple-explicit(n,c)</a></span>
+  <tt class="constant"><a href="#ns-s-flow-simple-empty(n,c)">ns-s-flow-simple-empty(n,c)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "explicit key1"
+  : !!str "explicit value",
+  ? !!str "explicit key2"
+  : !!str "",
+  ? !!str "explicit key3"
+  : !!str "",
+  ? !!str "simple key1"
+  : !!str "explicit value",
+  ? !!str "simple key2"
+  : !!str "",
+  ? !!str "simple key3"
+  : !!str "",
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              YAML also allows omitting the surrounding &#8220;<span class="quote"><b class="userinput"><tt>{</tt></b></span>&#8221; and
+              &#8220;<span class="quote"><b class="userinput"><tt>}</tt></b></span>&#8221; characters when nesting a flow mapping in a
+              <a id="id2545550" class="indexterm"></a><a href="#flow sequence style/syntax">flow
+              sequence</a> if the mapping consists of a <a id="id2545566" class="indexterm"></a><a id="single pair style/syntax"></a
+            ><a href="#index-entry-single pair style"
+            ><i class="firstterm"
+            >single
+              key: value pair</i></a
+          > and neither the mapping nor the
+              key have any <a id="id2545586" class="indexterm"></a><a href="#node property/">properties</a> specified. In this case, only
+              three of the combinations may be used, to prevent ambiguity.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[213]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-s-flow-single-pair(n,c)"></a>ns-s-flow-single-pair(n,c)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#c-s-flow-explicit-explicit(n,c)">c-s-flow-explicit-explicit(n,c)</a><br />
+                  | <a href="#c-s-flow-explicit-empty(n,c)">c-s-flow-explicit-empty(n,c)</a><br />
+                  | <a href="#ns-s-flow-simple-explicit(n,c)">ns-s-flow-simple-explicit(n,c)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2545637"></a>
+                <p class="title">
+                  <b>Example 4.94. Single Pair Mappings</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">[<br /><tt class="filename">? explicit key1 : explicit value</tt>,
+<tt class="filename">? explicit key2 :° </tt>, # Explicit value
+<tt class="literal">? explicit key3,</tt>     # Empty value
+<span class="property">simple key1 : explicit value</span>,
+<span class="property">simple key2 :° </span>,     # Explicit empty
+]
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-s-flow-explicit-explicit(n,c)">c-s-flow-explicit-explicit(n,c)</a></tt>
+  <tt class="literal"><a href="#c-s-flow-explicit-empty(n,c)">c-s-flow-explicit-empty(n,c)</a></tt>
+  <span class="property"><a href="#ns-s-flow-simple-explicit(n,c)">ns-s-flow-simple-explicit(n,c)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq [
+  !!map {
+    ? !!str "explicit key1"
+    : !!str "explicit value",
+  },
+  !!map {
+    ? !!str "explicit key2"
+    : !!str "",
+  },
+  !!map {
+    ? !!str "explicit key3"
+    : !!str "",
+  },
+  !!map {
+    ? !!str "simple key1"
+    : !!str "explicit value",
+  },
+]
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+            <div class="sect3" lang="en" xml:lang="en">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="id2545757"></a>4.6.2.2. Block Mappings</h4>
+                  </div>
+                </div>
+                <div></div>
+              </div>
+              <p>
+              A <a id="id2545765" class="indexterm"></a><a id="block mapping style/syntax"></a
+            ><a href="#index-entry-block mapping style"
+            ><i class="firstterm"
+            >Block
+              mapping</i></a
+          > is simply a series of entries, each <a id="id2545784" class="indexterm"></a><a href="#present/">presenting</a> a key: value pair.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[214]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="c-l-block-mapping(n)"></a>c-l-block-mapping(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-l-comments">c-l-comments</a><br />
+                  ( <a href="#s-indent(n)">s-indent(n)</a>
+                  <a href="#ns-l-block-map-entry(n)">ns-l-block-map-entry(n)</a> )+
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2545830"></a>
+                <p class="title">
+                  <b>Example 4.95. Block Mappings</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">block: <tt class="filename"># Block<br />    # mapping&#8595;</tt>
+<tt class="literal">·</tt><span class="property">key: value&#8595;</span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#c-l-comments">c-l-comments</a></tt>
+  <tt class="literal"><a href="#s-indent(n)">s-indent(n)</a></tt>
+  <span class="property"><a href="#ns-l-block-map-entry(n)">ns-l-block-map-entry(n)</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "block"
+  : !!map {
+    !!str "key",
+    !!str "value"
+  }
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              A block mapping entry may be <a id="id2545934" class="indexterm"></a><a href="#present/">presented</a> using either an explicit or
+              a simple key.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[215]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l-block-map-entry(n)"></a>ns-l-block-map-entry(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#ns-l-block-explicit-entry(n)">ns-l-block-explicit-entry(n)</a><br />
+                  | <a href="#ns-l-block-simple-entry(n)">ns-l-block-simple-entry(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Explicit Key Entries</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    <a id="id2545988" class="indexterm"></a><a href="#explicit key/">Explicit key
+                    nodes</a> are denoted by the <a id="id2546004" class="indexterm"></a><a href="#? mapping key/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</a> character. YAML
+                    allows here the same <a id="id2546022" class="indexterm"></a><a href="#in-line style/syntax">inline</a> compact notation
+                    described above for <a id="id2546039" class="indexterm"></a><a href="#block sequence style/syntax">block sequence</a> entries, in
+                    which case the <a id="id2546055" class="indexterm"></a><a href="#? mapping key/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</a> character is considered
+                    part of the key's <a id="id2546074" class="indexterm"></a><a href="#indentation space/">indentation</a>.
+                  </p>
+                  </dd>
+                </dl>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[216]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l-block-explicit-key(n)"></a>ns-l-block-explicit-key(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#c-mapping-key">&#8220;<span class="quote">?</span>&#8221;</a>
+                  <a href="#s-l+block-indented(n,c)">s-l+block-indented(n,block-out)</a><br />
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="itemizedlist">
+                <ul type="none">
+                  <li style="list-style-type: none">
+                    <p>
+                  In an explicit key entry, value nodes begin on a separate
+                  line and are denoted by by the <a id="id2546132" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>:</tt></b></span>&#8221;</a> character. Here again
+                  YAML allows the use of the <a id="id2546152" class="indexterm"></a><a href="#in-line style/syntax">inline</a> compact notation which
+                  case the <a id="id2546168" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>:</tt></b></span>&#8221;</a> character is considered
+                  part of the values's <a id="id2546187" class="indexterm"></a><a href="#indentation space/">indentation</a>.
+                </p>
+                  </li>
+                </ul>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[217]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="l-block-explicit-value(n)"></a>l-block-explicit-value(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#s-indent(n)">s-indent(n)</a>
+                  <a href="#c-mapping-value">&#8220;<span class="quote">:</span>&#8221;</a><br />
+                  <a href="#s-l+block-indented(n,c)">s-l+block-indented(n,block-out)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="itemizedlist">
+                <ul type="none">
+                  <li style="list-style-type: none">
+                    <p>
+                  An explicit key entry may also use a <a id="id2546247" class="indexterm"></a><a href="#completely empty node/">completely empty</a>
+                  value.
+                </p>
+                  </li>
+                </ul>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[218]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l-block-explicit-entry(n)"></a>ns-l-block-explicit-entry(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-l-block-explicit-key(n)">ns-l-block-explicit-key(n)</a><br />
+                  ( <a href="#l-block-explicit-value(n)">l-block-explicit-value(n)</a><br />
+                  | <a href="#e-empty-flow">e-empty-flow</a> )
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2546298"></a>
+                <p class="title">
+                  <b>Example 4.96. Explicit Block Mapping Entries</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><tt class="filename">? explicit key # implicit value&#8595;</tt><span class="property">°</span><br /><tt class="filename">? |
+  block key&#8595;</tt>
+<tt class="literal">: - one # explicit in-line
+  - two # block value&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-l-block-explicit-key(n)">ns-l-block-explicit-key(n)</a></tt>
+  <tt class="literal"><a href="#l-block-explicit-value(n)">l-block-explicit-value(n)</a></tt>
+  <span class="property"><a href="#e-empty-flow">e-empty-flow</a></span>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "explicit key"
+  : !!str "",
+  ? !!str "block key\n"
+  : !!seq [
+    !!str "one",
+    !!str "two",
+  ]
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <div class="variablelist">
+                <dl>
+                  <dt>
+                    <span class="term">Simple Key Entries</span>
+                  </dt>
+                  <dd>
+                    <p>
+                    YAML allows the <a id="id2546420" class="indexterm"></a><a href="#? mapping key/">&#8220;<span class="quote"><b class="userinput"><tt>?</tt></b></span>&#8221;</a> character to be omitted
+                    for <a id="id2546439" class="indexterm"></a><a href="#simple key/">simple keys</a>.
+                    Similarly to flow mapping, such a key is recognized by a
+                    following <a id="id2546452" class="indexterm"></a><a href="#: mapping value/">&#8220;<span class="quote"><b class="userinput"><tt>:</tt></b></span>&#8221;</a> character. Again, to
+                    avoid unbound lookahead in YAML <a id="id2546472" class="indexterm"></a><a href="#processor/">processors</a>, simple keys are
+                    restricted to a single line and must not span more than
+                    1024 <a id="id2546486" class="indexterm"></a><a href="#stream/syntax">stream</a> characters. Again, this
+                    limit is in terms of Unicode characters rather than stream
+                    octets, and includes the <a id="id2546504" class="indexterm"></a><a href="#separation space/">separation</a> following the key, if any.
+                  </p>
+                  </dd>
+                </dl>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[219]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-block-simple-key(n)"></a>ns-block-simple-key(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-flow-node(n,c)">ns-flow-node(n,flow-key)</a><br />
+                  <a href="#s-separate(n,c)">s-separate(n,block-out)</a>?
+                  <a href="#c-mapping-value">&#8220;<span class="quote">:</span>&#8221;</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="itemizedlist">
+                <ul type="none">
+                  <li style="list-style-type: none">
+                    <p>
+                  In a simple key entry, an <a id="id2546568" class="indexterm"></a><a href="#explicit value/">explicit value</a> node may be <a id="id2546583" class="indexterm"></a><a href="#present/">presented</a> in the same line. Note
+                  however that in this case, the key is not considered to be a
+                  form of <a id="id2546598" class="indexterm"></a><a href="#indentation space/">indentation</a>, hence the compact <a id="id2546612" class="indexterm"></a><a href="#in-line style/syntax">in-line</a>
+                  notation must not be used. The value following the simple key
+                  may also be <a id="id2546629" class="indexterm"></a><a href="#completely empty node/">completely empty</a>.
+                </p>
+                  </li>
+                </ul>
+              </div>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[220]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="s-l+block-simple-value(n)"></a>s-l+block-simple-value(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                    <a href="#s-l+block-node(n,c)">s-l+block-node(n,block-out)</a><br />
+                  | <a href="#s-l-empty-block">s-l-empty-block</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[221]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l-block-simple-entry(n)"></a>ns-l-block-simple-entry(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-block-simple-key(n)">ns-block-simple-key(n)</a><br />
+                  <a href="#s-l+block-simple-value(n)">s-l+block-simple-value(n)</a>
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2546698"></a>
+                <p class="title">
+                  <b>Example 4.97. Simple Block Mapping Entries</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database"><tt class="filename">plain key:</tt><tt class="literal">° # empty value&#8595;</tt><br /><tt class="filename">"quoted key":</tt><tt class="literal">&#8595;
+- one # explicit next-line
+- two # block value&#8595;</tt>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-block-simple-key(n)">ns-block-simple-key(n)</a></tt>
+  <tt class="literal"><a href="#s-l+block-simple-value(n)">s-l+block-simple-value(n)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!map {
+  ? !!str "plain key"
+  : !!str "",
+  ? !!str "quoted key\n"
+  : !!seq [
+    !!str "one",
+    !!str "two",
+  ]
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+              <p>
+              An <a id="id2546798" class="indexterm"></a><a id="in-line mapping style/"></a
+            ><a href="#index-entry-in-line mapping style"
+            ><i class="firstterm"
+            >in-line block
+              mapping</i></a
+          > begins with a same-line mapping entry, followed
+              by optional additional normal block mapping entries, properly
+              <a id="id2546816" class="indexterm"></a><a href="#indentation space/">indented</a>.
+            </p>
+              <table width="100%" cellpadding="5" class="productionset" summary="EBNF">
+                <tr>
+                  <td>
+                    <table border="0" width="99%" cellpadding="0" class="productionset" summary="EBNF productions">
+                      <tr>
+                        <td align="left" valign="top" class="productioncounter">[222]</td>
+                        <td align="right" valign="top" class="productionlhs"><a id="ns-l-in-line-mapping(n)"></a>ns-l-in-line-mapping(n)</td>
+                        <td valign="top" class="productionseperator" align="center">
+                          <tt>::=</tt>
+                        </td>
+                        <td valign="top" class="productionrhs">
+                  <a href="#ns-l-block-map-entry(n)">ns-l-block-map-entry(n)</a><br />
+                  ( <a href="#s-indent(n)">s-indent(n)</a>
+                  <a href="#ns-l-block-map-entry(n)">ns-l-block-map-entry(n)</a> )*
+                </td>
+                        <td align="left" valign="top" class="productioncomment"> </td>
+                      </tr>
+                    </table>
+                  </td>
+                </tr>
+              </table>
+              <div class="example">
+                <a id="id2546861"></a>
+                <p class="title">
+                  <b>Example 4.98. In-Line Block Mappings</b>
+                </p>
+                <table class="simplelist" border="0" summary="Simple list">
+                  <tr>
+                    <td>
+<pre class="programlisting"><span class="database">- <tt class="filename">sun: yellow&#8595;</tt><br />- <span class="honorific"><tt class="filename">? <tt class="filename">earth: blue&#8595;</tt>
+  : <tt class="filename">moon: white&#8595;</tt></tt></span>
+</span></pre>
+<pre class="synopsis">Legend:
+  <tt class="filename"><a href="#ns-l-in-line-mapping(n)">ns-l-in-line-mapping(n)</a></tt>
+</pre>
+              </td>
+                    <td>
+<pre class="programlisting"><span class="database">%YAML 1.1<br />---
+!!seq {
+  !!map {
+    ? !!str "sun"
+    : !!str "yellow",
+  },
+  !!map {
+    ? !!map {
+      ? !!str "earth"
+      : !!str "blue"
+    }
+    : !!map {
+      ? !!str "moon"
+      : !!str "white"
+    }
+  }
+}
+</span></pre>
+              </td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="index">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="id2546954"></a>Terms Index</h2>
+            </div>
+          </div>
+          <div></div>
+        </div>
+        <div class="index">
+          <div class="indexdiv">
+            <h3>Indicators</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-! local  tag"></a>! local             tag, <a class="preferred" href="#id2506940">Tags</a>, <a href="#id2524672">Tag Prefixes</a>, <a href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-! named  handle"></a>! named                 handle, <a href="#id2516631">Miscellaneous Characters</a>, <a class="preferred" href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-! non-specific  tag"></a>! non-specific           tag, <a class="preferred" href="#id2510888">Resolved</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-! tag  indicator"></a>! tag           indicator, <a href="#id2503753">Tags</a>, <a href="#id2513753">Indicator Characters</a>, <a href="#id2525159">Tag Handles</a>, <a class="preferred" href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-&quot; double quoted  style"></a>" double quoted                 style, <a href="#id2513753">Indicator Characters</a>, <a href="#id2517668">Escape Sequences</a>, <a class="preferred" href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a></dt>
+              <dt xmlns=""><a id="index-entry-# comment"></a># comment, <a href="#id2502724">Structures</a>, <a href="#id2506940">Tags</a>, <a href="#id2513753">Indicator Characters</a>, <a class="preferred" href="#id2520528">Comments</a>, <a href="#id2535812">Plain</a>, <a href="#id2538125">Block Indentation Indicator</a>, <a href="#id2540046">Literal</a></dt>
+              <dt xmlns=""><a id="index-entry-% directive"></a>% directive, <a href="#id2513753">Indicator Characters</a>, <a class="preferred" href="#id2523453">Directives</a></dt>
+              <dt xmlns=""><a id="index-entry-% escaping in URI"></a>% escaping in URI, <a class="preferred" href="#id2516631">Miscellaneous Characters</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-&amp;  anchor"></a>&amp;           anchor, <a href="#id2502724">Structures</a>, <a href="#id2513753">Indicator Characters</a>, <a class="preferred" href="#id2528258">Node Anchors</a></dt>
+              <dt xmlns=""><a id="index-entry-' single quoted  style"></a>' single quoted                 style, <a href="#id2513753">Indicator Characters</a>, <a class="preferred" href="#id2534365">Single Quoted</a></dt>
+              <dt xmlns=""><a id="index-entry-*  alias"></a>*           alias, <a href="#id2502724">Structures</a>, <a href="#id2513753">Indicator Characters</a>, <a class="preferred" href="#id2530982">Alias Nodes</a></dt>
+              <dt xmlns=""><a id="index-entry-+ keep  chomping"></a>+ keep                     chomping, <a class="preferred" href="#id2538656">Block Chomping Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-, end flow  entry"></a>, end flow                 entry, <a href="#id2513753">Indicator Characters</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2541922">Collection Styles</a>, <a href="#id2542413">Flow Sequences</a>, <a href="#id2544175">Flow Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-- block sequence  entry"></a>- block sequence           entry, <a href="#id2502325">Collections</a>, <a href="#id2513753">Indicator Characters</a>, <a href="#id2519186">Production Parameters</a>, <a href="#id2519916">Indentation Spaces</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2543032">Block Sequences</a></dt>
+              <dt xmlns=""><a id="index-entry-- strip  chomping"></a>- strip                     chomping, <a class="preferred" href="#id2538656">Block Chomping Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-: mapping  value"></a>: mapping           value, <a href="#id2502325">Collections</a>, <a href="#id2513753">Indicator Characters</a>, <a href="#id2519916">Indentation Spaces</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-&lt; &#8230; &gt; verbatim  tag"></a>&lt; &#8230; &gt; verbatim                   tag, <a class="preferred" href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-&gt; folded  style"></a>&gt; folded           style, <a href="#id2503232">Scalars</a>, <a href="#id2513753">Indicator Characters</a>, <a class="preferred" href="#id2537921">Block Style Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-? mapping  key"></a>? mapping           key, <a href="#id2502724">Structures</a>, <a href="#id2513753">Indicator Characters</a>, <a href="#id2519916">Indentation Spaces</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-? non-specific tag"></a>? non-specific tag, <a class="preferred" href="#id2510888">Resolved</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-@ reserved  indicator"></a>@ reserved                 indicator, <a class="preferred" href="#id2513753">Indicator Characters</a></dt>
+              <dt xmlns=""><a id="index-entry-[ start flow  sequence"></a>[ start flow                 sequence, <a href="#id2513753">Indicator Characters</a>, <a href="#id2516631">Miscellaneous Characters</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2542413">Flow Sequences</a></dt>
+              <dt xmlns=""><a id="index-entry-\ escaping in double  quoted style"></a>\ escaping in double             quoted style, <a class="preferred" href="#id2517668">Escape Sequences</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a></dt>
+              <dt xmlns=""><a id="index-entry-] end flow  sequence"></a>] end flow                 sequence, <a href="#id2513753">Indicator Characters</a>, <a href="#id2516631">Miscellaneous Characters</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2542413">Flow Sequences</a></dt>
+              <dt xmlns=""><a id="index-entry-`  reserved indicator"></a>`                 reserved indicator, <a class="preferred" href="#id2513753">Indicator Characters</a></dt>
+              <dt xmlns=""><a id="index-entry-{ start flow  mapping"></a>{ start flow                 mapping, <a href="#id2513753">Indicator Characters</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2544175">Flow Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-| literal  style"></a>| literal           style, <a href="#id2503232">Scalars</a>, <a href="#id2513753">Indicator Characters</a>, <a class="preferred" href="#id2537921">Block Style Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-} end flow  mapping"></a>} end flow                 mapping, <a href="#id2513753">Indicator Characters</a>, <a href="#id2535812">Plain</a>, <a class="preferred" href="#id2544175">Flow Mappings</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>A</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-alias"></a>alias</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2439001">Introduction</a>, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" href="#id2505138">Serialize</a>, <a xmlns="" href="#id2508190">Serialization Tree</a>, <a xmlns="" class="preferred" href="#id2508656">Anchors and Aliases</a>, <a xmlns="" href="#id2510274">Loading Failure Points</a>, <a xmlns="" href="#id2510726">Well-Formed and Identified</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2528258">Node Anchors</a>, <a xmlns="" class="preferred" href="#id2530982">Alias Nodes</a>, <a xmlns="" href="#id2531352">Flow Nodes</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-anchor"></a>anchor</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" href="#id2505138">Serialize</a>, <a xmlns="" href="#id2508190">Serialization Tree</a>, <a xmlns="" class="preferred" href="#id2508656">Anchors and Aliases</a>, <a xmlns="" href="#id2510726">Well-Formed and Identified</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2527964">Nodes</a>, <a xmlns="" class="preferred" href="#id2528258">Node Anchors</a>, <a xmlns="" href="#id2528616">Node Tags</a>, <a xmlns="" href="#id2530982">Alias Nodes</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-application"></a>application, <a href="#id2439001">Introduction</a>, <a href="#id2438272">Prior Art</a>, <a href="#id2503753">Tags</a>, <a class="preferred" href="#id2504309">Processing YAML Information</a>, <a href="#id2504671">Processes</a>, <a href="#id2504710">Represent</a>, <a href="#id2505138">Serialize</a>, <a href="#id2505379">Present</a>, <a href="#id2506012">Information Models</a>, <a href="#id2506940">Tags</a>, <a href="#id2510888">Resolved</a>, <a href="#id2512548">Available</a>, <a href="#id2524672">Tag Prefixes</a>, <a href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a>, <a href="#id2543957">Mapping Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-available tag"></a>available tag, <a class="preferred" href="#id2512548">Available</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>B</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-block collection style"></a>block collection style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" class="preferred" href="#id2541922">Collection Styles</a>, <a xmlns="" href="#id2543032">Block Sequences</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-block mapping style"></a>block mapping style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information             model, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" class="preferred" href="#id2545757">Block Mappings</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-block scalar header"></a>block scalar header, <a class="preferred" href="#id2537677">Block Scalar Header</a>, <a href="#id2537921">Block Style Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-block scalar style"></a>block scalar style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2516631">Miscellaneous Characters</a>, <a xmlns="" href="#id2521681">Ignored Line Prefix</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" href="#id2537677">Block Scalar Header</a>, <a xmlns="" href="#id2538125">Block Indentation Indicator</a>, <a xmlns="" href="#id2538656">Block Chomping Indicator</a>, <a xmlns="" class="preferred" href="#id2539942">Block Scalar Styles</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-block  sequence style"></a>block           sequence style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2542214">Sequence Styles</a>, <a xmlns="" class="preferred" href="#id2543032">Block Sequences</a>, <a xmlns="" href="#id2545757">Block Mappings</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-block style"></a>block style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2522356">Line Folding</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" class="preferred" href="#id2531873">Block Nodes</a>, <a xmlns="" href="#id2543032">Block Sequences</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-block-in  context"></a>block-in                 context, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2543032">Block Sequences</a></dt>
+              <dt xmlns=""><a id="index-entry-block-out  context"></a>block-out                 context, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2543032">Block Sequences</a></dt>
+              <dt xmlns=""><a id="index-entry-byte order mark"></a>byte order mark, <a class="preferred" href="#id2513364">Character Encoding</a>, <a href="#id2527114">Complete Stream</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>C</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-canonical form"></a>canonical form, <a href="#id2438272">Prior Art</a>, <a href="#id2506940">Tags</a>, <a class="preferred" href="#id2507367">Nodes Comparison</a>, <a href="#id2509799">Scalar Formats</a>, <a href="#id2510274">Loading Failure Points</a></dt>
+              <dt xmlns=""><a id="index-entry-character encoding"></a>character encoding, <a class="preferred" href="#id2513364">Character Encoding</a>, <a href="#id2516631">Miscellaneous Characters</a>, <a href="#id2527114">Complete Stream</a></dt>
+              <dt xmlns=""><a id="index-entry-chomping"></a>chomping, <a href="#id2515898">Line Break Characters</a>, <a href="#id2519186">Production Parameters</a>, <a href="#id2521681">Ignored Line Prefix</a>, <a href="#id2522356">Line Folding</a>, <a class="preferred" href="#id2538656">Block Chomping Indicator</a>, <a href="#id2540046">Literal</a>, <a href="#id2540863">Folded</a></dt>
+              <dt xmlns=""><a id="index-entry-clip chomping"></a>clip chomping, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2538656">Block Chomping Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-collection"></a>collection</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2506281">Representation Graph</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2508656">Anchors and Aliases</a>, <a xmlns="" href="#id2509980">Comments</a>, <a xmlns="" href="#id2510888">Resolved</a>, <a xmlns="" href="#id2512215">Recognized and Valid</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" class="preferred" href="#id2541922">Collection Styles</a>, <a xmlns="" href="#id2542214">Sequence Styles</a>, <a xmlns="" href="#id2543032">Block Sequences</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-comment"></a>comment</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information           model, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" href="#id2505379">Present</a>, <a xmlns="" href="#id2505832">Construct</a>, <a xmlns="" href="#id2508949">Presentation Stream</a>, <a xmlns="" class="preferred" href="#id2509980">Comments</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" class="preferred" href="#id2520528">Comments</a>, <a xmlns="" href="#id2521201">Separation Spaces</a>, <a xmlns="" href="#id2521681">Ignored Line Prefix</a>, <a xmlns="" href="#id2523453">Directives</a>, <a xmlns="" href="#id2525905">Document Boundary Markers</a>, <a xmlns="" href="#id2526349">Documents</a>, <a xmlns="" href="#id2527114">Complete Stream</a>, <a xmlns="" href="#id2531873">Block Nodes</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" href="#id2537677">Block Scalar Header</a>, <a xmlns="" href="#id2538656">Block Chomping Indicator</a>, <a xmlns="" href="#id2542214">Sequence Styles</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-complete representation"></a>complete representation, <a class="preferred" href="#id2510274">Loading Failure Points</a>, <a href="#id2510888">Resolved</a>, <a href="#id2512215">Recognized and Valid</a>, <a href="#id2512548">Available</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-completely empty node"></a>completely empty node, <a href="#id2526349">Documents</a>, <a class="preferred" href="#id2531352">Flow Nodes</a>, <a href="#id2531873">Block Nodes</a>, <a href="#id2541922">Collection Styles</a>, <a href="#id2542413">Flow Sequences</a>, <a href="#id2543032">Block Sequences</a>, <a href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-compose"></a>compose, <a class="preferred" href="#id2505723">Compose</a>, <a href="#id2508372">Keys Order</a>, <a href="#id2508656">Anchors and Aliases</a>, <a href="#id2510888">Resolved</a>, <a href="#id2512215">Recognized and Valid</a>, <a href="#id2512548">Available</a>, <a href="#id2528258">Node Anchors</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-construct"></a>construct, <a href="#id2504309">Processing YAML Information</a>, <a class="preferred" href="#id2505832">Construct</a>, <a href="#id2508190">Serialization Tree</a>, <a href="#id2510274">Loading Failure Points</a>, <a href="#id2512215">Recognized and Valid</a>, <a href="#id2512548">Available</a>, <a href="#id2543957">Mapping Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-content"></a>content</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2506940">Tags</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2509255">Node Styles</a>, <a xmlns="" href="#id2510274">Loading Failure Points</a>, <a xmlns="" href="#id2510888">Resolved</a>, <a xmlns="" href="#id2512215">Recognized and Valid</a>, <a xmlns="" href="#id2515898">Line Break Characters</a>, <a xmlns="" href="#id2517668">Escape Sequences</a>, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2520528">Comments</a>, <a xmlns="" href="#id2521201">Separation Spaces</a>, <a xmlns="" href="#id2521681">Ignored Line Prefix</a>, <a xmlns="" href="#id2522356">Line Folding</a>, <a xmlns="" href="#id2525159">Tag Handles</a>, <a xmlns="" href="#id2526349">Documents</a>, <a xmlns="" href="#id2528258">Node Anchors</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" href="#id2541922">Collection Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2527964">Nodes</a>, <a xmlns="" class="preferred" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2530982">Alias Nodes</a>, <a xmlns="" href="#id2531352">Flow Nodes</a>, <a xmlns="" href="#id2531873">Block Nodes</a>, <a xmlns="" href="#id2532720">Double Quoted</a>, <a xmlns="" href="#id2534365">Single Quoted</a>, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" href="#id2537677">Block Scalar Header</a>, <a xmlns="" href="#id2538125">Block Indentation Indicator</a>, <a xmlns="" href="#id2538656">Block Chomping Indicator</a>, <a xmlns="" href="#id2539942">Block Scalar Styles</a>, <a xmlns="" href="#id2540863">Folded</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-context"></a>context, <a class="preferred" href="#id2519186">Production Parameters</a>, <a href="#id2535812">Plain</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>D</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-directive"></a>directive</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2505379">Present</a>, <a xmlns="" href="#id2505832">Construct</a>, <a xmlns="" href="#id2508949">Presentation Stream</a>, <a xmlns="" class="preferred" href="#id2510119">Directives</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2523342">YAML Character Stream</a>, <a xmlns="" class="preferred" href="#id2523453">Directives</a>, <a xmlns="" href="#id2526349">Documents</a>, <a xmlns="" href="#id2527114">Complete Stream</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-document"></a>document</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" class="preferred" href="#id2508949">Presentation Stream</a>, <a xmlns="" href="#id2509255">Node Styles</a>, <a xmlns="" href="#id2510119">Directives</a>, <a xmlns="" href="#id2510274">Loading Failure Points</a>, <a xmlns="" href="#id2510888">Resolved</a>, <a xmlns="" href="#id2512215">Recognized and Valid</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2523342">YAML Character Stream</a>, <a xmlns="" href="#id2523874">YAML Directive</a>, <a xmlns="" href="#id2524672">Tag Prefixes</a>, <a xmlns="" href="#id2525159">Tag Handles</a>, <a xmlns="" href="#id2525905">Document Boundary Markers</a>, <a xmlns="" class="preferred" href="#id2526349">Documents</a>, <a xmlns="" href="#id2527114">Complete Stream</a>, <a xmlns="" href="#id2530982">Alias Nodes</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-document boundary  marker"></a>document boundary           marker, <a href="#id2502724">Structures</a>, <a href="#id2508949">Presentation Stream</a>, <a href="#id2523342">YAML Character Stream</a>, <a class="preferred" href="#id2525905">Document Boundary Markers</a>, <a href="#id2526349">Documents</a>, <a href="#id2527114">Complete Stream</a>, <a href="#id2535812">Plain</a></dt>
+              <dt xmlns=""><a id="index-entry-double quoted style"></a>double quoted style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information         model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2512702">Syntax</a>, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2517668">Escape Sequences</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" class="preferred" href="#id2532720">Double Quoted</a>, <a xmlns="" href="#id2534365">Single Quoted</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-dump"></a>dump, <a class="preferred" href="#id2504309">Processing YAML Information</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>E</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-empty line"></a>empty line, <a href="#id2438272">Prior Art</a>, <a href="#id2503232">Scalars</a>, <a href="#id2520528">Comments</a>, <a class="preferred" href="#id2521681">Ignored Line Prefix</a>, <a href="#id2522356">Line Folding</a>, <a href="#id2532632">Flow Scalar Styles</a>, <a href="#id2535812">Plain</a>, <a href="#id2538125">Block Indentation Indicator</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2540046">Literal</a>, <a href="#id2540863">Folded</a></dt>
+              <dt xmlns=""><a id="index-entry-equality"></a>equality, <a href="#id2504710">Represent</a>, <a href="#id2506281">Representation Graph</a>, <a href="#id2506659">Nodes</a>, <a href="#id2506940">Tags</a>, <a class="preferred" href="#id2507367">Nodes Comparison</a>, <a href="#id2509799">Scalar Formats</a>, <a href="#id2510274">Loading Failure Points</a>, <a href="#id2512215">Recognized and Valid</a>, <a href="#id2543957">Mapping Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-escaped  (ignored) line break"></a>escaped             (ignored) line break, <a href="#id2515898">Line Break Characters</a>, <a class="preferred" href="#id2532720">Double Quoted</a></dt>
+              <dt xmlns=""><a id="index-entry-escaping in double quoted  style"></a>escaping in double quoted         style, <a href="#id2438272">Prior Art</a>, <a href="#id2503232">Scalars</a>, <a href="#id2513160">Character Set</a>, <a href="#id2516631">Miscellaneous Characters</a>, <a class="preferred" href="#id2517668">Escape Sequences</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2540046">Literal</a></dt>
+              <dt xmlns=""><a id="index-entry-escaping in single quoted  style"></a>escaping in single quoted               style, <a class="preferred" href="#id2534365">Single Quoted</a></dt>
+              <dt xmlns=""><a id="index-entry-escaping in URI"></a>escaping in URI, <a href="#id2506940">Tags</a>, <a class="preferred" href="#id2516631">Miscellaneous Characters</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-explicit document"></a>explicit document, <a class="preferred" href="#id2526349">Documents</a>, <a href="#id2527114">Complete Stream</a></dt>
+              <dt xmlns=""><a id="index-entry-explicit key"></a>explicit key, <a class="preferred" href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-explicit value"></a>explicit value, <a class="preferred" href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>F</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-flow collection style"></a>flow collection style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information             model, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2512702">Syntax</a>, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" class="preferred" href="#id2541922">Collection Styles</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-flow mapping style"></a>flow mapping style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" class="preferred" href="#id2544175">Flow Mappings</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-flow scalar style"></a>flow scalar style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information           model, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2522356">Line Folding</a>, <a xmlns="" href="#id2526349">Documents</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" class="preferred" href="#id2532632">Flow Scalar Styles</a>, <a xmlns="" href="#id2535812">Plain</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-flow sequence style"></a>flow sequence style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information           model, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2542214">Sequence Styles</a>, <a xmlns="" class="preferred" href="#id2542413">Flow Sequences</a>, <a xmlns="" href="#id2544175">Flow Mappings</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-flow style"></a>flow style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information         model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2522356">Line Folding</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" class="preferred" href="#id2531352">Flow Nodes</a>, <a xmlns="" href="#id2531873">Block Nodes</a>, <a xmlns="" href="#id2542413">Flow Sequences</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-flow-in context"></a>flow-in context, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2535812">Plain</a>, <a href="#id2541922">Collection Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-flow-key context"></a>flow-key context, <a href="#id2519186">Production Parameters</a>, <a href="#id2541922">Collection Styles</a>, <a class="preferred" href="#id2544175">Flow Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-flow-out  context"></a>flow-out                 context, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2535812">Plain</a>, <a href="#id2541922">Collection Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-folded style"></a>folded style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information           model, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2522356">Line Folding</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" href="#id2537921">Block Style Indicator</a>, <a xmlns="" href="#id2539942">Block Scalar Styles</a>, <a xmlns="" class="preferred" href="#id2540863">Folded</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-format"></a>format, <a href="#id2505379">Present</a>, <a href="#id2505832">Construct</a>, <a href="#id2506940">Tags</a>, <a href="#id2507367">Nodes Comparison</a>, <a href="#id2508949">Presentation Stream</a>, <a class="preferred" href="#id2509799">Scalar Formats</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>G</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-generic line break"></a>generic line break, <a class="preferred" href="#id2515898">Line Break Characters</a>, <a href="#id2517668">Escape Sequences</a>, <a href="#id2522356">Line Folding</a></dt>
+              <dt xmlns=""><a id="index-entry-global tag"></a>global tag, <a href="#id2438272">Prior Art</a>, <a href="#id2503753">Tags</a>, <a href="#id2504710">Represent</a>, <a class="preferred" href="#id2506940">Tags</a>, <a href="#id2510888">Resolved</a>, <a href="#id2524672">Tag Prefixes</a>, <a href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>I</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-identified"></a>identified, <a href="#id2502724">Structures</a>, <a class="preferred" href="#id2508656">Anchors and Aliases</a>, <a href="#id2510726">Well-Formed and Identified</a></dt>
+              <dt xmlns=""><a id="index-entry-identity"></a>identity, <a class="preferred" href="#id2507367">Nodes Comparison</a></dt>
+              <dt xmlns=""><a id="index-entry-ignored  line prefix"></a>ignored             line prefix, <a class="preferred" href="#id2521681">Ignored Line Prefix</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2535812">Plain</a></dt>
+              <dt xmlns=""><a id="index-entry-ill-formed  stream"></a>ill-formed           stream, <a href="#id2505613">Parse</a>, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2510726">Well-Formed and Identified</a></dt>
+              <dt xmlns=""><a id="index-entry-implicit document"></a>implicit document, <a class="preferred" href="#id2526349">Documents</a>, <a href="#id2527114">Complete Stream</a></dt>
+              <dt xmlns=""><a id="index-entry-in-line mapping style"></a>in-line mapping style, <a class="preferred" href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-in-line sequence style"></a>in-line sequence style, <a class="preferred" href="#id2543032">Block Sequences</a></dt>
+              <dt xmlns=""><a id="index-entry-in-line style"></a>in-line style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2541922">Collection Styles</a>, <a xmlns="" href="#id2542214">Sequence Styles</a>, <a xmlns="" class="preferred" href="#id2543032">Block Sequences</a>, <a xmlns="" href="#id2545757">Block Mappings</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-indentation  indicator"></a>indentation               indicator, <a class="preferred" href="#id2538125">Block Indentation Indicator</a>, <a href="#id2540863">Folded</a></dt>
+              <dt xmlns=""><a id="index-entry-indentation  space"></a>indentation       space, <a href="#id2439001">Introduction</a>, <a href="#id2438272">Prior Art</a>, <a href="#id2502325">Collections</a>, <a href="#id2505379">Present</a>, <a href="#id2505832">Construct</a>, <a href="#id2506012">Information Models</a>, <a href="#id2509255">Node Styles</a>, <a href="#id2510888">Resolved</a>, <a href="#id2512702">Syntax</a>, <a href="#id2516631">Miscellaneous Characters</a>, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2519916">Indentation Spaces</a>, <a href="#id2520528">Comments</a>, <a href="#id2521201">Separation Spaces</a>, <a href="#id2521681">Ignored Line Prefix</a>, <a href="#id2522356">Line Folding</a>, <a href="#id2523453">Directives</a>, <a href="#id2526349">Documents</a>, <a href="#id2530054">Node Content</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2535812">Plain</a>, <a href="#id2538125">Block Indentation Indicator</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2539942">Block Scalar Styles</a>, <a href="#id2540046">Literal</a>, <a href="#id2540863">Folded</a>, <a href="#id2543032">Block Sequences</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-indicator"></a>indicator, <a href="#id2438272">Prior Art</a>, <a href="#id2502325">Collections</a>, <a href="#id2509255">Node Styles</a>, <a class="preferred" href="#id2513753">Indicator Characters</a>, <a href="#id2519186">Production Parameters</a>, <a href="#id2519916">Indentation Spaces</a>, <a href="#id2522356">Line Folding</a>, <a href="#id2530054">Node Content</a>, <a href="#id2531352">Flow Nodes</a>, <a href="#id2531873">Block Nodes</a>, <a href="#id2535812">Plain</a>, <a href="#id2537677">Block Scalar Header</a>, <a href="#id2540046">Literal</a></dt>
+              <dt xmlns=""><a id="index-entry-invalid  content"></a>invalid         content, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2512215">Recognized and Valid</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>K</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-keep chomping"></a>keep chomping, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2538656">Block Chomping Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-key"></a>key</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2439001">Introduction</a>, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" href="#id2505138">Serialize</a>, <a xmlns="" href="#id2506012">Information Models</a>, <a xmlns="" href="#id2506281">Representation Graph</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2508190">Serialization Tree</a>, <a xmlns="" href="#id2508372">Keys Order</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" href="#id2542413">Flow Sequences</a>, <a xmlns="" class="preferred" href="#id2543957">Mapping Styles</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-key order"></a>key order, <a href="#id2505138">Serialize</a>, <a href="#id2505832">Construct</a>, <a href="#id2506012">Information Models</a>, <a href="#id2508190">Serialization Tree</a>, <a class="preferred" href="#id2508372">Keys Order</a>, <a href="#id2543957">Mapping Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-kind"></a>kind, <a href="#id2504710">Represent</a>, <a href="#id2506281">Representation Graph</a>, <a class="preferred" href="#id2506659">Nodes</a>, <a href="#id2506940">Tags</a>, <a href="#id2507367">Nodes Comparison</a>, <a href="#id2509255">Node Styles</a>, <a href="#id2510888">Resolved</a>, <a href="#id2530054">Node Content</a>, <a href="#id2541922">Collection Styles</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>L</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-line break character"></a>line break character, <a href="#id2438272">Prior Art</a>, <a href="#id2503232">Scalars</a>, <a href="#id2512702">Syntax</a>, <a href="#id2513160">Character Set</a>, <a class="preferred" href="#id2515898">Line Break Characters</a>, <a href="#id2516631">Miscellaneous Characters</a>, <a href="#id2519186">Production Parameters</a>, <a href="#id2519916">Indentation Spaces</a>, <a href="#id2521681">Ignored Line Prefix</a>, <a href="#id2522356">Line Folding</a>, <a href="#id2531873">Block Nodes</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2535812">Plain</a>, <a href="#id2537677">Block Scalar Header</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2540046">Literal</a>, <a href="#id2540863">Folded</a></dt>
+              <dt xmlns=""><a id="index-entry-line break normalization"></a>line break normalization, <a class="preferred" href="#id2515898">Line Break Characters</a>, <a href="#id2540046">Literal</a></dt>
+              <dt xmlns=""><a id="index-entry-line folding"></a>line folding, <a href="#id2438272">Prior Art</a>, <a href="#id2503232">Scalars</a>, <a class="preferred" href="#id2522356">Line Folding</a>, <a href="#id2532632">Flow Scalar Styles</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2535812">Plain</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2540046">Literal</a>, <a href="#id2540863">Folded</a></dt>
+              <dt xmlns=""><a id="index-entry-literal  style"></a>literal         style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" href="#id2537921">Block Style Indicator</a>, <a xmlns="" href="#id2539942">Block Scalar Styles</a>, <a xmlns="" class="preferred" href="#id2540046">Literal</a>, <a xmlns="" href="#id2540863">Folded</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-load"></a>load, <a class="preferred" href="#id2504309">Processing YAML Information</a>, <a href="#id2510274">Loading Failure Points</a></dt>
+              <dt xmlns=""><a id="index-entry-load failure point"></a>load failure point, <a href="#id2505723">Compose</a>, <a class="preferred" href="#id2510274">Loading Failure Points</a></dt>
+              <dt xmlns=""><a id="index-entry-local tag"></a>local tag, <a href="#id2503753">Tags</a>, <a href="#id2504710">Represent</a>, <a class="preferred" href="#id2506940">Tags</a>, <a href="#id2510888">Resolved</a>, <a href="#id2524672">Tag Prefixes</a>, <a href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>M</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-mapping"></a>mapping</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information       model, <a xmlns="" href="#id2439001">Introduction</a>, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" href="#id2506281">Representation Graph</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2506940">Tags</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2508372">Keys Order</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2541922">Collection Styles</a>, <a xmlns="" href="#id2542413">Flow Sequences</a>, <a xmlns="" class="preferred" href="#id2543957">Mapping Styles</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-may"></a>may, <a class="preferred" href="#id2502086">Terminology</a></dt>
+              <dt xmlns=""><a id="index-entry-&ldquo;more indented&rdquo; line"></a>&ldquo;more indented&rdquo; line, <a href="#id2503232">Scalars</a>, <a href="#id2522356">Line Folding</a>, <a class="preferred" href="#id2540863">Folded</a></dt>
+              <dt xmlns=""><a id="index-entry-must"></a>must, <a class="preferred" href="#id2502086">Terminology</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>N</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-named tag handle"></a>named tag handle, <a href="#id2516631">Miscellaneous Characters</a>, <a class="preferred" href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-need not"></a>need not, <a class="preferred" href="#id2502086">Terminology</a></dt>
+              <dt xmlns=""><a id="index-entry-node"></a>node</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information           model, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" href="#id2505138">Serialize</a>, <a xmlns="" href="#id2506281">Representation Graph</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2506940">Tags</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2508190">Serialization Tree</a>, <a xmlns="" href="#id2508372">Keys Order</a>, <a xmlns="" href="#id2508656">Anchors and Aliases</a>, <a xmlns="" href="#id2508949">Presentation Stream</a>, <a xmlns="" href="#id2509255">Node Styles</a>, <a xmlns="" href="#id2509980">Comments</a>, <a xmlns="" href="#id2510274">Loading Failure Points</a>, <a xmlns="" href="#id2510726">Well-Formed and Identified</a>, <a xmlns="" href="#id2510888">Resolved</a>, <a xmlns="" href="#id2512215">Recognized and Valid</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2526349">Documents</a>, <a xmlns="" class="preferred" href="#id2527964">Nodes</a>, <a xmlns="" href="#id2528258">Node Anchors</a>, <a xmlns="" href="#id2528616">Node Tags</a>, <a xmlns="" href="#id2530982">Alias Nodes</a>, <a xmlns="" href="#id2531352">Flow Nodes</a>, <a xmlns="" href="#id2542214">Sequence Styles</a>, <a xmlns="" href="#id2543032">Block Sequences</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-node property"></a>node property, <a href="#id2526349">Documents</a>, <a class="preferred" href="#id2527964">Nodes</a>, <a href="#id2530982">Alias Nodes</a>, <a href="#id2531352">Flow Nodes</a>, <a href="#id2531873">Block Nodes</a>, <a href="#id2542413">Flow Sequences</a>, <a href="#id2543032">Block Sequences</a>, <a href="#id2544175">Flow Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-non-specific tag"></a>non-specific tag, <a href="#id2503753">Tags</a>, <a href="#id2505379">Present</a>, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2510888">Resolved</a>, <a href="#id2512702">Syntax</a>, <a href="#id2528616">Node Tags</a>, <a href="#id2532386">Scalar Styles</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>O</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-optional"></a>optional, <a class="preferred" href="#id2502086">Terminology</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>P</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-parse"></a>parse, <a class="preferred" href="#id2505613">Parse</a>, <a href="#id2508949">Presentation Stream</a>, <a href="#id2510888">Resolved</a>, <a href="#id2515898">Line Break Characters</a>, <a href="#id2517668">Escape Sequences</a>, <a href="#id2525159">Tag Handles</a>, <a href="#id2527114">Complete Stream</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-partial representation"></a>partial representation, <a class="preferred" href="#id2510274">Loading Failure Points</a>, <a href="#id2510888">Resolved</a>, <a href="#id2512215">Recognized and Valid</a></dt>
+              <dt xmlns=""><a id="index-entry-plain  style"></a>plain           style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2526349">Documents</a>, <a xmlns="" href="#id2528616">Node Tags</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2531352">Flow Nodes</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" class="preferred" href="#id2535812">Plain</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-present"></a>present, <a href="#id2504309">Processing YAML Information</a>, <a href="#id2504710">Represent</a>, <a class="preferred" href="#id2505379">Present</a>, <a href="#id2505613">Parse</a>, <a href="#id2506659">Nodes</a>, <a href="#id2507367">Nodes Comparison</a>, <a href="#id2508949">Presentation Stream</a>, <a href="#id2509799">Scalar Formats</a>, <a href="#id2510888">Resolved</a>, <a href="#id2513160">Character Set</a>, <a href="#id2515898">Line Break Characters</a>, <a href="#id2517668">Escape Sequences</a>, <a href="#id2519186">Production Parameters</a>, <a href="#id2522356">Line Folding</a>, <a href="#id2523342">YAML Character Stream</a>, <a href="#id2526349">Documents</a>, <a href="#id2528616">Node Tags</a>, <a href="#id2530054">Node Content</a>, <a href="#id2530982">Alias Nodes</a>, <a href="#id2531352">Flow Nodes</a>, <a href="#id2532632">Flow Scalar Styles</a>, <a href="#id2535812">Plain</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2542214">Sequence Styles</a>, <a href="#id2543032">Block Sequences</a>, <a href="#id2543957">Mapping Styles</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-presentation"></a>presentation, <a href="#id2504309">Processing YAML Information</a>, <a href="#id2506012">Information Models</a>, <a class="preferred" href="#id2508949">Presentation Stream</a>, <a href="#id2526349">Documents</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-presentation  detail"></a>presentation           detail, <a class="preferred" href="#id2505379">Present</a>, <a href="#id2505613">Parse</a>, <a href="#id2505832">Construct</a>, <a href="#id2506012">Information Models</a>, <a href="#id2508949">Presentation Stream</a>, <a href="#id2509255">Node Styles</a>, <a href="#id2509799">Scalar Formats</a>, <a href="#id2509980">Comments</a>, <a href="#id2510119">Directives</a>, <a href="#id2510888">Resolved</a>, <a href="#id2515898">Line Break Characters</a>, <a href="#id2517668">Escape Sequences</a>, <a href="#id2519916">Indentation Spaces</a>, <a href="#id2520528">Comments</a>, <a href="#id2521201">Separation Spaces</a>, <a href="#id2521681">Ignored Line Prefix</a>, <a href="#id2522356">Line Folding</a>, <a href="#id2523453">Directives</a>, <a href="#id2525159">Tag Handles</a>, <a href="#id2525905">Document Boundary Markers</a>, <a href="#id2526349">Documents</a>, <a href="#id2532386">Scalar Styles</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2541922">Collection Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-primary tag handle"></a>primary tag handle, <a class="preferred" href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-printable character"></a>printable character, <a href="#id2439001">Introduction</a>, <a href="#id2438272">Prior Art</a>, <a class="preferred" href="#id2513160">Character Set</a>, <a href="#id2517668">Escape Sequences</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2535812">Plain</a>, <a href="#id2540046">Literal</a></dt>
+              <dt xmlns=""><a id="index-entry-processor"></a>processor, <a href="#id2502086">Terminology</a>, <a class="preferred" href="#id2504309">Processing YAML Information</a>, <a href="#id2504671">Processes</a>, <a href="#id2505138">Serialize</a>, <a href="#id2505379">Present</a>, <a href="#id2507367">Nodes Comparison</a>, <a href="#id2508949">Presentation Stream</a>, <a href="#id2510119">Directives</a>, <a href="#id2510726">Well-Formed and Identified</a>, <a href="#id2510888">Resolved</a>, <a href="#id2512215">Recognized and Valid</a>, <a href="#id2512548">Available</a>, <a href="#id2513160">Character Set</a>, <a href="#id2513364">Character Encoding</a>, <a href="#id2515898">Line Break Characters</a>, <a href="#id2523453">Directives</a>, <a href="#id2523874">YAML Directive</a>, <a href="#id2525159">Tag Handles</a>, <a href="#id2525905">Document Boundary Markers</a>, <a href="#id2528258">Node Anchors</a>, <a href="#id2528616">Node Tags</a>, <a href="#id2538125">Block Indentation Indicator</a>, <a href="#id2543957">Mapping Styles</a>, <a href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>Q</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-quoted style"></a>quoted style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2516631">Miscellaneous Characters</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" class="preferred" href="#id2532386">Scalar Styles</a></dt>
+                </dl>
+              </dd>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>R</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-recognized tag"></a>recognized tag, <a class="preferred" href="#id2512215">Recognized and Valid</a></dt>
+              <dt xmlns=""><a id="index-entry-recommended"></a>recommended, <a class="preferred" href="#id2502086">Terminology</a></dt>
+              <dt xmlns=""><a id="index-entry-represent"></a>represent, <a href="#id2439001">Introduction</a>, <a href="#id2438272">Prior Art</a>, <a class="preferred" href="#id2504710">Represent</a>, <a href="#id2506940">Tags</a>, <a href="#id2507367">Nodes Comparison</a>, <a href="#id2508372">Keys Order</a></dt>
+              <dt xmlns=""><a id="index-entry-representation"></a>representation, <a href="#id2504309">Processing YAML Information</a>, <a href="#id2505138">Serialize</a>, <a href="#id2505723">Compose</a>, <a href="#id2505832">Construct</a>, <a href="#id2506012">Information Models</a>, <a class="preferred" href="#id2506281">Representation Graph</a>, <a href="#id2507367">Nodes Comparison</a>, <a href="#id2508190">Serialization Tree</a>, <a href="#id2508372">Keys Order</a>, <a href="#id2508656">Anchors and Aliases</a>, <a href="#id2508949">Presentation Stream</a>, <a href="#id2509255">Node Styles</a>, <a href="#id2509799">Scalar Formats</a>, <a href="#id2509980">Comments</a>, <a href="#id2510119">Directives</a>, <a href="#id2512548">Available</a>, <a href="#id2520528">Comments</a>, <a href="#id2523453">Directives</a>, <a href="#id2528258">Node Anchors</a>, <a href="#id2528616">Node Tags</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2543957">Mapping Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-required"></a>required, <a class="preferred" href="#id2502086">Terminology</a></dt>
+              <dt xmlns=""><a id="index-entry-reserved  directive"></a>reserved             directive, <a href="#id2510119">Directives</a>, <a class="preferred" href="#id2523453">Directives</a></dt>
+              <dt xmlns=""><a id="index-entry-reserved indicator"></a>reserved indicator, <a class="preferred" href="#id2513753">Indicator Characters</a></dt>
+              <dt xmlns=""><a id="index-entry-root node"></a>root node, <a class="preferred" href="#id2506281">Representation Graph</a>, <a href="#id2510888">Resolved</a>, <a href="#id2523342">YAML Character Stream</a>, <a href="#id2526349">Documents</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>S</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-scalar"></a>scalar</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information       model, <a xmlns="" href="#id2439001">Introduction</a>, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" href="#id2506281">Representation Graph</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2506940">Tags</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2509255">Node Styles</a>, <a xmlns="" href="#id2509799">Scalar Formats</a>, <a xmlns="" href="#id2509980">Comments</a>, <a xmlns="" href="#id2510274">Loading Failure Points</a>, <a xmlns="" href="#id2510888">Resolved</a>, <a xmlns="" href="#id2512215">Recognized and Valid</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2515898">Line Break Characters</a>, <a xmlns="" href="#id2516631">Miscellaneous Characters</a>, <a xmlns="" href="#id2517668">Escape Sequences</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2520528">Comments</a>, <a xmlns="" href="#id2521201">Separation Spaces</a>, <a xmlns="" href="#id2521681">Ignored Line Prefix</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" class="preferred" href="#id2532386">Scalar Styles</a>, <a xmlns="" href="#id2532720">Double Quoted</a>, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" href="#id2538656">Block Chomping Indicator</a>, <a xmlns="" href="#id2540046">Literal</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-secondary tag handle"></a>secondary tag handle, <a class="preferred" href="#id2525159">Tag Handles</a></dt>
+              <dt xmlns=""><a id="index-entry-separation  space"></a>separation                 space, <a href="#id2516631">Miscellaneous Characters</a>, <a href="#id2520528">Comments</a>, <a class="preferred" href="#id2521201">Separation Spaces</a>, <a href="#id2543032">Block Sequences</a>, <a href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-sequence"></a>sequence</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2439001">Introduction</a>, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" href="#id2506281">Representation Graph</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2506940">Tags</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2508372">Keys Order</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2541922">Collection Styles</a>, <a xmlns="" class="preferred" href="#id2542214">Sequence Styles</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-serialization"></a>serialization, <a href="#id2504309">Processing YAML Information</a>, <a href="#id2505138">Serialize</a>, <a href="#id2505379">Present</a>, <a href="#id2505613">Parse</a>, <a href="#id2505723">Compose</a>, <a href="#id2505832">Construct</a>, <a href="#id2506012">Information Models</a>, <a class="preferred" href="#id2508190">Serialization Tree</a>, <a href="#id2508656">Anchors and Aliases</a>, <a href="#id2508949">Presentation Stream</a>, <a href="#id2509255">Node Styles</a>, <a href="#id2509799">Scalar Formats</a>, <a href="#id2509980">Comments</a>, <a href="#id2510119">Directives</a>, <a href="#id2520528">Comments</a>, <a href="#id2523453">Directives</a>, <a href="#id2528258">Node Anchors</a>, <a href="#id2528616">Node Tags</a>, <a href="#id2538656">Block Chomping Indicator</a>, <a href="#id2543957">Mapping Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-serialization  detail"></a>serialization           detail, <a class="preferred" href="#id2505138">Serialize</a>, <a href="#id2505723">Compose</a>, <a href="#id2506012">Information Models</a>, <a href="#id2508372">Keys Order</a>, <a href="#id2508656">Anchors and Aliases</a>, <a href="#id2528258">Node Anchors</a>, <a href="#id2543957">Mapping Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-serialize"></a>serialize, <a href="#id2438272">Prior Art</a>, <a class="preferred" href="#id2505138">Serialize</a>, <a href="#id2505723">Compose</a>, <a href="#id2508372">Keys Order</a>, <a href="#id2508656">Anchors and Aliases</a>, <a href="#id2530982">Alias Nodes</a></dt>
+              <dt xmlns=""><a id="index-entry-shall"></a>shall, <a class="preferred" href="#id2502086">Terminology</a></dt>
+              <dt xmlns=""><a id="index-entry-should"></a>should, <a class="preferred" href="#id2502086">Terminology</a></dt>
+              <dt xmlns=""><a id="index-entry-simple  key"></a>simple                 key, <a href="#id2519186">Production Parameters</a>, <a href="#id2521201">Separation Spaces</a>, <a href="#id2532632">Flow Scalar Styles</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2535812">Plain</a>, <a href="#id2541922">Collection Styles</a>, <a class="preferred" href="#id2544175">Flow Mappings</a>, <a href="#id2545757">Block Mappings</a></dt>
+              <dt xmlns=""><a id="index-entry-single pair style"></a>single pair style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information             model, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2542214">Sequence Styles</a>, <a xmlns="" href="#id2542413">Flow Sequences</a>, <a xmlns="" class="preferred" href="#id2544175">Flow Mappings</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-single quoted style"></a>single quoted style</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2503232">Scalars</a>, <a xmlns="" class="preferred" href="#id2509255">Node Styles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2530054">Node Content</a>, <a xmlns="" href="#id2532386">Scalar Styles</a>, <a xmlns="" class="preferred" href="#id2534365">Single Quoted</a>, <a xmlns="" href="#id2535812">Plain</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-specific line break"></a>specific line break, <a class="preferred" href="#id2515898">Line Break Characters</a>, <a href="#id2517668">Escape Sequences</a>, <a href="#id2522356">Line Folding</a></dt>
+              <dt xmlns=""><a id="index-entry-specific  tag"></a>specific           tag, <a class="preferred" href="#id2510888">Resolved</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-stream"></a>stream</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" href="#id2504309">Processing YAML Information</a>, <a xmlns="" href="#id2505379">Present</a>, <a xmlns="" href="#id2505613">Parse</a>, <a xmlns="" class="preferred" href="#id2508949">Presentation Stream</a>, <a xmlns="" href="#id2510274">Loading Failure Points</a>, <a xmlns="" href="#id2510726">Well-Formed and Identified</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2512702">Syntax</a>, <a xmlns="" href="#id2513160">Character Set</a>, <a xmlns="" href="#id2513364">Character Encoding</a>, <a xmlns="" href="#id2519186">Production Parameters</a>, <a xmlns="" href="#id2519916">Indentation Spaces</a>, <a xmlns="" href="#id2523342">YAML Character Stream</a>, <a xmlns="" href="#id2524672">Tag Prefixes</a>, <a xmlns="" href="#id2525905">Document Boundary Markers</a>, <a xmlns="" class="preferred" href="#id2527114">Complete Stream</a>, <a xmlns="" href="#id2527964">Nodes</a>, <a xmlns="" href="#id2531352">Flow Nodes</a>, <a xmlns="" href="#id2539942">Block Scalar Styles</a>, <a xmlns="" href="#id2543957">Mapping Styles</a>, <a xmlns="" href="#id2544175">Flow Mappings</a>, <a xmlns="" href="#id2545757">Block Mappings</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-strip chomping"></a>strip chomping, <a href="#id2519186">Production Parameters</a>, <a class="preferred" href="#id2538656">Block Chomping Indicator</a></dt>
+              <dt xmlns=""><a id="index-entry-style"></a>style, <a href="#id2505379">Present</a>, <a href="#id2505832">Construct</a>, <a href="#id2506012">Information Models</a>, <a href="#id2508949">Presentation Stream</a>, <a class="preferred" href="#id2509255">Node Styles</a>, <a href="#id2509799">Scalar Formats</a>, <a href="#id2510888">Resolved</a>, <a href="#id2526349">Documents</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>T</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-tab"></a>tab, <a href="#id2438272">Prior Art</a>, <a href="#id2513160">Character Set</a>, <a class="preferred" href="#id2516631">Miscellaneous Characters</a>, <a href="#id2517668">Escape Sequences</a>, <a href="#id2519916">Indentation Spaces</a>, <a href="#id2520528">Comments</a>, <a href="#id2521201">Separation Spaces</a>, <a href="#id2521681">Ignored Line Prefix</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2535812">Plain</a>, <a href="#id2538125">Block Indentation Indicator</a>, <a href="#id2540046">Literal</a>, <a href="#id2540863">Folded</a></dt>
+              <dt xmlns=""><a id="index-entry-tag"></a>tag</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information model, <a xmlns="" href="#id2438272">Prior Art</a>, <a xmlns="" href="#id2503753">Tags</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" href="#id2505379">Present</a>, <a xmlns="" href="#id2506281">Representation Graph</a>, <a xmlns="" href="#id2506659">Nodes</a>, <a xmlns="" class="preferred" href="#id2506940">Tags</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2509799">Scalar Formats</a>, <a xmlns="" href="#id2510274">Loading Failure Points</a>, <a xmlns="" href="#id2510888">Resolved</a>, <a xmlns="" href="#id2512215">Recognized and Valid</a>, <a xmlns="" href="#id2512548">Available</a>, <a xmlns="" href="#id2525159">Tag Handles</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2516631">Miscellaneous Characters</a>, <a xmlns="" href="#id2524297">TAG Directive</a>, <a xmlns="" href="#id2524672">Tag Prefixes</a>, <a xmlns="" href="#id2527964">Nodes</a>, <a xmlns="" class="preferred" href="#id2528616">Node Tags</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-TAG directive"></a>TAG directive, <a href="#id2506940">Tags</a>, <a href="#id2510119">Directives</a>, <a href="#id2523453">Directives</a>, <a class="preferred" href="#id2524297">TAG Directive</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-tag handle"></a>tag handle, <a href="#id2503753">Tags</a>, <a href="#id2505379">Present</a>, <a href="#id2524297">TAG Directive</a>, <a href="#id2524672">Tag Prefixes</a>, <a class="preferred" href="#id2525159">Tag Handles</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-tag  prefix"></a>tag               prefix, <a href="#id2524297">TAG Directive</a>, <a class="preferred" href="#id2524672">Tag Prefixes</a>, <a href="#id2528616">Node Tags</a></dt>
+              <dt xmlns=""><a id="index-entry-tag resolution"></a>tag resolution, <a href="#id2506940">Tags</a>, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2510888">Resolved</a>, <a href="#id2512702">Syntax</a>, <a href="#id2528616">Node Tags</a>, <a href="#id2532386">Scalar Styles</a></dt>
+              <dt xmlns=""><a id="index-entry-tag shorthand"></a>tag shorthand, <a href="#id2503753">Tags</a>, <a href="#id2512702">Syntax</a>, <a href="#id2516631">Miscellaneous Characters</a>, <a href="#id2524297">TAG Directive</a>, <a href="#id2524672">Tag Prefixes</a>, <a href="#id2525159">Tag Handles</a>, <a class="preferred" href="#id2528616">Node Tags</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>U</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-unavailable  tag"></a>unavailable           tag, <a href="#id2505832">Construct</a>, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2512548">Available</a></dt>
+              <dt xmlns=""><a id="index-entry-unidentified alias"></a>unidentified alias, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2510726">Well-Formed and Identified</a></dt>
+              <dt xmlns=""><a id="index-entry-unrecognized tag"></a>unrecognized tag, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2512215">Recognized and Valid</a></dt>
+              <dt xmlns=""><a id="index-entry-unresolved tag"></a>unresolved tag, <a href="#id2510274">Loading Failure Points</a>, <a class="preferred" href="#id2510888">Resolved</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>V</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-valid content"></a>valid content, <a class="preferred" href="#id2512215">Recognized and Valid</a></dt>
+              <dt xmlns=""><a id="index-entry-value"></a>value</dt>
+              <dd xmlns="">
+                <dl>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">information       model, <a xmlns="" href="#id2439001">Introduction</a>, <a xmlns="" href="#id2502325">Collections</a>, <a xmlns="" href="#id2502724">Structures</a>, <a xmlns="" href="#id2504710">Represent</a>, <a xmlns="" class="preferred" href="#id2506659">Nodes</a>, <a xmlns="" href="#id2507367">Nodes Comparison</a>, <a xmlns="" href="#id2508372">Keys Order</a>, <a xmlns="" href="#id2510888">Resolved</a></dt>
+                  <dt xmlns="http://www.w3.org/1999/xhtml">syntax, <a xmlns="" href="#id2513753">Indicator Characters</a>, <a xmlns="" href="#id2535812">Plain</a>, <a xmlns="" class="preferred" href="#id2543957">Mapping Styles</a></dt>
+                </dl>
+              </dd>
+              <dt xmlns=""><a id="index-entry-verbatim  tag"></a>verbatim       tag, <a href="#id2512702">Syntax</a>, <a class="preferred" href="#id2528616">Node Tags</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>W</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-well-formed stream"></a>well-formed stream, <a class="preferred" href="#id2510726">Well-Formed and Identified</a></dt>
+              <dt xmlns=""><a id="index-entry-white space"></a>white space, <a class="preferred" href="#id2516631">Miscellaneous Characters</a>, <a href="#id2521681">Ignored Line Prefix</a>, <a href="#id2522356">Line Folding</a>, <a href="#id2532720">Double Quoted</a>, <a href="#id2534365">Single Quoted</a>, <a href="#id2540863">Folded</a></dt>
+            </dl>
+          </div>
+          <div class="indexdiv">
+            <h3>Y</h3>
+            <dl>
+              <dt xmlns=""><a id="index-entry-YAML  directive"></a>YAML             directive, <a href="#id2510119">Directives</a>, <a href="#id2523453">Directives</a>, <a class="preferred" href="#id2523874">YAML Directive</a></dt>
+            </dl>
+          </div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
Index: /pysyck/tags/0.61.1/sandbox/emit-it/complex-key-bug.c
===================================================================
--- /pysyck/tags/0.61.1/sandbox/emit-it/complex-key-bug.c	(revision 25)
+++ /pysyck/tags/0.61.1/sandbox/emit-it/complex-key-bug.c	(revision 25)
@@ -0,0 +1,54 @@
+
+#include <stdio.h>
+
+#include <syck.h>
+
+void output_handler(SyckEmitter *e, char *str, long len)
+{
+    fwrite(str, 1, len, stdout);
+}
+
+void emitter_handler(SyckEmitter *e, st_data_t id)
+{
+    switch (id) {
+
+        case 1:
+            syck_emit_map(e, NULL, map_none);
+            syck_emit_item(e, 2);
+            syck_emit_item(e, 3);
+            syck_emit_end(e);
+            break;
+
+        case 2:
+            syck_emit_map(e, "x-private:key", map_none);
+            syck_emit_item(e, 4);
+            syck_emit_item(e, 5);
+            syck_emit_end(e);
+            break;
+
+        case 3:
+        case 4:
+        case 5:
+            syck_emit_scalar(e, NULL, scalar_none, 0, 0, 0, "foo", 3);
+            break;
+    }
+        
+}
+
+int main(int argc, char *argv[])
+{
+    SyckEmitter *e;
+
+    e = syck_new_emitter();
+    syck_emitter_handler(e, emitter_handler);
+    syck_output_handler(e, output_handler);
+    syck_emitter_mark_node(e, 1);
+    syck_emitter_mark_node(e, 2);
+    syck_emitter_mark_node(e, 3);
+    syck_emitter_mark_node(e, 4);
+    syck_emitter_mark_node(e, 5);
+    syck_emit(e, 1);
+    syck_emitter_flush(e, 0);
+    syck_free_emitter(e);
+}
+
Index: /pysyck/tags/0.61.1/sandbox/emit-it/emit-it.c
===================================================================
--- /pysyck/tags/0.61.1/sandbox/emit-it/emit-it.c	(revision 25)
+++ /pysyck/tags/0.61.1/sandbox/emit-it/emit-it.c	(revision 25)
@@ -0,0 +1,78 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <error.h>
+#include <string.h>
+
+#include <syck.h>
+
+void output_handler(SyckEmitter *e, char *str, long len)
+{
+    fwrite(str, 1, len, stdout);
+}
+
+void emitter_handler(SyckEmitter *e, st_data_t id)
+{
+    switch (id) {
+/*
+        case 1:
+            syck_emit_seq(e, "tag:domainmyseq.tld,2002:zz", seq_none);
+            syck_emit_item(e, 2);
+            syck_emit_item(e, 3);
+            syck_emit_item(e, 4);
+            syck_emit_end(e);
+            break;
+        case 2:
+            syck_emit_scalar(e, "tag:yaml.org,2002:str", scalar_none, 0, 0, 0, "Mark McGwire ", strlen("Mark McGwire "));
+            break;
+        case 3:
+            syck_emit_scalar(e, "tag:python.yaml.org,2002:object", scalar_none, 0, 0, 0, "Sammy Sosa", strlen("Sammy Sosa"));
+            break;
+        case 4:
+            syck_emit_scalar(e, "x-private:myowntype", scalar_none, 0, 0, 0, "Ken Griffey", strlen("Ken Griffey"));
+            break;
+*/
+
+        case 1:
+            syck_emit_map(e, NULL, map_none);
+            syck_emit_item(e, 2);
+            syck_emit_item(e, 3);
+            syck_emit_end(e);
+            break;
+
+        case 2:
+            syck_emit_map(e, "x-private:key", map_none);
+            syck_emit_item(e, 4);
+            syck_emit_item(e, 5);
+            syck_emit_end(e);
+            break;
+
+        case 3:
+        case 4:
+        case 5:
+            syck_emit_scalar(e, NULL, scalar_none, 0, 0, 0, "foo", 3);
+            break;
+    }
+        
+}
+
+int main(int argc, char *argv[])
+{
+    SyckEmitter *e;
+
+    e = syck_new_emitter();
+    syck_emitter_handler(e, emitter_handler);
+    syck_output_handler(e, output_handler);
+    syck_emitter_mark_node(e, 1);
+    syck_emitter_mark_node(e, 2);
+    syck_emitter_mark_node(e, 3);
+    syck_emitter_mark_node(e, 4);
+    syck_emitter_mark_node(e, 5);
+/*    syck_emitter_mark_node(e, 2);
+    syck_emitter_mark_node(e, 1);*/
+    syck_emit(e, 1);
+    syck_emitter_flush(e, 0);
+    syck_free_emitter(e);
+}
+
Index: /pysyck/tags/0.61.1/sandbox/emit-it/extra-delimiter-bug.c
===================================================================
--- /pysyck/tags/0.61.1/sandbox/emit-it/extra-delimiter-bug.c	(revision 33)
+++ /pysyck/tags/0.61.1/sandbox/emit-it/extra-delimiter-bug.c	(revision 33)
@@ -0,0 +1,49 @@
+
+#include <stdio.h>
+#include <string.h>
+
+#include <syck.h>
+
+#define VALUE "a scalar"
+#define LENGTH 100000
+
+void output_handler(SyckEmitter *e, char *str, long len)
+{
+    fwrite(str, 1, len, stdout);
+}
+
+void emitter_handler(SyckEmitter *e, st_data_t id)
+{
+    int k;
+
+    switch (id) {
+        case 1:
+            syck_emit_seq(e, NULL, seq_none);
+            for (k = 2; k < LENGTH; k++) {
+                syck_emit_item(e, k);
+            }
+            break;
+
+        default:
+            syck_emit_scalar(e, "tag:yaml.org,2002:str", scalar_none, 0, 0, 0, VALUE, strlen(VALUE));
+            break;
+    }
+        
+}
+
+int main(int argc, char *argv[])
+{
+    SyckEmitter *e;
+    int k;
+
+    e = syck_new_emitter();
+    syck_emitter_handler(e, emitter_handler);
+    syck_output_handler(e, output_handler);
+    for (k = 1; k < LENGTH; k++) {
+        syck_emitter_mark_node(e, k);
+    }
+    syck_emit(e, 1);
+    syck_emitter_flush(e, 0);
+    syck_free_emitter(e);
+}
+
Index: /pysyck/tags/0.61.1/sandbox/emit-it/Makefile
===================================================================
--- /pysyck/tags/0.61.1/sandbox/emit-it/Makefile	(revision 33)
+++ /pysyck/tags/0.61.1/sandbox/emit-it/Makefile	(revision 33)
@@ -0,0 +1,16 @@
+
+ALL = emit-it complex-key-bug trailing-space-bug extra-delimiter-bug
+
+.PHONY: default clean
+
+default: $(ALL)
+
+clean:
+	rm -f *.o
+	rm -f $(ALL)
+
+%.o: %.c
+	gcc -c $< -o $@ -Wall -Wstrict-prototypes -I${HOME}/include
+
+$(ALL): %: %.o
+	gcc $< -o $@ -lsyck -L${HOME}/lib -Wall -Wstrict-prototypes
Index: /pysyck/tags/0.61.1/sandbox/emit-it/trailing-space-bug.c
===================================================================
--- /pysyck/tags/0.61.1/sandbox/emit-it/trailing-space-bug.c	(revision 33)
+++ /pysyck/tags/0.61.1/sandbox/emit-it/trailing-space-bug.c	(revision 33)
@@ -0,0 +1,48 @@
+
+#include <stdio.h>
+#include <string.h>
+
+#include <syck.h>
+
+#define VALUE1 "this scalar contains trailing spaces  "
+#define VALUE2 "this scalar contains a trailing colon:"
+
+void output_handler(SyckEmitter *e, char *str, long len)
+{
+    fwrite(str, 1, len, stdout);
+}
+
+void emitter_handler(SyckEmitter *e, st_data_t id)
+{
+    switch (id) {
+        case 1:
+            syck_emit_seq(e, NULL, seq_none);
+            syck_emit_item(e, 2);
+            syck_emit_item(e, 3);
+            syck_emit_end(e);
+            break;
+        case 2:
+            syck_emit_scalar(e, "tag:yaml.org,2002:str", scalar_none, 0, 0, 0, VALUE1, strlen(VALUE1));
+            break;
+        case 3:
+            syck_emit_scalar(e, "tag:yaml.org,2002:str", scalar_none, 0, 0, 0, VALUE2, strlen(VALUE2));
+            break;
+    }
+        
+}
+
+int main(int argc, char *argv[])
+{
+    SyckEmitter *e;
+
+    e = syck_new_emitter();
+    syck_emitter_handler(e, emitter_handler);
+    syck_output_handler(e, output_handler);
+    syck_emitter_mark_node(e, 1);
+    syck_emitter_mark_node(e, 2);
+    syck_emitter_mark_node(e, 3);
+    syck_emit(e, 1);
+    syck_emitter_flush(e, 0);
+    syck_free_emitter(e);
+}
+
Index: /pysyck/tags/0.61.1/setup.cfg
===================================================================
--- /pysyck/tags/0.61.1/setup.cfg	(revision 50)
+++ /pysyck/tags/0.61.1/setup.cfg	(revision 50)
@@ -0,0 +1,11 @@
+
+# The INCLUDE and LIB directories to build the '_syck' extension.
+# You may also set them using the options '-I' and '-L'.
+[build_ext]
+
+# List of directories to search for 'syck.h' (separated by ':').
+#include_dirs=/usr/local/include:../../include
+
+# List of directories to search for 'libsyck.a' (separated by ':').
+#library_dirs=/usr/local/lib:../../lib
+
Index: /pysyck/tags/0.61.1/ext/_syckmodule.c
===================================================================
--- /pysyck/tags/0.61.1/ext/_syckmodule.c	(revision 49)
+++ /pysyck/tags/0.61.1/ext/_syckmodule.c	(revision 49)
@@ -0,0 +1,2209 @@
+
+#include <Python.h>
+#include <syck.h>
+
+/****************************************************************************
+ * Python 2.2 compatibility.
+ ****************************************************************************/
+
+#ifndef PyDoc_STR
+#define PyDoc_VAR(name)         static char name[]
+#define PyDoc_STR(str)          (str)
+#define PyDoc_STRVAR(name, str) PyDoc_VAR(name) = PyDoc_STR(str)
+#endif
+
+#ifndef PyMODINIT_FUNC
+#define PyMODINIT_FUNC  void
+#endif
+
+/****************************************************************************
+ * Global objects: _syck.error, 'scalar', 'seq', 'map',
+ * '1quote', '2quote', 'fold', 'literal', 'plain', '+', '-'.
+ ****************************************************************************/
+
+static PyObject *PySyck_Error;
+
+static PyObject *PySyck_ScalarKind;
+static PyObject *PySyck_SeqKind;
+static PyObject *PySyck_MapKind;
+
+static PyObject *PySyck_1QuoteStyle;
+static PyObject *PySyck_2QuoteStyle;
+static PyObject *PySyck_FoldStyle;
+static PyObject *PySyck_LiteralStyle;
+static PyObject *PySyck_PlainStyle;
+
+static PyObject *PySyck_StripChomp;
+static PyObject *PySyck_KeepChomp;
+
+/****************************************************************************
+ * The type _syck.Node.
+ ****************************************************************************/
+
+PyDoc_STRVAR(PySyckNode_doc,
+    "_syck.Node() -> TypeError\n\n"
+    "_syck.Node is an abstract type. It is the base type for _syck.Scalar,\n"
+    "_syck.Seq, and _syck.Map. You cannot create an instance of _syck.Node\n"
+    "directly. You may use _syck.Node for type checking or subclassing.\n");
+
+typedef struct {
+    PyObject_HEAD
+    /* Common fields for all Node types: */
+    PyObject *value;    /* always an object */
+    PyObject *tag;      /* a string object or NULL */
+    PyObject *anchor;   /* a string object or NULL */
+} PySyckNodeObject;
+
+
+static int
+PySyckNode_clear(PySyckNodeObject *self)
+{
+    PyObject *tmp;
+
+    tmp = self->value;
+    self->value = NULL;
+    Py_XDECREF(tmp);
+
+    tmp = self->tag;
+    self->tag = NULL;
+    Py_XDECREF(tmp);
+
+    tmp = self->anchor;
+    self->value = NULL;
+    Py_XDECREF(tmp);
+
+    return 0;
+}
+
+static int
+PySyckNode_traverse(PySyckNodeObject *self, visitproc visit, void *arg)
+{
+    int ret;
+
+    if (self->value)
+        if ((ret = visit(self->value, arg)) != 0)
+            return ret;
+
+    if (self->tag)
+        if ((ret = visit(self->tag, arg)) != 0)
+            return ret;
+
+    if (self->anchor)
+        if ((ret = visit(self->anchor, arg)) != 0)
+            return ret;
+
+    return 0;
+}
+
+static void
+PySyckNode_dealloc(PySyckNodeObject *self)
+{
+    PySyckNode_clear(self);
+    self->ob_type->tp_free((PyObject *)self);
+}
+
+static PyObject *
+PySyckNode_getkind(PySyckNodeObject *self, PyObject **closure)
+{
+    Py_INCREF(*closure);
+    return *closure;
+}
+
+static PyObject *
+PySyckNode_getvalue(PySyckNodeObject *self, void *closure)
+{
+    Py_INCREF(self->value);
+    return self->value;
+}
+
+static PyObject *
+PySyckNode_gettag(PySyckNodeObject *self, void *closure)
+{
+    PyObject *value = self->tag ? self->tag : Py_None;
+    Py_INCREF(value);
+    return value;
+}
+
+static int
+PySyckNode_settag(PySyckNodeObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'tag'");
+        return -1;
+    }
+
+    if (value == Py_None) {
+        Py_XDECREF(self->tag);
+        self->tag = NULL;
+        return 0;
+    }
+
+    if (!PyString_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'tag' must be a string");
+        return -1;
+    }
+
+    Py_XDECREF(self->tag);
+    Py_INCREF(value);
+    self->tag = value;
+
+    return 0;
+}
+
+static PyObject *
+PySyckNode_getanchor(PySyckNodeObject *self, void *closure)
+{
+    PyObject *value = self->anchor ? self->anchor : Py_None;
+    Py_INCREF(value);
+    return value;
+}
+
+static int
+PySyckNode_setanchor(PySyckNodeObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'anchor'");
+        return -1;
+    }
+
+    if (value == Py_None) {
+        Py_XDECREF(self->anchor);
+        self->anchor = NULL;
+        return 0;
+    }
+
+    if (!PyString_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'anchor' must be a string");
+        return -1;
+    }
+
+    Py_XDECREF(self->anchor);
+    Py_INCREF(value);
+    self->anchor = value;
+
+    return 0;
+}
+
+static PyTypeObject PySyckNode_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                          /* ob_size */
+    "_syck.Node",                               /* tp_name */
+    sizeof(PySyckNodeObject),                   /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    (destructor)PySyckNode_dealloc,             /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_compare */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    0,                                          /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,  /* tp_flags */
+    PySyckNode_doc,                             /* tp_doc */
+    (traverseproc)PySyckNode_traverse,          /* tp_traverse */
+    (inquiry)PySyckNode_clear,                  /* tp_clear */
+};
+
+/****************************************************************************
+ * The type _syck.Scalar.
+ ****************************************************************************/
+
+PyDoc_STRVAR(PySyckScalar_doc,
+    "Scalar(value='', tag=None, style=None, indent=0, width=0, chomp=None)\n"
+    "      -> a Scalar node\n\n"
+    "_syck.Scalar represents a scalar node in Syck parser and emitter\n"
+    "trees. A scalar node points to a single string value.\n");
+
+typedef struct {
+    PyObject_HEAD
+    /* Common fields for all Node types: */
+    PyObject *value;    /* always a string object */
+    PyObject *tag;      /* a string object or NULL */
+    PyObject *anchor;   /* a string object or NULL */
+    /* Scalar-specific fields: */
+    enum scalar_style style;
+    int indent;
+    int width;
+    char chomp;
+} PySyckScalarObject;
+
+static PyObject *
+PySyckScalar_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PySyckScalarObject *self;
+
+    self = (PySyckScalarObject *)type->tp_alloc(type, 0);
+    if (!self) return NULL;
+
+    self->value = PyString_FromString("");
+    if (!self->value) {
+        Py_DECREF(self);
+        return NULL;
+    }
+
+    self->tag = NULL;
+    self->anchor = NULL;
+    self->style = scalar_none;
+    self->indent = 0;
+    self->width = 0;
+    self->chomp = 0;
+
+    return (PyObject *)self;
+}
+
+static int
+PySyckScalar_setvalue(PySyckScalarObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'value'");
+        return -1;
+    }
+    if (!PyString_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'value' must be a string");
+        return -1;
+    }
+
+    Py_DECREF(self->value);
+    Py_INCREF(value);
+    self->value = value;
+
+    return 0;
+}
+
+static PyObject *
+PySyckScalar_getstyle(PySyckScalarObject *self, void *closure)
+{
+    PyObject *value;
+
+    switch (self->style) {
+        case scalar_1quote: value = PySyck_1QuoteStyle; break;
+        case scalar_2quote: value = PySyck_2QuoteStyle; break;
+        case scalar_fold: value = PySyck_FoldStyle; break;
+        case scalar_literal: value = PySyck_LiteralStyle; break;
+        case scalar_plain: value = PySyck_PlainStyle; break;
+        default: value = Py_None;
+    }
+
+    Py_INCREF(value);
+    return value;
+}
+
+static int
+PySyckScalar_setstyle(PySyckScalarObject *self, PyObject *value, void *closure)
+{
+    char *str;
+
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'style'");
+        return -1;
+    }
+
+    if (value == Py_None) {
+        self->style = scalar_none;
+        return 0;
+    }
+
+    if (!PyString_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'style' must be a string or None");
+        return -1;
+    }
+
+    str = PyString_AsString(value);
+    if (!str) return -1;
+
+    if (strcmp(str, "1quote") == 0)
+        self->style = scalar_1quote;
+    else if (strcmp(str, "2quote") == 0)
+        self->style = scalar_2quote;
+    else if (strcmp(str, "fold") == 0)
+        self->style = scalar_fold;
+    else if (strcmp(str, "literal") == 0)
+        self->style = scalar_literal;
+    else if (strcmp(str, "plain") == 0)
+        self->style = scalar_plain;
+    else {
+        PyErr_SetString(PyExc_ValueError, "unknown 'style'");
+        return -1;
+    }
+
+    return 0;
+}
+
+static PyObject *
+PySyckScalar_getindent(PySyckScalarObject *self, void *closure)
+{
+    return PyInt_FromLong(self->indent);
+}
+
+static int
+PySyckScalar_setindent(PySyckScalarObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'indent'");
+        return -1;
+    }
+
+    if (!PyInt_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'indent' must be an integer");
+        return -1;
+    }
+
+    self->indent = PyInt_AS_LONG(value);
+
+    return 0;
+}
+
+static PyObject *
+PySyckScalar_getwidth(PySyckScalarObject *self, void *closure)
+{
+    return PyInt_FromLong(self->width);
+}
+
+static int
+PySyckScalar_setwidth(PySyckScalarObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'width'");
+        return -1;
+    }
+
+    if (!PyInt_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'width' must be an integer");
+        return -1;
+    }
+
+    self->width = PyInt_AS_LONG(value);
+
+    return 0;
+}
+
+static PyObject *
+PySyckScalar_getchomp(PySyckScalarObject *self, void *closure)
+{
+    PyObject *value;
+
+    switch (self->chomp) {
+        case NL_CHOMP: value = PySyck_StripChomp; break;
+        case NL_KEEP: value = PySyck_KeepChomp; break;
+        default: value = Py_None;
+    }
+
+    Py_INCREF(value);
+    return value;
+}
+
+static int
+PySyckScalar_setchomp(PySyckScalarObject *self, PyObject *value, void *closure)
+{
+    char *str;
+
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'chomp'");
+        return -1;
+    }
+
+    if (value == Py_None) {
+        self->chomp = 0;
+        return 0;
+    }
+
+    if (!PyString_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'chomp' must be '+', '-', or None");
+        return -1;
+    }
+
+    str = PyString_AsString(value);
+    if (!str) return -1;
+
+    if (strcmp(str, "-") == 0)
+        self->chomp = NL_CHOMP;
+    else if (strcmp(str, "+") == 0)
+        self->chomp = NL_KEEP;
+    else {
+        PyErr_SetString(PyExc_TypeError, "'chomp' must be '+', '-', or None");
+        return -1;
+    }
+
+    return 0;
+}
+
+static int
+PySyckScalar_init(PySyckScalarObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *value = NULL;
+    PyObject *tag = NULL;
+    PyObject *anchor = NULL;
+    PyObject *style = NULL;
+    PyObject *indent = NULL;
+    PyObject *width = NULL;
+    PyObject *chomp = NULL;
+
+    static char *kwdlist[] = {"value", "tag", "anchor",
+        "style", "indent", "width", "chomp", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOOOOO", kwdlist,
+                &value, &tag, &anchor, &style, &indent, &width, &chomp))
+        return -1;
+
+    if (value && PySyckScalar_setvalue(self, value, NULL) < 0)
+        return -1;
+
+    if (tag && PySyckNode_settag((PySyckNodeObject *)self, tag, NULL) < 0)
+        return -1;
+
+    if (anchor && PySyckNode_setanchor((PySyckNodeObject *)self, anchor, NULL) < 0)
+        return -1;
+
+    if (style && PySyckScalar_setstyle(self, style, NULL) < 0)
+        return -1;
+
+    if (indent && PySyckScalar_setindent(self, indent, NULL) < 0)
+        return -1;
+
+    if (width && PySyckScalar_setwidth(self, width, NULL) < 0)
+        return -1;
+
+    if (chomp && PySyckScalar_setchomp(self, chomp, NULL) < 0)
+        return -1;
+
+    return 0;
+}
+
+static PyGetSetDef PySyckScalar_getsetters[] = {
+    {"kind", (getter)PySyckNode_getkind, NULL,
+        PyDoc_STR("the node kind, always 'scalar', read-only"),
+        &PySyck_ScalarKind},
+    {"value", (getter)PySyckNode_getvalue, (setter)PySyckScalar_setvalue,
+        PyDoc_STR("the node value, a string"), NULL},
+    {"tag", (getter)PySyckNode_gettag, (setter)PySyckNode_settag,
+        PyDoc_STR("the node tag, a string or None"), NULL},
+    {"anchor", (getter)PySyckNode_getanchor, (setter)PySyckNode_setanchor,
+        PyDoc_STR("the node anchor, a string or None"), NULL},
+    {"style", (getter)PySyckScalar_getstyle, (setter)PySyckScalar_setstyle,
+        PyDoc_STR("the node style, values: None (means literal or plain),\n"
+            "'1quote', '2quote', 'fold', 'literal', 'plain'"), NULL},
+    {"indent", (getter)PySyckScalar_getindent, (setter)PySyckScalar_setindent,
+        PyDoc_STR("the node indentation, an integer"), NULL},
+    {"width", (getter)PySyckScalar_getwidth, (setter)PySyckScalar_setwidth,
+        PyDoc_STR("the node width, an integer"), NULL},
+    {"chomp", (getter)PySyckScalar_getchomp, (setter)PySyckScalar_setchomp,
+        PyDoc_STR("the chomping method,\n"
+            "values: None (clip), '-' (strip), or '+' (keep)"), NULL},
+    {NULL}  /* Sentinel */
+};
+
+static PyTypeObject PySyckScalar_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                          /* ob_size */
+    "_syck.Scalar",                             /* tp_name */
+    sizeof(PySyckScalarObject),                 /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    0,                                          /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_compare */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    0,                                          /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,     /* tp_flags */
+    PySyckScalar_doc,                           /* tp_doc */
+    0,                                          /* tp_traverse */
+    0,                                          /* tp_clear */
+    0,                                          /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    0,                                          /* tp_iter */
+    0,                                          /* tp_iternext */
+    0,                                          /* tp_methods */
+    0,                                          /* tp_members */
+    PySyckScalar_getsetters,                    /* tp_getset */
+    &PySyckNode_Type,                           /* tp_base */
+    0,                                          /* tp_dict */
+    0,                                          /* tp_descr_get */
+    0,                                          /* tp_descr_set */
+    0,                                          /* tp_dictoffset */
+    (initproc)PySyckScalar_init,                /* tp_init */
+    0,                                          /* tp_alloc */
+    PySyckScalar_new,                           /* tp_new */
+};
+
+/****************************************************************************
+ * The type _syck.Seq.
+ ****************************************************************************/
+
+PyDoc_STRVAR(PySyckSeq_doc,
+    "Seq(value=[], tag=None, inline=False) -> a Seq node\n\n"
+    "_syck.Seq represents a sequence node in Syck parser and emitter\n"
+    "trees. A sequence node points to an ordered set of subnodes.\n");
+
+typedef struct {
+    PyObject_HEAD
+    /* Common fields for all Node types: */
+    PyObject *value;    /* always an object */
+    PyObject *tag;      /* a string object or NULL */
+    PyObject *anchor;   /* a string object or NULL */
+    /* Seq-specific fields: */
+    enum seq_style style;
+} PySyckSeqObject;
+
+static PyObject *
+PySyckSeq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PySyckSeqObject *self;
+
+    self = (PySyckSeqObject *)type->tp_alloc(type, 0);
+    if (!self) return NULL;
+
+    self->value = PyList_New(0);
+    if (!self->value) {
+        Py_DECREF(self);
+        return NULL;
+    }
+
+    self->tag = NULL;
+    self->anchor = NULL;
+    self->style = seq_none;
+
+    return (PyObject *)self;
+}
+
+static int
+PySyckSeq_setvalue(PySyckSeqObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'value'");
+        return -1;
+    }
+    if (!PyList_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'value' must be a list");
+        return -1;
+    }
+
+    Py_DECREF(self->value);
+    Py_INCREF(value);
+    self->value = value;
+
+    return 0;
+}
+
+static PyObject *
+PySyckSeq_getinline(PySyckSeqObject *self, void *closure)
+{
+    PyObject *value = (self->style == seq_inline) ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static int
+PySyckSeq_setinline(PySyckSeqObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'inline'");
+        return -1;
+    }
+
+    if (!PyInt_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'inline' must be a Boolean object");
+        return -1;
+    }
+
+    self->style = PyInt_AS_LONG(value) ? seq_inline : seq_none;
+
+    return 0;
+}
+
+static int
+PySyckSeq_init(PySyckSeqObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *value = NULL;
+    PyObject *tag = NULL;
+    PyObject *anchor = NULL;
+    PyObject *inline_ = NULL;
+
+    static char *kwdlist[] = {"value", "tag", "anchor", "inline", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO", kwdlist,
+                &value, &tag, &anchor, &inline_))
+        return -1;
+
+    if (value && PySyckSeq_setvalue(self, value, NULL) < 0)
+        return -1;
+
+    if (tag && PySyckNode_settag((PySyckNodeObject *)self, tag, NULL) < 0)
+        return -1;
+
+    if (anchor && PySyckNode_setanchor((PySyckNodeObject *)self, anchor, NULL) < 0)
+        return -1;
+
+    if (inline_ && PySyckSeq_setinline(self, inline_, NULL) < 0)
+        return -1;
+
+    return 0;
+}
+
+static PyGetSetDef PySyckSeq_getsetters[] = {
+    {"kind", (getter)PySyckNode_getkind, NULL,
+        PyDoc_STR("the node kind, always 'seq', read-only"), &PySyck_SeqKind},
+    {"value", (getter)PySyckNode_getvalue, (setter)PySyckSeq_setvalue,
+        PyDoc_STR("the node value, a sequence"), NULL},
+    {"tag", (getter)PySyckNode_gettag, (setter)PySyckNode_settag,
+        PyDoc_STR("the node tag, a string or None"), NULL},
+    {"anchor", (getter)PySyckNode_getanchor, (setter)PySyckNode_setanchor,
+        PyDoc_STR("the node anchor, a string or None"), NULL},
+    {"inline", (getter)PySyckSeq_getinline, (setter)PySyckSeq_setinline,
+        PyDoc_STR("the block/flow flag"), NULL},
+    {NULL}  /* Sentinel */
+};
+
+static PyTypeObject PySyckSeq_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                          /* ob_size */
+    "_syck.Seq",                                /* tp_name */
+    sizeof(PySyckSeqObject),                    /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    0,                                          /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_compare */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    0,                                          /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,  /* tp_flags */
+    PySyckSeq_doc,                              /* tp_doc */
+    (traverseproc)PySyckNode_traverse,          /* tp_traverse */
+    (inquiry)PySyckNode_clear,                  /* tp_clear */
+    0,                                          /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    0,                                          /* tp_iter */
+    0,                                          /* tp_iternext */
+    0,                                          /* tp_methods */
+    0,                                          /* tp_members */
+    PySyckSeq_getsetters,                       /* tp_getset */
+    &PySyckNode_Type,                           /* tp_base */
+    0,                                          /* tp_dict */
+    0,                                          /* tp_descr_get */
+    0,                                          /* tp_descr_set */
+    0,                                          /* tp_dictoffset */
+    (initproc)PySyckSeq_init,                   /* tp_init */
+    0,                                          /* tp_alloc */
+    PySyckSeq_new,                              /* tp_new */
+};
+
+/****************************************************************************
+ * The type _syck.Map.
+ ****************************************************************************/
+
+PyDoc_STRVAR(PySyckMap_doc,
+    "Map(value={}, tag=None, inline=False) -> a Map node\n\n"
+    "_syck.Map represents a mapping node in Syck parser and emitter\n"
+    "trees. A mapping node points to an unordered collections of pairs.\n");
+
+typedef struct {
+    PyObject_HEAD
+    /* Common fields for all Node types: */
+    PyObject *value;    /* always an object */
+    PyObject *tag;      /* a string object or NULL */
+    PyObject *anchor;   /* a string object or NULL */
+    /* Map-specific fields: */
+    enum map_style style;
+} PySyckMapObject;
+
+static PyObject *
+PySyckMap_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PySyckMapObject *self;
+
+    self = (PySyckMapObject *)type->tp_alloc(type, 0);
+    if (!self) return NULL;
+
+    self->value = PyDict_New();
+    if (!self->value) {
+        Py_DECREF(self);
+        return NULL;
+    }
+
+    self->tag = NULL;
+    self->anchor = NULL;
+    self->style = seq_none;
+
+    return (PyObject *)self;
+}
+
+static int
+PySyckMap_setvalue(PySyckMapObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'value'");
+        return -1;
+    }
+    if (!PyDict_Check(value) && !PyList_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                "'value' must be a list of pairs or a dictionary");
+        return -1;
+    }
+
+    Py_DECREF(self->value);
+    Py_INCREF(value);
+    self->value = value;
+
+    return 0;
+}
+
+static PyObject *
+PySyckMap_getinline(PySyckMapObject *self, void *closure)
+{
+    PyObject *value = (self->style == map_inline) ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static int
+PySyckMap_setinline(PySyckMapObject *self, PyObject *value, void *closure)
+{
+    if (!value) {
+        PyErr_SetString(PyExc_TypeError, "cannot delete 'inline'");
+        return -1;
+    }
+
+    if (!PyInt_Check(value)) {
+        PyErr_SetString(PyExc_TypeError, "'inline' must be a Boolean object");
+        return -1;
+    }
+
+    self->style = PyInt_AS_LONG(value) ? map_inline : map_none;
+
+    return 0;
+}
+
+static int
+PySyckMap_init(PySyckMapObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *value = NULL;
+    PyObject *tag = NULL;
+    PyObject *anchor = NULL;
+    PyObject *inline_ = NULL;
+
+    static char *kwdlist[] = {"value", "tag", "anchor", "inline", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO", kwdlist,
+                &value, &tag, &anchor, &inline_))
+        return -1;
+
+    if (value && PySyckMap_setvalue(self, value, NULL) < 0)
+        return -1;
+
+    if (tag && PySyckNode_settag((PySyckNodeObject *)self, tag, NULL) < 0)
+        return -1;
+
+    if (anchor && PySyckNode_setanchor((PySyckNodeObject *)self, anchor, NULL) < 0)
+        return -1;
+
+    if (inline_ && PySyckMap_setinline(self, inline_, NULL) < 0)
+        return -1;
+
+    return 0;
+}
+
+static PyGetSetDef PySyckMap_getsetters[] = {
+    {"kind", (getter)PySyckNode_getkind, NULL,
+        PyDoc_STR("the node kind, always 'map', read-only"), &PySyck_MapKind},
+    {"value", (getter)PySyckNode_getvalue, (setter)PySyckMap_setvalue,
+        PyDoc_STR("the node value, a list of pairs or a dictionary"), NULL},
+    {"tag", (getter)PySyckNode_gettag, (setter)PySyckNode_settag,
+        PyDoc_STR("the node tag, a string or None"), NULL},
+    {"anchor", (getter)PySyckNode_getanchor, (setter)PySyckNode_setanchor,
+        PyDoc_STR("the node anchor, a string or None"), NULL},
+    {"inline", (getter)PySyckMap_getinline, (setter)PySyckMap_setinline,
+        PyDoc_STR("the block/flow flag"), NULL},
+    {NULL}  /* Sentinel */
+};
+
+static PyTypeObject PySyckMap_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                          /* ob_size */
+    "_syck.Map",                                /* tp_name */
+    sizeof(PySyckMapObject),                    /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    0,                                          /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_compare */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    0,                                          /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,  /* tp_flags */
+    PySyckMap_doc,                              /* tp_doc */
+    (traverseproc)PySyckNode_traverse,          /* tp_traverse */
+    (inquiry)PySyckNode_clear,                  /* tp_clear */
+    0,                                          /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    0,                                          /* tp_iter */
+    0,                                          /* tp_iternext */
+    0,                                          /* tp_methods */
+    0,                                          /* tp_members */
+    PySyckMap_getsetters,                       /* tp_getset */
+    &PySyckNode_Type,                           /* tp_base */
+    0,                                          /* tp_dict */
+    0,                                          /* tp_descr_get */
+    0,                                          /* tp_descr_set */
+    0,                                          /* tp_dictoffset */
+    (initproc)PySyckMap_init,                   /* tp_init */
+    0,                                          /* tp_alloc */
+    PySyckMap_new,                              /* tp_new */
+};
+
+/****************************************************************************
+ * The type _syck.Parser.
+ ****************************************************************************/
+
+PyDoc_STRVAR(PySyckParser_doc,
+    "Parser(source, implicit_typing=True, taguri_expansion=True)\n"
+    "      -> a Parser object\n\n"
+    "_syck.Parser is a low-lever wrapper of the Syck parser. It parses\n"
+    "a YAML stream and produces a tree of Nodes.\n");
+
+typedef struct {
+    PyObject_HEAD
+    /* Attributes: */
+    PyObject *source;       /* a string or file-like object */
+    int implicit_typing;
+    int taguri_expansion;
+    /* Internal fields: */
+    PyObject *symbols;      /* symbol table, a list, NULL outside parse() */
+    SyckParser *parser;
+    int parsing;
+    int halt;
+} PySyckParserObject;
+
+static PyObject *
+PySyckParser_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PySyckParserObject *self;
+
+    self = (PySyckParserObject *)type->tp_alloc(type, 0);
+    if (!self) return NULL;
+
+    self->source = NULL;
+    self->implicit_typing = 0;
+    self->taguri_expansion = 0;
+    self->symbols = NULL;
+    self->parser = NULL;
+    self->parsing = 0;
+    self->halt = 1;
+
+    /*
+    self->symbols = PyList_New(0);
+    if (!self->symbols) {
+        Py_DECREF(self);
+        return NULL;
+    }
+    */
+
+    return (PyObject *)self;
+}
+
+static int
+PySyckParser_clear(PySyckParserObject *self)
+{
+    PyObject *tmp;
+
+    if (self->parser) {
+        syck_free_parser(self->parser);
+        self->parser = NULL;
+    }
+
+    tmp = self->source;
+    self->source = NULL;
+    Py_XDECREF(tmp);
+
+    tmp = self->symbols;
+    self->symbols = NULL;
+    Py_XDECREF(tmp);
+
+    return 0;
+}
+
+static int
+PySyckParser_traverse(PySyckParserObject *self, visitproc visit, void *arg)
+{
+    int ret;
+
+    if (self->source)
+        if ((ret = visit(self->source, arg)) != 0)
+            return ret;
+
+    if (self->symbols)
+        if ((ret = visit(self->symbols, arg)) != 0)
+            return ret;
+
+    return 0;
+}
+
+static void
+PySyckParser_dealloc(PySyckParserObject *self)
+{
+    PySyckParser_clear(self);
+    self->ob_type->tp_free((PyObject *)self);
+}
+
+static PyObject *
+PySyckParser_getsource(PySyckParserObject *self, void *closure)
+{
+    PyObject *value = self->source ? self->source : Py_None;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckParser_getimplicit_typing(PySyckParserObject *self, void *closure)
+{
+    PyObject *value = self->implicit_typing ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckParser_gettaguri_expansion(PySyckParserObject *self, void *closure)
+{
+    PyObject *value = self->taguri_expansion ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckParser_geteof(PySyckParserObject *self, void *closure)
+{
+    PyObject *value = self->halt ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyGetSetDef PySyckParser_getsetters[] = {
+    {"source", (getter)PySyckParser_getsource, NULL,
+        PyDoc_STR("IO source, a string or a file-like object"), NULL},
+    {"implicit_typing", (getter)PySyckParser_getimplicit_typing, NULL,
+        PyDoc_STR("implicit typing of builtin YAML types"), NULL},
+    {"taguri_expansion", (getter)PySyckParser_gettaguri_expansion, NULL,
+        PyDoc_STR("expansion of types in full taguri"), NULL},
+    {"eof", (getter)PySyckParser_geteof, NULL,
+        PyDoc_STR("EOF flag"), NULL},
+    {NULL}  /* Sentinel */
+};
+
+static SYMID
+PySyckParser_node_handler(SyckParser *parser, SyckNode *node)
+{
+    PyGILState_STATE gs;
+
+    PySyckParserObject *self = (PySyckParserObject *)parser->bonus;
+
+    SYMID index;
+    PySyckNodeObject *object = NULL;
+
+    PyObject *key, *value;
+    int k;
+
+    if (self->halt)
+        return -1;
+
+    gs = PyGILState_Ensure();
+
+    switch (node->kind) {
+
+        case syck_str_kind:
+            object = (PySyckNodeObject *)
+                PySyckScalar_new(&PySyckScalar_Type, NULL, NULL);
+            if (!object) goto error;
+            value = PyString_FromStringAndSize(node->data.str->ptr,
+                    node->data.str->len);
+            if (!value) goto error;
+            Py_DECREF(object->value);
+            object->value = value;
+            break;
+
+        case syck_seq_kind:
+            object = (PySyckNodeObject *)
+                PySyckSeq_new(&PySyckSeq_Type, NULL, NULL);
+            if (!object) goto error;
+            for (k = 0; k < node->data.list->idx; k++) {
+                index = syck_seq_read(node, k)-1;
+                value = PyList_GetItem(self->symbols, index);
+                if (!value) goto error;
+                if (PyList_Append(object->value, value) < 0)
+                    goto error;
+            }
+            break;
+
+        case syck_map_kind:
+            object = (PySyckNodeObject *)
+                PySyckMap_new(&PySyckMap_Type, NULL, NULL);
+            if (!object) goto error;
+            for (k = 0; k < node->data.pairs->idx; k++)
+            {
+                index = syck_map_read(node, map_key, k)-1;
+                key = PyList_GetItem(self->symbols, index);
+                if (!key) goto error;
+                index = syck_map_read(node, map_value, k)-1;
+                value = PyList_GetItem(self->symbols, index);
+                if (!value) goto error;
+                if (PyDict_SetItem(object->value, key, value) < 0)
+                    goto error;
+            }
+            break;
+    }
+
+    if (node->type_id) {
+        object->tag = PyString_FromString(node->type_id);
+        if (!object->tag) goto error;
+    }
+
+    if (node->anchor) {
+        object->anchor = PyString_FromString(node->anchor);
+        if (!object->anchor) goto error;
+    }
+
+    if (PyList_Append(self->symbols, (PyObject *)object) < 0)
+        goto error;
+
+    index = PyList_GET_SIZE(self->symbols);
+    PyGILState_Release(gs);
+    return index;
+
+error:
+    Py_XDECREF(object);
+    PyGILState_Release(gs);
+    self->halt = 1;
+    return -1;
+}
+
+static void
+PySyckParser_error_handler(SyckParser *parser, char *str)
+{
+    PyGILState_STATE gs;
+
+    PySyckParserObject *self = (PySyckParserObject *)parser->bonus;
+    PyObject *value;
+
+    if (self->halt) return;
+
+    gs = PyGILState_Ensure();
+
+    self->halt = 1;
+
+    value = Py_BuildValue("(sii)", str,
+            parser->linect, parser->cursor - parser->lineptr);
+    if (value) {
+        PyErr_SetObject(PySyck_Error, value);
+    }
+
+    PyGILState_Release(gs);
+}
+
+SyckNode *
+PySyckParser_bad_anchor_handler(SyckParser *parser, char *anchor)
+{
+    PyGILState_STATE gs;
+
+    PySyckParserObject *self = (PySyckParserObject *)parser->bonus;
+
+    if (!self->halt) {
+        gs = PyGILState_Ensure();
+
+        self->halt = 1;
+        PyErr_SetString(PyExc_TypeError, "recursive anchors are not implemented");
+
+        PyGILState_Release(gs);
+    }
+
+    return syck_alloc_str();
+}
+
+static long
+PySyckParser_read_handler(char *buf, SyckIoFile *file, long max_size, long skip)
+{
+    PyGILState_STATE gs;
+
+    PySyckParserObject *self = (PySyckParserObject *)file->ptr;
+
+    PyObject *value;
+
+    char *str;
+    int length;
+
+    buf[skip] = '\0';
+
+    if (self->halt) {
+        return skip;
+    }
+    
+    max_size -= skip;
+
+    gs = PyGILState_Ensure();
+
+    value = PyObject_CallMethod(self->source, "read", "(i)", max_size);
+    if (!value) {
+        self->halt = 1;
+
+        PyGILState_Release(gs);
+
+        return skip;
+    }
+
+    if (!PyString_CheckExact(value)) {
+        Py_DECREF(value);
+        PyErr_SetString(PyExc_TypeError, "file-like object should return a string");
+        self->halt = 1;
+        
+        PyGILState_Release(gs);
+
+        return skip;
+    }
+
+    str = PyString_AS_STRING(value);
+    length = PyString_GET_SIZE(value);
+    if (!length) {
+        Py_DECREF(value);
+
+        PyGILState_Release(gs);
+
+        return skip;
+    }
+
+    if (length > max_size) {
+        Py_DECREF(value);
+        PyErr_SetString(PyExc_ValueError, "read returns an overly long string");
+        self->halt = 1;
+
+        PyGILState_Release(gs);
+
+        return skip;
+    }
+
+    memcpy(buf+skip, str, length);
+    length += skip;
+    buf[length] = '\0';
+
+    Py_DECREF(value);
+
+    PyGILState_Release(gs);
+
+    return length;
+}
+
+static int
+PySyckParser_init(PySyckParserObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *source = NULL;
+    int implicit_typing = 1;
+    int taguri_expansion = 1;
+
+    static char *kwdlist[] = {"source", "implicit_typing", "taguri_expansion",
+        NULL};
+
+    PySyckParser_clear(self);
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|ii", kwdlist,
+                &source, &implicit_typing, &taguri_expansion))
+        return -1;
+
+    Py_INCREF(source);
+    self->source = source;
+
+    self->implicit_typing = implicit_typing;
+    self->taguri_expansion = taguri_expansion;
+
+    self->parser = syck_new_parser();
+    self->parser->bonus = self;
+
+    if (PyString_CheckExact(self->source)) {
+        syck_parser_str(self->parser,
+                PyString_AS_STRING(self->source),
+                PyString_GET_SIZE(self->source), NULL);
+    }
+    /*
+    else if (PyUnicode_CheckExact(self->source)) {
+        syck_parser_str(self->parser,
+                PyUnicode_AS_DATA(self->source),
+                PyString_GET_DATA_SIZE(self->source), NULL);
+    }
+    */
+    else {
+        syck_parser_file(self->parser, (FILE *)self, PySyckParser_read_handler);
+    }
+
+    syck_parser_implicit_typing(self->parser, self->implicit_typing);
+    syck_parser_taguri_expansion(self->parser, self->taguri_expansion);
+
+    syck_parser_handler(self->parser, PySyckParser_node_handler);
+    syck_parser_error_handler(self->parser, PySyckParser_error_handler);
+    syck_parser_bad_anchor_handler(self->parser, PySyckParser_bad_anchor_handler);
+
+    self->parsing = 0;
+    self->halt = 0;
+
+    return 0;
+}
+
+static PyObject *
+PySyckParser_parse(PySyckParserObject *self)
+{
+    SYMID index;
+    PyObject *value;
+
+    if (self->parsing) {
+        PyErr_SetString(PyExc_RuntimeError,
+                "do not call Parser.parse while it is already running");
+        return NULL;
+    }
+
+    if (self->halt) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    self->symbols = PyList_New(0);
+    if (!self->symbols) {
+        return NULL;
+    }
+
+    self->parsing = 1;
+    Py_BEGIN_ALLOW_THREADS
+    index = syck_parse(self->parser)-1;
+    Py_END_ALLOW_THREADS
+    self->parsing = 0;
+
+    if (self->halt || self->parser->eof) {
+        Py_DECREF(self->symbols);
+        self->symbols = NULL;
+
+        if (self->halt) return NULL;
+
+        self->halt = 1;
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    value = PyList_GetItem(self->symbols, index);
+
+    Py_DECREF(self->symbols);
+    self->symbols = NULL;
+
+    return value;
+}
+
+PyDoc_STRVAR(PySyckParser_parse_doc,
+    "parse() -> the root Node object\n\n"
+    "Parses the source and returns the root of the Node tree. Call it\n"
+    "several times to retrieve all documents from the source. On EOF,\n"
+    "returns None and sets the 'eof' attribute on.\n");
+
+static PyMethodDef PySyckParser_methods[] = {
+    {"parse",  (PyCFunction)PySyckParser_parse,
+        METH_NOARGS, PySyckParser_parse_doc},
+    {NULL}  /* Sentinel */
+};
+
+static PyTypeObject PySyckParser_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                          /* ob_size */
+    "_syck.Parser",                             /* tp_name */
+    sizeof(PySyckParserObject),                 /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    (destructor)PySyckParser_dealloc,           /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_compare */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    0,                                          /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,  /* tp_flags */
+    PySyckParser_doc,                           /* tp_doc */
+    (traverseproc)PySyckParser_traverse,        /* tp_traverse */
+    (inquiry)PySyckParser_clear,                /* tp_clear */
+    0,                                          /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    0,                                          /* tp_iter */
+    0,                                          /* tp_iternext */
+    PySyckParser_methods,                       /* tp_methods */
+    0,                                          /* tp_members */
+    PySyckParser_getsetters,                    /* tp_getset */
+    0,                                          /* tp_base */
+    0,                                          /* tp_dict */
+    0,                                          /* tp_descr_get */
+    0,                                          /* tp_descr_set */
+    0,                                          /* tp_dictoffset */
+    (initproc)PySyckParser_init,                /* tp_init */
+    0,                                          /* tp_alloc */
+    PySyckParser_new,                           /* tp_new */
+};
+
+/****************************************************************************
+ * The type _syck.Emitter.
+ ****************************************************************************/
+
+PyDoc_STRVAR(PySyckEmitter_doc,
+    "Emitter(output, headless=False, use_header=False, use_version=False,\n"
+    "        explicit_typing=True, style=None, best_width=80, indent=2)\n"
+    "                -> an Emitter object\n\n"
+    "_syck.Emitter is a low-lever wrapper of the Syck emitter. It emits\n"
+    "a tree of Nodes into a YAML stream.\n");
+
+typedef struct {
+    PyObject_HEAD
+    /* Attributes: */
+    PyObject *output;       /* a file-like object */
+    int headless;
+    int use_header;
+    int use_version;
+    int explicit_typing;
+    enum scalar_style style;
+    int best_width;
+    int indent;
+    /* Internal fields: */
+    PyObject *symbols;      /* symbol table, a list, NULL outside emit() */
+    PyObject *nodes;        /* node -> symbol, a dict, NULL outside emit() */
+    SyckEmitter *emitter;
+    int emitting;
+    int halt;
+} PySyckEmitterObject;
+
+static PyObject *
+PySyckEmitter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PySyckEmitterObject *self;
+
+    self = (PySyckEmitterObject *)type->tp_alloc(type, 0);
+    if (!self) return NULL;
+
+    self->output = NULL;
+    self->headless = 0;
+    self->use_header = 0;
+    self->use_version = 0;
+    self->explicit_typing = 0;
+    self->style = scalar_none;
+    self->best_width = 0;
+    self->indent = 0;
+    self->symbols = NULL;
+    self->nodes = NULL;
+    self->emitter = NULL;
+    self->emitting = 0;
+    self->halt = 1;
+
+    return (PyObject *)self;
+}
+
+static int
+PySyckEmitter_clear(PySyckEmitterObject *self)
+{
+    PyObject *tmp;
+
+    if (self->emitter) {
+        syck_free_emitter(self->emitter);
+        self->emitter = NULL;
+    }
+
+    tmp = self->output;
+    self->output = NULL;
+    Py_XDECREF(tmp);
+
+    tmp = self->symbols;
+    self->symbols = NULL;
+    Py_XDECREF(tmp);
+
+    tmp = self->nodes;
+    self->nodes = NULL;
+    Py_XDECREF(tmp);
+
+    return 0;
+}
+
+static int
+PySyckEmitter_traverse(PySyckEmitterObject *self, visitproc visit, void *arg)
+{
+    int ret;
+
+    if (self->output)
+        if ((ret = visit(self->output, arg)) != 0)
+            return ret;
+
+    if (self->symbols)
+        if ((ret = visit(self->symbols, arg)) != 0)
+            return ret;
+
+    if (self->nodes)
+        if ((ret = visit(self->nodes, arg)) != 0)
+            return ret;
+
+    return 0;
+}
+
+static void
+PySyckEmitter_dealloc(PySyckEmitterObject *self)
+{
+    PySyckEmitter_clear(self);
+    self->ob_type->tp_free((PyObject *)self);
+}
+
+static PyObject *
+PySyckEmitter_getoutput(PySyckEmitterObject *self, void *closure)
+{
+    PyObject *value = self->output ? self->output : Py_None;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckEmitter_getheadless(PySyckEmitterObject *self, void *closure)
+{
+    PyObject *value = self->headless ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckEmitter_getuse_header(PySyckEmitterObject *self, void *closure)
+{
+    PyObject *value = self->use_header ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckEmitter_getuse_version(PySyckEmitterObject *self, void *closure)
+{
+    PyObject *value = self->use_version ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckEmitter_getexplicit_typing(PySyckEmitterObject *self, void *closure)
+{
+    PyObject *value = self->explicit_typing ? Py_True : Py_False;
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckEmitter_getstyle(PySyckEmitterObject *self, void *closure)
+{
+    PyObject *value;
+
+    switch (self->style) {
+        case scalar_1quote: value = PySyck_1QuoteStyle; break;
+        case scalar_2quote: value = PySyck_2QuoteStyle; break;
+        case scalar_fold: value = PySyck_FoldStyle; break;
+        case scalar_literal: value = PySyck_LiteralStyle; break;
+        case scalar_plain: value = PySyck_PlainStyle; break;
+        default: value = Py_None;
+    }
+
+    Py_INCREF(value);
+    return value;
+}
+
+static PyObject *
+PySyckEmitter_getbest_width(PySyckEmitterObject *self, void *closure)
+{
+    return PyInt_FromLong(self->best_width);
+}
+
+static PyObject *
+PySyckEmitter_getindent(PySyckEmitterObject *self, void *closure)
+{
+    return PyInt_FromLong(self->indent);
+}
+
+static PyGetSetDef PySyckEmitter_getsetters[] = {
+    {"output", (getter)PySyckEmitter_getoutput, NULL,
+        PyDoc_STR("output stream, a file-like object"), NULL},
+    {"headless", (getter)PySyckEmitter_getheadless, NULL,
+        PyDoc_STR("headerless document flag"), NULL},
+    {"use_header", (getter)PySyckEmitter_getuse_header, NULL,
+        PyDoc_STR("force header flag"), NULL},
+    {"use_version", (getter)PySyckEmitter_getuse_version, NULL,
+        PyDoc_STR("force version flag"), NULL},
+    {"explicit_typing", (getter)PySyckEmitter_getexplicit_typing, NULL,
+        PyDoc_STR("explicit typing for all collections"), NULL},
+    {"style", (getter)PySyckEmitter_getstyle, NULL,
+        PyDoc_STR("use literal or folded blocks on all text"), NULL},
+    {"best_width", (getter)PySyckEmitter_getbest_width, NULL,
+        PyDoc_STR("best width for folded scalars"), NULL},
+    {"indent", (getter)PySyckEmitter_getindent, NULL,
+        PyDoc_STR("default indentation"), NULL},
+    {NULL}  /* Sentinel */
+};
+
+static void
+PySyckEmitter_node_handler(SyckEmitter *emitter, st_data_t id)
+{
+    PyGILState_STATE gs;
+
+    PySyckEmitterObject *self = (PySyckEmitterObject *)emitter->bonus;
+
+    PySyckNodeObject *node;
+    char *tag = NULL;
+    PyObject *index;
+    PyObject *key, *value, *item, *pair;
+    int j, k, l;
+    char *str;
+    int len;
+    int dict_pos;
+
+    if (self->halt) return;
+
+    gs = PyGILState_Ensure();
+
+    node = (PySyckNodeObject *)PyList_GetItem(self->symbols, id);
+    if (!node) {
+        PyErr_SetString(PyExc_RuntimeError, "unknown data id");
+        self->halt = 1;
+        PyGILState_Release(gs);
+        return;
+    }
+
+    if (node->tag) {
+        tag = PyString_AsString(node->tag);
+        if (!tag) {
+            self->halt = 1;
+            PyGILState_Release(gs);
+            return;
+        }
+    }
+
+    if (PyObject_TypeCheck((PyObject *)node, &PySyckSeq_Type)) {
+
+        syck_emit_seq(emitter, tag, ((PySyckSeqObject *)node)->style);
+
+        if (!PyList_Check(node->value)) {
+            PyErr_SetString(PyExc_TypeError, "value of _syck.Seq must be a list");
+            self->halt = 1;
+            PyGILState_Release(gs);
+            return;
+        }
+        l = PyList_GET_SIZE(node->value);
+        for (k = 0; k < l; k ++) {
+            item = PyList_GET_ITEM(node->value, k);
+            if ((index = PyDict_GetItem(self->nodes, item))) {
+                syck_emit_item(emitter, PyInt_AS_LONG(index));
+                if (self->halt) {
+                    PyGILState_Release(gs);
+                    return;
+                }
+            }
+            else {
+                PyErr_SetString(PyExc_RuntimeError, "sequence item is not marked");
+                self->halt = 1;
+                PyGILState_Release(gs);
+                return;
+            }
+        }
+        syck_emit_end(emitter);
+    }
+
+    else if (PyObject_TypeCheck((PyObject *)node, &PySyckMap_Type)) {
+
+        syck_emit_map(emitter, tag, ((PySyckMapObject *)node)->style);
+        
+        if (PyList_Check(node->value)) {
+            l = PyList_GET_SIZE(node->value);
+            for (k = 0; k < l; k ++) {
+                pair = PyList_GET_ITEM(node->value, k);
+                if (!PyTuple_Check(pair) || PyTuple_GET_SIZE(pair) != 2) {
+                    PyErr_SetString(PyExc_TypeError,
+                            "value of _syck.Map must be a list of pairs or a dictionary");
+                    self->halt = 1;
+                    PyGILState_Release(gs);
+                    return;
+                }
+                for (j = 0; j < 2; j++) {
+                    item = PyTuple_GET_ITEM(pair, j);
+                    if ((index = PyDict_GetItem(self->nodes, item))) {
+                        syck_emit_item(emitter, PyInt_AS_LONG(index));
+                        if (self->halt) {
+                            PyGILState_Release(gs);
+                            return;
+                        }
+                    }
+                    else {
+                        PyErr_SetString(PyExc_RuntimeError, "mapping item is not marked");
+                        self->halt = 1;
+                        PyGILState_Release(gs);
+                        return;
+                    }
+                }
+            }
+        }
+        else if (PyDict_Check(node->value)) {
+            dict_pos = 0;
+            while (PyDict_Next(node->value, &dict_pos, &key, &value)) {
+                for (j = 0; j < 2; j++) {
+                    item = j ? value : key;
+                    if ((index = PyDict_GetItem(self->nodes, item))) {
+                        syck_emit_item(emitter, PyInt_AS_LONG(index));
+                        if (self->halt) {
+                            PyGILState_Release(gs);
+                            return;
+                        }
+                    }
+                    else {
+                        PyErr_SetString(PyExc_RuntimeError, "mapping item is not marked");
+                        self->halt = 1;
+                        PyGILState_Release(gs);
+                        return;
+                    }
+                }
+            }
+        }
+        else {
+            PyErr_SetString(PyExc_TypeError,
+                    "value of _syck.Map must be a list of pairs or a dictionary");
+            self->halt = 1;
+            PyGILState_Release(gs);
+            return;
+        }
+
+        syck_emit_end(emitter);
+    }
+
+    else if (PyObject_TypeCheck((PyObject *)node, &PySyckScalar_Type)) {
+        if (PyString_AsStringAndSize(node->value, &str, &len) < 0) {
+            self->halt = 1;
+            PyGILState_Release(gs);
+            return;
+        }
+        syck_emit_scalar(emitter, tag, ((PySyckScalarObject *)node)->style,
+                ((PySyckScalarObject *)node)->indent,
+                ((PySyckScalarObject *)node)->width,
+                ((PySyckScalarObject *)node)->chomp, str, len);
+    }
+
+    else {
+        PyErr_SetString(PyExc_TypeError, "Node instance is required");
+        self->halt = 1;
+        PyGILState_Release(gs);
+        return;
+    }   
+    PyGILState_Release(gs);
+}
+
+static void
+PySyckEmitter_write_handler(SyckEmitter *emitter, char *buf, long len)
+{
+    PyGILState_STATE gs;
+
+    PySyckEmitterObject *self = (PySyckEmitterObject *)emitter->bonus;
+
+    gs = PyGILState_Ensure();
+
+    if (!PyObject_CallMethod(self->output, "write", "(s#)", buf, len))
+        self->halt = 1;
+
+    PyGILState_Release(gs);
+}
+
+static int
+PySyckEmitter_init(PySyckEmitterObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *output = NULL;
+    int headless = 0;
+    int use_header = 0;
+    int use_version = 0;
+    int explicit_typing = 0;
+    PyObject *style = NULL;
+    int best_width = 80;
+    int indent = 2;
+
+    char *str;
+
+    static char *kwdlist[] = {"output", "headless", "use_header",
+        "use_version", "explicit_typing", "style",
+        "best_width", "indent", NULL};
+
+    PySyckEmitter_clear(self);
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|iiiiOii", kwdlist,
+                &output, &headless, &use_header, &use_version,
+                &explicit_typing, &style, &best_width, &indent))
+        return -1;
+
+    if (best_width <= 0) {
+        PyErr_SetString(PyExc_ValueError, "'best_width' must be positive");
+        return -1;
+    }
+    if (indent <= 0) {
+        PyErr_SetString(PyExc_ValueError, "'indent' must be positive");
+        return -1;
+    }
+
+    if (!style || style == Py_None) {
+        self->style = scalar_none;
+    }
+    else {
+        if (!PyString_Check(style)) {
+            PyErr_SetString(PyExc_TypeError, "'style' must be a string or None");
+            return -1;
+        }
+
+        str = PyString_AsString(style);
+        if (!str) return -1;
+
+        if (strcmp(str, "1quote") == 0)
+            self->style = scalar_1quote;
+        else if (strcmp(str, "2quote") == 0)
+            self->style = scalar_2quote;
+        else if (strcmp(str, "fold") == 0)
+            self->style = scalar_fold;
+        else if (strcmp(str, "literal") == 0)
+            self->style = scalar_literal;
+        else if (strcmp(str, "plain") == 0)
+            self->style = scalar_plain;
+        else {
+            PyErr_SetString(PyExc_ValueError, "unknown 'style'");
+            return -1;
+        }
+    }
+
+    self->headless = headless;
+    self->use_header = use_header;
+    self->use_version = use_version;
+    self->explicit_typing = explicit_typing;
+    self->best_width = best_width;
+    self->indent = indent;
+
+    Py_INCREF(output);
+    self->output = output;
+
+    self->emitting = 0;
+    self->halt = 0;
+
+    return 0;
+}
+
+static int
+PySyckEmitter_mark(PySyckEmitterObject *self, PyObject *root_node)
+{
+    int current, last;
+    int j, k, l;
+    PySyckNodeObject *node;
+    PyObject *item, *key, *value, *pair;
+    PyObject *index;
+    int dict_pos;
+
+    last = 0;
+    syck_emitter_mark_node(self->emitter, last);
+    if (PyList_Append(self->symbols, root_node) < 0)
+        return -1;
+    index = PyInt_FromLong(last);
+    if (!index) return -1;
+    if (PyDict_SetItem(self->nodes, root_node, index) < 0) {
+        Py_DECREF(index);
+        return -1;
+    }
+    Py_DECREF(index);
+
+    for (current = 0; current < PyList_GET_SIZE(self->symbols); current++) {
+
+        node = (PySyckNodeObject *)PyList_GET_ITEM(self->symbols, current);
+
+        if (PyObject_TypeCheck((PyObject *)node, &PySyckSeq_Type)) {
+            if (!PyList_Check(node->value)) {
+                PyErr_SetString(PyExc_TypeError, "value of _syck.Seq must be a list");
+                return -1;
+            }
+            l = PyList_GET_SIZE(node->value);
+            for (k = 0; k < l; k ++) {
+                item = PyList_GET_ITEM(node->value, k);
+                if ((index = PyDict_GetItem(self->nodes, item))) {
+                    syck_emitter_mark_node(self->emitter, PyInt_AS_LONG(index));
+                }
+                else {
+                    syck_emitter_mark_node(self->emitter, ++last);
+                    if (PyList_Append(self->symbols, item) < 0)
+                        return -1;
+                    index = PyInt_FromLong(last);
+                    if (!index) return -1;
+                    if (PyDict_SetItem(self->nodes, item, index) < 0) {
+                        Py_DECREF(index);
+                        return -1;
+                    }
+                    Py_DECREF(index);
+                }
+            }
+        }
+
+        else if (PyObject_TypeCheck((PyObject *)node, &PySyckMap_Type)) {
+            
+            if (PyList_Check(node->value)) {
+                l = PyList_GET_SIZE(node->value);
+                for (k = 0; k < l; k ++) {
+                    pair = PyList_GET_ITEM(node->value, k);
+                    if (!PyTuple_Check(pair) || PyTuple_GET_SIZE(pair) != 2) {
+                        PyErr_SetString(PyExc_TypeError,
+                                "value of _syck.Map must be a list of pairs or a dictionary");
+                        return -1;
+                    }
+                    for (j = 0; j < 2; j++) {
+                        item = PyTuple_GET_ITEM(pair, j);
+                        if ((index = PyDict_GetItem(self->nodes, item))) {
+                            syck_emitter_mark_node(self->emitter, PyInt_AS_LONG(index));
+                        }
+                        else {
+                            syck_emitter_mark_node(self->emitter, ++last);
+                            if (PyList_Append(self->symbols, item) < 0)
+                                return -1;
+                            index = PyInt_FromLong(last);
+                            if (!index) return -1;
+                            if (PyDict_SetItem(self->nodes, item, index) < 0) {
+                                Py_DECREF(index);
+                                return -1;
+                            }
+                            Py_DECREF(index);
+                        }
+                    }
+                }
+                
+            }
+            else if (PyDict_Check(node->value)) {
+                dict_pos = 0;
+                while (PyDict_Next(node->value, &dict_pos, &key, &value)) {
+                    for (j = 0; j < 2; j++) {
+                        item = j ? value : key;
+                        if ((index = PyDict_GetItem(self->nodes, item))) {
+                            syck_emitter_mark_node(self->emitter, PyInt_AS_LONG(index));
+                        }
+                        else {
+                            syck_emitter_mark_node(self->emitter, ++last);
+                            if (PyList_Append(self->symbols, item) < 0)
+                                return -1;
+                            index = PyInt_FromLong(last);
+                            if (!index) return -1;
+                            if (PyDict_SetItem(self->nodes, item, index) < 0) {
+                                Py_DECREF(index);
+                                return -1;
+                            }
+                            Py_DECREF(index);
+                        }
+                    }
+                }
+            }
+            else {
+                PyErr_SetString(PyExc_TypeError,
+                        "value of _syck.Map must be a list of pairs or a dictionary");
+                return -1;
+            }
+        }
+
+        else if (!PyObject_TypeCheck((PyObject *)node, &PySyckScalar_Type)) {
+            PyErr_SetString(PyExc_TypeError, "Node instance is required");
+            return -1;
+        }   
+    }
+    return 0;
+}
+
+static PyObject *
+PySyckEmitter_emit(PySyckEmitterObject *self, PyObject *args)
+{
+    PyObject *node;
+
+    if (self->emitting) {
+        PyErr_SetString(PyExc_RuntimeError, "do not call Emitter.emit while it is already emitting");
+        return NULL;
+    }
+
+    if (self->halt) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    if (!PyArg_ParseTuple(args, "O", &node))
+        return NULL;
+
+    self->emitting = 1;
+
+
+    self->symbols = PyList_New(0);
+    if (!self->symbols) {
+        return NULL;
+    }
+    self->nodes = PyDict_New();
+    if (!self->nodes) {
+        Py_DECREF(self->symbols);
+        self->symbols = NULL;
+        return NULL;
+    }
+
+    self->emitter = syck_new_emitter();
+    self->emitter->bonus = self;
+    self->emitter->headless = self->headless;
+    self->emitter->use_header = self->use_header;
+    self->emitter->use_version = self->use_version;
+    self->emitter->explicit_typing = self->explicit_typing;
+    self->emitter->style = self->style;
+    self->emitter->best_width = self->best_width;
+    self->emitter->indent = self->indent;
+
+    syck_emitter_handler(self->emitter, PySyckEmitter_node_handler);
+    syck_output_handler(self->emitter, PySyckEmitter_write_handler);
+
+    if (PySyckEmitter_mark(self, node) < 0) {
+        Py_DECREF(self->symbols);
+        self->symbols = NULL;
+        Py_DECREF(self->nodes);
+        self->nodes = NULL;
+        self->emitting = 0;
+        self->halt = 1;
+        syck_free_emitter(self->emitter);
+        self->emitter = NULL;
+        return NULL;
+    }
+
+    Py_BEGIN_ALLOW_THREADS
+    syck_emit(self->emitter, 0);
+    syck_emitter_flush(self->emitter, 0);
+    Py_END_ALLOW_THREADS
+
+    syck_free_emitter(self->emitter);
+    self->emitter = NULL;
+
+    self->emitting = 0;
+
+    Py_DECREF(self->symbols);
+    self->symbols = NULL;
+    Py_DECREF(self->nodes);
+    self->nodes = NULL;
+
+    if (self->halt) return NULL;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+PyDoc_STRVAR(PySyckEmitter_emit_doc,
+    "emit(root_node) -> None\n\n"
+    "Emits the Node tree to the output.\n");
+
+static PyMethodDef PySyckEmitter_methods[] = {
+    {"emit",  (PyCFunction)PySyckEmitter_emit,
+        METH_VARARGS, PySyckEmitter_emit_doc},
+    {NULL}  /* Sentinel */
+};
+
+static PyTypeObject PySyckEmitter_Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                          /* ob_size */
+    "_syck.Emitter",                            /* tp_name */
+    sizeof(PySyckEmitterObject),                /* tp_basicsize */
+    0,                                          /* tp_itemsize */
+    (destructor)PySyckEmitter_dealloc,          /* tp_dealloc */
+    0,                                          /* tp_print */
+    0,                                          /* tp_getattr */
+    0,                                          /* tp_setattr */
+    0,                                          /* tp_compare */
+    0,                                          /* tp_repr */
+    0,                                          /* tp_as_number */
+    0,                                          /* tp_as_sequence */
+    0,                                          /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    0,                                          /* tp_getattro */
+    0,                                          /* tp_setattro */
+    0,                                          /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,  /* tp_flags */
+    PySyckEmitter_doc,                          /* tp_doc */
+    (traverseproc)PySyckEmitter_traverse,       /* tp_traverse */
+    (inquiry)PySyckEmitter_clear,               /* tp_clear */
+    0,                                          /* tp_richcompare */
+    0,                                          /* tp_weaklistoffset */
+    0,                                          /* tp_iter */
+    0,                                          /* tp_iternext */
+    PySyckEmitter_methods,                      /* tp_methods */
+    0,                                          /* tp_members */
+    PySyckEmitter_getsetters,                   /* tp_getset */
+    0,                                          /* tp_base */
+    0,                                          /* tp_dict */
+    0,                                          /* tp_descr_get */
+    0,                                          /* tp_descr_set */
+    0,                                          /* tp_dictoffset */
+    (initproc)PySyckEmitter_init,               /* tp_init */
+    0,                                          /* tp_alloc */
+    PySyckEmitter_new,                          /* tp_new */
+};
+
+/****************************************************************************
+ * The module _syck.
+ ****************************************************************************/
+
+static PyMethodDef PySyck_methods[] = {
+    {NULL}  /* Sentinel */
+};
+
+PyDoc_STRVAR(PySyck_doc,
+    "_syck is a low-level wrapper for the Syck YAML parser and emitter.\n"
+    "Do not use it directly, use the module 'syck' instead.\n");
+
+static int
+add_slotnames(PyTypeObject *type)
+{
+    PyObject *slotnames;
+    PyObject *name;
+    PyGetSetDef *getsetter;
+
+    if (!type->tp_getset) return 0;
+    if (!type->tp_dict) return 0;
+
+    slotnames = PyList_New(0);
+    if (!slotnames) return -1;
+
+    for (getsetter = type->tp_getset; getsetter->name; getsetter++) {
+        if (!getsetter->set) continue;
+        name = PyString_FromString(getsetter->name);
+        if (!name) {
+           Py_DECREF(slotnames);
+           return -1;
+        }
+        if (PyList_Append(slotnames, name) < 0) {
+            Py_DECREF(name);
+            Py_DECREF(slotnames);
+            return -1;
+        }
+        Py_DECREF(name);
+    }
+
+    if (PyDict_SetItemString(type->tp_dict, "__slotnames__", slotnames) < 0) {
+        Py_DECREF(slotnames);
+        return -1;
+    }
+
+    Py_DECREF(slotnames);
+    return 0;
+}
+
+PyMODINIT_FUNC
+init_syck(void)
+{
+    PyObject *m;
+
+    PyEval_InitThreads();   /* Fix segfault for Python 2.3 */
+
+    if (PyType_Ready(&PySyckNode_Type) < 0)
+        return;
+    if (PyType_Ready(&PySyckScalar_Type) < 0)
+        return;
+    if (add_slotnames(&PySyckScalar_Type) < 0)
+        return;
+    if (PyType_Ready(&PySyckSeq_Type) < 0)
+        return;
+    if (add_slotnames(&PySyckSeq_Type) < 0)
+        return;
+    if (PyType_Ready(&PySyckMap_Type) < 0)
+        return;
+    if (add_slotnames(&PySyckMap_Type) < 0)
+        return;
+    if (PyType_Ready(&PySyckParser_Type) < 0)
+        return;
+    if (PyType_Ready(&PySyckEmitter_Type) < 0)
+        return;
+    
+    PySyck_Error = PyErr_NewException("_syck.error", NULL, NULL);
+    if (!PySyck_Error) return;
+
+    PySyck_ScalarKind = PyString_FromString("scalar");
+    if (!PySyck_ScalarKind) return;
+    PySyck_SeqKind = PyString_FromString("seq");
+    if (!PySyck_SeqKind) return;
+    PySyck_MapKind = PyString_FromString("map");
+    if (!PySyck_MapKind) return;
+
+    PySyck_1QuoteStyle = PyString_FromString("1quote");
+    if (!PySyck_1QuoteStyle) return;
+    PySyck_2QuoteStyle = PyString_FromString("2quote");
+    if (!PySyck_2QuoteStyle) return;
+    PySyck_FoldStyle = PyString_FromString("fold");
+    if (!PySyck_FoldStyle) return;
+    PySyck_LiteralStyle = PyString_FromString("literal");
+    if (!PySyck_LiteralStyle) return;
+    PySyck_PlainStyle = PyString_FromString("plain");
+    if (!PySyck_PlainStyle) return;
+
+    PySyck_StripChomp = PyString_FromString("-");
+    if (!PySyck_StripChomp) return;
+    PySyck_KeepChomp = PyString_FromString("+");
+    if (!PySyck_KeepChomp) return;
+
+    m = Py_InitModule3("_syck", PySyck_methods, PySyck_doc);
+
+    Py_INCREF(PySyck_Error);
+    if (PyModule_AddObject(m, "error", (PyObject *)PySyck_Error) < 0)
+        return;
+    Py_INCREF(&PySyckNode_Type);
+    if (PyModule_AddObject(m, "Node", (PyObject *)&PySyckNode_Type) < 0)
+        return;
+    Py_INCREF(&PySyckScalar_Type);
+    if (PyModule_AddObject(m, "Scalar", (PyObject *)&PySyckScalar_Type) < 0)
+        return;
+    Py_INCREF(&PySyckSeq_Type);
+    if (PyModule_AddObject(m, "Seq", (PyObject *)&PySyckSeq_Type) < 0)
+        return;
+    Py_INCREF(&PySyckMap_Type);
+    if (PyModule_AddObject(m, "Map", (PyObject *)&PySyckMap_Type) < 0)
+        return;
+    Py_INCREF(&PySyckParser_Type);
+    if (PyModule_AddObject(m, "Parser", (PyObject *)&PySyckParser_Type) < 0)
+        return;
+    Py_INCREF(&PySyckEmitter_Type);
+    if (PyModule_AddObject(m, "Emitter", (PyObject *)&PySyckEmitter_Type) < 0)
+        return;
+}
+
Index: /pysyck/tags/0.61.1/tests/test_loader.py
===================================================================
--- /pysyck/tags/0.61.1/tests/test_loader.py	(revision 49)
+++ /pysyck/tags/0.61.1/tests/test_loader.py	(revision 49)
@@ -0,0 +1,290 @@
+
+import unittest
+import syck
+import test_parser
+import os
+
+try:
+    import datetime
+except ImportError:
+    pass
+
+try:
+    import mx.DateTime
+except ImportError:
+    pass
+
+try:
+    Set = set
+except:
+    try:
+        from sets import Set
+    except ImportError:
+        def Set(items):
+            set = {}
+            for items in items:
+                set[items] = None
+            return set
+
+
+INF = 1e300000
+NAN = INF/INF
+
+ARROW = "GIF89a\x0c\x00\x0c\x00\x84\x00\x00\xff\xff\xf7\xf5\xf5\xee\xe9\xe9\xe5fff\x00\x00\x00\xe7\xe7\xe7^^^\xf3\xf3\xed\x8e\x8e\x8e\xe0\xe0\xe0\x9f\x9f\x9f\x93\x93\x93\xa7\xa7\xa7\x9e\x9e\x9eiiiccc\xa3\xa3\xa3\x84\x84\x84\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9\xff\xfe\xf9!\xfe\x0eMade with GIMP\x00,\x00\x00\x00\x00\x0c\x00\x0c\x00\x00\x05,  \x8e\x810\x9e\xe3@\x14\xe8i\x10\xc4\xd1\x8a\x08\x1c\xcf\x80M$z\xef\xff0\x85p\xb8\xb01f\r\x1b\xce\x01\xc3\x01\x1e\x10' \x82\n\x01\x00;"
+BINARY = r"""
+- !binary "\
+ R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\
+ OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\
+ +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\
+ AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="
+-
+ !binary |
+  R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
+  OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+  +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
+  AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
+"""
+
+MERGE = """
+---
+- &CENTER { x: 1, y: 2 }
+- &LEFT { x: 0, y: 2 }
+- &BIG { r: 10 }
+- &SMALL { r: 1 }
+
+# All the following maps are equal:
+
+- # Explicit keys
+  x: 1
+  y: 2
+  r: 10
+  label: center/big
+
+- # Merge one map
+  << : *CENTER
+  r: 10
+  label: center/big
+
+- # Merge multiple maps
+  << : [ *CENTER, *BIG ]
+  label: center/big
+
+- # Override
+  << : [ *BIG, *LEFT, *SMALL ]
+  x: 1
+  label: center/big
+""", { 'x': 1, 'y': 2, 'r': 10, 'label': 'center/big' }
+
+OMAP = """
+# Explicitly typed ordered map (dictionary).
+Bestiary: !omap
+  - aardvark: African pig-like ant eater. Ugly.
+  - anteater: South-American ant eater. Two species.
+  - anaconda: South-American constrictor snake. Scaly.
+  # Etc.
+# Flow style
+Numbers: !omap [ one: 1, two: 2, three : 3 ]
+""", {
+    'Bestiary': [
+        ('aardvark', 'African pig-like ant eater. Ugly.'),
+        ('anteater', 'South-American ant eater. Two species.'),
+        ('anaconda', 'South-American constrictor snake. Scaly.'),
+    ],
+    'Numbers': [
+        ('one', 1),
+        ('two', 2),
+        ('three', 3),
+    ],
+}
+
+PAIRS = """
+# Explicitly typed pairs.
+Block tasks: !pairs
+  - meeting: with team.
+  - meeting: with boss.
+  - break: lunch.
+  - meeting: with client.
+Flow tasks: !pairs [ meeting: with team, meeting: with boss ]
+""", {
+    'Block tasks': [
+        ('meeting', 'with team.'),
+        ('meeting', 'with boss.'),
+        ('break', 'lunch.'),
+        ('meeting', 'with client.'),
+    ],
+    'Flow tasks': [
+        ('meeting', 'with team'),
+        ('meeting', 'with boss'),
+    ],
+}
+
+SET = """
+# Syck does not understand it
+## Explicitly typed set.
+#baseball players: !set
+#  ? Mark McGwire
+#  ? Sammy Sosa
+#  ? Ken Griffey
+# Flow style
+baseball teams: !set { Boston Red Sox, Detroit Tigers, New York Yankees }
+""", {
+#    'baseball players': sets.Set(['Mark McGwire', 'Sammy Sosa', 'Ken Griffey']),
+    'baseball teams': Set(['Boston Red Sox', 'Detroit Tigers', 'New York Yankees']),
+}
+
+ALIASES = """
+foo: &bar baz
+bar: *bar
+"""
+
+MUTABLE_KEY = """
+? []
+: []
+"""
+
+class TestDocuments(test_parser.TestDocuments):
+
+    def _testDocuments(self, source, length):
+        actual_length = len(list(syck.load_documents(source)))
+        self.assertEqual(actual_length, length)
+        actual_length = len(list(syck.parse_documents(source)))
+        self.assertEqual(actual_length, length)
+
+class TestValuesAndSources(test_parser.TestValuesAndSources):
+
+    def testValues1(self):
+        self._testValues(test_parser.COMPARE1)
+
+    def testValues2(self):
+        self._testValues(test_parser.COMPARE2)
+
+    def testValues3(self):
+        self._testValues(test_parser.COMPARE3)
+
+    def testFileValues1(self):
+        self._testFileValues(test_parser.COMPARE1)
+
+    def testFileValues2(self):
+        self._testFileValues(test_parser.COMPARE2)
+
+    def testFileValues3(self):
+        self._testFileValues(test_parser.COMPARE3)
+
+    def testNonsense(self):
+        class MyFile1:
+            def read(self, max_length):
+                return ' '*(max_length+1)
+        class MyFile2:
+            def read(self, max_length):
+                return None
+        self.assertRaises(ValueError, lambda: syck.parse(MyFile1()))
+        self.assertRaises(ValueError, lambda: syck.load(MyFile1()))
+        self.assertRaises(TypeError, lambda: syck.parse(MyFile2()))
+        self.assertRaises(TypeError, lambda: syck.load(MyFile2()))
+
+    def _testValues(self, (source, structure)):
+        self.assertEqualStructure(syck.parse(source), structure)
+        self.assertEqual(syck.load(source), structure)
+
+    def _testFileValues(self, (source, structure)):
+        tempfile = os.tmpfile()
+        tempfile.write(source)
+        tempfile.seek(0)
+        self.assertEqualStructure(syck.parse(tempfile), structure)
+        tempfile.seek(0)
+        self.assertEqual(syck.load(tempfile), structure)
+        tempfile.seek(0)
+
+class TestImplicitScalars(unittest.TestCase):
+
+
+    def testBinary(self):
+        self.assertEqual(syck.load(BINARY), [ARROW, ARROW])
+
+    def testBoolean(self):
+        # Syck does not recognize 'y'.
+        #self.assertEqual(syck.load('- y\n- NO\n- True\n- on\n'), [True, False, True, True])
+        self.assertEqual(syck.load('- yes\n- NO\n- True\n- on\n'), [True, False, True, True])
+
+    def testFloat(self):
+        self.assertEqual(syck.load('6.8523015e+5'), 685230.15)
+        # Syck does not understand '_'.
+        #self.assertAlmostEqual(syck.load('685.230_15e+03'), 685230.15)
+        #self.assertAlmostEqual(syck.load('685_230.15'), 685230.15)
+        self.assertEqual(syck.load('685.23015e+03'), 685230.15)
+        self.assertEqual(syck.load('685230.15'), 685230.15)
+        self.assertEqual(syck.load('190:20:30.15'), 685230.15)
+        self.assertEqual(repr(syck.load('-.inf')), repr(-INF))
+        self.assertEqual(repr(syck.load('.nan')), repr(NAN))
+
+    def testInteger(self):
+        # Syck does not understand '_' and binary integer.
+        #self.assertEqual(syck.load(
+        #    '- 685230\n- +685_230\n- 02472256\n- 0x_0A_74_AE\n'
+        #    '- 0b1010_0111_0100_1010_1110\n- 190:20:30\n'), [685230]*6)
+        self.assertEqual(syck.load(
+            '- 685230\n- +685230\n- 02472256\n- 0x0A74AE\n'
+            '- 190:20:30\n'), [685230]*5)
+
+    def testNull(self):
+        self.assertEqual(syck.load('-\n- NULL\n- ~\n'), [None]*3)
+
+    def testTimestamp(self):
+        # Again, Syck does not understand the latest two forms.
+        #self.assertEqual(syck.load(
+        #        '- 2001-12-15T02:59:43.1Z\n'
+        #        '- 2001-12-14t21:59:43.10-05:00\n'
+        #        '- 2001-12-14 21:59:43.10 -5\n'
+        #        '- 2001-12-15 2:59:43.10\n'),
+        #    [datetime.datetime(2001, 12, 15, 2, 59, 43, 100000)]*4)
+        self.assertEqual(syck.load(
+                '- 2001-12-15T02:59:43.1Z\n'
+                '- 2001-12-14t21:59:43.10-05:00\n'
+                '- 2001-12-14 21:59:43.10 -05\n'
+                '- 2001-12-15 02:59:43.10 Z\n'),
+            [datetime.datetime(2001, 12, 15, 2, 59, 43, 100000)]*4)
+        self.assertEqual(syck.load('2002-12-14'), datetime.datetime(2002, 12, 14))
+
+    def testString(self):
+        self.assertEqual('abcd', 'abcd')
+
+class TestMerge(unittest.TestCase):
+
+    def testMerge(self):
+        document = syck.load(MERGE[0])
+        self.assertEqual(document[4], MERGE[1])
+        self.assertEqual(document[5], MERGE[1])
+        self.assertEqual(document[6], MERGE[1])
+        self.assertEqual(document[7], MERGE[1])
+
+class TestCollections(unittest.TestCase):
+
+    def testOmap(self):
+        self.assertEqual(syck.load(OMAP[0]), OMAP[1])
+
+    def testPairs(self):
+        self.assertEqual(syck.load(PAIRS[0]), PAIRS[1])
+
+    def testSet(self):
+        self.assertEqual(syck.load(SET[0]), SET[1])
+
+class TestAliasesParsingAndLoading(unittest.TestCase):
+
+    def testAliasesParsing(self):
+        node = syck.parse(ALIASES)
+        values = node.value.values()
+        self.assert_(values[0] is values[1])
+
+    def testAliasesLoading(self):
+        document = syck.load(ALIASES)
+        self.assert_(document['foo'] is document['bar'])
+
+class TestMutableKey(unittest.TestCase):
+
+    def testMutableKey(self):
+        document = syck.load(MUTABLE_KEY)
+        self.assertEqual(type(document), list)
+        self.assertEqual(len(document), 1)
+        self.assertEqual(type(document[0]), tuple)
+        self.assertEqual(len(document[0]), 2)
+        self.assertEqual(document[0][0], document[0][1])
Index: /pysyck/tags/0.61.1/tests/test_unicode.py
===================================================================
--- /pysyck/tags/0.61.1/tests/test_unicode.py	(revision 36)
+++ /pysyck/tags/0.61.1/tests/test_unicode.py	(revision 36)
@@ -0,0 +1,68 @@
+# encoding: utf-8
+
+import unittest
+import syck
+
+import warnings
+
+STRINGS = [
+    ("John Cage", 'tag:yaml.org,2002:str'),
+    ("BÃ©la BartÃ³k", 'tag:python.yaml.org,2002:str'),
+    ("ÐÐ°Ð»ÐµÐœÑÐžÐœ Ð¡ÐžÐ»ÑÐ²ÐµÑÑÑÐŸÐ²", 'tag:python.yaml.org,2002:str'),
+    (''.join([chr(k) for k in range(256)]), 'tag:yaml.org,2002:binary')
+]
+
+UNICODE_STRINGS = [
+    (u"John Cage", 'tag:python.yaml.org,2002:unicode'),
+    (u"BÃ©la BartÃ³k", 'tag:yaml.org,2002:str'),
+    (u"ÐÐ°Ð»ÐµÐœÑÐžÐœ Ð¡ÐžÐ»ÑÐ²ÐµÑÑÑÐŸÐ²", 'tag:yaml.org,2002:str'),
+    (u''.join([unichr(k) for k in range(512)]), 'tag:yaml.org,2002:str')
+]
+
+DOCUMENT = """
+- John Cage
+- BÃ©la BartÃ³k
+- ÐÐ°Ð»ÐµÐœÑÐžÐœ Ð¡ÐžÐ»ÑÐ²ÐµÑÑÑÐŸÐ²
+- \x80\x81\x82\x83\x84\x85\x86\x87
+""", ["John Cage", u"BÃ©la BartÃ³k", u"ÐÐ°Ð»ÐµÐœÑÐžÐœ Ð¡ÐžÐ»ÑÐ²ÐµÑÑÑÐŸÐ²", '\x80\x81\x82\x83\x84\x85\x86\x87']
+
+
+class TestUnicode(unittest.TestCase):
+
+    def testDumpStr(self):
+        for string, tag in STRINGS:
+            #print string
+            document = syck.dump(string)
+            #print document
+            new_tag = syck.parse(document).tag
+            new_string = syck.load(document)
+            self.assertEqual(string, new_string)
+            self.assertEqual(type(string), type(new_string))
+            self.assertEqual(tag, new_tag)
+
+    def testDumpUnicode(self):
+        for string, tag in UNICODE_STRINGS:
+            #print string
+            document = syck.dump(string)
+            #print document
+            new_tag = syck.parse(document).tag
+            new_string = syck.load(document)
+            self.assertEqual(string, new_string)
+            self.assertEqual(type(string), type(new_string))
+            self.assertEqual(tag, new_tag)
+
+    def testLoad(self):
+        self._testWarning()
+        document, values = DOCUMENT
+        new_values = syck.load(document)
+        for string, new_string in zip(values, new_values):
+            self.assertEqual(string, new_string)
+            self.assertEqual(type(string), type(new_string))
+
+    def _testWarning(self):
+        warnings.simplefilter('error')
+        document = '\x80\x81\x82\x83\x84\x85\x86\x87'
+        self.assertRaises(syck.NotUnicodeInputWarning, lambda: syck.load(document))
+        warnings.resetwarnings()
+
+
Index: /pysyck/tags/0.61.1/tests/test_pickle.py
===================================================================
--- /pysyck/tags/0.61.1/tests/test_p