branch: scratch/yaml
commit e952d1f88ecc61da6592d718e0c5bc96d24efd85
Author: Stefan Monnier <monn...@iro.umontreal.ca>
Commit: Stefan Monnier <monn...@iro.umontreal.ca>

    (yaml--parse-from-grammar): Simplify a bit further
    
    * yaml.el (yaml--parse-from-grammar): Hoist all the
    `(setq res` outside of the `pcase` and consolidate them.
---
 yaml.el | 2994 ++++++++++++++++++++++++++++++---------------------------------
 1 file changed, 1411 insertions(+), 1583 deletions(-)

diff --git a/yaml.el b/yaml.el
index 2b830b9464..aff315a1d4 100644
--- a/yaml.el
+++ b/yaml.el
@@ -1,6 +1,6 @@
 ;;; yaml.el --- YAML parser for Elisp -*- lexical-binding: t -*-
 
-;; Copyright © 2021-2024  Free Software Foundation, Inc.
+;; Copyright © 2021-2025  Free Software Foundation, Inc.
 
 ;; Author: Zachary Romero <z...@posteo.org>
 ;; Version: 1.1.0
@@ -1095,7 +1095,7 @@ changes in the future."
   "Parse YAML grammar for given STATE and ARGS.
 
 Rules for this function are defined by the yaml-spec JSON file."
