branch: externals/yaml commit 9a8ae65986c2cb50d1b69be9fc82f474a537d17a Author: Zachary Romero <zacrom...@posteo.net> Commit: Zachary Romero <zacrom...@posteo.net>
Reduce stack usage --- yaml.el | 722 +++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 368 insertions(+), 354 deletions(-) diff --git a/yaml.el b/yaml.el index 5c5c1a16ba..aada2a910c 100644 --- a/yaml.el +++ b/yaml.el @@ -565,47 +565,34 @@ This flag is intended for development purposes.") "Add a new state frame of NAME for RULE." (declare (indent defun)) (let ((res-symbol (make-symbol "res"))) - `(progn - ;;(message "%2d: %s" (length yaml--states) ,name) - (yaml--push-state ,name) - (when (and yaml--parse-debug (not (member ,name yaml--tracing-ignore))) - (message "|%s>%s %40s \"%s\"" - (make-string (length yaml--states) ?-) - (make-string (- 40 (length yaml--states)) ?\s) - ,name - (replace-regexp-in-string - "\n" - "\\n" - (substring yaml--parsing-input yaml--parsing-position) - nil - 'literal))) - (let ((beg yaml--parsing-position) - (,res-symbol ,rule)) - (when (and yaml--parse-debug ,res-symbol (not (member ,name yaml--tracing-ignore))) - (message "<%s|%s %40s \"%s\"" - (make-string (length yaml--states) ?-) - (make-string (- 40 (length yaml--states)) ?\s) - ,name - (replace-regexp-in-string - "\n" - "\\n" - (substring yaml--parsing-input beg yaml--parsing-position) - nil - 'literal))) - (yaml--pop-state) - (if (not ,res-symbol) - nil - (let ((res-type (cdr (assoc ,name yaml--grammar-resolution-rules))) - (t-state (yaml-state-m (car yaml-states)))) - (cond - ((or (assoc ,name yaml--grammar-events-in) - (assoc ,name yaml--grammar-events-out)) - (list ,name - (substring yaml--parsing-input beg yaml--parsing-position) - ,res-symbol)) - ((equal res-type 'list) (list ,name ,res-symbol)) - ((equal res-type 'literal) (substring yaml--parsing-input beg yaml--parsing-position)) - (t ,res-symbol)))))))) + `(let ((beg yaml--parsing-position) + (_ (yaml--push-state ,name)) + (,res-symbol ,rule)) + (when (and yaml--parse-debug ,res-symbol (not (member ,name yaml--tracing-ignore))) + (message "<%s|%s %40s \"%s\"" + (make-string (length yaml--states) ?-) + (make-string (- 40 (length yaml--states)) ?\s) + ,name + (replace-regexp-in-string + "\n" + "\\n" + (substring yaml--parsing-input beg yaml--parsing-position) + nil + 'literal))) + (yaml--pop-state) + (if (not ,res-symbol) + nil + (let ((res-type (cdr (assoc ,name yaml--grammar-resolution-rules))) + (t-state (yaml-state-m (car yaml--states)))) + (cond + ((or (assoc ,name yaml--grammar-events-in) + (assoc ,name yaml--grammar-events-out)) + (list ,name + (substring yaml--parsing-input beg yaml--parsing-position) + ,res-symbol)) + ((equal res-type 'list) (list ,name ,res-symbol)) + ((equal res-type 'literal) (substring yaml--parsing-input beg yaml--parsing-position)) + (t ,res-symbol))))))) (defun yaml--end-of-stream () "Return non-nil if the current position is after the end of the document." @@ -660,6 +647,21 @@ This flag is intended for development purposes.") (setq yaml--parsing-position start-pos)) res)) +(defun yaml--run-all (&rest funcs) + "Return list of all evaluated FUNCS if all of FUNCS pass." + (let* ((start-pos yaml--parsing-position) + (ress '()) + (break)) + (while (and (not break) funcs) + (let ((res (funcall (car funcs)))) + (when (not res) + (setq break t)) + (setq ress (append ress (list res))) + (setq funcs (cdr funcs)))) + (when break + (setq yaml--parsing-position start-pos)) + (if break nil ress))) + (defmacro yaml--all (&rest forms) "Pass and return all forms if all of FORMS pass." `(yaml--run-all @@ -667,17 +669,24 @@ This flag is intended for development purposes.") `(lambda () ,form)) forms))) +;; Not sure if this actually helps the stack problem (defmacro yaml--any (&rest forms) "Pass if any of FORMS pass." (if (= 1 (length forms)) (car forms) - (let ((idx-sym (make-symbol "idx")) - (start-pos-sym (make-symbol "start"))) + (let ((start-pos-sym (make-symbol "start")) + (rules-sym (make-symbol "rules")) + (res-sym (make-symbol "res"))) `(let ((,start-pos-sym yaml--parsing-position) - (,idx-sym ,(car forms))) - (or ,idx-sym - (progn (setq yaml--parsing-position ,start-pos-sym) - (yaml--any ,@(cdr forms)))))))) + (,rules-sym ,(cons 'list (seq-map (lambda (form) `(lambda () ,form)) forms))) + (,res-sym)) + (while (and (not ,res-sym) ,rules-sym) + (setq ,res-sym (funcall (car ,rules-sym))) + (unless ,res-sym + (setq yaml--parsing-position ,start-pos-sym)) + (setq ,rules-sym (cdr ,rules-sym))) + ,res-sym)))) + (defmacro yaml--may (action) action) @@ -777,9 +786,9 @@ This flag is intended for development purposes.") (setq yaml--parsing-position pos2) t)))))) -(defun yaml--rep (min max func) +(defmacro yaml--rep (min max func) "Repeat FUNC between MIN and MAX times." - (yaml--rep2 min max func)) + `(yaml--rep2 ,min ,max ,func)) (defun yaml--rep2 (min max func) "Repeat FUNC between MIN and MAX times." @@ -788,13 +797,12 @@ This flag is intended for development purposes.") (let* ((res-list '()) (count 0) (pos yaml--parsing-position) - (pos-start pos)) - (catch 'break - (while (or (not max) (< count max)) - (let ((res (funcall func))) - (when (or (not res) - (= yaml--parsing-position pos)) - (throw 'break nil)) + (pos-start pos) + (break nil)) + (while (and (not break) (or (not max) (< count max))) + (let ((res (funcall func))) + (if (or (not res) (= yaml--parsing-position pos)) + (setq break t) (setq res-list (cons res res-list)) (setq count (1+ count)) (setq pos yaml--parsing-position)))) @@ -832,14 +840,14 @@ This flag is intended for development purposes.") (defmacro yaml--chk (type expr) (let ((start-symbol (make-symbol "start")) (ok-symbol (make-symbol "ok"))) - `(let ((,start-symbol yaml--parsing-position)) - (when (equal ,type "<=") - (setq yaml--parsing-position (1- yaml--parsing-position))) - (let ((ok (and (>= yaml--parsing-position 0) ,expr))) - (setq yaml--parsing-position ,start-symbol) - (if (equal ,type "!") - (not ok) - ok))))) + `(let ((,start-symbol yaml--parsing-position) + (_ (when (equal ,type "<=") + (setq yaml--parsing-position (1- yaml--parsing-position)))) + (ok (and (>= yaml--parsing-position 0) ,expr))) + (setq yaml--parsing-position ,start-symbol) + (if (equal ,type "!") + (not ok) + ok)))) (defun yaml-parse-string (string &rest args) "Parse the YAML value in STRING. Keyword ARGS are as follows: @@ -896,8 +904,6 @@ value. It defaults to the symbol :false." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - (defun yaml--parse-from-grammar (state &rest args) "Parse YAML grammar for given STATE and ARGS. @@ -923,11 +929,10 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--set m (yaml--auto-detect m)) t))))) ((eq state 'ns-reserved-directive) - (let () - (yaml--frame "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)))))))) + (yaml--frame "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))))))) ((eq state 'ns-flow-map-implicit-entry) (let ((n (nth 0 args)) @@ -938,13 +943,11 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'c-ns-flow-map-json-key-entry n c))))) ((eq state 'ns-esc-double-quote) - (let () - (yaml--frame "ns-esc-double-quote" - (yaml--chr ?\")))) + (yaml--frame "ns-esc-double-quote" + (yaml--chr ?\"))) ((eq state 'c-mapping-start) - (let () - (yaml--frame "c-mapping-start" (yaml--chr ?\{)))) + (yaml--frame "c-mapping-start" (yaml--chr ?\{))) ((eq state 'ns-flow-seq-entry) (let ((n (nth 0 args)) @@ -962,25 +965,21 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'b-as-line-feed))))) ((eq state 'c-primary-tag-handle) - (let () - (yaml--frame "c-primary-tag-handle" (yaml--chr ?\!)))) + (yaml--frame "c-primary-tag-handle" (yaml--chr ?\!))) ((eq state 'ns-plain-safe-out) - (let () - (yaml--frame "ns-plain-safe-out" - (yaml--parse-from-grammar 'ns-char)))) + (yaml--frame "ns-plain-safe-out" + (yaml--parse-from-grammar 'ns-char))) ((eq state 'c-ns-shorthand-tag) - (let () - (yaml--frame "c-ns-shorthand-tag" - (yaml--all (yaml--parse-from-grammar 'c-tag-handle) - (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-tag-char))))))) + (yaml--frame "c-ns-shorthand-tag" + (yaml--all (yaml--parse-from-grammar 'c-tag-handle) + (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-tag-char)))))) ((eq state 'nb-ns-single-in-line) - (let () - (yaml--frame "nb-ns-single-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-single-char))))))) + (yaml--frame "nb-ns-single-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-single-char)))))) ((eq state 'l-strip-empty) (let ((n (nth 0 args))) @@ -990,27 +989,26 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 'l-trail-comments n))))))) ((eq state 'c-indicator) - (let () - (yaml--frame "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 ?\`))))) + (yaml--frame "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 ?\`)))) ((eq state 'c-l+literal) (let ((n (nth 0 args))) @@ -1028,27 +1026,23 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--chr ?\'))))) ((eq state 'c-forbidden) - (let () - (yaml--frame "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)))))) + (yaml--frame "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))))) ((eq state 'c-ns-alias-node) - (let () - (yaml--frame "c-ns-alias-node" - (yaml--all (yaml--chr ?\*) - (yaml--parse-from-grammar 'ns-anchor-name))))) + (yaml--frame "c-ns-alias-node" + (yaml--all (yaml--chr ?\*) + (yaml--parse-from-grammar 'ns-anchor-name)))) ((eq state 'c-secondary-tag-handle) - (let () - (yaml--frame "c-secondary-tag-handle" - (yaml--all (yaml--chr ?\!) (yaml--chr ?\!))))) + (yaml--frame "c-secondary-tag-handle" + (yaml--all (yaml--chr ?\!) (yaml--chr ?\!)))) ((eq state 'ns-esc-next-line) - (let () - (yaml--frame "ns-esc-next-line" (yaml--chr ?\n)))) + (yaml--frame "ns-esc-next-line" (yaml--chr ?\n))) ((eq state 'l-nb-same-lines) (let ((n (nth 0 args))) @@ -1058,14 +1052,12 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'l-nb-spaced-lines n)))))) ((eq state 'c-alias) - (let () - (yaml--frame "c-alias" (yaml--chr ?\*)))) + (yaml--frame "c-alias" (yaml--chr ?\*))) ((eq state 'ns-single-char) - (let () - (yaml--frame "ns-single-char" - (yaml--but (lambda () (yaml--parse-from-grammar 'nb-single-char)) - (lambda () (yaml--parse-from-grammar 's-white)))))) + (yaml--frame "ns-single-char" + (yaml--but (lambda () (yaml--parse-from-grammar 'nb-single-char)) + (lambda () (yaml--parse-from-grammar 's-white))))) ((eq state 'c-l-block-map-implicit-value) (let ((n (nth 0 args))) @@ -1076,39 +1068,37 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 's-l-comments))))))) ((eq state 'ns-uri-char) - (let () - (yaml--frame "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--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--frame "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--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 ?\])))) ((eq state 'ns-esc-16-bit) - (let () - (yaml--frame "ns-esc-16-bit" - (yaml--all (yaml--chr ?u) - (yaml--rep 4 4 (lambda () (yaml--parse-from-grammar 'ns-hex-digit))))))) + (yaml--frame "ns-esc-16-bit" + (yaml--all (yaml--chr ?u) + (yaml--rep 4 4 (lambda () (yaml--parse-from-grammar 'ns-hex-digit)))))) ((eq state 'l-nb-spaced-lines) (let ((n (nth 0 args))) @@ -1128,20 +1118,18 @@ Rules for this function are defined by the yaml-spec JSON file." ((equal c "flow-out") (yaml--parse-from-grammar 'ns-plain-multi-line n c)))))) ((eq state 'c-printable) - (let () - (yaml--frame "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))))) + (yaml--frame "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)))) ((eq state 'c-mapping-value) - (let () - (yaml--frame "c-mapping-value" (yaml--chr ?\:)))) + (yaml--frame "c-mapping-value" (yaml--chr ?\:))) ((eq state 'l-nb-literal-text) (let ((n (nth 0 args))) @@ -1161,10 +1149,9 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--chk "=" (yaml--parse-from-grammar 'ns-plain-safe c))))))) ((eq state 'ns-anchor-char) - (let () - (yaml--frame "ns-anchor-char" - (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char)) - (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))) + (yaml--frame "ns-anchor-char" + (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char)) + (lambda () (yaml--parse-from-grammar 'c-flow-indicator))))) ((eq state 's-l+block-scalar) (let ((n (nth 0 args)) (c (nth 1 args))) @@ -1177,10 +1164,9 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'c-l+folded n)))))) ((eq state 'ns-plain-safe-in) - (let () - (yaml--frame "ns-plain-safe-in" - (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char)) - (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))) + (yaml--frame "ns-plain-safe-in" + (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char)) + (lambda () (yaml--parse-from-grammar 'c-flow-indicator))))) ((eq state 'nb-single-text) (let ((n (nth 0 args)) (c (nth 1 args))) @@ -1197,7 +1183,7 @@ Rules for this function are defined by the yaml-spec JSON file." (<= (length (yaml--match)) n)))))) ((eq state 'ns-esc-carriage-return) - (let () (yaml--frame "ns-esc-carriage-return" (yaml--chr ?\r)))) + (yaml--frame "ns-esc-carriage-return" (yaml--chr ?\r))) ((eq state 'l-chomped-empty) (let ((n (nth 0 args)) @@ -1215,9 +1201,8 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 's-separate-in-line))))))) ((eq state 'b-as-space) - (let () - (yaml--frame "b-as-space" - (yaml--parse-from-grammar 'b-break)))) + (yaml--frame "b-as-space" + (yaml--parse-from-grammar 'b-break))) ((eq state 'ns-s-flow-seq-entries) (let ((n (nth 0 args)) (c (nth 1 args))) @@ -1243,13 +1228,12 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n c)) (yaml--parse-from-grammar 'e-node)))))) - ((eq state 'c-sequence-entry) (let () (yaml--frame "c-sequence-entry" (yaml--chr ?\-)))) + ((eq state 'c-sequence-entry) (yaml--frame "c-sequence-entry" (yaml--chr ?\-))) ((eq state 'l-bare-document) - (let () - (yaml--frame "l-bare-document" - (yaml--all (yaml--exclude "c-forbidden") - (yaml--parse-from-grammar 's-l+block-node -1 "block-in"))))) + (yaml--frame "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. ((eq state 'b-chomped-last) @@ -1274,7 +1258,7 @@ Rules for this function are defined by the yaml-spec JSON file." (message "debug: s-indent: %d %s" n (yaml--slice yaml--parsing-position)) (yaml--frame "s-indent" (yaml--rep n n (lambda () (yaml--parse-from-grammar 's-space)))))) - ((eq state 'ns-esc-line-separator) (let () (yaml--frame "ns-esc-line-separator" (yaml--chr ?\L)))) + ((eq state 'ns-esc-line-separator) (yaml--frame "ns-esc-line-separator" (yaml--chr ?\L))) ((eq state 'ns-flow-yaml-node) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-yaml-node" @@ -1285,9 +1269,9 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'ns-flow-yaml-content n c)) (yaml--parse-from-grammar 'e-scalar))))))) - ((eq state 'ns-yaml-version) (let () (yaml--frame "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))))))) - ((eq state 'c-folded) (let () (yaml--frame "c-folded" (yaml--chr ?\>)))) - ((eq state 'c-directives-end) (let () (yaml--frame "c-directives-end" (yaml--all (yaml--chr ?\-) (yaml--chr ?\-) (yaml--chr ?\-))))) + ((eq state 'ns-yaml-version) (yaml--frame "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)))))) + ((eq state 'c-folded) (yaml--frame "c-folded" (yaml--chr ?\>))) + ((eq state 'c-directives-end) (yaml--frame "c-directives-end" (yaml--all (yaml--chr ?\-) (yaml--chr ?\-) (yaml--chr ?\-)))) ((eq state 's-double-break) (let ((n (nth 0 args))) (yaml--frame "s-double-break" (yaml--any (yaml--parse-from-grammar 's-double-escaped n) (yaml--parse-from-grammar 's-flow-folded n))))) ((eq state 's-nb-spaced-text) (let ((n (nth 0 args))) (yaml--frame "s-nb-spaced-text" (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))))))) ((eq state 'l-folded-content) @@ -1300,12 +1284,23 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'l-chomped-empty n tt))))) ;; TODO: don't use yaml--state-t here ((eq state 'nb-ns-plain-in-line) (let ((c (nth 0 args))) (yaml--frame "nb-ns-plain-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-plain-char c))))))) ((eq state 'nb-single-multi-line) (let ((n (nth 0 args))) (yaml--frame "nb-single-multi-line" (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)))))))) - ((eq state 'l-document-suffix) (let () (yaml--frame "l-document-suffix" (yaml--all (yaml--parse-from-grammar 'c-document-end) (yaml--parse-from-grammar 's-l-comments))))) - ((eq state 'c-sequence-start) (let () (yaml--frame "c-sequence-start" (yaml--chr ?\[)))) - ((eq state 'ns-l-block-map-entry) (let ((n (nth 0 args))) (yaml--frame "ns-l-block-map-entry" (yaml--any (yaml--parse-from-grammar 'c-l-block-map-explicit-entry n) (yaml--parse-from-grammar 'ns-l-block-map-implicit-entry n))))) - ((eq state 'ns-l-compact-mapping) (let ((n (nth 0 args))) (yaml--frame "ns-l-compact-mapping" (yaml--all (yaml--parse-from-grammar 'ns-l-block-map-entry n) (yaml--rep2 0 nil (lambda () (yaml--all (yaml--parse-from-grammar 's-indent n) (yaml--parse-from-grammar 'ns-l-block-map-entry n)))))))) - ((eq state 'ns-esc-space) (let () (yaml--frame "ns-esc-space" (yaml--chr ?\x20)))) - ((eq state 'ns-esc-vertical-tab) (let () (yaml--frame "ns-esc-vertical-tab" (yaml--chr ?\v)))) + ((eq state 'l-document-suffix) (yaml--frame "l-document-suffix" (yaml--all (yaml--parse-from-grammar 'c-document-end) (yaml--parse-from-grammar 's-l-comments)))) + ((eq state 'c-sequence-start) (yaml--frame "c-sequence-start" (yaml--chr ?\[))) + + ((eq state 'ns-l-block-map-entry) + (yaml--frame "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))))) + + ((eq state 'ns-l-compact-mapping) + (yaml--frame "ns-l-compact-mapping" + (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)))))))) + + ((eq state 'ns-esc-space) (yaml--frame "ns-esc-space" (yaml--chr ?\x20))) + ((eq state 'ns-esc-vertical-tab) (yaml--frame "ns-esc-vertical-tab" (yaml--chr ?\v))) ((eq state 'ns-s-implicit-yaml-key) (let ((c (nth 0 args))) @@ -1317,118 +1312,130 @@ Rules for this function are defined by the yaml-spec JSON file." ((eq state 'b-l-folded) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "b-l-folded" (yaml--any (yaml--parse-from-grammar 'b-l-trimmed n c) (yaml--parse-from-grammar 'b-as-space))))) ((eq state 's-l+block-collection) - (let ((n (nth 0 args)) (c (nth 1 args))) - (yaml--frame "s-l+block-collection" - (yaml--all (yaml--rep 0 1 (lambda () (yaml--all (yaml--parse-from-grammar 's-separate (+ n 1) c) (yaml--parse-from-grammar 'c-ns-properties (+ n 1) c)))) - (yaml--parse-from-grammar 's-l-comments) - (yaml--any (yaml--parse-from-grammar 'l+block-sequence (yaml--parse-from-grammar 'seq-spaces n c)) - (yaml--parse-from-grammar 'l+block-mapping n)))))) + (yaml--frame "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)))))) - ((eq state 'c-quoted-quote) (let () (yaml--frame "c-quoted-quote" (yaml--all (yaml--chr ?\') (yaml--chr ?\'))))) + ((eq state 'c-quoted-quote) (yaml--frame "c-quoted-quote" (yaml--all (yaml--chr ?\') (yaml--chr ?\')))) ((eq state 'l+block-sequence) - (let ((n (nth 0 args))) - (yaml--frame "l+block-sequence" - (progn - (message "DEBUG: l+block-mapping: %d %d \"%s\"" (yaml--auto-detect-indent n) n (yaml--slice yaml--parsing-position)) - (yaml--all (yaml--set m (yaml--auto-detect-indent n)) - (yaml--rep 1 nil - (lambda () - (yaml--all - (yaml--parse-from-grammar 's-indent (+ n (yaml--state-m))) - (yaml--parse-from-grammar 'c-l-block-seq-entry (+ n (yaml--state-m))))))))))) - - ((eq state 'c-double-quote) (let () (yaml--frame "c-double-quote" (yaml--chr ?\")))) - ((eq state 'ns-esc-backspace) (let () (yaml--frame "ns-esc-backspace" (yaml--chr ?\b)))) + (yaml--frame "l+block-sequence" + (yaml--all (yaml--set m (yaml--auto-detect-indent (nth 0 args))) + (yaml--rep 1 nil + (lambda () + (yaml--all + (yaml--parse-from-grammar 's-indent (+ (nth 0 args) (yaml--state-m))) + (yaml--parse-from-grammar 'c-l-block-seq-entry (+ (nth 0 args) (yaml--state-m))))))))) + + ((eq state 'c-double-quote) (yaml--frame "c-double-quote" (yaml--chr ?\"))) + ((eq state 'ns-esc-backspace) (yaml--frame "ns-esc-backspace" (yaml--chr ?\b))) ((eq state 'c-flow-json-content) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-flow-json-content" (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))))) - ((eq state 'c-mapping-end) (let () (yaml--frame "c-mapping-end" (yaml--chr ?\})))) - ((eq state 'nb-single-char) (let () (yaml--frame "nb-single-char" (yaml--any (yaml--parse-from-grammar 'c-quoted-quote) (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json)) (lambda () (yaml--chr ?\'))))))) + ((eq state 'c-mapping-end) (yaml--frame "c-mapping-end" (yaml--chr ?\}))) + ((eq state 'nb-single-char) (yaml--frame "nb-single-char" (yaml--any (yaml--parse-from-grammar 'c-quoted-quote) (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json)) (lambda () (yaml--chr ?\')))))) ((eq state 'ns-flow-node) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-node" (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))))))) - ((eq state 'c-non-specific-tag) (let () (yaml--frame "c-non-specific-tag" (yaml--chr ?\!)))) - ((eq state 'l-directive-document) (let () (yaml--frame "l-directive-document" (yaml--all (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'l-directive))) (yaml--parse-from-grammar 'l-explicit-document))))) + ((eq state 'c-non-specific-tag) (yaml--frame "c-non-specific-tag" (yaml--chr ?\!))) + ((eq state 'l-directive-document) (yaml--frame "l-directive-document" (yaml--all (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'l-directive))) (yaml--parse-from-grammar 'l-explicit-document)))) ((eq state 'c-l-block-map-explicit-entry) (let ((n (nth 0 args))) (yaml--frame "c-l-block-map-explicit-entry" (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)))))) - ((eq state 'e-node) (let () (yaml--frame "e-node" (yaml--parse-from-grammar 'e-scalar)))) + ((eq state 'e-node) (yaml--frame "e-node" (yaml--parse-from-grammar 'e-scalar))) ((eq state 'seq-spaces) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "seq-spaces" (cond ((equal c "block-in") n) ((equal c "block-out") (yaml--sub n 1)))))) - ((eq state 'l-yaml-stream) (let () (yaml--frame "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--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-doc [...] - ((eq state 'nb-double-one-line) (let () (yaml--frame "nb-double-one-line" (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'nb-double-char)))))) - ((eq state 's-l-comments) (let () (yaml--frame "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))))))) - ((eq state 'nb-char) (let () (yaml--frame "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)))))) + ((eq state 'l-yaml-stream) (yaml--frame "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--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))) [...] + ((eq state 'nb-double-one-line) (yaml--frame "nb-double-one-line" (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'nb-double-char))))) + ((eq state 's-l-comments) (yaml--frame "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)))))) + ((eq state 'nb-char) (yaml--frame "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))))) ((eq state 'ns-plain-first) (let ((c (nth 0 args))) (yaml--frame "ns-plain-first" (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))))))) - ((eq state 'c-ns-esc-char) (let () (yaml--frame "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-gramm [...] + ((eq state 'c-ns-esc-char) (yaml--frame "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-e [...] ((eq state 'ns-flow-map-entry) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-map-entry" (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))))) - ((eq state 'l-explicit-document) (let () (yaml--frame "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))))))) - ((eq state 's-white) (let () (yaml--frame "s-white" (yaml--any (yaml--parse-from-grammar 's-space) (yaml--parse-from-grammar 's-tab))))) + ((eq state 'l-explicit-document) (yaml--frame "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)))))) + ((eq state 's-white) (yaml--frame "s-white" (yaml--any (yaml--parse-from-grammar 's-space) (yaml--parse-from-grammar 's-tab)))) ((eq state 'l-keep-empty) (let ((n (nth 0 args))) (yaml--frame "l-keep-empty" (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))))))) - ((eq state 'ns-tag-prefix) (let () (yaml--frame "ns-tag-prefix" (yaml--any (yaml--parse-from-grammar 'c-ns-local-tag-prefix) (yaml--parse-from-grammar 'ns-global-tag-prefix))))) + ((eq state 'ns-tag-prefix) (yaml--frame "ns-tag-prefix" (yaml--any (yaml--parse-from-grammar 'c-ns-local-tag-prefix) (yaml--parse-from-grammar 'ns-global-tag-prefix)))) ((eq state 'c-l+folded) (let ((n (nth 0 args))) (yaml--frame "c-l+folded" (yaml--all (yaml--chr ?\>) (yaml--parse-from-grammar 'c-b-block-header (yaml--state-m) (yaml--state-t)) (yaml--parse-from-grammar 'l-folded-content (+ n (yaml--state-m)) (yaml--state-t)))))) - ((eq state 'ns-directive-name) (let () (yaml--frame "ns-directive-name" (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))) - ((eq state 'b-char) (let () (yaml--frame "b-char" (yaml--any (yaml--parse-from-grammar 'b-line-feed) (yaml--parse-from-grammar 'b-carriage-return))))) + ((eq state 'ns-directive-name) (yaml--frame "ns-directive-name" (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char))))) + ((eq state 'b-char) (yaml--frame "b-char" (yaml--any (yaml--parse-from-grammar 'b-line-feed) (yaml--parse-from-grammar 'b-carriage-return)))) ((eq state 'ns-plain-multi-line) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-plain-multi-line" (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))))))) - ((eq state 'ns-char) (let () (yaml--frame "ns-char" (yaml--but (lambda () (yaml--parse-from-grammar 'nb-char)) (lambda () (yaml--parse-from-grammar 's-white)))))) - ((eq state 's-space) (let () (yaml--frame "s-space" (yaml--chr ?\x20)))) - ((eq state 'c-l-block-seq-entry) (let ((n (nth 0 args))) (yaml--frame "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 n "block-in"))))) + + ((eq state 'ns-char) + (yaml--frame "ns-char" + (yaml--but (lambda () (yaml--parse-from-grammar 'nb-char)) + (lambda () (yaml--parse-from-grammar 's-white))))) + + ((eq state 's-space) (yaml--frame "s-space" (yaml--chr ?\x20))) + + ((eq state 'c-l-block-seq-entry) + (yaml--frame "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")))) + ((eq state 'c-ns-properties) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-ns-properties" (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))))))))) - ((eq state 'ns-directive-parameter) (let () (yaml--frame "ns-directive-parameter" (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))) + ((eq state 'ns-directive-parameter) (yaml--frame "ns-directive-parameter" (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char))))) ((eq state 'c-chomping-indicator) - (let () - (yaml--frame "c-chomping-indicator" - (prog1 - (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)) - (message "c-chomping-indicator: %s" (yaml--state-t)))))) - - ((eq state 'ns-global-tag-prefix) (let () (yaml--frame "ns-global-tag-prefix" (yaml--all (yaml--parse-from-grammar 'ns-tag-char) (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'ns-uri-char))))))) + (yaml--frame "c-chomping-indicator" + (prog1 + (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)) + (message "c-chomping-indicator: %s" (yaml--state-t))))) + + ((eq state 'ns-global-tag-prefix) (yaml--frame "ns-global-tag-prefix" (yaml--all (yaml--parse-from-grammar 'ns-tag-char) (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'ns-uri-char)))))) ((eq state 'c-ns-flow-pair-json-key-entry) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-ns-flow-pair-json-key-entry" (yaml--all (yaml--parse-from-grammar 'c-s-implicit-json-key (yaml--parse-from-grammar 'flow-key)) (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n c))))) ((eq state 'l-literal-content) (let ((n (nth 0 args)) (tt (nth 1 args))) (yaml--frame "l-literal-content" - (progn - (message "l-literal-content: %s" tt) - (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)))))) - - ((eq state 'c-document-end) (let () (yaml--frame "c-document-end" (yaml--all (yaml--chr ?\.) (yaml--chr ?\.) (yaml--chr ?\.))))) + (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))))) + + ((eq state 'c-document-end) (yaml--frame "c-document-end" (yaml--all (yaml--chr ?\.) (yaml--chr ?\.) (yaml--chr ?\.)))) ((eq state 'nb-double-text) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "nb-double-text" (cond ((equal c "block-key") (yaml--parse-from-grammar 'nb-double-one-line)) ((equal c "flow-in") (yaml--parse-from-grammar 'nb-double-multi-line n)) ((equal c "flow-key") (yaml--parse-from-grammar 'nb-double-one-line)) ((equal c "flow-out") (yaml--parse-from-grammar 'nb-double-multi-line n)))))) - ((eq state 's-b-comment) (let () (yaml--frame "s-b-comment" (yaml--all (yaml--rep 0 1 (lambda () (yaml--all (yaml--parse-from-grammar 's-separate-in-line) (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 'c-nb-comment-text)))))) (yaml--parse-from-grammar 'b-comment))))) + ((eq state 's-b-comment) (yaml--frame "s-b-comment" (yaml--all (yaml--rep 0 1 (lambda () (yaml--all (yaml--parse-from-grammar 's-separate-in-line) (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 'c-nb-comment-text)))))) (yaml--parse-from-grammar 'b-comment)))) ((eq state 's-block-line-prefix) (let ((n (nth 0 args))) (yaml--frame "s-block-line-prefix" (yaml--parse-from-grammar 's-indent n)))) - ((eq state 'c-tag-handle) (let () (yaml--frame "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))))) + ((eq state 'c-tag-handle) (yaml--frame "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)))) ((eq state 'ns-plain-one-line) (let ((c (nth 0 args))) (yaml--frame "ns-plain-one-line" (yaml--all (yaml--parse-from-grammar 'ns-plain-first c) (yaml--parse-from-grammar 'nb-ns-plain-in-line c))))) - ((eq state 'nb-json) (let () (yaml--frame "nb-json" (yaml--any (yaml--chr ?\x09) (yaml--chr-range ?\x20 ?\x10FFFF))))) + ((eq state 'nb-json) (yaml--frame "nb-json" (yaml--any (yaml--chr ?\x09) (yaml--chr-range ?\x20 ?\x10FFFF)))) ((eq state 's-ns-plain-next-line) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "s-ns-plain-next-line" (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))))) - ((eq state 'c-reserved) (let () (yaml--frame "c-reserved" (yaml--any (yaml--chr ?\@) (yaml--chr ?\`))))) + ((eq state 'c-reserved) (yaml--frame "c-reserved" (yaml--any (yaml--chr ?\@) (yaml--chr ?\`)))) ((eq state 'b-l-trimmed) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "b-l-trimmed" (yaml--all (yaml--parse-from-grammar 'b-non-content) (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'l-empty n c))))))) - ((eq state 'l-document-prefix) (let () (yaml--frame "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))))))) - ((eq state 'c-byte-order-mark) (let () (yaml--frame "c-byte-order-mark" (yaml--chr ?\xFEFF)))) - ((eq state 'c-anchor) (let () (yaml--frame "c-anchor" (yaml--chr ?\&)))) + ((eq state 'l-document-prefix) (yaml--frame "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)))))) + ((eq state 'c-byte-order-mark) (yaml--frame "c-byte-order-mark" (yaml--chr ?\xFEFF))) + ((eq state 'c-anchor) (yaml--frame "c-anchor" (yaml--chr ?\&))) ((eq state 's-double-escaped) (let ((n (nth 0 args))) (yaml--frame "s-double-escaped" (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))))) ((eq state 'ns-esc-32-bit) - (let () - (yaml--frame "ns-esc-32-bit" - (yaml--all (yaml--chr ?U) - (yaml--rep 8 8 (lambda () (yaml--parse-from-grammar 'ns-hex-digit))))))) - - ((eq state 'b-non-content) (let () (yaml--frame "b-non-content" (yaml--parse-from-grammar 'b-break)))) - ((eq state 'ns-tag-char) (let () (yaml--frame "ns-tag-char" (yaml--but (lambda () (yaml--parse-from-grammar 'ns-uri-char)) (lambda () (yaml--chr ?\!)) (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))) - ((eq state 'b-carriage-return) (let () (yaml--frame "b-carriage-return" (yaml--chr ?\x0D)))) + (yaml--frame "ns-esc-32-bit" + (yaml--all (yaml--chr ?U) + (yaml--rep 8 8 (lambda () (yaml--parse-from-grammar 'ns-hex-digit)))))) + + ((eq state 'b-non-content) (yaml--frame "b-non-content" (yaml--parse-from-grammar 'b-break))) + ((eq state 'ns-tag-char) (yaml--frame "ns-tag-char" (yaml--but (lambda () (yaml--parse-from-grammar 'ns-uri-char)) (lambda () (yaml--chr ?\!)) (lambda () (yaml--parse-from-grammar 'c-flow-indicator))))) + ((eq state 'b-carriage-return) (yaml--frame "b-carriage-return" (yaml--chr ?\x0D))) ((eq state 's-double-next-line) (let ((n (nth 0 args))) (yaml--frame "s-double-next-line" (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))))))))))) - ((eq state 'ns-esc-non-breaking-space) (let () (yaml--frame "ns-esc-non-breaking-space" (yaml--chr ?\_)))) + ((eq state 'ns-esc-non-breaking-space) (yaml--frame "ns-esc-non-breaking-space" (yaml--chr ?\_))) ((eq state 'l-nb-diff-lines) (let ((n (nth 0 args))) (yaml--frame "l-nb-diff-lines" (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)))))))) ((eq state 's-flow-folded) (let ((n (nth 0 args))) (yaml--frame "s-flow-folded" (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))))) ((eq state 'ns-flow-map-explicit-entry) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-map-explicit-entry" (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)))))) - ((eq state 'ns-l-block-map-implicit-entry) (let ((n (nth 0 args))) (yaml--frame "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 n))))) + + ((eq state 'ns-l-block-map-implicit-entry) + (yaml--frame "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))))) + ((eq state 'l-nb-folded-lines) (let ((n (nth 0 args))) (yaml--frame "l-nb-folded-lines" (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)))))))) ((eq state 'c-l-block-map-explicit-key) (let ((n (nth 0 args))) (yaml--frame "c-l-block-map-explicit-key" (yaml--all (yaml--chr ?\?) (yaml--parse-from-grammar 's-l+block-indented n "block-out"))))) @@ -1444,26 +1451,33 @@ Rules for this function are defined by the yaml-spec JSON file." ((equal c "flow-out") (yaml--parse-from-grammar 's-separate-lines n)))))) ((eq state 'ns-flow-pair-entry) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-pair-entry" (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))))) - ((eq state 'c-flow-indicator) (let () (yaml--frame "c-flow-indicator" (yaml--any (yaml--chr ?\,) (yaml--chr ?\[) (yaml--chr ?\]) (yaml--chr ?\{) (yaml--chr ?\}))))) + ((eq state 'c-flow-indicator) (yaml--frame "c-flow-indicator" (yaml--any (yaml--chr ?\,) (yaml--chr ?\[) (yaml--chr ?\]) (yaml--chr ?\{) (yaml--chr ?\})))) ((eq state 'ns-flow-pair-yaml-key-entry) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-pair-yaml-key-entry" (yaml--all (yaml--parse-from-grammar 'ns-s-implicit-yaml-key (yaml--parse-from-grammar 'flow-key)) (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c))))) - ((eq state 'e-scalar) (let () (yaml--frame "e-scalar" (yaml--empty)))) + ((eq state 'e-scalar) (yaml--frame "e-scalar" (yaml--empty))) ((eq state 's-indent-lt) (let ((n (nth 0 args))) (yaml--frame "s-indent-lt" (yaml--may (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 's-space))) (< (length (yaml--match)) n)))))) - ((eq state 'nb-single-one-line) (let () (yaml--frame "nb-single-one-line" (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'nb-single-char)))))) - ((eq state 'c-collect-entry) (let () (yaml--frame "c-collect-entry" (yaml--chr ?\,)))) + ((eq state 'nb-single-one-line) (yaml--frame "nb-single-one-line" (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'nb-single-char))))) + ((eq state 'c-collect-entry) (yaml--frame "c-collect-entry" (yaml--chr ?\,))) ((eq state 'ns-l-compact-sequence) (let ((n (nth 0 args))) (yaml--frame "ns-l-compact-sequence" (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)))))))) - ((eq state 'c-comment) (let () (yaml--frame "c-comment" (yaml--chr ?\#)))) + ((eq state 'c-comment) (yaml--frame "c-comment" (yaml--chr ?\#))) ((eq state 's-line-prefix) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "s-line-prefix" (cond ((equal c "block-in") (yaml--parse-from-grammar 's-block-line-prefix n)) ((equal c "block-out") (yaml--parse-from-grammar 's-block-line-prefix n)) ((equal c "flow-in") (yaml--parse-from-grammar 's-flow-line-prefix n)) ((equal c "flow-out") (yaml--parse-from-grammar 's-flow-line-prefix n)))))) - ((eq state 's-tab) (let () (yaml--frame "s-tab" (yaml--chr ?\x09)))) - ((eq state 'c-directive) (let () (yaml--frame "c-directive" (yaml--chr ?\%)))) + ((eq state 's-tab) (yaml--frame "s-tab" (yaml--chr ?\x09))) + ((eq state 'c-directive) (yaml--frame "c-directive" (yaml--chr ?\%))) ((eq state 'ns-flow-pair) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-pair" (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))))) - ((eq state 's-l+block-indented) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "s-l+block-indented" (yaml--any (yaml--all (yaml--parse-from-grammar 's-indent (yaml--state-m)) (yaml--any (yaml--parse-from-grammar 'ns-l-compact-sequence (+ n (+ 1 (yaml--state-m)))) (yaml--parse-from-grammar 'ns-l-compact-mapping (+ n (+ 1 (yaml--state-m)))))) (yaml--parse-from-grammar 's-l+block-node n c) (yaml--all (yaml--parse-from-grammar 'e-node) (yaml--parse-from-grammar 's-l-comments)))))) + ((eq state 's-l+block-indented) + (yaml--frame "s-l+block-indented" + (yaml--any (yaml--all (yaml--parse-from-grammar 's-indent (yaml--state-m)) + (yaml--any (yaml--parse-from-grammar 'ns-l-compact-sequence (+ (nth 0 args) (+ 1 (yaml--state-m)))) + (yaml--parse-from-grammar 'ns-l-compact-mapping (+ (nth 0 args) (+ 1 (yaml--state-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))))) - ((eq state 'c-single-quote) (let () (yaml--frame "c-single-quote" (yaml--chr ?\')))) + ((eq state 'c-single-quote) (yaml--frame "c-single-quote" (yaml--chr ?\'))) ((eq state 's-flow-line-prefix) (let ((n (nth 0 args))) (yaml--frame "s-flow-line-prefix" (yaml--all (yaml--parse-from-grammar 's-indent n) (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 's-separate-in-line))))))) - ((eq state 'nb-double-char) (let () (yaml--frame "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 ?\"))))))) - ((eq state 'l-comment) (let () (yaml--frame "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))))) - ((eq state 'ns-hex-digit) (let () (yaml--frame "ns-hex-digit" (yaml--any (yaml--parse-from-grammar 'ns-dec-digit) (yaml--chr-range ?\x41 ?\x46) (yaml--chr-range ?\x61 ?\x66))))) + ((eq state 'nb-double-char) (yaml--frame "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 ?\")))))) + ((eq state 'l-comment) (yaml--frame "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)))) + ((eq state 'ns-hex-digit) (yaml--frame "ns-hex-digit" (yaml--any (yaml--parse-from-grammar 'ns-dec-digit) (yaml--chr-range ?\x41 ?\x46) (yaml--chr-range ?\x61 ?\x66)))) ((eq state 's-l+flow-in-block) (let ((n (nth 0 args))) (yaml--frame "s-l+flow-in-block" (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))))) @@ -1481,102 +1495,102 @@ Rules for this function are defined by the yaml-spec JSON file." (yaml--parse-from-grammar 'c-indentation-indicator m))) (yaml--parse-from-grammar 's-b-comment))))) - ((eq state 'ns-esc-8-bit) (let () (yaml--frame "ns-esc-8-bit" (yaml--all (yaml--chr ?\x) (yaml--rep 2 2 (lambda () (yaml--parse-from-grammar 'ns-hex-digit))))))) - ((eq state 'ns-anchor-name) (let () (yaml--frame "ns-anchor-name" (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-anchor-char)))))) - ((eq state 'ns-esc-slash) (let () (yaml--frame "ns-esc-slash" (yaml--chr ?\/)))) + ((eq state 'ns-esc-8-bit) (yaml--frame "ns-esc-8-bit" (yaml--all (yaml--chr ?\x) (yaml--rep 2 2 (lambda () (yaml--parse-from-grammar 'ns-hex-digit)))))) + ((eq state 'ns-anchor-name) (yaml--frame "ns-anchor-name" (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-anchor-char))))) + ((eq state 'ns-esc-slash) (yaml--frame "ns-esc-slash" (yaml--chr ?\/))) ((eq state 's-nb-folded-text) (let ((n (nth 0 args))) (yaml--frame "s-nb-folded-text" (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))))))) - ((eq state 'ns-word-char) (let () (yaml--frame "ns-word-char" (yaml--any (yaml--parse-from-grammar 'ns-dec-digit) (yaml--parse-from-grammar 'ns-ascii-letter) (yaml--chr ?\-))))) - ((eq state 'ns-esc-form-feed) (let () (yaml--frame "ns-esc-form-feed" (yaml--chr ?\f)))) + ((eq state 'ns-word-char) (yaml--frame "ns-word-char" (yaml--any (yaml--parse-from-grammar 'ns-dec-digit) (yaml--parse-from-grammar 'ns-ascii-letter) (yaml--chr ?\-)))) + ((eq state 'ns-esc-form-feed) (yaml--frame "ns-esc-form-feed" (yaml--chr ?\f))) ((eq state 'ns-s-block-map-implicit-key) - (let () (yaml--frame "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"))))) + (yaml--frame "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")))) - ((eq state 'ns-esc-null) (let () (yaml--frame "ns-esc-null" (yaml--chr ?\0)))) - ((eq state 'c-ns-tag-property) (let () (yaml--frame "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))))) - ((eq state 'c-ns-local-tag-prefix) (let () (yaml--frame "c-ns-local-tag-prefix" (yaml--all (yaml--chr ?\!) (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'ns-uri-char))))))) + ((eq state 'ns-esc-null) (yaml--frame "ns-esc-null" (yaml--chr ?\0))) + ((eq state 'c-ns-tag-property) (yaml--frame "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)))) + ((eq state 'c-ns-local-tag-prefix) (yaml--frame "c-ns-local-tag-prefix" (yaml--all (yaml--chr ?\!) (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'ns-uri-char)))))) ((eq state 'ns-tag-directive) - (let () - (yaml--frame "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))))) + (yaml--frame "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)))) ((eq state 'c-flow-mapping) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-flow-mapping" (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 ?\}))))) - ((eq state 'ns-double-char) (let () (yaml--frame "ns-double-char" (yaml--but (lambda () (yaml--parse-from-grammar 'nb-double-char)) (lambda () (yaml--parse-from-grammar 's-white)))))) - ((eq state 'ns-ascii-letter) (let () (yaml--frame "ns-ascii-letter" (yaml--any (yaml--chr-range ?\x41 ?\x5A) (yaml--chr-range ?\x61 ?\x7A))))) - ((eq state 'b-break) (let () (yaml--frame "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))))) - ((eq state 'nb-ns-double-in-line) (let () (yaml--frame "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))))))) + ((eq state 'ns-double-char) (yaml--frame "ns-double-char" (yaml--but (lambda () (yaml--parse-from-grammar 'nb-double-char)) (lambda () (yaml--parse-from-grammar 's-white))))) + ((eq state 'ns-ascii-letter) (yaml--frame "ns-ascii-letter" (yaml--any (yaml--chr-range ?\x41 ?\x5A) (yaml--chr-range ?\x61 ?\x7A)))) + ((eq state 'b-break) (yaml--frame "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)))) + ((eq state 'nb-ns-double-in-line) (yaml--frame "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)))))) ((eq state 's-l+block-node) - (let ((n (nth 0 args)) - (c (nth 1 args))) - (yaml--frame "s-l+block-node" - (yaml--any (yaml--parse-from-grammar 's-l+block-in-block n c) - (yaml--parse-from-grammar 's-l+flow-in-block n))))) + (yaml--frame "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))))) - ((eq state 'ns-esc-bell) (let () (yaml--frame "ns-esc-bell" (yaml--chr ?\a)))) - ((eq state 'c-named-tag-handle) (let () (yaml--frame "c-named-tag-handle" (yaml--all (yaml--chr ?\!) (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-word-char))) (yaml--chr ?\!))))) + ((eq state 'ns-esc-bell) (yaml--frame "ns-esc-bell" (yaml--chr ?\a))) + ((eq state 'c-named-tag-handle) (yaml--frame "c-named-tag-handle" (yaml--all (yaml--chr ?\!) (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-word-char))) (yaml--chr ?\!)))) ((eq state 's-separate-lines) (let ((n (nth 0 args))) (yaml--frame "s-separate-lines" (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))))) - ((eq state 'l-directive) (let () (yaml--frame "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))))) - ((eq state 'ns-esc-escape) (let () (yaml--frame "ns-esc-escape" (yaml--chr ?\e)))) + ((eq state 'l-directive) (yaml--frame "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)))) + ((eq state 'ns-esc-escape) (yaml--frame "ns-esc-escape" (yaml--chr ?\e))) ((eq state 'b-nb-literal-next) (let ((n (nth 0 args))) (yaml--frame "b-nb-literal-next" (yaml--all (yaml--parse-from-grammar 'b-as-line-feed) (yaml--parse-from-grammar 'l-nb-literal-text n))))) ((eq state 'ns-s-flow-map-entries) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-s-flow-map-entries" (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)))))))))) - ((eq state 'c-nb-comment-text) (let () (yaml--frame "c-nb-comment-text" (yaml--all (yaml--chr ?\#) (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'nb-char))))))) - ((eq state 'ns-dec-digit) (let () (yaml--frame "ns-dec-digit" (yaml--chr-range ?\x30 ?\x39)))) + ((eq state 'c-nb-comment-text) (yaml--frame "c-nb-comment-text" (yaml--all (yaml--chr ?\#) (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'nb-char)))))) + ((eq state 'ns-dec-digit) (yaml--frame "ns-dec-digit" (yaml--chr-range ?\x30 ?\x39))) ((eq state 'ns-yaml-directive) - (let () - (yaml--frame "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))))) + (yaml--frame "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)))) - ((eq state 'c-mapping-key) (let () (yaml--frame "c-mapping-key" (yaml--chr ?\?)))) - ((eq state 'b-as-line-feed) (let () (yaml--frame "b-as-line-feed" (yaml--parse-from-grammar 'b-break)))) + ((eq state 'c-mapping-key) (yaml--frame "c-mapping-key" (yaml--chr ?\?))) + ((eq state 'b-as-line-feed) (yaml--frame "b-as-line-feed" (yaml--parse-from-grammar 'b-break))) ((eq state 's-l+block-in-block) - (let ((n (nth 0 args)) - (c (nth 1 args))) - (yaml--frame "s-l+block-in-block" - (yaml--any (yaml--parse-from-grammar 's-l+block-scalar n c) - (yaml--parse-from-grammar 's-l+block-collection n c))))) + (yaml--frame "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))))) - ((eq state 'ns-esc-paragraph-separator) (let () (yaml--frame "ns-esc-paragraph-separator" (yaml--chr ?\P)))) + ((eq state 'ns-esc-paragraph-separator) (yaml--frame "ns-esc-paragraph-separator" (yaml--chr ?\P))) ((eq state 'c-double-quoted) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-double-quoted" (yaml--all (yaml--chr ?\") (yaml--parse-from-grammar 'nb-double-text n c) (yaml--chr ?\"))))) - ((eq state 'b-line-feed) (let () (yaml--frame "b-line-feed" (yaml--chr ?\x0A)))) - ((eq state 'ns-esc-horizontal-tab) (let () (yaml--frame "ns-esc-horizontal-tab" (yaml--any (yaml--chr ?\t) (yaml--chr ?\x09))))) + ((eq state 'b-line-feed) (yaml--frame "b-line-feed" (yaml--chr ?\x0A))) + ((eq state 'ns-esc-horizontal-tab) (yaml--frame "ns-esc-horizontal-tab" (yaml--any (yaml--chr ?\t) (yaml--chr ?\x09)))) ((eq state 'c-ns-flow-map-empty-key-entry) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-ns-flow-map-empty-key-entry" (yaml--all (yaml--parse-from-grammar 'e-node) (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n c))))) - ((eq state 'l-any-document) (let () (yaml--frame "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))))) - ((eq state 'c-tag) (let () (yaml--frame "c-tag" (yaml--chr ?\!)))) - ((eq state 'c-escape) (let () (yaml--frame "c-escape" (yaml--chr ?\\)))) - ((eq state 'c-sequence-end) (let () (yaml--frame "c-sequence-end" (yaml--chr ?\])))) + ((eq state 'l-any-document) (yaml--frame "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)))) + ((eq state 'c-tag) (yaml--frame "c-tag" (yaml--chr ?\!))) + ((eq state 'c-escape) (yaml--frame "c-escape" (yaml--chr ?\\))) + ((eq state 'c-sequence-end) (yaml--frame "c-sequence-end" (yaml--chr ?\]))) ((eq state 'l+block-mapping) - (let ((n (nth 0 args))) - (yaml--frame "l+block-mapping" - (progn - (let ((new-m (yaml--auto-detect-indent n))) - (yaml--all (yaml--set m new-m) - (yaml--rep 1 nil - (lambda () - (yaml--all - (yaml--parse-from-grammar 's-indent (+ n (prog1 new-m (message "BEEP: %s" new-m)))) - (yaml--parse-from-grammar 'ns-l-block-map-entry (+ n (prog1 new-m (message "BEEP: %s" new-m))))))))))))) + (yaml--frame "l+block-mapping" + (let ((new-m (yaml--auto-detect-indent (nth 0 args)))) + (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))))))))) ((eq state 'c-ns-flow-map-adjacent-value) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-ns-flow-map-adjacent-value" (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)))))) ((eq state 's-single-next-line) (let ((n (nth 0 args))) (yaml--frame "s-single-next-line" (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))))))))))) - ((eq state 's-separate-in-line) (let () (yaml--frame "s-separate-in-line" (yaml--any (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 's-white))) (yaml--start-of-line))))) - ((eq state 'b-comment) (let () (yaml--frame "b-comment" (yaml--any (yaml--parse-from-grammar 'b-non-content) (yaml--end-of-stream))))) - ((eq state 'ns-esc-backslash) (let () (yaml--frame "ns-esc-backslash" (yaml--chr ?\\)))) - ((eq state 'c-ns-anchor-property) (let () (yaml--frame "c-ns-anchor-property" (yaml--all (yaml--chr ?\&) (yaml--parse-from-grammar 'ns-anchor-name))))) - ((eq state 'ns-plain-safe) (let ((c (nth 0 args))) (yaml--frame "ns-plain-safe" (cond ((equal c "block-key") (yaml--parse-from-grammar 'ns-plain-safe-out)) ((equal c "flow-in") (yaml--parse-from-grammar 'ns-plain-safe-in)) ((equal c "flow-key") (yaml--parse-from-grammar 'ns-plain-safe-in)) ((equal c "flow-out") (yaml--parse-from-grammar 'ns-plain-safe-out)))))) + ((eq state 's-separate-in-line) (yaml--frame "s-separate-in-line" (yaml--any (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 's-white))) (yaml--start-of-line)))) + ((eq state 'b-comment) (yaml--frame "b-comment" (yaml--any (yaml--parse-from-grammar 'b-non-content) (yaml--end-of-stream)))) + ((eq state 'ns-esc-backslash) (yaml--frame "ns-esc-backslash" (yaml--chr ?\\))) + ((eq state 'c-ns-anchor-property) (yaml--frame "c-ns-anchor-property" (yaml--all (yaml--chr ?\&) (yaml--parse-from-grammar 'ns-anchor-name)))) + + ((eq state 'ns-plain-safe) + (let ((c (nth 0 args))) + (yaml--frame "ns-plain-safe" + (cond ((equal c "block-key") (yaml--parse-from-grammar 'ns-plain-safe-out)) + ((equal c "flow-in") (yaml--parse-from-grammar 'ns-plain-safe-in)) + ((equal c "flow-key") (yaml--parse-from-grammar 'ns-plain-safe-in)) + ((equal c "flow-out") (yaml--parse-from-grammar 'ns-plain-safe-out)))))) + ((eq state 'ns-flow-content) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "ns-flow-content" (yaml--any (yaml--parse-from-grammar 'ns-flow-yaml-content n c) (yaml--parse-from-grammar 'c-flow-json-content n c))))) ((eq state 'c-ns-flow-map-separate-value) (let ((n (nth 0 args)) (c (nth 1 args))) (yaml--frame "c-ns-flow-map-separate-value" (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)))))) ((eq state 'in-flow) (let ((c (nth 0 args))) (yaml--frame "in-flow" (cond ((equal c "block-key") (yaml--parse-from-grammar 'flow-key)) ((equal c "flow-in") "flow-in") ((equal c "flow-key") (yaml--parse-from-grammar 'flow-key)) ((equal c "flow-out") "flow-in"))))) - ((eq state 'c-verbatim-tag) (let () (yaml--frame "c-verbatim-tag" (yaml--all (yaml--chr ?\!) (yaml--chr ?\<) (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-uri-char))) (yaml--chr ?\>))))) - ((eq state 'c-literal) (let () (yaml--frame "c-literal" (yaml--chr ?\|)))) - ((eq state 'ns-esc-line-feed) (let () (yaml--frame "ns-esc-line-feed" (yaml--chr ?\n)))) + ((eq state 'c-verbatim-tag) (yaml--frame "c-verbatim-tag" (yaml--all (yaml--chr ?\!) (yaml--chr ?\<) (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-uri-char))) (yaml--chr ?\>)))) + ((eq state 'c-literal) (yaml--frame "c-literal" (yaml--chr ?\|))) + ((eq state 'ns-esc-line-feed) (yaml--frame "ns-esc-line-feed" (yaml--chr ?\n))) ((eq state 'nb-double-multi-line) (let ((n (nth 0 args))) (yaml--frame "nb-double-multi-line" (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)))))))) ((eq state 'b-l-spaced) (let ((n (nth 0 args))) (yaml--frame "b-l-spaced" (yaml--all (yaml--parse-from-grammar 'b-as-line-feed) (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 'l-empty n "block-in"))))))) ((eq state 'ns-flow-yaml-content)