emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] 01/02: [gnugo sgf int] Add abstractions: seek, seek-into


From: Thien-Thi Nguyen
Subject: [elpa] 01/02: [gnugo sgf int] Add abstractions: seek, seek-into
Date: Fri, 14 Mar 2014 08:01:59 +0000

ttn pushed a commit to branch master
in repository elpa.

commit a0496d23e6168f1109f73c78f04aa907d1cf0159
Author: Thien-Thi Nguyen <address@hidden>
Date:   Fri Mar 14 08:55:02 2014 +0100

    [gnugo sgf int] Add abstractions: seek, seek-into
    
    * packages/gnugo/gnugo.el (gnugo/sgf-read-file):
    ...here, as internal funcs via ‘cl-labels’.
    (gnugo/sgf-read-file NODE): Rewrite.
    (gnugo/sgf-read-file TREE): Likewise, w/ arg LEV.
    (gnugo/sgf-read-file): Call ‘TREE’ once, w/ LEV 0.
---
 packages/gnugo/gnugo.el |   42 ++++++++++++++++++++++--------------------
 1 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/packages/gnugo/gnugo.el b/packages/gnugo/gnugo.el
index c93232e..02fe4e3 100644
--- a/packages/gnugo/gnugo.el
+++ b/packages/gnugo/gnugo.el
@@ -2143,28 +2143,30 @@ starting a new one.  See `gnugo-board-mode' 
documentation for more info."
                                     (forward-char -1)
                                     (nreverse ls))))
                          (forward-char 1))))))
-         (NODE () (let (prop props)
-                    (sw) (short 'node)
-                    (when (= ?\; (char-after))
-                      (forward-char 1)
-                      (while (setq prop (PROP))
-                        (push prop props))
-                      (nreverse props))))
-         (TREE () (let (nodes)
-                    (while (and (sw) (not (eobp)))
-                      (case (char-after)
-                        (?\; (push (NODE) nodes))
-                        (?\( (forward-char 1)
-                             (push (TREE) nodes))
-                        (?\) (forward-char 1))))
-                    (nreverse nodes))))
+         (seek (c) (and (sw) (not (eobp)) (= c (char-after))))
+         (seek-into (c) (when (seek c)
+                          (forward-char 1)
+                          t))
+         (NODE () (when (seek-into ?\;)
+                    (loop with prop
+                          while (setq prop (PROP))
+                          collect prop)))
+         (TREE (lev) (prog1
+                         ;; hmm
+                         ;;  ‘append’ => ([NODE...] [SUBTREE...])
+                         ;;  ‘cons’   => (([NODE...]) . [SUBTREE...])
+                         (append
+                          ;; nodes
+                          (loop while (seek ?\;)
+                                collect (NODE))
+                          ;; subtrees
+                          (loop while (seek-into ?\()
+                                collect (TREE (1+ lev))))
+                       (unless (zerop lev)
+                         (assert (seek-into ?\)))))))
       (with-temp-buffer
         (insert-file-contents filename)
-        (let (trees)
-          (while (and (sw) (not (eobp)) (= 40 (char-after))) ; left paren
-            (forward-char 1)
-            (push (TREE) trees))
-          (nreverse trees))))))
+        (TREE 0)))))
 
 (defun gnugo/sgf-write-file (collection filename)
   ;; take responsibility for our actions



reply via email to

[Prev in Thread] Current Thread [Next in Thread]