From: Burt H. <Bur...@mi...> - 2009-12-09 20:50:04
|
In Yaml 1.2, l-yaml-stream [211] requires that one of the following two conditions between documents in a stream: - Either an explicit end-of-document indicator "...", optional directives, and an end-of-directives indicator "---" - Or, an explicit end-of-directives indicator "---", _with_no_directives_preceding_it_! Unfortunately, many existing example YAML streams do not conform to the last part of this definition. Attempting to deal with these examples had complicated my previous YAML 1.1 implementations. I've pretty well convinced myself that these are all bad examples, I hope you can confirm. Example 9.3 from the 1.2 specification: %YAML 1.2 --- !!str "Bare document" %YAML 1.2 --- !!str "%!PS-Adobe-2.0\n" Example 7.9 the 1.1 specification: %YAML 1.1 --- !!str "foo" %YAML 1.1 --- !!str "bar" %YAML 1.1 --- !!str "baz" Example 7.13 from the 1.1 specification: ! "First document" --- !foo "No directives" %TAG ! !foo --- !bar "With directives" %YAML 1.1 --- !baz "Reset settings" |
From: Oren Ben-K. <or...@be...> - 2009-12-10 01:06:23
|
On Wed, Dec 9, 2009 at 12:47 PM, Burt Harris <Bur...@mi...>wrote: > In Yaml 1.2, l-yaml-stream [211] requires that one of the following two > conditions between documents in a stream: > > - Either an explicit end-of-document indicator "...", optional directives, > and an end-of-directives indicator "---" > > - Or, an explicit end-of-directives indicator "---", > _with_no_directives_preceding_it_! > > Unfortunately, many existing example YAML streams do not conform to the > last part of this definition. Attempting to deal with these examples had > complicated my previous YAML 1.1 implementations. I've pretty well > convinced myself that these are all bad examples, I hope you can confirm. > Yes. There was an inherent ambiguity in YAML 1.1 and the 1.2 spec corrected this. Files such as these you have listed are indeed "bad". And one of them is a right hand side of a 1.2 example, too... Yet another typo to fix. Thanks for catching that! Have fun. Oren Ben-Kiki |
From: William S. <sp...@rh...> - 2009-12-23 22:16:56
|
The new 1.2 documentation says that appending YAML streams with a "..." line inserted between them should always work to append them. Unfortunately this is not true if the second document is an implicit one (ie it has no "---" line). It appears this is literally what the specification says, and also libyaml does complain about the following text where two trivial implicit documents are appended with a "...": doc1 ... doc2 The following patch (against libyaml-stable branch) fixes it but also makes it not require a "---" after a % directive, this may also be a desirable fix: Index: src/parser.c =================================================================== --- src/parser.c (revision 369) +++ src/parser.c (working copy) @@ -392,18 +392,17 @@ token = PEEK_TOKEN(parser); if (!token) goto error; if (token->type != YAML_DOCUMENT_START_TOKEN) { - yaml_parser_set_parser_error(parser, - "did not find expected <document start>", token->start_mark); - goto error; + end_mark = start_mark; + } else { + end_mark = token->end_mark; + SKIP_TOKEN(parser); } if (!PUSH(parser, parser->states, YAML_PARSE_DOCUMENT_END_STATE)) goto error; parser->state = YAML_PARSE_DOCUMENT_CONTENT_STATE; - end_mark = token->end_mark; DOCUMENT_START_EVENT_INIT(*event, version_directive, tag_directives.start, tag_directives.end, 0, start_mark, end_mark); - SKIP_TOKEN(parser); version_directive = NULL; tag_directives.start = tag_directives.end = NULL; return 1; |
From: Oren Ben-K. <or...@be...> - 2010-04-30 01:48:11
|
Not so. YAML 1.2 allows for the example you gave. See http://yaml.org/ypaste/587/index.html Have fun, Oren Ben-Kiki On Wed, 2009-12-23 at 14:16 -0800, William Spitzak wrote: > The new 1.2 documentation says that appending YAML streams with a "..." > line inserted between them should always work to append them. > > Unfortunately this is not true if the second document is an implicit one > (ie it has no "---" line). It appears this is literally what the > specification says, and also libyaml does complain about the following > text where two trivial implicit documents are appended with a "...": > > doc1 > ... > doc2 > > The following patch (against libyaml-stable branch) fixes it but also > makes it not require a "---" after a % directive, this may also be a > desirable fix: > > Index: src/parser.c > =================================================================== > --- src/parser.c (revision 369) > +++ src/parser.c (working copy) > @@ -392,18 +392,17 @@ > token = PEEK_TOKEN(parser); > if (!token) goto error; > if (token->type != YAML_DOCUMENT_START_TOKEN) { > - yaml_parser_set_parser_error(parser, > - "did not find expected <document start>", > token->start_mark); > - goto error; > + end_mark = start_mark; > + } else { > + end_mark = token->end_mark; > + SKIP_TOKEN(parser); > } > if (!PUSH(parser, parser->states, YAML_PARSE_DOCUMENT_END_STATE)) > goto error; > parser->state = YAML_PARSE_DOCUMENT_CONTENT_STATE; > - end_mark = token->end_mark; > DOCUMENT_START_EVENT_INIT(*event, version_directive, > tag_directives.start, tag_directives.end, 0, > start_mark, end_mark); > - SKIP_TOKEN(parser); > version_directive = NULL; > tag_directives.start = tag_directives.end = NULL; > return 1; > |
From: William S. <sp...@rh...> - 2010-04-30 02:27:24
|
I understand 1.2 allows this, what I was trying to do was supply a patch that fixes libyaml to follow these rules. Oren Ben-Kiki wrote: > Not so. YAML 1.2 allows for the example you gave. See > http://yaml.org/ypaste/587/index.html > > Have fun, > > Oren Ben-Kiki > > > On Wed, 2009-12-23 at 14:16 -0800, William Spitzak wrote: >> The new 1.2 documentation says that appending YAML streams with a "..." >> line inserted between them should always work to append them. >> >> Unfortunately this is not true if the second document is an implicit one >> (ie it has no "---" line). It appears this is literally what the >> specification says, and also libyaml does complain about the following >> text where two trivial implicit documents are appended with a "...": >> >> doc1 >> ... >> doc2 >> >> The following patch (against libyaml-stable branch) fixes it but also >> makes it not require a "---" after a % directive, this may also be a >> desirable fix: >> >> Index: src/parser.c >> =================================================================== >> --- src/parser.c (revision 369) >> +++ src/parser.c (working copy) >> @@ -392,18 +392,17 @@ >> token = PEEK_TOKEN(parser); >> if (!token) goto error; >> if (token->type != YAML_DOCUMENT_START_TOKEN) { >> - yaml_parser_set_parser_error(parser, >> - "did not find expected <document start>", >> token->start_mark); >> - goto error; >> + end_mark = start_mark; >> + } else { >> + end_mark = token->end_mark; >> + SKIP_TOKEN(parser); >> } >> if (!PUSH(parser, parser->states, YAML_PARSE_DOCUMENT_END_STATE)) >> goto error; >> parser->state = YAML_PARSE_DOCUMENT_CONTENT_STATE; >> - end_mark = token->end_mark; >> DOCUMENT_START_EVENT_INIT(*event, version_directive, >> tag_directives.start, tag_directives.end, 0, >> start_mark, end_mark); >> - SKIP_TOKEN(parser); >> version_directive = NULL; >> tag_directives.start = tag_directives.end = NULL; >> return 1; >> > > |