diff options
Diffstat (limited to 'src/guile/skribilo/ast.scm')
-rw-r--r-- | src/guile/skribilo/ast.scm | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/guile/skribilo/ast.scm b/src/guile/skribilo/ast.scm index 1b37a0b..f515009 100644 --- a/src/guile/skribilo/ast.scm +++ b/src/guile/skribilo/ast.scm @@ -23,6 +23,7 @@ (define-module (skribilo ast) :use-module (oop goops) + :use-module (srfi srfi-13) :use-module (srfi srfi-34) :use-module (srfi srfi-35) :use-module (skribilo condition) @@ -610,20 +611,33 @@ ;; Return a structure number string such as "1.2". (cond ((is-markup? markup 'figure) ;; Figure numbering is assumed to be document-wide. - (number->string (markup-option markup :number))) + (let ((num (markup-option markup :number))) + (if (number? num) + (number->string num) + num))) (else ;; Use a hierarchical numbering scheme. - (let loop ((markup markup)) + (let loop ((markup markup) + (result '())) (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) - "")))))))) - + (string-join result sep) + (let ((num (markup-option markup :number))) + (loop (ast-parent markup) + (cond ((number? num) + (cons (number->string num) + result)) + ((ast? num) + (cons (ast->string num) + result)) + ((string? num) + (cons num result)) + (else + result))))))))) + + +;;; Local Variables: +;;; coding: latin-1 +;;; End: ;;; arch-tag: e2489bd6-1b6d-4b03-bdfb-83cffd2f7ce7 |