[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