From 5617d303ebb53291567f5b8199afb2d95db8e89b Mon Sep 17 00:00:00 2001
From: Ludovic Court`es
Date: Mon, 4 Jun 2007 12:43:42 +0000
Subject: Fixed handling of figure numbering in `ref'.

* src/guile/skribilo/ast.scm (markup-number-string): Don't use a
  hierarchical numbering scheme for figures.

* src/guile/skribilo/engine/lout.scm (ref): Use `markup-number-string'
  rather than `@NumberOf' to determine the number of a figure.  This
  guarantees numbering consistency.

git-archimport-id: lcourtes@laas.fr--2006-libre/skribilo--devo--1.2--patch-55
---
 src/guile/skribilo/ast.scm         | 23 ++++++++++++++--------
 src/guile/skribilo/engine/lout.scm | 39 +++++++++++++++++++-------------------
 2 files changed, 34 insertions(+), 28 deletions(-)

(limited to 'src')

diff --git a/src/guile/skribilo/ast.scm b/src/guile/skribilo/ast.scm
index 534b832..e60957c 100644
--- a/src/guile/skribilo/ast.scm
+++ b/src/guile/skribilo/ast.scm
@@ -608,14 +608,21 @@
 
 (define* (markup-number-string markup :optional (sep "."))
   ;; Return a structure number string such as "1.2".
-  (let loop ((markup markup))
-    (if (document? markup)
-	""
-	(let ((parent-num (loop (ast-parent markup)))
-	      (num (markup-option markup :number)))
-	  (string-append parent-num
-			 (if (string=? "" parent-num) "" sep)
-			 (if (number? num) (number->string num) ""))))))
+  (cond ((is-markup? markup 'figure)
+         ;; Figure numbering is assumed to be document-wide.
+         (number->string (markup-option markup :number)))
+        (else
+         ;; Use a hierarchical numbering scheme.
+         (let loop ((markup markup))
+           (if (document? markup)
+               ""
+               (let ((parent-num (loop (ast-parent markup)))
+                     (num (markup-option markup :number)))
+                 (string-append parent-num
+                                (if (string=? "" parent-num) "" sep)
+                                (if (number? num)
+                                    (number->string num)
+                                    ""))))))))
 
 
 ;;; arch-tag: e2489bd6-1b6d-4b03-bdfb-83cffd2f7ce7
diff --git a/src/guile/skribilo/engine/lout.scm b/src/guile/skribilo/engine/lout.scm
index e00d213..aebde57 100644
--- a/src/guile/skribilo/engine/lout.scm
+++ b/src/guile/skribilo/engine/lout.scm
@@ -2441,30 +2441,25 @@
 ;*    ref ... @label ref@                                              */
 ;*---------------------------------------------------------------------*/
 (markup-writer 'ref
-   :options '(:text :chapter :section :subsection :subsubsection
-	      :figure :mark :handle :ident :page)
+   :options '(:text :page text kind
+              :chapter :section :subsection :subsubsection
+	      :figure :mark :handle :ident)
+
    :action (lambda (n e)
-	     (let ((url (markup-option n :url))
-		   (text (markup-option n :text))
-		   (mark (markup-option n :mark))
-		   (handle (markup-option n :handle))
-		   (chapter (markup-option n :chapter))
-		   (section (markup-option n :section))
-		   (subsection (markup-option n :subsection))
-		   (subsubsection (markup-option n :subsubsection))
+	     (let ((ident          (markup-option n 'text))
+                   (kind           (markup-option n 'kind))
+		   (text           (markup-option n :text))
 		   (show-page-num? (markup-option n :page)))
 
-		;; A handle to the target is automagically passed
-		;; as the body of each `ref' instance (see `api.scm').
+                   ;; A handle to the target is passed as the body of each
+                   ;; `ref' instance (see `package/base.scm').
 		(let* ((target (handle-ast (markup-body n)))
-		       (ident (markup-ident target))
-		       (title (markup-option target :title))
-		       (number (markup-option target :number)))
+		       (title  (markup-option target :title)))
 		   (lout-debug "ref: target=~a ident=~a" target ident)
 		   (if text (output text e))
 
 		   ;; Marks don't have a number
-		   (if (eq? (markup-markup target) 'mark)
+		   (if (eq? kind 'mark)
 		       (printf (lout-page-of ident))
 		       (begin
 			  ;; Don't output a section/whatever number
@@ -2474,10 +2469,14 @@
 			  ;; we don't even know how to reference them
 			  ;; anyway.
 			  (if (not text)
-			      (printf " @NumberOf { ~a }"
-				      (lout-tagify ident)))
-			  (if show-page-num?
-			      (printf (lout-page-of ident)))))))))
+                              (let ((number
+                                     (if (eq? kind 'figure)
+                                         (markup-option target :number)
+                                         (markup-number-string target))))
+                                (display " ")
+                                (display number))
+                              (if show-page-num?
+                                  (printf (lout-page-of ident))))))))))
 
 
 ;*---------------------------------------------------------------------*/
-- 
cgit v1.2.3