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