branch: externals/yaml
commit a1d6e3211c8ef503da4b2fc6dc340bf3b6a6623c
Author: Zachary Romero <zacrom...@posteo.net>
Commit: Zachary Romero <zacrom...@posteo.net>

    Initial working yaml-parser
---
 yaml.el | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/yaml.el b/yaml.el
index e21dc72ee3..a4d6c5a323 100644
--- a/yaml.el
+++ b/yaml.el
@@ -185,7 +185,7 @@
 
 (defun yaml--mapping-start-event (flow)
   (push :mapping yaml--state-stack)
-  (push (make-hash-table) yaml--object-stack)
+  (push (make-hash-table :test 'equal) yaml--object-stack)
   '(:mapping-start))
 
 (defun yaml--mapping-end-event ()
@@ -196,9 +196,14 @@
   '(:mapping-end))
 
 (defun yaml--sequence-start-event (flow)
+  (push :sequence yaml--state-stack)
+  (push nil yaml--object-stack)
   '(:sequence-start))
 
 (defun yaml--sequence-end-event ()
+  (pop yaml--state-stack)
+  (let ((obj (pop yaml--object-stack)))
+    (yaml--scalar-event nil obj))
   '(:sequence-end))
 
 (defun yaml--scalar-event (style value)
@@ -206,6 +211,9 @@
     (cond
      ((not top-state)
       (setq yaml--root value))
+     ((equal top-state :sequence)
+      (let ((l (car yaml--object-stack)))
+        (setcar yaml--object-stack (append l (list value)))))
      ((equal top-state :mapping)
       (progn
         (push :mapping-value yaml--state-stack)
@@ -273,11 +281,11 @@
     ("l+block-mapping" . (lambda (text)
                            (yaml--add-event (yaml--mapping-end-event))))
     ("l+block-sequence" . (lambda (text)
-                            (yaml--add-event (yaml--sequence-end-event nil))))
+                            (yaml--add-event (yaml--sequence-end-event))))
     ("ns-l-compact-mapping" . (lambda (text)
                                 (yaml--add-event (yaml--mapping-end-event))))
     ("ns-l-compact-sequence" . (lambda (text)
-                                 (yaml--add-event (yaml--sequence-end-event 
nil))))
+                                 (yaml--add-event (yaml--sequence-end-event))))
     ("ns-flow-pair" . (lambda (text)
                         (yaml--add-event (yaml--mapping-end-event))))
     ("ns-plain" . (lambda (text)
@@ -360,7 +368,8 @@
                                   (replaced (replace-regexp-in-string
                                              "\\\\\\\\"
                                              "\\"
-                                             replaced)))
+                                             replaced))
+                                  (replaced (substring replaced 1 (1- (length 
replaced)))))
                              (yaml--add-event (yaml--scalar-event "double" 
replaced)))))
     ("c-l+literal" . (lambda (text)
                        ;; TODO
@@ -403,9 +412,9 @@
        ;;(message "%2d: %s" (length yaml-states) ,name)
        (yaml--push-state ,name)
        (when (not (member ,name yaml-tracing-ignore))
-         (message "|%s>%s %30s \"%s\""
+         (message "|%s>%s %40s \"%s\""
                   (make-string (length yaml-states) ?-)
-                  (make-string (- 30 (length yaml-states)) ?\s)
+                  (make-string (- 40 (length yaml-states)) ?\s)
                   ,name
                   (replace-regexp-in-string
                    "\n"
@@ -416,9 +425,9 @@
        (let ((beg yaml-parsing-position)
              (,res-symbol ,rule))
          (when (and ,res-symbol (not (member ,name yaml-tracing-ignore)))
-           (message "<%s|%s %30s \"%s\" = %s"
+           (message "<%s|%s %40s \"%s\" = %s"
                     (make-string (length yaml-states) ?-)
-                    (make-string (- 30 (length yaml-states)) ?\s)
+                    (make-string (- 40 (length yaml-states)) ?\s)
                     ,name
                     (replace-regexp-in-string
                      "\n"
@@ -668,7 +677,8 @@
                      yaml-parsing-position
                      (length yaml-parsing-input))))
     (message "Parsed data: %s" res)
-    (yaml--walk-events res)))
+    (yaml--walk-events res)
+    yaml--root))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1420,7 +1430,7 @@
 (defun yaml-c-ns-flow-pair-json-key-entry (n c)
   "Documentation string."
   (yaml--frame "c-ns-flow-pair-json-key-entry"
-    (yaml--all (yaml-c-s-implicit-json-key (yaml-flow-key))
+    (yaml--all (yaml-c-s-implicit-json-key "flow-key")
                (yaml-c-ns-flow-map-adjacent-value n c))))
 
 (defun yaml-l-literal-content (n t)
@@ -1620,7 +1630,7 @@
 (defun yaml-ns-flow-pair-yaml-key-entry (n c)
   "Documentation string."
   (yaml--frame "ns-flow-pair-yaml-key-entry"
-    (yaml--all (yaml-ns-s-implicit-yaml-key (yaml-flow-key))
+    (yaml--all (yaml-ns-s-implicit-yaml-key "flow-key")
                (yaml-c-ns-flow-map-separate-value n c))))
 
 (defun yaml-e-scalar ()

Reply via email to