kubkon / zig-yaml

YAML parser for Zig
MIT License
139 stars 37 forks source link

Missing support for block notation for scalars #43

Open e-ivkov opened 6 days ago

e-ivkov commented 6 days ago

The following example from YAML 1.2.x docs does not parse:

# ASCII Art
--- |
  \//||\/||
  // ||  ||__

Debug info

debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.comment, .start = 0, .end = 11 }
debug(tokenizer):     | # ASCII Art
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.new_line, .start = 11, .end = 12 }
debug(tokenizer):     |

debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.doc_start, .start = 12, .end = 15 }
debug(tokenizer):     | ---
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.space, .start = 15, .end = 16 }
debug(tokenizer):     |
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.literal, .start = 16, .end = 17 }
debug(tokenizer):     | |
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.new_line, .start = 17, .end = 18 }
debug(tokenizer):     |

debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.space, .start = 18, .end = 20 }
debug(tokenizer):     |
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.literal, .start = 20, .end = 29 }
debug(tokenizer):     | \//||\/||
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.new_line, .start = 29, .end = 30 }
debug(tokenizer):     |

debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.space, .start = 30, .end = 32 }
debug(tokenizer):     |
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.literal, .start = 32, .end = 34 }
debug(tokenizer):     | //
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.space, .start = 34, .end = 35 }
debug(tokenizer):     |
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.literal, .start = 35, .end = 37 }
debug(tokenizer):     | ||
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.space, .start = 37, .end = 39 }
debug(tokenizer):     |
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.literal, .start = 39, .end = 43 }
debug(tokenizer):     | ||__
debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.new_line, .start = 43, .end = 44 }
debug(tokenizer):     |

debug(tokenizer): Tokenizer.Token{ .id = Tokenizer.Token.Id.eof, .start = 44, .end = 44 }
debug(tokenizer):     |
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'comment')
debug(parse):   (token 'new_line')
debug(parse):   (token 'doc_start')
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'doc_start')
debug(parse): (main) next doc_start@2
debug(parse): (doc) begin doc_start@2
debug(parse): eatToken('doc_start')
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'doc_start')
debug(parse):   (found at 2)
debug(parse): eatToken('tag')
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'space')
debug(parse):   (token 'literal')
debug(parse):   (not found)
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'literal')
debug(parse):   next literal@4
debug(parse): eatToken('map_value_ind')
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'new_line')
debug(parse):   (not found)
debug(parse): (leaf) |
debug(parse): eatToken('doc_end')
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'new_line')
debug(parse):   (token 'space')
debug(parse):   (token 'literal')
debug(parse):   (not found)
debug(parse): eatToken('doc_start')
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'literal')
debug(parse):   (not found)
debug(parse): eatToken('eof')
debug(parse): eatCommentsAndSpace
debug(parse):   (token 'literal')
debug(parse):   (not found)
error: UnexpectedToken
e-ivkov commented 6 days ago

I can help fixing this, though any pointers to the exact places that need fixing are appreciated.