aboutsummaryrefslogtreecommitdiff
path: root/src/guile/skribilo/package/base.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/guile/skribilo/package/base.scm')
-rw-r--r--src/guile/skribilo/package/base.scm51
1 files changed, 47 insertions, 4 deletions
diff --git a/src/guile/skribilo/package/base.scm b/src/guile/skribilo/package/base.scm
index 3145695..b904ed8 100644
--- a/src/guile/skribilo/package/base.scm
+++ b/src/guile/skribilo/package/base.scm
@@ -33,7 +33,7 @@
:autoload (skribilo engine) (engine? engine-class?)
;; optional ``sub-packages''
- :autoload (skribilo biblio) (default-bib-table resolve-bib
+ :autoload (skribilo biblio) (*bib-table* resolve-bib
bib-load! bib-add!)
:autoload (skribilo color) (skribe-use-color!)
:autoload (skribilo source) (language? source-read-lines source-fontify)
@@ -1017,7 +1017,7 @@
(subsection #f)
(subsubsection #f)
(bib #f)
- (bib-table (default-bib-table))
+ (bib-table (*bib-table*))
(url #f)
(figure #f)
(mark #f)
@@ -1189,6 +1189,49 @@
(line (line-ref line))
(else (skribe-error 'ref "illegal reference" opts)))))
+
+;*---------------------------------------------------------------------*/
+;* numref ... */
+;*---------------------------------------------------------------------*/
+(define-markup (numref #!rest opts
+ #!key (ident #f) (text "") (page #f)
+ (separator ".") (class #f))
+ ;; Produce a numbered reference to `ident'.
+ (new unresolved
+ (proc (lambda (n e env)
+ (let* ((parent (ast-parent n))
+ (doc (ast-document n))
+ (target (document-lookup-node doc ident))
+ (number (and target
+ (markup-option target :number))))
+ (cond
+ ((not target)
+ (skribe-warning/ast 1 n 'numref
+ (format #f "can't find `ident': ")
+ ident)
+ (new markup
+ (markup 'unref)
+ (ident (symbol->string (gensym "unref")))
+ (class class)
+ (required-options '(:text))
+ (options `((kind numref)
+ ,@(the-options opts :ident :class)))
+ (body (list ident ": " (ast->file-location n)))))
+ ((unresolved? number)
+ ;; Loop until `number' is resolved.
+ n)
+ (else
+ (let ((xref
+ (ref :text
+ (list (if text text "") " "
+ (if (number? number)
+ (markup-number-string target
+ separator)
+ ""))
+ :page page
+ :handle (handle target))))
+ (resolve! xref e env)))))))))
+
;*---------------------------------------------------------------------*/
;* resolve ... */
;*---------------------------------------------------------------------*/
@@ -1204,7 +1247,7 @@
;*---------------------------------------------------------------------*/
(define-markup (bibliography #!rest files
#!key
- (command #f) (bib-table (default-bib-table)))
+ (command #f) (bib-table (*bib-table*)))
(for-each (lambda (f)
(cond
((string? f)
@@ -1226,7 +1269,7 @@
(define-markup (the-bibliography #!rest opts
#!key
pred
- (bib-table (default-bib-table))
+ (bib-table (*bib-table*))
(sort bib-sort/authors)
(count 'partial))
(if (not (memq count '(partial full)))