branch: externals/yaml commit f2c202a0648e9245302c2e1187b0112f75ff7f8d Merge: 73a9f53562 dfa6115520 Author: Zachary Romero <zacrom...@posteo.net> Commit: GitHub <nore...@github.com>
Merge pull request #60 from zkry/scratch/yaml patches from ELPA by Stefan Monnier --- yaml.el | 3255 ++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 1541 insertions(+), 1714 deletions(-) diff --git a/yaml.el b/yaml.el index 2b830b9464..f66aa56594 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 @@ -50,21 +50,21 @@ This flag is intended for development purposes.") -(defconst yaml--tracing-ignore '("s-space" - "s-tab" - "s-white" - "l-comment" - "b-break" - "b-line-feed" - "b-carriage-return" - "s-b-comment" - "b-comment" - "l-comment" - "ns-char" - "nb-char" - "b-char" - "c-printable" - "b-as-space")) +(defconst yaml--tracing-ignore '(s-space + s-tab + s-white + l-comment + b-break + b-line-feed + b-carriage-return + s-b-comment + b-comment + l-comment + ns-char + nb-char + b-char + c-printable + b-as-space)) (defvar yaml--parsing-input "" "The string content of the current item being processed.") @@ -83,7 +83,7 @@ This flag is intended for development purposes.") (cl-defstruct (yaml--state (:constructor yaml--state-create) (:copier nil)) - doc tt m name lvl beg end) + doc tt m (name nil :type symbol) lvl beg end) (defmacro yaml--parse (data &rest forms) "Parse DATA according to FORMS." @@ -100,7 +100,7 @@ This flag is intended for development purposes.") :name nil :doc nil :lvl 0 :beg 0 :end 0 :m nil :tt nil))) (defun yaml--state-set-m (val) - "Set the current value of t to VAL." + "Set the current value of `m' to VAL." (let* ((states yaml--states)) (while states (let* ((top-state (car states)) @@ -185,7 +185,7 @@ This flag is intended for development purposes.") :end nil)))) (defconst yaml--grammar-resolution-rules - '(("ns-plain" . literal)) + '((ns-plain . literal)) "Alist determining how to resolve grammar rule.") ;;; Receiver Functions @@ -481,82 +481,82 @@ reverse order." (setcar yaml--object-stack (reverse (car yaml--object-stack)))) (defconst yaml--grammar-events-in - '(("l-yaml-stream" . (lambda () - (yaml--stream-start-event) - (setq yaml--document-start-version nil) - (setq yaml--document-start-explicit nil) - (setq yaml--tag-map (make-hash-table)))) - ("c-flow-mapping" . (lambda () - (yaml--mapping-start-event t))) - ("c-flow-sequence" . (lambda () + `((l-yaml-stream . ,(lambda () + (yaml--stream-start-event) + (setq yaml--document-start-version nil) + (setq yaml--document-start-explicit nil) + (setq yaml--tag-map (make-hash-table)))) + (c-flow-mapping . ,(lambda () + (yaml--mapping-start-event t))) + (c-flow-sequence . ,(lambda () + (yaml--sequence-start-event nil))) + (l+block-mapping . ,(lambda () + (yaml--mapping-start-event nil))) + (l+block-sequence . ,(lambda () (yaml--sequence-start-event nil))) - ("l+block-mapping" . (lambda () - (yaml--mapping-start-event nil))) - ("l+block-sequence" . (lambda () - (yaml--sequence-start-event nil))) - ("ns-l-compact-mapping" . (lambda () - (yaml--mapping-start-event nil))) - ("ns-l-compact-sequence" . (lambda () - (yaml--sequence-start-event nil))) - ("ns-flow-pair" . (lambda () - (yaml--mapping-start-event t))) - ("ns-l-block-map-implicit-entry" . (lambda ())) - ("ns-l-compact-mapping" . (lambda ())) - ("c-l-block-seq-entry" . (lambda ()))) + (ns-l-compact-mapping . ,(lambda () + (yaml--mapping-start-event nil))) + (ns-l-compact-sequence . ,(lambda () + (yaml--sequence-start-event nil))) + (ns-flow-pair . ,(lambda () + (yaml--mapping-start-event t))) + (ns-l-block-map-implicit-entry . ,(lambda () nil)) + (ns-l-compact-mapping . ,(lambda () nil)) + (c-l-block-seq-entry . ,(lambda () nil))) "List of functions for matched rules that run on the entering of a rule.") (defconst yaml--grammar-events-out - '(("c-b-block-header" . - (lambda (text) + `((c-b-block-header . + ,(lambda (_text) nil)) - ("l-yaml-stream" . - (lambda (text) + (l-yaml-stream . + ,(lambda (_text) (yaml--check-document-end) (yaml--stream-end-event))) - ("ns-yaml-version" . - (lambda (text) + (ns-yaml-version . + ,(lambda (text) (when yaml--document-start-version (throw 'error "Multiple %YAML directives not allowed.")) (setq yaml--document-start-version text))) - ("c-tag-handle" . - (lambda (text) + (c-tag-handle . + ,(lambda (text) (setq yaml--tag-handle text))) - ("ns-tag-prefix" . - (lambda (text) + (ns-tag-prefix . + ,(lambda (text) (puthash yaml--tag-handle text yaml--tag-map))) - ("c-directives-end" . - (lambda (text) + (c-directives-end . + ,(lambda (_text) (yaml--check-document-end) (setq yaml--document-start-explicit t))) - ("c-document-end" . - (lambda (text) + (c-document-end . + ,(lambda (_text) (when (not yaml--document-end) (setq yaml--document-end-explicit t)) (yaml--check-document-end))) - ("c-flow-mapping" . - (lambda (text) + (c-flow-mapping . + ,(lambda (_text) (yaml--mapping-end-event))) - ("c-flow-sequence" . - (lambda (text) + (c-flow-sequence . + ,(lambda (_text) (yaml--sequence-end-event ))) - ("l+block-mapping" . - (lambda (text) + (l+block-mapping . + ,(lambda (_text) (yaml--mapping-end-event))) - ("l+block-sequence" . - (lambda (text) + (l+block-sequence . + ,(lambda (_text) (yaml--reverse-at-list) (yaml--sequence-end-event))) - ("ns-l-compact-mapping" . - (lambda (text) + (ns-l-compact-mapping . + ,(lambda (_text) (yaml--mapping-end-event))) - ("ns-l-compact-sequence" . - (lambda (text) + (ns-l-compact-sequence . + ,(lambda (_text) (yaml--sequence-end-event))) - ("ns-flow-pair" . - (lambda (text) + (ns-flow-pair . + ,(lambda (_text) (yaml--mapping-end-event))) - ("ns-plain" . - (lambda (text) + (ns-plain . + ,(lambda (text) (let* ((replaced (if (and (zerop (length yaml--state-stack)) (string-match "\\(^\\|\n\\)\\.\\.\\.\\'" text)) ;; Hack to not send the document parse end. @@ -577,8 +577,8 @@ reverse order." " ")) replaced))) (yaml--scalar-event "plain" replaced)))) - ("c-single-quoted" . - (lambda (text) + (c-single-quoted . + ,(lambda (text) (let* ((replaced (replace-regexp-in-string "\\(?:[ \t]*\r?\n[ \t]*\\)" "\n" @@ -601,8 +601,8 @@ reverse order." replaced))) (yaml--scalar-event "single" (substring replaced 1 (1- (length replaced))))))) - ("c-double-quoted" . - (lambda (text) + (c-double-quoted . + ,(lambda (text) (let* ((replaced (replace-regexp-in-string "\\(?:[ \t]*\r?\n[ \t]*\\)" "\n" @@ -654,8 +654,8 @@ reverse order." replaced)) (replaced (substring replaced 1 (1- (length replaced))))) (yaml--scalar-event "double" replaced)))) - ("c-l+literal" . - (lambda (text) + (c-l+literal . + ,(lambda (text) (when (equal (car yaml--state-stack) :trail-comments) (pop yaml--state-stack) (let ((comment-text (pop yaml--object-stack))) @@ -663,8 +663,8 @@ reverse order." (concat (regexp-quote comment-text) "\n*\\'") "" text)))) (let* ((processed-text (yaml--process-literal-text text))) (yaml--scalar-event "folded" processed-text)))) - ("c-l+folded" . - (lambda (text) + (c-l+folded . + ,(lambda (text) (when (equal (car yaml--state-stack) :trail-comments) (pop yaml--state-stack) (let ((comment-text (pop yaml--object-stack))) @@ -672,30 +672,30 @@ reverse order." (concat (regexp-quote comment-text) "\n*\\'") "" text)))) (let* ((processed-text (yaml--process-folded-text text))) (yaml--scalar-event "folded" processed-text)))) - ("e-scalar" . - (lambda (text) + (e-scalar . + ,(lambda (_text) (yaml--scalar-event "plain" "null"))) - ("c-ns-anchor-property" . - (lambda (text) + (c-ns-anchor-property . + ,(lambda (text) (yaml--anchor-event (substring text 1)))) - ("c-ns-tag-property" . - (lambda (text) + (c-ns-tag-property . + ,(lambda (_text) ;; TODO: Implement tags )) - ("l-trail-comments" . - (lambda (text) + (l-trail-comments . + ,(lambda (text) (yaml--trail-comments-event text))) - ("c-ns-alias-node" . - (lambda (text) + (c-ns-alias-node . + ,(lambda (text) (yaml--alias-event (substring text 1))))) "List of functions for matched rules that run on the exiting of a rule.") (defconst yaml--terminal-rules - '( "l-nb-literal-text" - "l-nb-diff-lines" - "ns-plain" - "c-single-quoted" - "c-double-quoted") + '( l-nb-literal-text + l-nb-diff-lines + ns-plain + c-single-quoted + c-double-quoted) "List of rules that indicate at which the parse tree should stop. This addition is a hack to prevent the parse tree from going too deep and thus @@ -706,11 +706,11 @@ repeat for each character in a text.") "Event walker iterates over the parse TREE and signals events from the rules." (when (consp tree) (if (stringp (car tree)) - (let ((grammar-rule (car tree)) - (text (cadr tree)) + (let ((text (car tree)) + (grammar-rule (cadr tree)) (children (cl-caddr tree))) - (let ((in-fn (cdr (assoc grammar-rule yaml--grammar-events-in))) - (out-fn (cdr (assoc grammar-rule yaml--grammar-events-out)))) + (let ((in-fn (cdr (assq grammar-rule yaml--grammar-events-in))) + (out-fn (cdr (assq grammar-rule yaml--grammar-events-out)))) (when in-fn (funcall in-fn)) (yaml--walk-events children) @@ -945,8 +945,8 @@ This is currently unimplemented." (let ((res-sym (make-symbol "res"))) `(let ((,res-sym ,value)) (when ,res-sym - (,(cond ((equal "m" (symbol-name variable)) 'yaml--state-set-m) - ((equal "t" (symbol-name variable)) 'yaml--state-set-t)) + (,(cond ((eq 'm variable) 'yaml--state-set-m) + ((eq 't variable) 'yaml--state-set-t)) ,res-sym) ,res-sym)))) @@ -1095,1666 +1095,1493 @@ 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)) - (beg yaml--parsing-position) + (let* ((beg yaml--parsing-position) (_ (when (and yaml--parse-debug - (not (member (symbol-name state) yaml--tracing-ignore))) + (not (memq state yaml--tracing-ignore))) (message "|%s>%s %40s args=%s '%s'" (make-string (length yaml--states) ?-) (make-string (- 70 (length yaml--states)) ?\s) - (symbol-name state) + state args (replace-regexp-in-string "\n" "↓" (yaml--slice yaml--parsing-position))))) - (_ (yaml--push-state (symbol-name state))) + (_ (yaml--push-state 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--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--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 '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))) + (not (memq state yaml--tracing-ignore))) (message "<%s|%s %40s = '%s'" (make-string (length yaml--states) ?-) (make-string (- 70 (length yaml--states)) ?\s) - name + state (replace-regexp-in-string "\n" "↓" (substring yaml--parsing-input beg yaml--parsing-position)))) (yaml--pop-state) (if (not res) - nil - (let ((res-type (cdr (assoc name yaml--grammar-resolution-rules))) - (res (if (member name yaml--terminal-rules) - ;; Ignore children if at-rule is - ;; indicated to be terminal. - t - res))) - (cond - ((or (assoc name yaml--grammar-events-in) - (assoc name yaml--grammar-events-out)) - (let ((str (substring yaml--parsing-input beg yaml--parsing-position))) - (when yaml--parsing-store-position - (setq str (propertize str 'yaml-position - (cons (1+ beg) - (1+ yaml--parsing-position))))) - (when (member name '("c-l+folded" "c-l+literal")) - (setq str (propertize str 'yaml-n (max 0 yaml-n)))) - (list name - (if yaml--parsing-store-position - (propertize str 'yaml-position (cons (1+ beg) - (1+ yaml--parsing-position))) - str) - res))) - ((equal res-type 'list) (list name res)) - ((equal res-type 'literal) - (substring yaml--parsing-input beg yaml--parsing-position)) - (t res)))))) + nil + (let ((res-type (cdr (assq state yaml--grammar-resolution-rules))) + (res (if (memq state yaml--terminal-rules) + ;; Ignore children if at-rule is + ;; indicated to be terminal. + t + res))) + (cond + ((or (assq state yaml--grammar-events-in) + (assq state yaml--grammar-events-out)) + (let ((str (substring yaml--parsing-input beg yaml--parsing-position))) + (when yaml--parsing-store-position + (setq str (propertize str 'yaml-position + (cons (1+ beg) + (1+ yaml--parsing-position))))) + (when (memq state '(c-l+folded c-l+literal)) + (setq str (propertize str 'yaml-n (max 0 yaml-n)))) + (list (if yaml--parsing-store-position + (propertize str 'yaml-position (cons (1+ beg) + (1+ yaml--parsing-position))) + str) + state + res))) + ((equal res-type 'list) (list state res)) + ((equal res-type 'literal) + (substring yaml--parsing-input beg yaml--parsing-position)) + (t res)))))) ;;; Encoding