about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès2009-05-26 19:02:01 +0200
committerLudovic Courtès2009-05-26 19:02:01 +0200
commit7221ccf9edd1ebde56a7915a338dacf537e8f3fb (patch)
tree22192210be2af8e92de144f3a948319be9535cb5
parent46e04425fee7fc462e5c1a718688d2b508291366 (diff)
downloadskribilo-7221ccf9edd1ebde56a7915a338dacf537e8f3fb.tar.gz
skribilo-7221ccf9edd1ebde56a7915a338dacf537e8f3fb.tar.lz
skribilo-7221ccf9edd1ebde56a7915a338dacf537e8f3fb.zip
Make sure to bind nodes that are in the body of non-markup nodes.
* src/guile/skribilo/ast.scm (document-bind-nodes!): Traverse other
  nodes as well, such as processors.

* src/guile/skribilo/resolve.scm (do-resolve!<unresolved>>): Likewise.

* tests/resolve.test ("resolved nested document bindings"): New test.
-rw-r--r--src/guile/skribilo/ast.scm3
-rw-r--r--src/guile/skribilo/resolve.scm5
-rw-r--r--tests/resolve.test11
3 files changed, 18 insertions, 1 deletions
diff --git a/src/guile/skribilo/ast.scm b/src/guile/skribilo/ast.scm
index 86fa781..99ce3cf 100644
--- a/src/guile/skribilo/ast.scm
+++ b/src/guile/skribilo/ast.scm
@@ -510,6 +510,9 @@
                  (document-bind-node! doc node)
                  (loop (markup-body node) doc))
 
+                ((node? node)
+                 (loop (node-body node) doc))
+
                 ((pair? node)
                  (for-each (lambda (n) (loop n doc)) node))
 
diff --git a/src/guile/skribilo/resolve.scm b/src/guile/skribilo/resolve.scm
index 2073f25..d8efe08 100644
--- a/src/guile/skribilo/resolve.scm
+++ b/src/guile/skribilo/resolve.scm
@@ -206,7 +206,7 @@
 
          ;; Bind non-unresolved children of RES now so that unresolved
          ;; children of RES (if any) can look them up in the next `resolve!'
-         ;; run.  (XXX: This largely duplicated `document-bind-nodes!'.)
+         ;; run.  (XXX: This largely duplicates `document-bind-nodes!'.)
          (let loop ((node res)
                     (doc  (ast-document node)))
            (if (ast? node)
@@ -224,6 +224,9 @@
                   (document-bind-node! doc node)
                   (loop (markup-body node) doc))
 
+                 ((node? node)
+                  (loop (node-body node) doc))
+
                  ((pair? node)
                   (for-each (lambda (n) (loop n doc)) node))
 
diff --git a/tests/resolve.test b/tests/resolve.test
index 864ac88..18408e8 100644
--- a/tests/resolve.test
+++ b/tests/resolve.test
@@ -192,6 +192,17 @@
                 (eq? (ast-parent x) sub)
                 (eq? (ast-document x) sub))))))
 
+(test-assert "node bindings in processor body"
+  (let* ((doc (document #:title "Doc"
+                (processor #:combinator (lambda (e1 e2) e1)
+                  (chapter #:ident "c")))))
+    (resolve! doc %engine '())
+    (let* ((proc (car (markup-body doc)))
+           (ch   (car (markup-body proc)))
+           (ch*  (document-lookup-node doc "c")))
+      (format (current-error-port) "~A vs ~A~%" ch ch*)
+      (eq? ch ch*))))
+
 (test-end "resolve")