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

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

[elpa] externals/gnugo 4f96ca6 076/357: [gnugo sgf int] Add abstractions


From: Stefan Monnier
Subject: [elpa] externals/gnugo 4f96ca6 076/357: [gnugo sgf int] Add abstractions: seek, seek-into
Date: Sun, 29 Nov 2020 14:50:52 -0500 (EST)

branch: externals/gnugo
commit 4f96ca63114236ab2151f7ba0192b1838ef474b5
Author: Thien-Thi Nguyen <ttn@gnu.org>
Commit: Thien-Thi Nguyen <ttn@gnu.org>

    [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.
---
 gnugo.el | 42 ++++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/gnugo.el b/gnugo.el
index c93232e..02fe4e3 100644
--- a/gnugo.el
+++ b/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]