Represents a Yaml Sequence
Inheritance: Node
        static void Main(string[] args)
        {
            Console.WriteLine("Reading from a file");
            Console.WriteLine("--------------------------");
            Node node = Node.FromFile ("testRead.yaml");
            Console.WriteLine (node);

            Console.WriteLine("Reading from a string");
            Console.WriteLine("--------------------------");
            node = Node.Parse ("- item1\n- item2\n");
            Console.WriteLine (node);

            Console.WriteLine("Writing to a file");
            Console.WriteLine("--------------------------");
            node.ToFile ("testWrite.yaml");

            Console.WriteLine("Writing to a string");
            Console.WriteLine("--------------------------");
            string s = node.Write ();
            Console.WriteLine( s );

            Console.WriteLine("Creating a YAML tree");
            Console.WriteLine("--------------------------");
            Sequence sequence = new Sequence (
                            new Node []
                            {
                                new Yaml.String ("item 1"),
                                new Yaml.String ("item 2"),
                                new Yaml.String ("item 3"),

                                new Mapping (
                                    new MappingNode []
                                    {
                                        new MappingNode (new Yaml.String ("key 2"), new Yaml.String ("value 1")),
                                        new MappingNode (new Yaml.String ("key 2"), new Yaml.String ("value 2"))
                                    } ),

                                    new Yaml.String ("item 5")
                            } );

            Console.WriteLine (sequence);

            Console.WriteLine("Traversing a YAML tree");
            Console.WriteLine("--------------------------");
            // Iets dat nog moet gebeuren
            foreach (Node n in sequence.Nodes)
            {
                if (n.Type == NodeType.String)
                    Console.Write ("Found a string: " + ((Yaml.String) n).Content + "\n");
            }
        }
        static void Main(string[] args)
        {
            //			Node node2 = Node.FromFile ("test.yaml");
            //			Console.WriteLine (node2);
            //			node2.ToFile ("out.yaml");
            /*
            Console.WriteLine
            (
                 "ToString: \n" +
                 node2.Write ()
            );

            Console.WriteLine
            (
                 "Info: \n" +
                 node2.Info () .Write ()
            );

            node2.ToFile ("out.yaml");
            node2.Info (). ToFile ("out.yaml");
            // */

            Sequence sequence = new Sequence ( new Node []
            {
                new String ("item 1"),
                new String ("item 2"),
                new String ("item 3"),
                new Mapping ( new MappingNode []
                {
                    new MappingNode (new String ("key 2"), new String ("value 1")),
                    new MappingNode (new String ("key 2"), new String ("value 2"))
                } ),
                new String ("item 5")
            } );
            Console.WriteLine (sequence);

            foreach (Node s in sequence.Nodes)
            {
                if (s.Type == NodeType.String)
                    Console.Write ("Found a string: " + ((String) s) . Content);
            }
            // */
        }
        /// <summary> Node info </summary>
        public override Node Info()
        {
            Mapping mapping = new Mapping ();
            mapping.AddMappingNode (new String ("kind"), new String ("sequence"));
            mapping.AddMappingNode (new String ("type_id"), new String (URI));

            Sequence childs = new Sequence ();

            foreach (Node child in childNodes)
                childs.AddNode (child.Info ());

            mapping.AddMappingNode (new String ("value"), childs);
            return mapping;
        }
        /// <summary> Node info </summary>
        public override Node Info()
        {
            Mapping mapping = new Mapping ();
            mapping.AddMappingNode (new String ("kind"), new String ("mapping"));
            mapping.AddMappingNode (new String ("type_id"), new String (URI));

            Mapping childs = new Mapping ();
            int i = 0;
            foreach (MappingNode child in childNodes)
            {
                Sequence keyvaluepair = new Sequence ();
                keyvaluepair.AddNode (child.Key.Info () );
                keyvaluepair.AddNode (child.Value.Info ());

                childs.AddMappingNode (new String ("key_" + i), keyvaluepair);
                i ++;
            }

            mapping.AddMappingNode (new String ("value"), childs);
            return mapping;
        }
		/// <summary> Internal parse method </summary>
		/// <param name="parseImplicitMappings">
		///   Avoids ethernal loops while parsing implicit mappings. Implicit mappings are
		///   not rocognized by a leading character. So while trying to parse the key of
		///   something we think that could be a mapping, we're sure that if it is a mapping,
		///   the key of this implicit mapping is not a mapping itself.
		///
		///   NOTE: Implicit mapping still belong to unstable code and require the UNSTABLE and
		///         IMPLICIT_MAPPINGS preprocessor flags.
		/// </param>
		/// <param name="stream"></param>
		protected static Node Parse (ParseStream stream, bool parseImplicitMappings)
		{
			// ----------------
			// Skip Whitespace
			// ----------------
			if (! stream.EOF)
			{
				// Move the firstindentation pointer after the whitespaces of this line
				stream.SkipSpaces ();
				while (stream.Char == '\n' && ! stream.EOF)
				{
					// Skip newline and next whitespaces
					stream.Next ();
					stream.SkipSpaces ();
				}
			}

			// -----------------
			// No remaining chars (Null/empty stream)
			// -----------------
			if (stream.EOF)
				return new Null ();

			// -----------------
			// Explicit type
			// -----------------

#if SUPPORT_EXPLICIT_TYPES
			stream.BuildLookaheadBuffer ();

			char a = '\0', b = '\0';

			a = stream.Char; stream.Next ();
			b = stream.Char; stream.Next ();

			// Starting with !!
			if (a == '!' && b == '!' && ! stream.EOF)
			{
				stream.DestroyLookaheadBuffer ();

				// Read the tagname
				string tag = "";

				while (stream.Char != ' ' && stream.Char != '\n' && ! stream.EOF)
				{
					tag += stream.Char;
					stream.Next ();
				}

				// Skip Whitespace
				if (! stream.EOF)
				{
					stream.SkipSpaces ();
					while (stream.Char == '\n' && ! stream.EOF)
					{
						stream.Next ();
						stream.SkipSpaces ();
					}
				}

				// Parse
				Node n;
				switch (tag)
				{
					// Mappings and sequences
					// NOTE:
					// - sets are mappings without values
					// - Ordered maps are ordered sequence of key: value
					//   pairs without duplicates.
					// - Pairs are ordered sequence of key: value pairs
					//   allowing duplicates.

					// TODO: Create new datatypes for omap and pairs
					//   derived from sequence with a extra duplicate
					//   checking.

					case "seq":       n = new Sequence  (stream); break;
					case "map":       n = new Mapping   (stream); break;
					case "set":       n = new Mapping   (stream); break;
					case "omap":      n = new Sequence  (stream); break;
					case "pairs":     n = new Sequence  (stream); break;

					// Scalars
					//
					// TODO: do we have to move this to Scalar.cs
					// in order to get the following working:
					//
					// !!str "...": "..."
					// !!str "...": "..."

					case "timestamp": n = new Timestamp (stream); break;
					case "binary":    n = new Binary    (stream); break;
					case "null":      n = new Null      (stream); break;
					case "float":     n = new Float     (stream); break;
					case "int":       n = new Integer   (stream); break;
					case "bool":      n = new Boolean   (stream); break;
					case "str":       n = new String    (stream); break;

					// Unknown data type
					default:
						throw  new Exception ("Incorrect tag '!!" + tag + "'");
				}

				return n;
			}
			else
			{
				stream.RewindLookaheadBuffer ();
				stream.DestroyLookaheadBuffer ();
			}
#endif
			// -----------------
			// Sequence
			// -----------------

			if (stream.Char == '-' || stream.Char == '[')
				return new Sequence (stream);

			// -----------------
			// Mapping
			// -----------------

			if (stream.Char == '?' || stream.Char == '{')
				return new Mapping (stream);

			// -----------------
			// Try implicit mapping
			// -----------------

			// This are mappings which are not preceded by a question
			// mark. The keys have to be scalars.

#if (UNSTABLE && SUPPORT_IMPLICIT_MAPPINGS)

			// NOTE: This code can't be included in Mapping.cs
			// because of the way we are using to rewind the buffer.

			Node key, val;

			if (parseImplicitMappings)
			{
				// First Key/value pair

				stream.BuildLookaheadBuffer ();

				stream.StopAt (new char [] {':'});

				// Keys of implicit mappings can't be sequences, or other mappings
				// just look for scalars
				key = Scalar.Parse (stream, false); 
				stream.DontStop ();

Console.WriteLine ("key: " + key);

				// Followed by a colon, so this is a real mapping
				if (stream.Char == ':')
				{
					stream.DestroyLookaheadBuffer ();

					Mapping mapping = new Mapping ();

					// Skip colon and spaces
					stream.Next ();
					stream.SkipSpaces ();

					// Parse the value
Console.Write ("using  buffer: " + stream.UsingBuffer ());
					stream.Indent ();
Console.Write ("using  buffer: " + stream.UsingBuffer ());
//					val = Parse (stream, false);
Console.Write ("<<");
while (!stream.EOF) {Console.Write (stream.Char);stream.Next (true);}
Console.Write (">>");

val = new  String (stream);


Console.Write ("using  buffer: " + stream.UsingBuffer ());
					stream.UnIndent ();
Console.Write ("using  buffer: " + stream.UsingBuffer ());

Console.Write ("<<");
while (!stream.EOF) {Console.Write (stream.Char);stream.Next (true);}
Console.Write (">>");




Console.WriteLine ("val: " + val);
					mapping.AddMappingNode (key, val);

					// Skip possible newline
					// NOTE: this can't be done by the drop-newline
					// method since this is not the end of a block
					while (stream.Char == '\n')
						stream.Next (true);

					// Other key/value pairs
					while (! stream.EOF)
					{
						stream.StopAt (new char [] {':'} );
						stream.Indent ();
						key = Scalar.Parse (stream);
						stream.UnIndent ();
						stream.DontStop ();

Console.WriteLine ("key 2: " + key);
						if (stream.Char == ':')
						{
							// Skip colon and spaces
							stream.Next ();
							stream.SkipSpaces ();

							// Parse the value
							stream.Indent ();
							val = Parse (stream);
							stream.UnIndent ();

Console.WriteLine ("val 2: " + val);
							mapping.AddMappingNode (key, val);
						}
						else // TODO: Is this an error?
						{
							// NOTE: We can't recover from this error,
							// the last buffer has been destroyed, so
							// rewinding is impossible.
							throw new ParseException (stream,
								"Implicit mapping without value node");
						}

						// Skip possible newline
						while (stream.Char == '\n')
							stream.Next ();
					}

					return mapping;
				}

				stream.RewindLookaheadBuffer ();
				stream.DestroyLookaheadBuffer ();
			}

#endif
			// -----------------
			// No known data structure, assume this is a scalar
			// -----------------

			Scalar scalar = Scalar.Parse (stream);

			// Skip trash
			while (! stream.EOF)
				stream.Next ();
		

			return scalar;
		}