-  (let ((name (symbol-name state))
+  (let* ((name (symbol-name state))
          (beg yaml--parsing-position)
          (_ (when (and yaml--parse-debug
                        (not (member (symbol-name state) yaml--tracing-ignore)))
@@ -1110,1611 +1110,1439 @@ Rules for this function are defined by the 
yaml-spec JSON file."
                         (yaml--slice yaml--parsing-position)))))
          (_ (yaml--push-state (symbol-name state)))
          (yaml-n)
-         (res))
-    (pcase state
-      ('c-flow-sequence
-       (let ((n (nth 0 args))
-             (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--chr ?\[)
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 's-separate n c)))
-            (yaml--rep 0 1
-              (lambda ()
-                (yaml--parse-from-grammar
-                 'ns-s-flow-seq-entries n
-                 (yaml--parse-from-grammar 'in-flow c))))
-            (yaml--chr ?\])))))
-
-      ('c-indentation-indicator
-       (let ((m (nth 0 args)))
-         (setq res
-           (yaml--any (when (yaml--parse-from-grammar 'ns-dec-digit)
-                        (yaml--set m (yaml--ord (lambda () (yaml--match)))) t)
-                      (when (yaml--empty)
-                        (let ((new-m (yaml--auto-detect m)))
-                          (yaml--set m new-m))
-                        t)))))
-
-      ('ns-reserved-directive
-       (setq res
-         (yaml--all (yaml--parse-from-grammar 'ns-directive-name)
-                    (yaml--rep2 0 nil
-                      (lambda ()
-                        (yaml--all
-                         (yaml--parse-from-grammar 's-separate-in-line)
-                         (yaml--parse-from-grammar 
'ns-directive-parameter)))))))
-
-      ('ns-flow-map-implicit-entry
-       (let ((n (nth 0 args))
-             (c (nth 1 args)))
-         (setq res
-           ;; NOTE: I ran into a bug with the order of these rules. It seems
-           ;; sometimes ns-flow-map-yaml-key-entry succeeds with an empty
-           ;; when the correct answer should be
-           ;; c-ns-flow-map-json-key-entry.  Changing the order seemed to
-           ;; have fix this but this seems like a bandage fix.
-           (yaml--any
-            (yaml--parse-from-grammar 'c-ns-flow-map-json-key-entry n c)
-            (yaml--parse-from-grammar 'ns-flow-map-yaml-key-entry n c)
-            (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n c)))))
-
-      ('ns-esc-double-quote
-       (setq res
-         (yaml--chr ?\")))
-
-      ('c-mapping-start
-       (setq res (yaml--chr ?\{)))
-
-      ('ns-flow-seq-entry
-       (let ((n (nth 0 args))
-             (c (nth 1 args)))
-         (setq res
-           (yaml--any (yaml--parse-from-grammar 'ns-flow-pair n c)
-                      (yaml--parse-from-grammar 'ns-flow-node n c)))))
-
-      ('l-empty
-       (let ((n (nth 0 args))
-             (c (nth 1 args)))
-         (setq res
-           (yaml--all (yaml--any (yaml--parse-from-grammar 's-line-prefix n c)
-                                 (yaml--parse-from-grammar 's-indent-lt n))
-                      (yaml--parse-from-grammar 'b-as-line-feed)))))
-
-      ('c-primary-tag-handle
-       (setq res (yaml--chr ?\!)))
-
-      ('ns-plain-safe-out
-       (setq res
-         (yaml--parse-from-grammar 'ns-char)))
-
-      ('c-ns-shorthand-tag
-       (setq res
-         (yaml--all
-          (yaml--parse-from-grammar 'c-tag-handle)
-          (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-tag-char))))))
-
-      ('nb-ns-single-in-line
-       (setq res
-         (yaml--rep2 0 nil
-           (lambda ()
-             (yaml--all (yaml--rep2 0 nil
-                          (lambda () (yaml--parse-from-grammar 's-white)))
-                        (yaml--parse-from-grammar 'ns-single-char))))))
-
-      ('l-strip-empty
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep2 0 nil
-              (lambda () (yaml--all
-                          (yaml--parse-from-grammar 's-indent-le n)
-                          (yaml--parse-from-grammar 'b-non-content))))
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 'l-trail-comments n)))))))
-
-      ('c-indicator
-       (setq res
-         (yaml--any (yaml--chr ?\-)
-                    (yaml--chr ?\?)
-                    (yaml--chr ?\:)
-                    (yaml--chr ?\,)
-                    (yaml--chr ?\[)
-                    (yaml--chr ?\])
-                    (yaml--chr ?\{)
-                    (yaml--chr ?\})
-                    (yaml--chr ?\#)
-                    (yaml--chr ?\&)
-                    (yaml--chr ?\*)
-                    (yaml--chr ?\!)
-                    (yaml--chr ?\|)
-                    (yaml--chr ?\>)
-                    (yaml--chr ?\')
-                    (yaml--chr ?\")
-                    (yaml--chr ?\%)
-                    (yaml--chr ?\@)
-                    (yaml--chr ?\`))))
-
-      ('c-l+literal
-       (let ((n (nth 0 args)))
-         (setq yaml-n n)
-         (setq res
-           (progn
-             (yaml--all
-              (yaml--chr ?\|)
-              (yaml--parse-from-grammar 'c-b-block-header n 
(yaml--state-curr-t))
-              (yaml--parse-from-grammar 'l-literal-content
-                                        (max (+ n (yaml--state-curr-m)) 1)
-                                        (yaml--state-curr-t)))))))
-
-      ('c-single-quoted
-       (let ((n (nth 0 args))
-             (c (nth 1 args)))
-         (setq res
-           (yaml--all (yaml--chr ?\')
-                      (yaml--parse-from-grammar 'nb-single-text n c)
-                      (yaml--chr ?\')))))
-
-      ('c-forbidden
-       (setq res
-         (yaml--all (yaml--start-of-line)
-                    (yaml--any
-                     (yaml--parse-from-grammar 'c-directives-end)
-                     (yaml--parse-from-grammar 'c-document-end))
-                    (yaml--any
-                     (yaml--parse-from-grammar 'b-char)
-                     (yaml--parse-from-grammar 's-white)
-                     (yaml--end-of-stream)))))
-
-      ('c-ns-alias-node
-       (setq res
-         (yaml--all (yaml--chr ?\*)
-                    (yaml--parse-from-grammar 'ns-anchor-name))))
-
-      ('c-secondary-tag-handle
-       (setq res
-         (yaml--all (yaml--chr ?\!) (yaml--chr ?\!))))
-
-      ('ns-esc-next-line
-       (setq res (yaml--chr ?N)))
-
-      ('l-nb-same-lines
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep2 0 nil
-              (lambda () (yaml--parse-from-grammar 'l-empty n "block-in")))
-            (yaml--any (yaml--parse-from-grammar 'l-nb-folded-lines n)
-                       (yaml--parse-from-grammar 'l-nb-spaced-lines n))))))
-
-      ('c-alias
-       (setq res (yaml--chr ?\*)))
-
-      ('ns-single-char
-       (setq res
-         (yaml--but (lambda () (yaml--parse-from-grammar 'nb-single-char))
-                    (lambda () (yaml--parse-from-grammar 's-white)))))
-
-      ('c-l-block-map-implicit-value
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all (yaml--chr ?\:)
-                      (yaml--any
-                       (yaml--parse-from-grammar 's-l+block-node n "block-out")
-                       (yaml--all (yaml--parse-from-grammar 'e-node)
-                                  (yaml--parse-from-grammar 
's-l-comments)))))))
-
-      ('ns-uri-char
-       (setq res
-         (yaml--any (yaml--all (yaml--chr ?\%)
-                               (yaml--parse-from-grammar 'ns-hex-digit)
-                               (yaml--parse-from-grammar 'ns-hex-digit))
-                    (yaml--parse-from-grammar 'ns-word-char)
-                    (yaml--chr ?\#)
-                    (yaml--chr ?\;)
-                    (yaml--chr ?\/)
-                    (yaml--chr ?\?)
-                    (yaml--chr ?\:)
-                    (yaml--chr ?\@)
-                    (yaml--chr ?\&)
-                    (yaml--chr ?\=)
-                    (yaml--chr ?\+)
-                    (yaml--chr ?\$)
-                    (yaml--chr ?\,)
-                    (yaml--chr ?\_)
-                    (yaml--chr ?\.)
-                    (yaml--chr ?\!)
-                    (yaml--chr ?\~)
-                    (yaml--chr ?\*)
-                    (yaml--chr ?\')
-                    (yaml--chr ?\()
-                    (yaml--chr ?\))
-                    (yaml--chr ?\[)
-                    (yaml--chr ?\]))))
-
-      ('ns-esc-16-bit
-       (setq res
-         (yaml--all (yaml--chr ?u)
-                    (yaml--rep 4 4
-                      (lambda () (yaml--parse-from-grammar 'ns-hex-digit))))))
-
-      ('l-nb-spaced-lines
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 's-nb-spaced-text n)
-            (yaml--rep2 0 nil
-              (lambda () (yaml--all
-                          (yaml--parse-from-grammar 'b-l-spaced n)
-                          (yaml--parse-from-grammar 's-nb-spaced-text n))))))))
-
-      ('ns-plain
-       (let ((n (nth 0 args))
-             (c (nth 1 args)))
-         (setq res
-           (pcase c
-             ("block-key" (yaml--parse-from-grammar 'ns-plain-one-line c))
-             ("flow-in" (yaml--parse-from-grammar 'ns-plain-multi-line n c))
-             ("flow-key" (yaml--parse-from-grammar 'ns-plain-one-line c))
-             ("flow-out" (yaml--parse-from-grammar 'ns-plain-multi-line n 
c))))))
-
-      ('c-printable
-       (setq res
-         (yaml--any (yaml--chr ?\x09)
-                    (yaml--chr ?\x0A)
-                    (yaml--chr ?\x0D)
-                    (yaml--chr-range ?\x20 ?\x7E)
-                    (yaml--chr ?\x85)
-                    (yaml--chr-range ?\xA0 ?\xD7FF)
-                    (yaml--chr-range ?\xE000 ?\xFFFD)
-                    (yaml--chr-range ?\x010000 ?\x10FFFF))))
-
-      ('c-mapping-value
-       (setq res (yaml--chr ?\:)))
-
-      ('l-nb-literal-text
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep2 0 nil
-              (lambda () (yaml--parse-from-grammar 'l-empty n "block-in")))
-            (yaml--parse-from-grammar 's-indent n)
-            (yaml--rep 1 nil
-              (lambda () (yaml--parse-from-grammar 'nb-char)))))))
-
-      ('ns-plain-char
-       (let ((c (nth 0 args)))
-         (setq res
-           (yaml--any
-            (yaml--but
-             (lambda () (yaml--parse-from-grammar 'ns-plain-safe c))
-             (lambda () (yaml--chr ?\:)) (lambda () (yaml--chr ?\#)))
-            (yaml--all
-             (yaml--chk "<=" (yaml--parse-from-grammar 'ns-char))
-             (yaml--chr ?\#))
-            (yaml--all
-             (yaml--chr ?\:)
-             (yaml--chk "=" (yaml--parse-from-grammar 'ns-plain-safe c)))))))
-
-      ('ns-anchor-char
-       (setq res
-         (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
-                    (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
-
-      ('s-l+block-scalar
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all (yaml--parse-from-grammar 's-separate (+ n 1) c)
-                      (yaml--rep 0 1
-                        (lambda ()
-                          (yaml--all
-                           (yaml--parse-from-grammar 'c-ns-properties (+ n 1) 
c)
-                           (yaml--parse-from-grammar 's-separate (+ n 1) c))))
-                      (yaml--any (yaml--parse-from-grammar 'c-l+literal n)
-                                 (yaml--parse-from-grammar 'c-l+folded n))))))
-
-      ('ns-plain-safe-in
-       (setq res
-         (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
-                    (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
-
-      ('nb-single-text
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (pcase c
-             ("block-key" (yaml--parse-from-grammar 'nb-single-one-line))
-             ("flow-in" (yaml--parse-from-grammar 'nb-single-multi-line n))
-             ("flow-key" (yaml--parse-from-grammar 'nb-single-one-line))
-             ("flow-out" (yaml--parse-from-grammar 'nb-single-multi-line 
n))))))
-
-      ('s-indent-le
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all (yaml--rep2 0 nil
-                        (lambda () (yaml--parse-from-grammar 's-space)))
-                      (<= (length (yaml--match)) n)))))
-
-      ('ns-esc-carriage-return
-       (setq res (yaml--chr ?r)))
-
-      ('l-chomped-empty
-       (let ((n (nth 0 args))
-             (tt (nth 1 args)))
-         (setq res
-           (pcase tt
-             ("clip" (yaml--parse-from-grammar 'l-strip-empty n))
-             ("keep" (yaml--parse-from-grammar 'l-keep-empty n))
-             ("strip" (yaml--parse-from-grammar 'l-strip-empty n))))))
-
-      ('c-s-implicit-json-key
-       (let ((c (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--max 1024)
-            (yaml--parse-from-grammar 'c-flow-json-node nil c)
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 's-separate-in-line)))))))
-
-      ('b-as-space
-       (setq res
-         (yaml--parse-from-grammar 'b-break)))
-
-      ('ns-s-flow-seq-entries
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'ns-flow-seq-entry n c)
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 's-separate n c)))
-            (yaml--rep 0 1
-              (lambda ()
-                (yaml--all
-                 (yaml--chr ?\,)
-                 (yaml--rep 0 1
-                   (lambda () (yaml--parse-from-grammar 's-separate n c)))
-                 (yaml--rep 0 1
-                   (lambda ()
-                     (yaml--parse-from-grammar 'ns-s-flow-seq-entries
-                                               n
-                                               c))))))))))
-
-      ('l-block-map-explicit-value
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 's-indent n)
-            (yaml--chr ?\:)
-            (yaml--parse-from-grammar 's-l+block-indented n "block-out")))))
-
-      ('c-ns-flow-map-json-key-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'c-flow-json-node n c)
-            (yaml--any
-             (yaml--all
-              (yaml--rep 0 1
-                (lambda () (yaml--parse-from-grammar 's-separate n c)))
-              (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n c))
-             (yaml--parse-from-grammar 'e-node))))))
-
-      ('c-sequence-entry
-       (setq res (yaml--chr ?\-)))
-
-      ('l-bare-document
-       (setq res
-         (yaml--all (yaml--exclude "c-forbidden")
-                    (yaml--parse-from-grammar 's-l+block-node -1 "block-in"))))
-
-      ;; TODO: don't use the symbol t as a variable.
-      ('b-chomped-last
-       (let ((tt (nth 0 args)))
-         (setq res
-           (pcase tt
-             ("clip"
-              ;; TODO: Fix this
-              (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
-                         (yaml--end-of-stream)))
-             ("keep"
-              (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
-                         (yaml--end-of-stream)))
-             ("strip"
-              (yaml--any (yaml--parse-from-grammar 'b-non-content)
-                         (yaml--end-of-stream)))))))
-
-      ('l-trail-comments
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all (yaml--parse-from-grammar 's-indent-lt n)
-                      (yaml--parse-from-grammar 'c-nb-comment-text)
-                      (yaml--parse-from-grammar 'b-comment)
-                      (yaml--rep2 0 nil
-                        (lambda () (yaml--parse-from-grammar 'l-comment)))))))
-
-      ('ns-flow-map-yaml-key-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'ns-flow-yaml-node n c)
-            (yaml--any
+         (res
+          (pcase state
+            ('c-flow-sequence
+             (let ((n (nth 0 args))
+                   (c (nth 1 args)))
+               (yaml--all
+                (yaml--chr ?\[)
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 's-separate n 
c)))
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--parse-from-grammar
+                              'ns-s-flow-seq-entries n
+                              (yaml--parse-from-grammar 'in-flow c))))
+                (yaml--chr ?\]))))
+
+            ('c-indentation-indicator
+             (let ((m (nth 0 args)))
+               (yaml--any (when (yaml--parse-from-grammar 'ns-dec-digit)
+                            (yaml--set m (yaml--ord (lambda () 
(yaml--match)))) t)
+                          (when (yaml--empty)
+                            (let ((new-m (yaml--auto-detect m)))
+                              (yaml--set m new-m))
+                            t))))
+
+            ('ns-reserved-directive
+             (yaml--all (yaml--parse-from-grammar 'ns-directive-name)
+                        (yaml--rep2 0 nil
+                                    (lambda ()
+                                      (yaml--all
+                                       (yaml--parse-from-grammar 
's-separate-in-line)
+                                       (yaml--parse-from-grammar 
'ns-directive-parameter))))))
+
+            ('ns-flow-map-implicit-entry
+             (let ((n (nth 0 args))
+                   (c (nth 1 args)))
+               ;; NOTE: I ran into a bug with the order of these rules. It 
seems
+               ;; sometimes ns-flow-map-yaml-key-entry succeeds with an empty
+               ;; when the correct answer should be
+               ;; c-ns-flow-map-json-key-entry.  Changing the order seemed to
+               ;; have fix this but this seems like a bandage fix.
+               (yaml--any
+                (yaml--parse-from-grammar 'c-ns-flow-map-json-key-entry n c)
+                (yaml--parse-from-grammar 'ns-flow-map-yaml-key-entry n c)
+                (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n 
c))))
+
+            ('ns-esc-double-quote
+             (yaml--chr ?\"))
+
+            ('c-mapping-start
+             (yaml--chr ?\{))
+
+            ('ns-flow-seq-entry
+             (let ((n (nth 0 args))
+                   (c (nth 1 args)))
+               (yaml--any (yaml--parse-from-grammar 'ns-flow-pair n c)
+                          (yaml--parse-from-grammar 'ns-flow-node n c))))
+
+            ('l-empty
+             (let ((n (nth 0 args))
+                   (c (nth 1 args)))
+               (yaml--all (yaml--any (yaml--parse-from-grammar 's-line-prefix 
n c)
+                                     (yaml--parse-from-grammar 's-indent-lt n))
+                          (yaml--parse-from-grammar 'b-as-line-feed))))
+
+            ('c-primary-tag-handle
+             (yaml--chr ?\!))
+
+            ('ns-plain-safe-out
+             (yaml--parse-from-grammar 'ns-char))
+
+            ('c-ns-shorthand-tag
              (yaml--all
-              (yaml--rep 0 1
-                (lambda () (yaml--parse-from-grammar 's-separate n c)))
-              (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c))
-             (yaml--parse-from-grammar 'e-node))))))
-
-      ('s-indent
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--rep n n (lambda () (yaml--parse-from-grammar 's-space))))))
-
-      ('ns-esc-line-separator
-       (setq res (yaml--chr ?L)))
-
-      ('ns-flow-yaml-node
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any
-            (yaml--parse-from-grammar 'c-ns-alias-node)
-            (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
-            (yaml--all
-             (yaml--parse-from-grammar 'c-ns-properties n c)
-             (yaml--any
-              (yaml--all
-               (yaml--parse-from-grammar 's-separate n c)
-               (yaml--parse-from-grammar 'ns-flow-yaml-content n c))
-              (yaml--parse-from-grammar 'e-scalar)))))))
-
-      ('ns-yaml-version
-       (setq res
-         (yaml--all (yaml--rep 1 nil
-                      (lambda () (yaml--parse-from-grammar 'ns-dec-digit)))
-                    (yaml--chr ?\.)
-                    (yaml--rep 1 nil
-                      (lambda () (yaml--parse-from-grammar 'ns-dec-digit))))))
-
-      ('c-folded
-       (setq res (yaml--chr ?\>)))
-
-      ('c-directives-end
-       (setq res
-         (yaml--all (yaml--chr ?\-) (yaml--chr ?\-) (yaml--chr ?\-))))
-
-      ('s-double-break
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--any (yaml--parse-from-grammar 's-double-escaped n)
-                      (yaml--parse-from-grammar 's-flow-folded n)))))
-
-      ('s-nb-spaced-text
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all (yaml--parse-from-grammar 's-indent n)
-                      (yaml--parse-from-grammar 's-white)
-                      (yaml--rep2 0 nil
-                        (lambda () (yaml--parse-from-grammar 'nb-char)))))))
-
-      ('l-folded-content
-       (let ((n (nth 0 args))
-             (tt (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep 0 1
-              (lambda ()
-                (yaml--all (yaml--parse-from-grammar 'l-nb-diff-lines n)
-                           (yaml--parse-from-grammar 'b-chomped-last tt))))
-            (yaml--parse-from-grammar 'l-chomped-empty n tt)))))
-
-      ('nb-ns-plain-in-line
-       (let ((c (nth 0 args)))
-         (setq res
-           (yaml--rep2 0 nil
-             (lambda () (yaml--all
-                         (yaml--rep2 0 nil
-                           (lambda () (yaml--parse-from-grammar 's-white)))
-                         (yaml--parse-from-grammar 'ns-plain-char c)))))))
-
-      ('nb-single-multi-line
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'nb-ns-single-in-line)
-            (yaml--any
-             (yaml--parse-from-grammar 's-single-next-line n)
+              (yaml--parse-from-grammar 'c-tag-handle)
+              (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-tag-char)))))
+
+            ('nb-ns-single-in-line
              (yaml--rep2 0 nil
-               (lambda () (yaml--parse-from-grammar 's-white))))))))
-
-      ('l-document-suffix
-       (setq res
-         (yaml--all (yaml--parse-from-grammar 'c-document-end)
-                    (yaml--parse-from-grammar 's-l-comments))))
-
-      ('c-sequence-start
-       (setq res
-         (yaml--chr ?\[)))
-
-      ('ns-l-block-map-entry
-       (setq res
-         (yaml--any
-          (yaml--parse-from-grammar 'c-l-block-map-explicit-entry
-                                    (nth 0 args))
-          (yaml--parse-from-grammar 'ns-l-block-map-implicit-entry
-                                    (nth 0 args)))))
-
-      ('ns-l-compact-mapping
-       (setq res
-         (yaml--all
-          (yaml--parse-from-grammar 'ns-l-block-map-entry (nth 0 args))
-          (yaml--rep2 0 nil
-            (lambda ()
-              (yaml--all
-               (yaml--parse-from-grammar 's-indent (nth 0 args))
-               (yaml--parse-from-grammar 'ns-l-block-map-entry (nth 0 
args))))))))
-
-      ('ns-esc-space
-       (setq res (yaml--chr ?\x20)))
-      ('ns-esc-vertical-tab
-       (setq res (yaml--chr ?v)))
-
-      ('ns-s-implicit-yaml-key
-       (let ((c (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--max 1024)
-            (yaml--parse-from-grammar 'ns-flow-yaml-node nil c)
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 's-separate-in-line)))))))
-
-      ('b-l-folded
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any (yaml--parse-from-grammar 'b-l-trimmed n c)
-                      (yaml--parse-from-grammar 'b-as-space)))))
-
-      ('s-l+block-collection
-       (setq res
-         (yaml--all
-          (yaml--rep 0 1
-            (lambda ()
-              (yaml--all
-               (yaml--parse-from-grammar
-                's-separate
-                (+ (nth 0 args) 1)
-                (nth 1 args))
-               (yaml--parse-from-grammar
-                'c-ns-properties
-                (+ (nth 0 args) 1)
-                (nth 1 args)))))
-          (yaml--parse-from-grammar 's-l-comments)
-          (yaml--any
-           (yaml--parse-from-grammar
-            'l+block-sequence
-            (yaml--parse-from-grammar 'seq-spaces (nth 0 args) (nth 1 args)))
-           (yaml--parse-from-grammar 'l+block-mapping (nth 0 args))))))
-
-      ('c-quoted-quote
-       (setq res (yaml--all (yaml--chr ?\') (yaml--chr ?\'))))
-
-      ('l+block-sequence
-       (setq res
-         ;; NOTE: deviated from the spec example here by making new-m at least 
1.
-         ;; The wording and examples lead me to believe this is how it's done.
-         ;; ie /* For some fixed auto-detected m > 0 */
-         (let ((new-m (max (yaml--auto-detect-indent (nth 0 args)) 1)))
-           (yaml--all
-            (yaml--set m new-m)
-            (yaml--rep 1 nil
-              (lambda ()
-                (yaml--all
-                 (yaml--parse-from-grammar
-                  's-indent
-                  (+ (nth 0 args) new-m))
-                 (yaml--parse-from-grammar
-                  'c-l-block-seq-entry
-                  (+ (nth 0 args) new-m)))))))))
-
-      ('c-double-quote
-       (setq res
-         (yaml--chr ?\")))
-
-      ('ns-esc-backspace
-       (setq res
-         (yaml--chr ?b)))
-
-      ('c-flow-json-content
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any (yaml--parse-from-grammar 'c-flow-sequence n c)
-                      (yaml--parse-from-grammar 'c-flow-mapping n c)
-                      (yaml--parse-from-grammar 'c-single-quoted n c)
-                      (yaml--parse-from-grammar 'c-double-quoted n c)))))
-
-      ('c-mapping-end
-       (setq res (yaml--chr ?\})))
-
-      ('nb-single-char
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'c-quoted-quote)
-                    (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json))
-                               (lambda () (yaml--chr ?\'))))))
-
-      ('ns-flow-node
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any
-            (yaml--parse-from-grammar 'c-ns-alias-node)
-            (yaml--parse-from-grammar 'ns-flow-content n c)
-            (yaml--all
-             (yaml--parse-from-grammar 'c-ns-properties n c)
-             (yaml--any
-              (yaml--all (yaml--parse-from-grammar 's-separate n c)
-                         (yaml--parse-from-grammar 'ns-flow-content n c))
-              (yaml--parse-from-grammar 'e-scalar)))))))
-
-      ('c-non-specific-tag
-       (setq res (yaml--chr ?\!)))
-
-      ('l-directive-document
-       (setq res
-         (yaml--all (yaml--rep 1 nil
-                      (lambda () (yaml--parse-from-grammar 'l-directive)))
-                    (yaml--parse-from-grammar 'l-explicit-document))))
-
-      ('c-l-block-map-explicit-entry
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'c-l-block-map-explicit-key n)
-            (yaml--any (yaml--parse-from-grammar 'l-block-map-explicit-value n)
-                       (yaml--parse-from-grammar 'e-node))))))
-
-      ('e-node
-       (setq res
-         (yaml--parse-from-grammar 'e-scalar)))
-
-      ('seq-spaces
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (pcase c
-             ("block-in" n)
-             ("block-out" (yaml--sub n 1))))))
-
-      ('l-yaml-stream
-       (setq res
-         (yaml--all
-          (yaml--rep2 0 nil
-            (lambda () (yaml--parse-from-grammar 'l-document-prefix)))
-          (yaml--rep 0 1
-            (lambda () (yaml--parse-from-grammar 'l-any-document)))
-          (yaml--rep2 0 nil
-            (lambda ()
-              (yaml--any
+                         (lambda ()
+                           (yaml--all (yaml--rep2 0 nil
+                                                  (lambda () 
(yaml--parse-from-grammar 's-white)))
+                                      (yaml--parse-from-grammar 
'ns-single-char)))))
+
+            ('l-strip-empty
+             (let ((n (nth 0 args)))
                (yaml--all
-                (yaml--rep 1 nil
-                  (lambda () (yaml--parse-from-grammar 'l-document-suffix)))
                 (yaml--rep2 0 nil
-                  (lambda () (yaml--parse-from-grammar 'l-document-prefix)))
+                            (lambda () (yaml--all
+                                   (yaml--parse-from-grammar 's-indent-le n)
+                                   (yaml--parse-from-grammar 'b-non-content))))
                 (yaml--rep 0 1
-                  (lambda () (yaml--parse-from-grammar 'l-any-document))))
+                           (lambda () (yaml--parse-from-grammar 
'l-trail-comments n))))))
+
+            ('c-indicator
+             (yaml--any (yaml--chr ?\-)
+                        (yaml--chr ?\?)
+                        (yaml--chr ?\:)
+                        (yaml--chr ?\,)
+                        (yaml--chr ?\[)
+                        (yaml--chr ?\])
+                        (yaml--chr ?\{)
+                        (yaml--chr ?\})
+                        (yaml--chr ?\#)
+                        (yaml--chr ?\&)
+                        (yaml--chr ?\*)
+                        (yaml--chr ?\!)
+                        (yaml--chr ?\|)
+                        (yaml--chr ?\>)
+                        (yaml--chr ?\')
+                        (yaml--chr ?\")
+                        (yaml--chr ?\%)
+                        (yaml--chr ?\@)
+                        (yaml--chr ?\`)))
+
+            ('c-l+literal
+             (let ((n (nth 0 args)))
+               (setq yaml-n n)
+               (yaml--all
+                (yaml--chr ?\|)
+                (yaml--parse-from-grammar 'c-b-block-header n 
(yaml--state-curr-t))
+                (yaml--parse-from-grammar 'l-literal-content
+                                          (max (+ n (yaml--state-curr-m)) 1)
+                                          (yaml--state-curr-t)))))
+
+            ('c-single-quoted
+             (let ((n (nth 0 args))
+                   (c (nth 1 args)))
+               (yaml--all (yaml--chr ?\')
+                          (yaml--parse-from-grammar 'nb-single-text n c)
+                          (yaml--chr ?\'))))
+
+            ('c-forbidden
+             (yaml--all (yaml--start-of-line)
+                        (yaml--any
+                         (yaml--parse-from-grammar 'c-directives-end)
+                         (yaml--parse-from-grammar 'c-document-end))
+                        (yaml--any
+                         (yaml--parse-from-grammar 'b-char)
+                         (yaml--parse-from-grammar 's-white)
+                         (yaml--end-of-stream))))
+
+            ('c-ns-alias-node
+             (yaml--all (yaml--chr ?\*)
+                        (yaml--parse-from-grammar 'ns-anchor-name)))
+
+            ('c-secondary-tag-handle
+             (yaml--all (yaml--chr ?\!) (yaml--chr ?\!)))
+
+            ('ns-esc-next-line
+             (yaml--chr ?N))
+
+            ('l-nb-same-lines
+             (let ((n (nth 0 args)))
                (yaml--all
                 (yaml--rep2 0 nil
-                  (lambda () (yaml--parse-from-grammar 'l-document-prefix)))
-                (yaml--rep 0 1
-                  (lambda ()
-                    (yaml--parse-from-grammar 'l-explicit-document))))))))))
-
-      ('nb-double-one-line
-       (setq res
-         (yaml--rep2 0 nil
-           (lambda () (yaml--parse-from-grammar 'nb-double-char)))))
-
-      ('s-l-comments
-       (setq res
-         (yaml--all (yaml--any
-                     (yaml--parse-from-grammar 's-b-comment)
-                     (yaml--start-of-line))
-                    (yaml--rep2 0 nil
-                      (lambda () (yaml--parse-from-grammar 'l-comment))))))
-
-      ('nb-char
-       (setq res
-         (yaml--but (lambda () (yaml--parse-from-grammar 'c-printable))
-                    (lambda () (yaml--parse-from-grammar 'b-char))
-                    (lambda () (yaml--parse-from-grammar 
'c-byte-order-mark)))))
-
-      ('ns-plain-first
-       (let ((c (nth 0 args)))
-         (setq res
-           (yaml--any
-            (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
-                       (lambda () (yaml--parse-from-grammar 'c-indicator)))
-            (yaml--all
-             (yaml--any (yaml--chr ?\?)
+                            (lambda () (yaml--parse-from-grammar 'l-empty n 
"block-in")))
+                (yaml--any (yaml--parse-from-grammar 'l-nb-folded-lines n)
+                           (yaml--parse-from-grammar 'l-nb-spaced-lines n)))))
+
+            ('c-alias
+             (yaml--chr ?\*))
+
+            ('ns-single-char
+             (yaml--but (lambda () (yaml--parse-from-grammar 'nb-single-char))
+                        (lambda () (yaml--parse-from-grammar 's-white))))
+
+            ('c-l-block-map-implicit-value
+             (let ((n (nth 0 args)))
+               (yaml--all (yaml--chr ?\:)
+                          (yaml--any
+                           (yaml--parse-from-grammar 's-l+block-node n 
"block-out")
+                           (yaml--all (yaml--parse-from-grammar 'e-node)
+                                      (yaml--parse-from-grammar 
's-l-comments))))))
+
+            ('ns-uri-char
+             (yaml--any (yaml--all (yaml--chr ?\%)
+                                   (yaml--parse-from-grammar 'ns-hex-digit)
+                                   (yaml--parse-from-grammar 'ns-hex-digit))
+                        (yaml--parse-from-grammar 'ns-word-char)
+                        (yaml--chr ?\#)
+                        (yaml--chr ?\;)
+                        (yaml--chr ?\/)
+                        (yaml--chr ?\?)
                         (yaml--chr ?\:)
-                        (yaml--chr ?\-))
-             (yaml--chk "=" (yaml--parse-from-grammar 'ns-plain-safe c)))))))
-
-      ('c-ns-esc-char
-       (setq res
-         (yaml--all
-          (yaml--chr ?\\)
-          (yaml--any (yaml--parse-from-grammar 'ns-esc-null)
-                     (yaml--parse-from-grammar 'ns-esc-bell)
-                     (yaml--parse-from-grammar 'ns-esc-backspace)
-                     (yaml--parse-from-grammar 'ns-esc-horizontal-tab)
-                     (yaml--parse-from-grammar 'ns-esc-line-feed)
-                     (yaml--parse-from-grammar 'ns-esc-vertical-tab)
-                     (yaml--parse-from-grammar 'ns-esc-form-feed)
-                     (yaml--parse-from-grammar 'ns-esc-carriage-return)
-                     (yaml--parse-from-grammar 'ns-esc-escape)
-                     (yaml--parse-from-grammar 'ns-esc-space)
-                     (yaml--parse-from-grammar 'ns-esc-double-quote)
-                     (yaml--parse-from-grammar 'ns-esc-slash)
-                     (yaml--parse-from-grammar 'ns-esc-backslash)
-                     (yaml--parse-from-grammar 'ns-esc-next-line)
-                     (yaml--parse-from-grammar 'ns-esc-non-breaking-space)
-                     (yaml--parse-from-grammar 'ns-esc-line-separator)
-                     (yaml--parse-from-grammar 'ns-esc-paragraph-separator)
-                     (yaml--parse-from-grammar 'ns-esc-8-bit)
-                     (yaml--parse-from-grammar 'ns-esc-16-bit)
-                     (yaml--parse-from-grammar 'ns-esc-32-bit)))))
-
-      ('ns-flow-map-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any
-            (yaml--all (yaml--chr ?\?)
-                       (yaml--parse-from-grammar 's-separate n c)
-                       (yaml--parse-from-grammar 'ns-flow-map-explicit-entry n 
c))
-            (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n c)))))
-
-      ('l-explicit-document
-       (setq res
-         (yaml--all
-          (yaml--parse-from-grammar 'c-directives-end)
-          (yaml--any (yaml--parse-from-grammar 'l-bare-document)
-                     (yaml--all (yaml--parse-from-grammar 'e-node)
-                                (yaml--parse-from-grammar 's-l-comments))))))
-
-      ('s-white
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 's-space)
-                    (yaml--parse-from-grammar 's-tab))))
-
-      ('l-keep-empty
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep2 0 nil
-              (lambda () (yaml--parse-from-grammar 'l-empty n "block-in")))
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 'l-trail-comments n)))))))
-
-      ('ns-tag-prefix
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'c-ns-local-tag-prefix)
-                    (yaml--parse-from-grammar 'ns-global-tag-prefix))))
-
-      ('c-l+folded
-       (let ((n (nth 0 args)))
-         (setq yaml-n n)
-         (setq res
-           (yaml--all
-            (yaml--chr ?\>)
-            (yaml--parse-from-grammar 'c-b-block-header
-                                      n
-                                      (yaml--state-curr-t))
-            (yaml--parse-from-grammar 'l-folded-content
-                                      (max (+ n (yaml--state-curr-m)) 1)
-                                      (yaml--state-curr-t))))))
-
-      ('ns-directive-name
-       (setq res
-         (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))
-
-      ('b-char
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'b-line-feed)
-                    (yaml--parse-from-grammar 'b-carriage-return))))
-
-      ('ns-plain-multi-line
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'ns-plain-one-line c)
-            (yaml--rep2 0 nil
-              (lambda ()
-                (yaml--parse-from-grammar 's-ns-plain-next-line n c)))))))
-
-      ('ns-char
-       (setq res
-         (yaml--but (lambda () (yaml--parse-from-grammar 'nb-char))
-                    (lambda () (yaml--parse-from-grammar 's-white)))))
-
-      ('s-space
-       (setq res (yaml--chr ?\x20)))
-
-      ('c-l-block-seq-entry
-       (setq res
-         (yaml--all (yaml--chr ?\-)
-                    (yaml--chk "!" (yaml--parse-from-grammar 'ns-char))
-                    (yaml--parse-from-grammar 's-l+block-indented
-                                              (nth 0 args)
-                                              "block-in"))))
-
-      ('c-ns-properties
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any
-            (yaml--all
-             (yaml--parse-from-grammar 'c-ns-tag-property)
-             (yaml--rep 0 1
-               (lambda ()
-                 (yaml--all
-                  (yaml--parse-from-grammar 's-separate n c)
-                  (yaml--parse-from-grammar 'c-ns-anchor-property)))))
-            (yaml--all
-             (yaml--parse-from-grammar 'c-ns-anchor-property)
-             (yaml--rep 0 1
-               (lambda () (yaml--all
-                           (yaml--parse-from-grammar 's-separate n c)
-                           (yaml--parse-from-grammar 
'c-ns-tag-property)))))))))
-
-      ('ns-directive-parameter
-       (setq res
-         (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))
-
-      ('c-chomping-indicator
-       (setq res
-         (yaml--any (when (yaml--chr ?\-) (yaml--set t "strip") t)
-                    (when (yaml--chr ?\+) (yaml--set t "keep") t)
-                    (when (yaml--empty) (yaml--set t "clip") t))))
-
-      ('ns-global-tag-prefix
-       (setq res
-         (yaml--all
-          (yaml--parse-from-grammar 'ns-tag-char)
-          (yaml--rep2 0 nil
-            (lambda () (yaml--parse-from-grammar 'ns-uri-char))))))
-
-      ('c-ns-flow-pair-json-key-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'c-s-implicit-json-key "flow-key")
-            (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n c)))))
-
-      ('l-literal-content
-       (let ((n (nth 0 args))
-             (tt (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep 0 1
-              (lambda ()
-                (yaml--all (yaml--parse-from-grammar 'l-nb-literal-text n)
-                           (yaml--rep2 0 nil
-                             (lambda ()
-                               (yaml--parse-from-grammar 'b-nb-literal-next 
n)))
-                           (yaml--parse-from-grammar 'b-chomped-last tt))))
-            (yaml--parse-from-grammar 'l-chomped-empty n tt)))))
-
-      ('c-document-end
-       (setq res
-         (yaml--all (yaml--chr ?\.)
-                    (yaml--chr ?\.)
-                    (yaml--chr ?\.))))
-
-      ('nb-double-text
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (pcase c
-             ("block-key" (yaml--parse-from-grammar 'nb-double-one-line))
-             ("flow-in" (yaml--parse-from-grammar 'nb-double-multi-line n))
-             ("flow-key" (yaml--parse-from-grammar 'nb-double-one-line))
-             ("flow-out" (yaml--parse-from-grammar 'nb-double-multi-line 
n))))))
-
-      ('s-b-comment
-       (setq res
-         (yaml--all
-          (yaml--rep 0 1
-            (lambda ()
-              (yaml--all
-               (yaml--parse-from-grammar 's-separate-in-line)
-               (yaml--rep 0 1
-                 (lambda () (yaml--parse-from-grammar 'c-nb-comment-text))))))
-          (yaml--parse-from-grammar 'b-comment))))
-
-      ('s-block-line-prefix
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--parse-from-grammar 's-indent n))))
-
-      ('c-tag-handle
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'c-named-tag-handle)
-                    (yaml--parse-from-grammar 'c-secondary-tag-handle)
-                    (yaml--parse-from-grammar 'c-primary-tag-handle))))
-
-      ('ns-plain-one-line
-       (let ((c (nth 0 args)))
-         (setq res
-           (yaml--all (yaml--parse-from-grammar 'ns-plain-first c)
-                      (yaml--parse-from-grammar 'nb-ns-plain-in-line c)))))
-
-      ('nb-json
-       (setq res
-         (yaml--any (yaml--chr ?\x09)
-                    (yaml--chr-range ?\x20 ?\x10FFFF))))
-
-      ('s-ns-plain-next-line
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all (yaml--parse-from-grammar 's-flow-folded n)
-                      (yaml--parse-from-grammar 'ns-plain-char c)
-                      (yaml--parse-from-grammar 'nb-ns-plain-in-line c)))))
-
-      ('c-reserved
-       (setq res
-         (yaml--any (yaml--chr ?\@) (yaml--chr ?\`))))
-
-      ('b-l-trimmed
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'b-non-content)
-            (yaml--rep 1 nil
-              (lambda () (yaml--parse-from-grammar 'l-empty n c)))))))
-
-      ('l-document-prefix
-       (setq res
-         (yaml--all
-          (yaml--rep 0 1
-            (lambda () (yaml--parse-from-grammar 'c-byte-order-mark)))
-          (yaml--rep2 0 nil
-            (lambda () (yaml--parse-from-grammar 'l-comment))))))
-
-      ('c-byte-order-mark
-       (setq res (yaml--chr ?\xFEFF)))
-
-      ('c-anchor
-       (setq res (yaml--chr ?\&)))
-
-      ('s-double-escaped
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep2 0 nil
-              (lambda () (yaml--parse-from-grammar 's-white)))
-            (yaml--chr ?\\)
-            (yaml--parse-from-grammar 'b-non-content)
-            (yaml--rep2 0 nil
-              (lambda () (yaml--parse-from-grammar 'l-empty n "flow-in")))
-            (yaml--parse-from-grammar 's-flow-line-prefix n)))))
-
-      ('ns-esc-32-bit
-       (setq res
-         (yaml--all
-          (yaml--chr ?U)
-          (yaml--rep 8 8 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit))))))
-
-
-      ('b-non-content
-       (setq res (yaml--parse-from-grammar 'b-break)))
-
-      ('ns-tag-char
-       (setq res
-         (yaml--but (lambda () (yaml--parse-from-grammar 'ns-uri-char))
-                    (lambda () (yaml--chr ?\!))
-                    (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
-
-      ('b-carriage-return
-       (setq res (yaml--chr ?\x0D)))
-
-      ('s-double-next-line
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 's-double-break n)
-            (yaml--rep 0 1
-              (lambda ()
+                        (yaml--chr ?\@)
+                        (yaml--chr ?\&)
+                        (yaml--chr ?\=)
+                        (yaml--chr ?\+)
+                        (yaml--chr ?\$)
+                        (yaml--chr ?\,)
+                        (yaml--chr ?\_)
+                        (yaml--chr ?\.)
+                        (yaml--chr ?\!)
+                        (yaml--chr ?\~)
+                        (yaml--chr ?\*)
+                        (yaml--chr ?\')
+                        (yaml--chr ?\()
+                        (yaml--chr ?\))
+                        (yaml--chr ?\[)
+                        (yaml--chr ?\])))
+
+            ('ns-esc-16-bit
+             (yaml--all (yaml--chr ?u)
+                        (yaml--rep 4 4
+                                   (lambda () (yaml--parse-from-grammar 
'ns-hex-digit)))))
+
+            ('l-nb-spaced-lines
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 's-nb-spaced-text n)
+                (yaml--rep2 0 nil
+                            (lambda () (yaml--all
+                                   (yaml--parse-from-grammar 'b-l-spaced n)
+                                   (yaml--parse-from-grammar 's-nb-spaced-text 
n)))))))
+
+            ('ns-plain
+             (let ((n (nth 0 args))
+                   (c (nth 1 args)))
+               (pcase c
+                 ("block-key" (yaml--parse-from-grammar 'ns-plain-one-line c))
+                 ("flow-in" (yaml--parse-from-grammar 'ns-plain-multi-line n 
c))
+                 ("flow-key" (yaml--parse-from-grammar 'ns-plain-one-line c))
+                 ("flow-out" (yaml--parse-from-grammar 'ns-plain-multi-line n 
c)))))
+
+            ('c-printable
+             (yaml--any (yaml--chr ?\x09)
+                        (yaml--chr ?\x0A)
+                        (yaml--chr ?\x0D)
+                        (yaml--chr-range ?\x20 ?\x7E)
+                        (yaml--chr ?\x85)
+                        (yaml--chr-range ?\xA0 ?\xD7FF)
+                        (yaml--chr-range ?\xE000 ?\xFFFD)
+                        (yaml--chr-range ?\x010000 ?\x10FFFF)))
+
+            ('c-mapping-value
+             (yaml--chr ?\:))
+
+            ('l-nb-literal-text
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--rep2 0 nil
+                            (lambda () (yaml--parse-from-grammar 'l-empty n 
"block-in")))
+                (yaml--parse-from-grammar 's-indent n)
+                (yaml--rep 1 nil
+                           (lambda () (yaml--parse-from-grammar 'nb-char))))))
+
+            ('ns-plain-char
+             (let ((c (nth 0 args)))
+               (yaml--any
+                (yaml--but
+                 (lambda () (yaml--parse-from-grammar 'ns-plain-safe c))
+                 (lambda () (yaml--chr ?\:)) (lambda () (yaml--chr ?\#)))
                 (yaml--all
-                 (yaml--parse-from-grammar 'ns-double-char)
-                 (yaml--parse-from-grammar 'nb-ns-double-in-line)
-                 (yaml--any
-                  (yaml--parse-from-grammar 's-double-next-line n)
-                  (yaml--rep2 0 nil
-                    (lambda () (yaml--parse-from-grammar 's-white)))))))))))
-
-      ('ns-esc-non-breaking-space
-       (setq res (yaml--chr ?\_)))
-
-      ('l-nb-diff-lines
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'l-nb-same-lines n)
-            (yaml--rep2 0 nil
-              (lambda ()
-                (yaml--all (yaml--parse-from-grammar 'b-as-line-feed)
-                           (yaml--parse-from-grammar 'l-nb-same-lines n))))))))
-
-      ('s-flow-folded
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 's-separate-in-line)))
-            (yaml--parse-from-grammar 'b-l-folded n "flow-in")
-            (yaml--parse-from-grammar 's-flow-line-prefix n)))))
-
-      ('ns-flow-map-explicit-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any
-            (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n c)
-            (yaml--all
-             (yaml--parse-from-grammar 'e-node)
-             (yaml--parse-from-grammar 'e-node))))))
-
-      ('ns-l-block-map-implicit-entry
-       (setq res
-         (yaml--all
-          (yaml--any (yaml--parse-from-grammar 'ns-s-block-map-implicit-key)
-                     (yaml--parse-from-grammar 'e-node))
-          (yaml--parse-from-grammar 'c-l-block-map-implicit-value (nth 0 
args)))))
-
-      ('l-nb-folded-lines
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 's-nb-folded-text n)
-            (yaml--rep2 0 nil
-              (lambda ()
-                (yaml--all (yaml--parse-from-grammar 'b-l-folded n "block-in")
-                           (yaml--parse-from-grammar 's-nb-folded-text 
n))))))))
-
-      ('c-l-block-map-explicit-key
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--chr ?\?)
-            (yaml--parse-from-grammar 's-l+block-indented n "block-out")))))
-
-      ('s-separate
-       (let ((n (nth 0 args))
-             (c (nth 1 args)))
-         (setq res
-           (pcase c
-             ("block-in" (yaml--parse-from-grammar 's-separate-lines n))
-             ("block-key" (yaml--parse-from-grammar 's-separate-in-line))
-             ("block-out" (yaml--parse-from-grammar 's-separate-lines n))
-             ("flow-in" (yaml--parse-from-grammar 's-separate-lines n))
-             ("flow-key" (yaml--parse-from-grammar 's-separate-in-line))
-             ("flow-out" (yaml--parse-from-grammar 's-separate-lines n))))))
-
-      ('ns-flow-pair-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any
-            (yaml--parse-from-grammar 'ns-flow-pair-yaml-key-entry n c)
-            (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n c)
-            (yaml--parse-from-grammar 'c-ns-flow-pair-json-key-entry n c)))))
-
-      ('c-flow-indicator
-       (setq res
-         (yaml--any (yaml--chr ?\,)
-                    (yaml--chr ?\[)
-                    (yaml--chr ?\])
-                    (yaml--chr ?\{)
-                    (yaml--chr ?\}))))
-
-      ('ns-flow-pair-yaml-key-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'ns-s-implicit-yaml-key "flow-key")
-            (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c)))))
-
-      ('e-scalar
-       (setq res (yaml--empty)))
-
-      ('s-indent-lt
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep2 0 nil
-              (lambda () (yaml--parse-from-grammar 's-space)))
-            (< (length (yaml--match)) n)))))
-
-      ('nb-single-one-line
-       (setq res
-         (yaml--rep2 0 nil
-           (lambda () (yaml--parse-from-grammar 'nb-single-char)))))
-
-      ('c-collect-entry
-       (setq res (yaml--chr ?\,)))
-
-      ('ns-l-compact-sequence
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'c-l-block-seq-entry n)
-            (yaml--rep2 0 nil
-              (lambda ()
+                 (yaml--chk "<=" (yaml--parse-from-grammar 'ns-char))
+                 (yaml--chr ?\#))
                 (yaml--all
-                 (yaml--parse-from-grammar 's-indent n)
-                 (yaml--parse-from-grammar 'c-l-block-seq-entry n))))))))
-
-      ('c-comment
-       (setq res (yaml--chr ?\#)))
-
-      ('s-line-prefix
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (pcase c
-             ("block-in" (yaml--parse-from-grammar 's-block-line-prefix n))
-             ("block-out" (yaml--parse-from-grammar 's-block-line-prefix n))
-             ("flow-in" (yaml--parse-from-grammar 's-flow-line-prefix n))
-             ("flow-out" (yaml--parse-from-grammar 's-flow-line-prefix n))))))
-
-      ('s-tab
-       (setq res (yaml--chr ?\x09)))
-
-      ('c-directive
-       (setq res (yaml--chr ?\%)))
-
-      ('ns-flow-pair
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any
-            (yaml--all (yaml--chr ?\?)
-                       (yaml--parse-from-grammar 's-separate n c)
-                       (yaml--parse-from-grammar 'ns-flow-map-explicit-entry n 
c))
-            (yaml--parse-from-grammar 'ns-flow-pair-entry n c)))))
-
-      ('s-l+block-indented
-       (setq res
-         (let ((m (yaml--auto-detect-indent (nth 0 args))))
-           (yaml--any
-            (yaml--all
-             (yaml--parse-from-grammar 's-indent m)
-             (yaml--any
-              (yaml--parse-from-grammar 'ns-l-compact-sequence
-                                        (+ (nth 0 args) (+ 1 m)))
-              (yaml--parse-from-grammar 'ns-l-compact-mapping
-                                        (+ (nth 0 args) (+ 1 m)))))
-            (yaml--parse-from-grammar 's-l+block-node (nth 0 args) (nth 1 
args))
-            (yaml--all (yaml--parse-from-grammar 'e-node)
-                       (yaml--parse-from-grammar 's-l-comments))))))
-
-      ('c-single-quote
-       (setq res (yaml--chr ?\')))
-
-      ('s-flow-line-prefix
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 's-indent n)
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 's-separate-in-line)))))))
-
-      ('nb-double-char
-       (setq res
-         (yaml--any
-          (yaml--parse-from-grammar 'c-ns-esc-char)
-          (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json))
-                     (lambda () (yaml--chr ?\\)) (lambda () (yaml--chr 
?\"))))))
-
-      ('l-comment
-       (setq res
-         (yaml--all
-          (yaml--parse-from-grammar 's-separate-in-line)
-          (yaml--rep 0 1
-            (lambda () (yaml--parse-from-grammar 'c-nb-comment-text)))
-          (yaml--parse-from-grammar 'b-comment))))
-
-      ('ns-hex-digit
-       (setq res
-         (yaml--any
-          (yaml--parse-from-grammar 'ns-dec-digit)
-          (yaml--chr-range ?\x41 ?\x46)
-          (yaml--chr-range ?\x61 ?\x66))))
-
-      ('s-l+flow-in-block
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 's-separate (+ n 1) "flow-out")
-            (yaml--parse-from-grammar 'ns-flow-node (+ n 1) "flow-out")
-            (yaml--parse-from-grammar 's-l-comments)))))
-
-      ('c-flow-json-node
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--rep 0 1
-              (lambda ()
+                 (yaml--chr ?\:)
+                 (yaml--chk "=" (yaml--parse-from-grammar 'ns-plain-safe 
c))))))
+
+            ('ns-anchor-char
+             (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
+                        (lambda () (yaml--parse-from-grammar 
'c-flow-indicator))))
+
+            ('s-l+block-scalar
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all (yaml--parse-from-grammar 's-separate (+ n 1) c)
+                          (yaml--rep 0 1
+                                     (lambda ()
+                                       (yaml--all
+                                        (yaml--parse-from-grammar 
'c-ns-properties (+ n 1) c)
+                                        (yaml--parse-from-grammar 's-separate 
(+ n 1) c))))
+                          (yaml--any (yaml--parse-from-grammar 'c-l+literal n)
+                                     (yaml--parse-from-grammar 'c-l+folded 
n)))))
+
+            ('ns-plain-safe-in
+             (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
+                        (lambda () (yaml--parse-from-grammar 
'c-flow-indicator))))
+
+            ('nb-single-text
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (pcase c
+                 ("block-key" (yaml--parse-from-grammar 'nb-single-one-line))
+                 ("flow-in" (yaml--parse-from-grammar 'nb-single-multi-line n))
+                 ("flow-key" (yaml--parse-from-grammar 'nb-single-one-line))
+                 ("flow-out" (yaml--parse-from-grammar 'nb-single-multi-line 
n)))))
+
+            ('s-indent-le
+             (let ((n (nth 0 args)))
+               (yaml--all (yaml--rep2 0 nil
+                                      (lambda () (yaml--parse-from-grammar 
's-space)))
+                          (<= (length (yaml--match)) n))))
+
+            ('ns-esc-carriage-return
+             (yaml--chr ?r))
+
+            ('l-chomped-empty
+             (let ((n (nth 0 args))
+                   (tt (nth 1 args)))
+               (pcase tt
+                 ("clip" (yaml--parse-from-grammar 'l-strip-empty n))
+                 ("keep" (yaml--parse-from-grammar 'l-keep-empty n))
+                 ("strip" (yaml--parse-from-grammar 'l-strip-empty n)))))
+
+            ('c-s-implicit-json-key
+             (let ((c (nth 0 args)))
+               (yaml--all
+                (yaml--max 1024)
+                (yaml--parse-from-grammar 'c-flow-json-node nil c)
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 
's-separate-in-line))))))
+
+            ('b-as-space
+             (yaml--parse-from-grammar 'b-break))
+
+            ('ns-s-flow-seq-entries
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'ns-flow-seq-entry n c)
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 's-separate n 
c)))
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--all
+                              (yaml--chr ?\,)
+                              (yaml--rep 0 1
+                                         (lambda () (yaml--parse-from-grammar 
's-separate n c)))
+                              (yaml--rep 0 1
+                                         (lambda ()
+                                           (yaml--parse-from-grammar 
'ns-s-flow-seq-entries
+                                                                     n
+                                                                     c)))))))))
+
+            ('l-block-map-explicit-value
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 's-indent n)
+                (yaml--chr ?\:)
+                (yaml--parse-from-grammar 's-l+block-indented n "block-out"))))
+
+            ('c-ns-flow-map-json-key-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'c-flow-json-node n c)
+                (yaml--any
+                 (yaml--all
+                  (yaml--rep 0 1
+                             (lambda () (yaml--parse-from-grammar 's-separate 
n c)))
+                  (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n c))
+                 (yaml--parse-from-grammar 'e-node)))))
+
+            ('c-sequence-entry
+             (yaml--chr ?\-))
+
+            ('l-bare-document
+             (yaml--all (yaml--exclude "c-forbidden")
+                        (yaml--parse-from-grammar 's-l+block-node -1 
"block-in")))
+
+            ;; TODO: don't use the symbol t as a variable.
+            ('b-chomped-last
+             (let ((tt (nth 0 args)))
+               (pcase tt
+                 ("clip"
+                  ;; TODO: Fix this
+                  (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
+                             (yaml--end-of-stream)))
+                 ("keep"
+                  (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
+                             (yaml--end-of-stream)))
+                 ("strip"
+                  (yaml--any (yaml--parse-from-grammar 'b-non-content)
+                             (yaml--end-of-stream))))))
+
+            ('l-trail-comments
+             (let ((n (nth 0 args)))
+               (yaml--all (yaml--parse-from-grammar 's-indent-lt n)
+                          (yaml--parse-from-grammar 'c-nb-comment-text)
+                          (yaml--parse-from-grammar 'b-comment)
+                          (yaml--rep2 0 nil
+                                      (lambda () (yaml--parse-from-grammar 
'l-comment))))))
+
+            ('ns-flow-map-yaml-key-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'ns-flow-yaml-node n c)
+                (yaml--any
+                 (yaml--all
+                  (yaml--rep 0 1
+                             (lambda () (yaml--parse-from-grammar 's-separate 
n c)))
+                  (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c))
+                 (yaml--parse-from-grammar 'e-node)))))
+
+            ('s-indent
+             (let ((n (nth 0 args)))
+               (yaml--rep n n (lambda () (yaml--parse-from-grammar 
's-space)))))
+
+            ('ns-esc-line-separator
+             (yaml--chr ?L))
+
+            ('ns-flow-yaml-node
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any
+                (yaml--parse-from-grammar 'c-ns-alias-node)
+                (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
                 (yaml--all
                  (yaml--parse-from-grammar 'c-ns-properties n c)
-                 (yaml--parse-from-grammar 's-separate n c))))
-            (yaml--parse-from-grammar 'c-flow-json-content n c)))))
-
-      ('c-b-block-header
-       (let ((m (nth 0 args))
-             (tt (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--any
-             (and (not (string-match "\\`[-+][0-9]"
-                                     (yaml--slice yaml--parsing-position)))
-                  ;; hack to not match this case if there is a number.
+                 (yaml--any
                   (yaml--all
-                   (yaml--parse-from-grammar 'c-indentation-indicator m)
-                   (yaml--parse-from-grammar 'c-chomping-indicator tt)))
+                   (yaml--parse-from-grammar 's-separate n c)
+                   (yaml--parse-from-grammar 'ns-flow-yaml-content n c))
+                  (yaml--parse-from-grammar 'e-scalar))))))
+
+            ('ns-yaml-version
+             (yaml--all (yaml--rep 1 nil
+                                   (lambda () (yaml--parse-from-grammar 
'ns-dec-digit)))
+                        (yaml--chr ?\.)
+                        (yaml--rep 1 nil
+                                   (lambda () (yaml--parse-from-grammar 
'ns-dec-digit)))))
+
+            ('c-folded
+             (yaml--chr ?\>))
+
+            ('c-directives-end
+             (yaml--all (yaml--chr ?\-) (yaml--chr ?\-) (yaml--chr ?\-)))
+
+            ('s-double-break
+             (let ((n (nth 0 args)))
+               (yaml--any (yaml--parse-from-grammar 's-double-escaped n)
+                          (yaml--parse-from-grammar 's-flow-folded n))))
+
+            ('s-nb-spaced-text
+             (let ((n (nth 0 args)))
+               (yaml--all (yaml--parse-from-grammar 's-indent n)
+                          (yaml--parse-from-grammar 's-white)
+                          (yaml--rep2 0 nil
+                                      (lambda () (yaml--parse-from-grammar 
'nb-char))))))
+
+            ('l-folded-content
+             (let ((n (nth 0 args))
+                   (tt (nth 1 args)))
+               (yaml--all
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--all (yaml--parse-from-grammar 
'l-nb-diff-lines n)
+                                        (yaml--parse-from-grammar 
'b-chomped-last tt))))
+                (yaml--parse-from-grammar 'l-chomped-empty n tt))))
+
+            ('nb-ns-plain-in-line
+             (let ((c (nth 0 args)))
+               (yaml--rep2 0 nil
+                           (lambda () (yaml--all
+                                  (yaml--rep2 0 nil
+                                              (lambda () 
(yaml--parse-from-grammar 's-white)))
+                                  (yaml--parse-from-grammar 'ns-plain-char 
c))))))
+
+            ('nb-single-multi-line
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'nb-ns-single-in-line)
+                (yaml--any
+                 (yaml--parse-from-grammar 's-single-next-line n)
+                 (yaml--rep2 0 nil
+                             (lambda () (yaml--parse-from-grammar 
's-white)))))))
+
+            ('l-document-suffix
+             (yaml--all (yaml--parse-from-grammar 'c-document-end)
+                        (yaml--parse-from-grammar 's-l-comments)))
+
+            ('c-sequence-start
+             (yaml--chr ?\[))
+
+            ('ns-l-block-map-entry
+             (yaml--any
+              (yaml--parse-from-grammar 'c-l-block-map-explicit-entry
+                                        (nth 0 args))
+              (yaml--parse-from-grammar 'ns-l-block-map-implicit-entry
+                                        (nth 0 args))))
+
+            ('ns-l-compact-mapping
              (yaml--all
-              (yaml--parse-from-grammar 'c-chomping-indicator tt)
-              (yaml--parse-from-grammar 'c-indentation-indicator m)))
-            (yaml--parse-from-grammar 's-b-comment)))))
-
-      ('ns-esc-8-bit
-       (setq res
-         (yaml--all (yaml--chr ?x)
-                    (yaml--rep 2 2
-                      (lambda () (yaml--parse-from-grammar 'ns-hex-digit))))))
-
-      ('ns-anchor-name
-       (setq res
-         (yaml--rep 1 nil
-           (lambda () (yaml--parse-from-grammar 'ns-anchor-char)))))
-
-      ('ns-esc-slash
-       (setq res (yaml--chr ?\/)))
-
-      ('s-nb-folded-text
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all (yaml--parse-from-grammar 's-indent n)
-                      (yaml--parse-from-grammar 'ns-char)
-                      (yaml--rep2 0 nil
-                        (lambda () (yaml--parse-from-grammar 'nb-char)))))))
-
-      ('ns-word-char
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'ns-dec-digit)
-                    (yaml--parse-from-grammar 'ns-ascii-letter)
-                    (yaml--chr ?\-))))
-
-      ('ns-esc-form-feed
-       (setq res (yaml--chr ?f)))
-
-      ('ns-s-block-map-implicit-key
-       (setq res
-         (yaml--any
-          (yaml--parse-from-grammar 'c-s-implicit-json-key "block-key")
-          (yaml--parse-from-grammar 'ns-s-implicit-yaml-key "block-key"))))
-
-      ('ns-esc-null (setq res (yaml--chr ?\0)))
-
-      ('c-ns-tag-property
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'c-verbatim-tag)
-                    (yaml--parse-from-grammar 'c-ns-shorthand-tag)
-                    (yaml--parse-from-grammar 'c-non-specific-tag))))
-
-      ('c-ns-local-tag-prefix
-       (setq res
-         (yaml--all
-          (yaml--chr ?\!)
-          (yaml--rep2 0 nil
-            (lambda () (yaml--parse-from-grammar 'ns-uri-char))))))
-
-      ('ns-tag-directive
-       (setq res
-         (yaml--all (yaml--chr ?T) (yaml--chr ?A) (yaml--chr ?G)
-                    (yaml--parse-from-grammar 's-separate-in-line)
-                    (yaml--parse-from-grammar 'c-tag-handle)
-                    (yaml--parse-from-grammar 's-separate-in-line)
-                    (yaml--parse-from-grammar 'ns-tag-prefix))))
-
-      ('c-flow-mapping
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--chr ?\{)
-            (yaml--rep 0 1
-              (lambda () (yaml--parse-from-grammar 's-separate n c)))
-            (yaml--rep 0 1
-              (lambda ()
-                (yaml--parse-from-grammar 'ns-s-flow-map-entries
-                                          n
-                                          (yaml--parse-from-grammar 'in-flow 
c))))
-            (yaml--chr ?\})))))
-
-      ('ns-double-char
-       (setq res
-         (yaml--but (lambda () (yaml--parse-from-grammar 'nb-double-char))
-                    (lambda () (yaml--parse-from-grammar 's-white)))))
-
-      ('ns-ascii-letter
-       (setq res
-         (yaml--any (yaml--chr-range ?\x41 ?\x5A)
-                    (yaml--chr-range ?\x61 ?\x7A))))
-
-      ('b-break
-       (setq res
-         (yaml--any (yaml--all (yaml--parse-from-grammar 'b-carriage-return)
-                               (yaml--parse-from-grammar 'b-line-feed))
-                    (yaml--parse-from-grammar 'b-carriage-return)
-                    (yaml--parse-from-grammar 'b-line-feed))))
-
-      ('nb-ns-double-in-line
-       (setq res
-         (yaml--rep2 0 nil
-           (lambda ()
+              (yaml--parse-from-grammar 'ns-l-block-map-entry (nth 0 args))
+              (yaml--rep2 0 nil
+                          (lambda ()
+                            (yaml--all
+                             (yaml--parse-from-grammar 's-indent (nth 0 args))
+                             (yaml--parse-from-grammar 'ns-l-block-map-entry 
(nth 0 args)))))))
+
+            ('ns-esc-space
+             (yaml--chr ?\x20))
+            ('ns-esc-vertical-tab
+             (yaml--chr ?v))
+
+            ('ns-s-implicit-yaml-key
+             (let ((c (nth 0 args)))
+               (yaml--all
+                (yaml--max 1024)
+                (yaml--parse-from-grammar 'ns-flow-yaml-node nil c)
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 
's-separate-in-line))))))
+
+            ('b-l-folded
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any (yaml--parse-from-grammar 'b-l-trimmed n c)
+                          (yaml--parse-from-grammar 'b-as-space))))
+
+            ('s-l+block-collection
              (yaml--all
+              (yaml--rep 0 1
+                         (lambda ()
+                           (yaml--all
+                            (yaml--parse-from-grammar
+                             's-separate
+                             (+ (nth 0 args) 1)
+                             (nth 1 args))
+                            (yaml--parse-from-grammar
+                             'c-ns-properties
+                             (+ (nth 0 args) 1)
+                             (nth 1 args)))))
+              (yaml--parse-from-grammar 's-l-comments)
+              (yaml--any
+               (yaml--parse-from-grammar
+                'l+block-sequence
+                (yaml--parse-from-grammar 'seq-spaces (nth 0 args) (nth 1 
args)))
+               (yaml--parse-from-grammar 'l+block-mapping (nth 0 args)))))
+
+            ('c-quoted-quote
+             (yaml--all (yaml--chr ?\') (yaml--chr ?\')))
+
+            ('l+block-sequence
+             ;; NOTE: deviated from the spec example here by making new-m at 
least 1.
+             ;; The wording and examples lead me to believe this is how it's 
done.
+             ;; ie /* For some fixed auto-detected m > 0 */
+             (let ((new-m (max (yaml--auto-detect-indent (nth 0 args)) 1)))
+               (yaml--all
+                (yaml--set m new-m)
+                (yaml--rep 1 nil
+                           (lambda ()
+                             (yaml--all
+                              (yaml--parse-from-grammar
+                               's-indent
+                               (+ (nth 0 args) new-m))
+                              (yaml--parse-from-grammar
+                               'c-l-block-seq-entry
+                               (+ (nth 0 args) new-m))))))))
+
+            ('c-double-quote
+             (yaml--chr ?\"))
+
+            ('ns-esc-backspace
+             (yaml--chr ?b))
+
+            ('c-flow-json-content
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any (yaml--parse-from-grammar 'c-flow-sequence n c)
+                          (yaml--parse-from-grammar 'c-flow-mapping n c)
+                          (yaml--parse-from-grammar 'c-single-quoted n c)
+                          (yaml--parse-from-grammar 'c-double-quoted n c))))
+
+            ('c-mapping-end
+             (yaml--chr ?\}))
+
+            ('nb-single-char
+             (yaml--any (yaml--parse-from-grammar 'c-quoted-quote)
+                        (yaml--but (lambda () (yaml--parse-from-grammar 
'nb-json))
+                                   (lambda () (yaml--chr ?\')))))
+
+            ('ns-flow-node
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any
+                (yaml--parse-from-grammar 'c-ns-alias-node)
+                (yaml--parse-from-grammar 'ns-flow-content n c)
+                (yaml--all
+                 (yaml--parse-from-grammar 'c-ns-properties n c)
+                 (yaml--any
+                  (yaml--all (yaml--parse-from-grammar 's-separate n c)
+                             (yaml--parse-from-grammar 'ns-flow-content n c))
+                  (yaml--parse-from-grammar 'e-scalar))))))
+
+            ('c-non-specific-tag
+             (yaml--chr ?\!))
+
+            ('l-directive-document
+             (yaml--all (yaml--rep 1 nil
+                                   (lambda () (yaml--parse-from-grammar 
'l-directive)))
+                        (yaml--parse-from-grammar 'l-explicit-document)))
+
+            ('c-l-block-map-explicit-entry
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'c-l-block-map-explicit-key n)
+                (yaml--any (yaml--parse-from-grammar 
'l-block-map-explicit-value n)
+                           (yaml--parse-from-grammar 'e-node)))))
+
+            ('e-node
+             (yaml--parse-from-grammar 'e-scalar))
+
+            ('seq-spaces
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (pcase c
+                 ("block-in" n)
+                 ("block-out" (yaml--sub n 1)))))
+
+            ('l-yaml-stream
+             (yaml--all
+              (yaml--rep2 0 nil
+                          (lambda () (yaml--parse-from-grammar 
'l-document-prefix)))
+              (yaml--rep 0 1
+                         (lambda () (yaml--parse-from-grammar 
'l-any-document)))
               (yaml--rep2 0 nil
-                (lambda () (yaml--parse-from-grammar 's-white)))
-              (yaml--parse-from-grammar 'ns-double-char))))))
-
-      ('s-l+block-node
-       (setq res
-         (yaml--any
-          (yaml--parse-from-grammar 's-l+block-in-block (nth 0 args) (nth 1 
args))
-          (yaml--parse-from-grammar 's-l+flow-in-block (nth 0 args)))))
-
-      ('ns-esc-bell
-       (setq res (yaml--chr ?a)))
-
-      ('c-named-tag-handle
-       (setq res
-         (yaml--all
-          (yaml--chr ?\!)
-          (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-word-char)))
-          (yaml--chr ?\!))))
-
-      ('s-separate-lines
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--any (yaml--all (yaml--parse-from-grammar 's-l-comments)
-                                 (yaml--parse-from-grammar 's-flow-line-prefix 
n))
-                      (yaml--parse-from-grammar 's-separate-in-line)))))
-
-      ('l-directive
-       (setq res
-         (yaml--all (yaml--chr ?\%)
-                    (yaml--any (yaml--parse-from-grammar 'ns-yaml-directive)
-                               (yaml--parse-from-grammar 'ns-tag-directive)
-                               (yaml--parse-from-grammar 
'ns-reserved-directive))
-                    (yaml--parse-from-grammar 's-l-comments))))
-
-      ('ns-esc-escape
-       (setq res (yaml--chr ?e)))
-
-      ('b-nb-literal-next
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all (yaml--parse-from-grammar 'b-as-line-feed)
-                      (yaml--parse-from-grammar 'l-nb-literal-text n)))))
-
-      ('ns-s-flow-map-entries
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'ns-flow-map-entry n c)
-            (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 's-separate n 
c)))
-            (yaml--rep 0 1
-              (lambda ()
+                          (lambda ()
+                            (yaml--any
+                             (yaml--all
+                              (yaml--rep 1 nil
+                                         (lambda () (yaml--parse-from-grammar 
'l-document-suffix)))
+                              (yaml--rep2 0 nil
+                                          (lambda () (yaml--parse-from-grammar 
'l-document-prefix)))
+                              (yaml--rep 0 1
+                                         (lambda () (yaml--parse-from-grammar 
'l-any-document))))
+                             (yaml--all
+                              (yaml--rep2 0 nil
+                                          (lambda () (yaml--parse-from-grammar 
'l-document-prefix)))
+                              (yaml--rep 0 1
+                                         (lambda ()
+                                           (yaml--parse-from-grammar 
'l-explicit-document)))))))))
+
+            ('nb-double-one-line
+             (yaml--rep2 0 nil
+                         (lambda () (yaml--parse-from-grammar 
'nb-double-char))))
+
+            ('s-l-comments
+             (yaml--all (yaml--any
+                         (yaml--parse-from-grammar 's-b-comment)
+                         (yaml--start-of-line))
+                        (yaml--rep2 0 nil
+                                    (lambda () (yaml--parse-from-grammar 
'l-comment)))))
+
+            ('nb-char
+             (yaml--but (lambda () (yaml--parse-from-grammar 'c-printable))
+                        (lambda () (yaml--parse-from-grammar 'b-char))
+                        (lambda () (yaml--parse-from-grammar 
'c-byte-order-mark))))
+
+            ('ns-plain-first
+             (let ((c (nth 0 args)))
+               (yaml--any
+                (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
+                           (lambda () (yaml--parse-from-grammar 'c-indicator)))
+                (yaml--all
+                 (yaml--any (yaml--chr ?\?)
+                            (yaml--chr ?\:)
+                            (yaml--chr ?\-))
+                 (yaml--chk "=" (yaml--parse-from-grammar 'ns-plain-safe 
c))))))
+
+            ('c-ns-esc-char
+             (yaml--all
+              (yaml--chr ?\\)
+              (yaml--any (yaml--parse-from-grammar 'ns-esc-null)
+                         (yaml--parse-from-grammar 'ns-esc-bell)
+                         (yaml--parse-from-grammar 'ns-esc-backspace)
+                         (yaml--parse-from-grammar 'ns-esc-horizontal-tab)
+                         (yaml--parse-from-grammar 'ns-esc-line-feed)
+                         (yaml--parse-from-grammar 'ns-esc-vertical-tab)
+                         (yaml--parse-from-grammar 'ns-esc-form-feed)
+                         (yaml--parse-from-grammar 'ns-esc-carriage-return)
+                         (yaml--parse-from-grammar 'ns-esc-escape)
+                         (yaml--parse-from-grammar 'ns-esc-space)
+                         (yaml--parse-from-grammar 'ns-esc-double-quote)
+                         (yaml--parse-from-grammar 'ns-esc-slash)
+                         (yaml--parse-from-grammar 'ns-esc-backslash)
+                         (yaml--parse-from-grammar 'ns-esc-next-line)
+                         (yaml--parse-from-grammar 'ns-esc-non-breaking-space)
+                         (yaml--parse-from-grammar 'ns-esc-line-separator)
+                         (yaml--parse-from-grammar 'ns-esc-paragraph-separator)
+                         (yaml--parse-from-grammar 'ns-esc-8-bit)
+                         (yaml--parse-from-grammar 'ns-esc-16-bit)
+                         (yaml--parse-from-grammar 'ns-esc-32-bit))))
+
+            ('ns-flow-map-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any
+                (yaml--all (yaml--chr ?\?)
+                           (yaml--parse-from-grammar 's-separate n c)
+                           (yaml--parse-from-grammar 
'ns-flow-map-explicit-entry n c))
+                (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n c))))
+
+            ('l-explicit-document
+             (yaml--all
+              (yaml--parse-from-grammar 'c-directives-end)
+              (yaml--any (yaml--parse-from-grammar 'l-bare-document)
+                         (yaml--all (yaml--parse-from-grammar 'e-node)
+                                    (yaml--parse-from-grammar 
's-l-comments)))))
+
+            ('s-white
+             (yaml--any (yaml--parse-from-grammar 's-space)
+                        (yaml--parse-from-grammar 's-tab)))
+
+            ('l-keep-empty
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--rep2 0 nil
+                            (lambda () (yaml--parse-from-grammar 'l-empty n 
"block-in")))
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 
'l-trail-comments n))))))
+
+            ('ns-tag-prefix
+             (yaml--any (yaml--parse-from-grammar 'c-ns-local-tag-prefix)
+                        (yaml--parse-from-grammar 'ns-global-tag-prefix)))
+
+            ('c-l+folded
+             (let ((n (nth 0 args)))
+               (setq yaml-n n)
+               (yaml--all
+                (yaml--chr ?\>)
+                (yaml--parse-from-grammar 'c-b-block-header
+                                          n
+                                          (yaml--state-curr-t))
+                (yaml--parse-from-grammar 'l-folded-content
+                                          (max (+ n (yaml--state-curr-m)) 1)
+                                          (yaml--state-curr-t)))))
+
+            ('ns-directive-name
+             (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char))))
+
+            ('b-char
+             (yaml--any (yaml--parse-from-grammar 'b-line-feed)
+                        (yaml--parse-from-grammar 'b-carriage-return)))
+
+            ('ns-plain-multi-line
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'ns-plain-one-line c)
+                (yaml--rep2 0 nil
+                            (lambda ()
+                              (yaml--parse-from-grammar 's-ns-plain-next-line 
n c))))))
+
+            ('ns-char
+             (yaml--but (lambda () (yaml--parse-from-grammar 'nb-char))
+                        (lambda () (yaml--parse-from-grammar 's-white))))
+
+            ('s-space
+             (yaml--chr ?\x20))
+
+            ('c-l-block-seq-entry
+             (yaml--all (yaml--chr ?\-)
+                        (yaml--chk "!" (yaml--parse-from-grammar 'ns-char))
+                        (yaml--parse-from-grammar 's-l+block-indented
+                                                  (nth 0 args)
+                                                  "block-in")))
+
+            ('c-ns-properties
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any
                 (yaml--all
-                 (yaml--chr ?\,)
+                 (yaml--parse-from-grammar 'c-ns-tag-property)
                  (yaml--rep 0 1
-                   (lambda () (yaml--parse-from-grammar 's-separate n c)))
+                            (lambda ()
+                              (yaml--all
+                               (yaml--parse-from-grammar 's-separate n c)
+                               (yaml--parse-from-grammar 
'c-ns-anchor-property)))))
+                (yaml--all
+                 (yaml--parse-from-grammar 'c-ns-anchor-property)
                  (yaml--rep 0 1
-                   (lambda ()
-                     (yaml--parse-from-grammar 'ns-s-flow-map-entries
-                                               n
-                                               c))))))))))
-
-      ('c-nb-comment-text
-       (setq res
-         (yaml--all
-          (yaml--chr ?\#)
-          (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'nb-char))))))
-
-      ('ns-dec-digit
-       (setq res
-         (yaml--chr-range ?\x30 ?\x39)))
-
-      ('ns-yaml-directive
-       (setq res
-         (yaml--all (yaml--chr ?Y) (yaml--chr ?A) (yaml--chr ?M) (yaml--chr ?L)
-                    (yaml--parse-from-grammar 's-separate-in-line)
-                    (yaml--parse-from-grammar 'ns-yaml-version))))
-
-      ('c-mapping-key
-       (setq res (yaml--chr ?\?)))
-
-      ('b-as-line-feed
-       (setq res
-         (yaml--parse-from-grammar 'b-break)))
-
-      ('s-l+block-in-block
-       (setq res
-         (yaml--any
-          (yaml--parse-from-grammar 's-l+block-scalar
-                                    (nth 0 args)
-                                    (nth 1 args))
-          (yaml--parse-from-grammar 's-l+block-collection
-                                    (nth 0 args)
-                                    (nth 1 args)))))
-
-      ('ns-esc-paragraph-separator
-       (setq res (yaml--chr ?P)))
-
-      ('c-double-quoted
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all (yaml--chr ?\")
-                      (yaml--parse-from-grammar 'nb-double-text n c)
-                      (yaml--chr ?\")))))
-
-      ('b-line-feed
-       (setq res (yaml--chr ?\x0A)))
-
-      ('ns-esc-horizontal-tab
-       (setq res
-         (yaml--any (yaml--chr ?t) (yaml--chr ?\x09))))
-
-      ('c-ns-flow-map-empty-key-entry
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'e-node)
-            (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c)))))
-
-      ('l-any-document
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'l-directive-document)
-                    (yaml--parse-from-grammar 'l-explicit-document)
-                    (yaml--parse-from-grammar 'l-bare-document))))
-
-      ('c-tag (setq res (yaml--chr ?\!)))
-
-      ('c-escape (setq res (yaml--chr ?\\)))
-
-      ('c-sequence-end (setq res (yaml--chr ?\])))
-
-      ('l+block-mapping
-       (setq res
-         (let ((new-m (yaml--auto-detect-indent (nth 0 args))))
-           (if (= 0 new-m)
-               nil ;; For some fixed auto-detected m > 0 ;; Is this right???
+                            (lambda () (yaml--all
+                                   (yaml--parse-from-grammar 's-separate n c)
+                                   (yaml--parse-from-grammar 
'c-ns-tag-property))))))))
+
+            ('ns-directive-parameter
+             (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char))))
+
+            ('c-chomping-indicator
+             (yaml--any (when (yaml--chr ?\-) (yaml--set t "strip") t)
+                        (when (yaml--chr ?\+) (yaml--set t "keep") t)
+                        (when (yaml--empty) (yaml--set t "clip") t)))
+
+            ('ns-global-tag-prefix
              (yaml--all
-              (yaml--set m new-m)
-              (yaml--rep 1 nil
-                (lambda ()
-                  (yaml--all
-                   (yaml--parse-from-grammar 's-indent
-                                             (+ (nth 0 args) new-m))
-                   (yaml--parse-from-grammar 'ns-l-block-map-entry
-                                             (+ (nth 0 args) new-m))))))))))
-
-      ('c-ns-flow-map-adjacent-value
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--chr ?\:)
-            (yaml--any
+              (yaml--parse-from-grammar 'ns-tag-char)
+              (yaml--rep2 0 nil
+                          (lambda () (yaml--parse-from-grammar 
'ns-uri-char)))))
+
+            ('c-ns-flow-pair-json-key-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'c-s-implicit-json-key "flow-key")
+                (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n c))))
+
+            ('l-literal-content
+             (let ((n (nth 0 args))
+                   (tt (nth 1 args)))
+               (yaml--all
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--all (yaml--parse-from-grammar 
'l-nb-literal-text n)
+                                        (yaml--rep2 0 nil
+                                                    (lambda ()
+                                                      
(yaml--parse-from-grammar 'b-nb-literal-next n)))
+                                        (yaml--parse-from-grammar 
'b-chomped-last tt))))
+                (yaml--parse-from-grammar 'l-chomped-empty n tt))))
+
+            ('c-document-end
+             (yaml--all (yaml--chr ?\.)
+                        (yaml--chr ?\.)
+                        (yaml--chr ?\.)))
+
+            ('nb-double-text
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (pcase c
+                 ("block-key" (yaml--parse-from-grammar 'nb-double-one-line))
+                 ("flow-in" (yaml--parse-from-grammar 'nb-double-multi-line n))
+                 ("flow-key" (yaml--parse-from-grammar 'nb-double-one-line))
+                 ("flow-out" (yaml--parse-from-grammar 'nb-double-multi-line 
n)))))
+
+            ('s-b-comment
+             (yaml--all
+              (yaml--rep 0 1
+                         (lambda ()
+                           (yaml--all
+                            (yaml--parse-from-grammar 's-separate-in-line)
+                            (yaml--rep 0 1
+                                       (lambda () (yaml--parse-from-grammar 
'c-nb-comment-text))))))
+              (yaml--parse-from-grammar 'b-comment)))
+
+            ('s-block-line-prefix
+             (let ((n (nth 0 args)))
+               (yaml--parse-from-grammar 's-indent n)))
+
+            ('c-tag-handle
+             (yaml--any (yaml--parse-from-grammar 'c-named-tag-handle)
+                        (yaml--parse-from-grammar 'c-secondary-tag-handle)
+                        (yaml--parse-from-grammar 'c-primary-tag-handle)))
+
+            ('ns-plain-one-line
+             (let ((c (nth 0 args)))
+               (yaml--all (yaml--parse-from-grammar 'ns-plain-first c)
+                          (yaml--parse-from-grammar 'nb-ns-plain-in-line c))))
+
+            ('nb-json
+             (yaml--any (yaml--chr ?\x09)
+                        (yaml--chr-range ?\x20 ?\x10FFFF)))
+
+            ('s-ns-plain-next-line
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all (yaml--parse-from-grammar 's-flow-folded n)
+                          (yaml--parse-from-grammar 'ns-plain-char c)
+                          (yaml--parse-from-grammar 'nb-ns-plain-in-line c))))
+
+            ('c-reserved
+             (yaml--any (yaml--chr ?\@) (yaml--chr ?\`)))
+
+            ('b-l-trimmed
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'b-non-content)
+                (yaml--rep 1 nil
+                           (lambda () (yaml--parse-from-grammar 'l-empty n 
c))))))
+
+            ('l-document-prefix
              (yaml--all
               (yaml--rep 0 1
-                (lambda () (yaml--parse-from-grammar 's-separate n c)))
-              (yaml--parse-from-grammar 'ns-flow-node n c))
-             (yaml--parse-from-grammar 'e-node))))))
-
-      ('s-single-next-line
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 's-flow-folded n)
-            (yaml--rep 0 1
-              (lambda ()
+                         (lambda () (yaml--parse-from-grammar 
'c-byte-order-mark)))
+              (yaml--rep2 0 nil
+                          (lambda () (yaml--parse-from-grammar 'l-comment)))))
+
+            ('c-byte-order-mark
+             (yaml--chr ?\xFEFF))
+
+            ('c-anchor
+             (yaml--chr ?\&))
+
+            ('s-double-escaped
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--rep2 0 nil
+                            (lambda () (yaml--parse-from-grammar 's-white)))
+                (yaml--chr ?\\)
+                (yaml--parse-from-grammar 'b-non-content)
+                (yaml--rep2 0 nil
+                            (lambda () (yaml--parse-from-grammar 'l-empty n 
"flow-in")))
+                (yaml--parse-from-grammar 's-flow-line-prefix n))))
+
+            ('ns-esc-32-bit
+             (yaml--all
+              (yaml--chr ?U)
+              (yaml--rep 8 8 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit)))))
+
+
+            ('b-non-content
+             (yaml--parse-from-grammar 'b-break))
+
+            ('ns-tag-char
+             (yaml--but (lambda () (yaml--parse-from-grammar 'ns-uri-char))
+                        (lambda () (yaml--chr ?\!))
+                        (lambda () (yaml--parse-from-grammar 
'c-flow-indicator))))
+
+            ('b-carriage-return
+             (yaml--chr ?\x0D))
+
+            ('s-double-next-line
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 's-double-break n)
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--all
+                              (yaml--parse-from-grammar 'ns-double-char)
+                              (yaml--parse-from-grammar 'nb-ns-double-in-line)
+                              (yaml--any
+                               (yaml--parse-from-grammar 's-double-next-line n)
+                               (yaml--rep2 0 nil
+                                           (lambda () 
(yaml--parse-from-grammar 's-white))))))))))
+
+            ('ns-esc-non-breaking-space
+             (yaml--chr ?\_))
+
+            ('l-nb-diff-lines
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'l-nb-same-lines n)
+                (yaml--rep2 0 nil
+                            (lambda ()
+                              (yaml--all (yaml--parse-from-grammar 
'b-as-line-feed)
+                                         (yaml--parse-from-grammar 
'l-nb-same-lines n)))))))
+
+            ('s-flow-folded
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))
+                (yaml--parse-from-grammar 'b-l-folded n "flow-in")
+                (yaml--parse-from-grammar 's-flow-line-prefix n))))
+
+            ('ns-flow-map-explicit-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any
+                (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n c)
+                (yaml--all
+                 (yaml--parse-from-grammar 'e-node)
+                 (yaml--parse-from-grammar 'e-node)))))
+
+            ('ns-l-block-map-implicit-entry
+             (yaml--all
+              (yaml--any (yaml--parse-from-grammar 
'ns-s-block-map-implicit-key)
+                         (yaml--parse-from-grammar 'e-node))
+              (yaml--parse-from-grammar 'c-l-block-map-implicit-value (nth 0 
args))))
+
+            ('l-nb-folded-lines
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 's-nb-folded-text n)
+                (yaml--rep2 0 nil
+                            (lambda ()
+                              (yaml--all (yaml--parse-from-grammar 'b-l-folded 
n "block-in")
+                                         (yaml--parse-from-grammar 
's-nb-folded-text n)))))))
+
+            ('c-l-block-map-explicit-key
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--chr ?\?)
+                (yaml--parse-from-grammar 's-l+block-indented n "block-out"))))
+
+            ('s-separate
+             (let ((n (nth 0 args))
+                   (c (nth 1 args)))
+               (pcase c
+                 ("block-in" (yaml--parse-from-grammar 's-separate-lines n))
+                 ("block-key" (yaml--parse-from-grammar 's-separate-in-line))
+                 ("block-out" (yaml--parse-from-grammar 's-separate-lines n))
+                 ("flow-in" (yaml--parse-from-grammar 's-separate-lines n))
+                 ("flow-key" (yaml--parse-from-grammar 's-separate-in-line))
+                 ("flow-out" (yaml--parse-from-grammar 's-separate-lines n)))))
+
+            ('ns-flow-pair-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any
+                (yaml--parse-from-grammar 'ns-flow-pair-yaml-key-entry n c)
+                (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n c)
+                (yaml--parse-from-grammar 'c-ns-flow-pair-json-key-entry n 
c))))
+
+            ('c-flow-indicator
+             (yaml--any (yaml--chr ?\,)
+                        (yaml--chr ?\[)
+                        (yaml--chr ?\])
+                        (yaml--chr ?\{)
+                        (yaml--chr ?\})))
+
+            ('ns-flow-pair-yaml-key-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'ns-s-implicit-yaml-key "flow-key")
+                (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c))))
+
+            ('e-scalar
+             (yaml--empty))
+
+            ('s-indent-lt
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--rep2 0 nil
+                            (lambda () (yaml--parse-from-grammar 's-space)))
+                (< (length (yaml--match)) n))))
+
+            ('nb-single-one-line
+             (yaml--rep2 0 nil
+                         (lambda () (yaml--parse-from-grammar 
'nb-single-char))))
+
+            ('c-collect-entry
+             (yaml--chr ?\,))
+
+            ('ns-l-compact-sequence
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'c-l-block-seq-entry n)
+                (yaml--rep2 0 nil
+                            (lambda ()
+                              (yaml--all
+                               (yaml--parse-from-grammar 's-indent n)
+                               (yaml--parse-from-grammar 'c-l-block-seq-entry 
n)))))))
+
+            ('c-comment
+             (yaml--chr ?\#))
+
+            ('s-line-prefix
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (pcase c
+                 ("block-in" (yaml--parse-from-grammar 's-block-line-prefix n))
+                 ("block-out" (yaml--parse-from-grammar 's-block-line-prefix 
n))
+                 ("flow-in" (yaml--parse-from-grammar 's-flow-line-prefix n))
+                 ("flow-out" (yaml--parse-from-grammar 's-flow-line-prefix 
n)))))
+
+            ('s-tab
+             (yaml--chr ?\x09))
+
+            ('c-directive
+             (yaml--chr ?\%))
+
+            ('ns-flow-pair
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any
+                (yaml--all (yaml--chr ?\?)
+                           (yaml--parse-from-grammar 's-separate n c)
+                           (yaml--parse-from-grammar 
'ns-flow-map-explicit-entry n c))
+                (yaml--parse-from-grammar 'ns-flow-pair-entry n c))))
+
+            ('s-l+block-indented
+             (let ((m (yaml--auto-detect-indent (nth 0 args))))
+               (yaml--any
                 (yaml--all
-                 (yaml--parse-from-grammar 'ns-single-char)
-                 (yaml--parse-from-grammar 'nb-ns-single-in-line)
+                 (yaml--parse-from-grammar 's-indent m)
                  (yaml--any
-                  (yaml--parse-from-grammar 's-single-next-line n)
-                  (yaml--rep2 0 nil
-                    (lambda () (yaml--parse-from-grammar 's-white)))))))))))
-
-      ('s-separate-in-line
-       (setq res
-         (yaml--any (yaml--rep 1 nil
-                      (lambda () (yaml--parse-from-grammar 's-white)))
-                    (yaml--start-of-line))))
-
-      ('b-comment
-       (setq res
-         (yaml--any (yaml--parse-from-grammar 'b-non-content)
-                    (yaml--end-of-stream))))
-
-      ('ns-esc-backslash
-       (setq res (yaml--chr ?\\)))
-
-      ('c-ns-anchor-property
-       (setq res
-         (yaml--all (yaml--chr ?\&)
-                    (yaml--parse-from-grammar 'ns-anchor-name))))
-
-      ('ns-plain-safe
-       (let ((c (nth 0 args)))
-         (setq res
-           (pcase c
-             ("block-key" (yaml--parse-from-grammar 'ns-plain-safe-out))
-             ("flow-in" (yaml--parse-from-grammar 'ns-plain-safe-in))
-             ("flow-key" (yaml--parse-from-grammar 'ns-plain-safe-in))
-             ("flow-out" (yaml--parse-from-grammar 'ns-plain-safe-out))))))
-
-      ('ns-flow-content
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--any (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
-                      (yaml--parse-from-grammar 'c-flow-json-content n c)))))
-
-      ('c-ns-flow-map-separate-value
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--all
-            (yaml--chr ?\:)
-            (yaml--chk "!" (yaml--parse-from-grammar 'ns-plain-safe c))
-            (yaml--any (yaml--all (yaml--parse-from-grammar 's-separate n c)
-                                  (yaml--parse-from-grammar 'ns-flow-node n c))
-                       (yaml--parse-from-grammar 'e-node))))))
-
-      ('in-flow
-       (let ((c (nth 0 args)))
-         (setq res
-           (pcase c
-             ("block-key" "flow-key")
-             ("flow-in" "flow-in")
-             ("flow-key" "flow-key")
-             ("flow-out" "flow-in")))))
-
-      ('c-verbatim-tag
-       (setq res
-         (yaml--all
-          (yaml--chr ?\!)
-          (yaml--chr ?\<)
-          (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-uri-char)))
-          (yaml--chr ?\>))))
-
-      ('c-literal
-       (setq res (yaml--chr ?\|)))
-
-      ('ns-esc-line-feed
-       (setq res (yaml--chr ?n)))
-
-      ('nb-double-multi-line
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'nb-ns-double-in-line)
-            (yaml--any (yaml--parse-from-grammar 's-double-next-line n)
-                       (yaml--rep2 0 nil
-                         (lambda () (yaml--parse-from-grammar 's-white))))))))
-
-      ('b-l-spaced
-       (let ((n (nth 0 args)))
-         (setq res
-           (yaml--all
-            (yaml--parse-from-grammar 'b-as-line-feed)
-            (yaml--rep2 0 nil
-              (lambda () (yaml--parse-from-grammar 'l-empty n "block-in")))))))
-
-      ('ns-flow-yaml-content
-       (let ((n (nth 0 args)) (c (nth 1 args)))
-         (setq res
-           (yaml--parse-from-grammar 'ns-plain n c))))
-      (_ (error "Unknown parsing grammar state: %s %s" state args)))
+                  (yaml--parse-from-grammar 'ns-l-compact-sequence
+                                            (+ (nth 0 args) (+ 1 m)))
+                  (yaml--parse-from-grammar 'ns-l-compact-mapping
+                                            (+ (nth 0 args) (+ 1 m)))))
+                (yaml--parse-from-grammar 's-l+block-node (nth 0 args) (nth 1 
args))
+                (yaml--all (yaml--parse-from-grammar 'e-node)
+                           (yaml--parse-from-grammar 's-l-comments)))))
+
+            ('c-single-quote
+             (yaml--chr ?\'))
+
+            ('s-flow-line-prefix
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 's-indent n)
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 
's-separate-in-line))))))
+
+            ('nb-double-char
+             (yaml--any
+              (yaml--parse-from-grammar 'c-ns-esc-char)
+              (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json))
+                         (lambda () (yaml--chr ?\\)) (lambda () (yaml--chr 
?\")))))
+
+            ('l-comment
+             (yaml--all
+              (yaml--parse-from-grammar 's-separate-in-line)
+              (yaml--rep 0 1
+                         (lambda () (yaml--parse-from-grammar 
'c-nb-comment-text)))
+              (yaml--parse-from-grammar 'b-comment)))
+
+            ('ns-hex-digit
+             (yaml--any
+              (yaml--parse-from-grammar 'ns-dec-digit)
+              (yaml--chr-range ?\x41 ?\x46)
+              (yaml--chr-range ?\x61 ?\x66)))
+
+            ('s-l+flow-in-block
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 's-separate (+ n 1) "flow-out")
+                (yaml--parse-from-grammar 'ns-flow-node (+ n 1) "flow-out")
+                (yaml--parse-from-grammar 's-l-comments))))
+
+            ('c-flow-json-node
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--all
+                              (yaml--parse-from-grammar 'c-ns-properties n c)
+                              (yaml--parse-from-grammar 's-separate n c))))
+                (yaml--parse-from-grammar 'c-flow-json-content n c))))
+
+            ('c-b-block-header
+             (let ((m (nth 0 args))
+                   (tt (nth 1 args)))
+               (yaml--all
+                (yaml--any
+                 (and (not (string-match "\\`[-+][0-9]"
+                                         (yaml--slice yaml--parsing-position)))
+                      ;; hack to not match this case if there is a number.
+                      (yaml--all
+                       (yaml--parse-from-grammar 'c-indentation-indicator m)
+                       (yaml--parse-from-grammar 'c-chomping-indicator tt)))
+                 (yaml--all
+                  (yaml--parse-from-grammar 'c-chomping-indicator tt)
+                  (yaml--parse-from-grammar 'c-indentation-indicator m)))
+                (yaml--parse-from-grammar 's-b-comment))))
+
+            ('ns-esc-8-bit
+             (yaml--all (yaml--chr ?x)
+                        (yaml--rep 2 2
+                                   (lambda () (yaml--parse-from-grammar 
'ns-hex-digit)))))
+
+            ('ns-anchor-name
+             (yaml--rep 1 nil
+                        (lambda () (yaml--parse-from-grammar 
'ns-anchor-char))))
+
+            ('ns-esc-slash
+             (yaml--chr ?\/))
+
+            ('s-nb-folded-text
+             (let ((n (nth 0 args)))
+               (yaml--all (yaml--parse-from-grammar 's-indent n)
+                          (yaml--parse-from-grammar 'ns-char)
+                          (yaml--rep2 0 nil
+                                      (lambda () (yaml--parse-from-grammar 
'nb-char))))))
+
+            ('ns-word-char
+             (yaml--any (yaml--parse-from-grammar 'ns-dec-digit)
+                        (yaml--parse-from-grammar 'ns-ascii-letter)
+                        (yaml--chr ?\-)))
+
+            ('ns-esc-form-feed
+             (yaml--chr ?f))
+
+            ('ns-s-block-map-implicit-key
+             (yaml--any
+              (yaml--parse-from-grammar 'c-s-implicit-json-key "block-key")
+              (yaml--parse-from-grammar 'ns-s-implicit-yaml-key "block-key")))
+
+            ('ns-esc-null (yaml--chr ?\0))
+
+            ('c-ns-tag-property
+             (yaml--any (yaml--parse-from-grammar 'c-verbatim-tag)
+                        (yaml--parse-from-grammar 'c-ns-shorthand-tag)
+                        (yaml--parse-from-grammar 'c-non-specific-tag)))
+
+            ('c-ns-local-tag-prefix
+             (yaml--all
+              (yaml--chr ?\!)
+              (yaml--rep2 0 nil
+                          (lambda () (yaml--parse-from-grammar 
'ns-uri-char)))))
+
+            ('ns-tag-directive
+             (yaml--all (yaml--chr ?T) (yaml--chr ?A) (yaml--chr ?G)
+                        (yaml--parse-from-grammar 's-separate-in-line)
+                        (yaml--parse-from-grammar 'c-tag-handle)
+                        (yaml--parse-from-grammar 's-separate-in-line)
+                        (yaml--parse-from-grammar 'ns-tag-prefix)))
+
+            ('c-flow-mapping
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--chr ?\{)
+                (yaml--rep 0 1
+                           (lambda () (yaml--parse-from-grammar 's-separate n 
c)))
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--parse-from-grammar 'ns-s-flow-map-entries
+                                                       n
+                                                       
(yaml--parse-from-grammar 'in-flow c))))
+                (yaml--chr ?\}))))
+
+            ('ns-double-char
+             (yaml--but (lambda () (yaml--parse-from-grammar 'nb-double-char))
+                        (lambda () (yaml--parse-from-grammar 's-white))))
+
+            ('ns-ascii-letter
+             (yaml--any (yaml--chr-range ?\x41 ?\x5A)
+                        (yaml--chr-range ?\x61 ?\x7A)))
+
+            ('b-break
+             (yaml--any (yaml--all (yaml--parse-from-grammar 
'b-carriage-return)
+                                   (yaml--parse-from-grammar 'b-line-feed))
+                        (yaml--parse-from-grammar 'b-carriage-return)
+                        (yaml--parse-from-grammar 'b-line-feed)))
+
+            ('nb-ns-double-in-line
+             (yaml--rep2 0 nil
+                         (lambda ()
+                           (yaml--all
+                            (yaml--rep2 0 nil
+                                        (lambda () (yaml--parse-from-grammar 
's-white)))
+                            (yaml--parse-from-grammar 'ns-double-char)))))
+
+            ('s-l+block-node
+             (yaml--any
+              (yaml--parse-from-grammar 's-l+block-in-block (nth 0 args) (nth 
1 args))
+              (yaml--parse-from-grammar 's-l+flow-in-block (nth 0 args))))
+
+            ('ns-esc-bell
+             (yaml--chr ?a))
+
+            ('c-named-tag-handle
+             (yaml--all
+              (yaml--chr ?\!)
+              (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-word-char)))
+              (yaml--chr ?\!)))
+
+            ('s-separate-lines
+             (let ((n (nth 0 args)))
+               (yaml--any (yaml--all (yaml--parse-from-grammar 's-l-comments)
+                                     (yaml--parse-from-grammar 
's-flow-line-prefix n))
+                          (yaml--parse-from-grammar 's-separate-in-line))))
+
+            ('l-directive
+             (yaml--all (yaml--chr ?\%)
+                        (yaml--any (yaml--parse-from-grammar 
'ns-yaml-directive)
+                                   (yaml--parse-from-grammar 'ns-tag-directive)
+                                   (yaml--parse-from-grammar 
'ns-reserved-directive))
+                        (yaml--parse-from-grammar 's-l-comments)))
+
+            ('ns-esc-escape
+             (yaml--chr ?e))
+
+            ('b-nb-literal-next
+             (let ((n (nth 0 args)))
+               (yaml--all (yaml--parse-from-grammar 'b-as-line-feed)
+                          (yaml--parse-from-grammar 'l-nb-literal-text n))))
+
+            ('ns-s-flow-map-entries
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'ns-flow-map-entry n c)
+                (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--all
+                              (yaml--chr ?\,)
+                              (yaml--rep 0 1
+                                         (lambda () (yaml--parse-from-grammar 
's-separate n c)))
+                              (yaml--rep 0 1
+                                         (lambda ()
+                                           (yaml--parse-from-grammar 
'ns-s-flow-map-entries
+                                                                     n
+                                                                     c)))))))))
+
+            ('c-nb-comment-text
+             (yaml--all
+              (yaml--chr ?\#)
+              (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-char)))))
+
+            ('ns-dec-digit
+             (yaml--chr-range ?\x30 ?\x39))
+
+            ('ns-yaml-directive
+             (yaml--all (yaml--chr ?Y) (yaml--chr ?A) (yaml--chr ?M) 
(yaml--chr ?L)
+                        (yaml--parse-from-grammar 's-separate-in-line)
+                        (yaml--parse-from-grammar 'ns-yaml-version)))
+
+            ('c-mapping-key
+             (yaml--chr ?\?))
+
+            ('b-as-line-feed
+             (yaml--parse-from-grammar 'b-break))
+
+            ('s-l+block-in-block
+             (yaml--any
+              (yaml--parse-from-grammar 's-l+block-scalar
+                                        (nth 0 args)
+                                        (nth 1 args))
+              (yaml--parse-from-grammar 's-l+block-collection
+                                        (nth 0 args)
+                                        (nth 1 args))))
+
+            ('ns-esc-paragraph-separator
+             (yaml--chr ?P))
+
+            ('c-double-quoted
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all (yaml--chr ?\")
+                          (yaml--parse-from-grammar 'nb-double-text n c)
+                          (yaml--chr ?\"))))
+
+            ('b-line-feed
+             (yaml--chr ?\x0A))
+
+            ('ns-esc-horizontal-tab
+             (yaml--any (yaml--chr ?t) (yaml--chr ?\x09)))
+
+            ('c-ns-flow-map-empty-key-entry
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'e-node)
+                (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c))))
+
+            ('l-any-document
+             (yaml--any (yaml--parse-from-grammar 'l-directive-document)
+                        (yaml--parse-from-grammar 'l-explicit-document)
+                        (yaml--parse-from-grammar 'l-bare-document)))
+
+            ('c-tag (yaml--chr ?\!))
+
+            ('c-escape (yaml--chr ?\\))
+
+            ('c-sequence-end (yaml--chr ?\]))
+
+            ('l+block-mapping
+             (let ((new-m (yaml--auto-detect-indent (nth 0 args))))
+               (if (= 0 new-m)
+                   nil ;; For some fixed auto-detected m > 0 ;; Is this 
right???
+                 (yaml--all
+                  (yaml--set m new-m)
+                  (yaml--rep 1 nil
+                             (lambda ()
+                               (yaml--all
+                                (yaml--parse-from-grammar 's-indent
+                                                          (+ (nth 0 args) 
new-m))
+                                (yaml--parse-from-grammar 'ns-l-block-map-entry
+                                                          (+ (nth 0 args) 
new-m)))))))))
+
+            ('c-ns-flow-map-adjacent-value
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--chr ?\:)
+                (yaml--any
+                 (yaml--all
+                  (yaml--rep 0 1
+                             (lambda () (yaml--parse-from-grammar 's-separate 
n c)))
+                  (yaml--parse-from-grammar 'ns-flow-node n c))
+                 (yaml--parse-from-grammar 'e-node)))))
+
+            ('s-single-next-line
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 's-flow-folded n)
+                (yaml--rep 0 1
+                           (lambda ()
+                             (yaml--all
+                              (yaml--parse-from-grammar 'ns-single-char)
+                              (yaml--parse-from-grammar 'nb-ns-single-in-line)
+                              (yaml--any
+                               (yaml--parse-from-grammar 's-single-next-line n)
+                               (yaml--rep2 0 nil
+                                           (lambda () 
(yaml--parse-from-grammar 's-white))))))))))
+
+            ('s-separate-in-line
+             (yaml--any (yaml--rep 1 nil
+                                   (lambda () (yaml--parse-from-grammar 
's-white)))
+                        (yaml--start-of-line)))
+
+            ('b-comment
+             (yaml--any (yaml--parse-from-grammar 'b-non-content)
+                        (yaml--end-of-stream)))
+
+            ('ns-esc-backslash
+             (yaml--chr ?\\))
+
+            ('c-ns-anchor-property
+             (yaml--all (yaml--chr ?\&)
+                        (yaml--parse-from-grammar 'ns-anchor-name)))
+
+            ('ns-plain-safe
+             (let ((c (nth 0 args)))
+               (pcase c
+                 ("block-key" (yaml--parse-from-grammar 'ns-plain-safe-out))
+                 ("flow-in" (yaml--parse-from-grammar 'ns-plain-safe-in))
+                 ("flow-key" (yaml--parse-from-grammar 'ns-plain-safe-in))
+                 ("flow-out" (yaml--parse-from-grammar 'ns-plain-safe-out)))))
+
+            ('ns-flow-content
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--any (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
+                          (yaml--parse-from-grammar 'c-flow-json-content n 
c))))
+
+            ('c-ns-flow-map-separate-value
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--all
+                (yaml--chr ?\:)
+                (yaml--chk "!" (yaml--parse-from-grammar 'ns-plain-safe c))
+                (yaml--any (yaml--all (yaml--parse-from-grammar 's-separate n 
c)
+                                      (yaml--parse-from-grammar 'ns-flow-node 
n c))
+                           (yaml--parse-from-grammar 'e-node)))))
+
+            ('in-flow
+             (let ((c (nth 0 args)))
+               (pcase c
+                 ("block-key" "flow-key")
+                 ("flow-in" "flow-in")
+                 ("flow-key" "flow-key")
+                 ("flow-out" "flow-in"))))
+
+            ('c-verbatim-tag
+             (yaml--all
+              (yaml--chr ?\!)
+              (yaml--chr ?\<)
+              (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-uri-char)))
+              (yaml--chr ?\>)))
+
+            ('c-literal
+             (yaml--chr ?\|))
+
+            ('ns-esc-line-feed
+             (yaml--chr ?n))
+
+            ('nb-double-multi-line
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'nb-ns-double-in-line)
+                (yaml--any (yaml--parse-from-grammar 's-double-next-line n)
+                           (yaml--rep2 0 nil
+                                       (lambda () (yaml--parse-from-grammar 
's-white)))))))
+
+            ('b-l-spaced
+             (let ((n (nth 0 args)))
+               (yaml--all
+                (yaml--parse-from-grammar 'b-as-line-feed)
+                (yaml--rep2 0 nil
+                            (lambda () (yaml--parse-from-grammar 'l-empty n 
"block-in"))))))
+
+            ('ns-flow-yaml-content
+             (let ((n (nth 0 args)) (c (nth 1 args)))
+               (yaml--parse-from-grammar 'ns-plain n c)))
+            (_ (error "Unknown parsing grammar state: %S %S" state args)))))
     (when (and yaml--parse-debug
                res
                (not (member name yaml--tracing-ignore)))

Reply via email to