aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/guile/skribilo/ast.scm22
-rw-r--r--src/guile/skribilo/engine/lout.scm22
2 files changed, 30 insertions, 14 deletions
diff --git a/src/guile/skribilo/ast.scm b/src/guile/skribilo/ast.scm
index 542f629..55f37bf 100644
--- a/src/guile/skribilo/ast.scm
+++ b/src/guile/skribilo/ast.scm
@@ -30,6 +30,9 @@
:autoload (skribilo location) (location?)
:autoload (srfi srfi-1) (fold)
+
+ :use-module (ice-9 optargs)
+
:export (<ast> ast? ast-loc ast-loc-set!
ast-parent ast->string ast->file-location
ast-resolved?
@@ -62,6 +65,9 @@
find-up find1-up
ast-document ast-chapter ast-section
+ ;; numbering
+ markup-number-string
+
;; error conditions
&ast-error &ast-orphan-error &ast-cycle-error
&markup-unknown-option-error &markup-already-bound-error
@@ -596,6 +602,22 @@
(define (ast-section m)
(find1-up (lambda (n) (is-markup? n 'section)) m))
+
+;;;
+;;; Section numbering.
+;;;
+
+(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) ""))))))
+
;;; arch-tag: e2489bd6-1b6d-4b03-bdfb-83cffd2f7ce7
diff --git a/src/guile/skribilo/engine/lout.scm b/src/guile/skribilo/engine/lout.scm
index 272b131..6106f35 100644
--- a/src/guile/skribilo/engine/lout.scm
+++ b/src/guile/skribilo/engine/lout.scm
@@ -502,7 +502,7 @@
(if num
(begin
(if (is-markup? node 'chapter) (display "@B { "))
- (printf "~a. |2s " (lout-structure-number-string node))
+ (printf "~a. |2s " (markup-number-string node))
(output title engine)
(if (is-markup? node 'chapter) (display " }")))
(if (is-markup? node 'chapter)
@@ -525,7 +525,7 @@
(define (lout-pdf-bookmark-title node engine)
;; Default implementation of the `pdf-bookmark-title-proc' custom that
;; returns a title (a string) for the PDF bookmark of `node'.
- (let ((number (lout-structure-number-string node)))
+ (let ((number (markup-number-string node)))
(string-append (if (string=? number "") "" (string-append number ". "))
(ast->string (markup-option node :title)))))
@@ -1321,17 +1321,11 @@
doc-type)))))
(define-public (lout-structure-number-string markup)
- ;; Return a structure number string such as "1.2".
- ;; FIXME: External code has started to rely on this. This should be
- ;; generalized and moved elsewhere.
- (let loop ((struct markup))
- (if (document? struct)
- ""
- (let ((parent-num (loop (ast-parent struct)))
- (num (markup-option struct :number)))
- (string-append parent-num
- (if (string=? "" parent-num) "" ".")
- (if (number? num) (number->string num) ""))))))
+ ;; FIXME: External code has started to rely on this before this was moved
+ ;; to the `ast' module as `markup-number-string'. Thus, we'll have to keep it
+ ;; here for some time.
+ (markup-number-string markup "."))
+
;*---------------------------------------------------------------------*/
;* lout-block-before ... */
@@ -1360,7 +1354,7 @@
(if (number? number)
(printf " @BypassNumber { ~a }\n"
- (lout-structure-number-string n))
+ (markup-number-string n))
(if (not number)
;; this trick hides the section number
(printf " @BypassNumber { } # unnumbered\n")))