Correction: `(length fn-names)` should be `(length (member name fn-names))` to
handle the possibility of multiple references to the same footnote.
;;;;;;;;;;;;;;;;;;;;;;;;;;
#lang racket/base
(require racket/list)
(provide (all-defined-out))
(define (fn-id x) (string-append x "_fn"))
(define (fnref-id x) (string-append x "_fnref"))
(define fn-names null)
(define (fn name-in)
(define name (format "~a" name-in))
(set! fn-names (if (member name fn-names) fn-names (cons name fn-names)))
`(sup (a ((href ,(string-append "#" (fnref-id name)))
(id ,(fn-id name)))
,(format "(~a)" (length (member name fn-names))))))
(define fndefs (make-hash))
(define (fndef name . xs) (hash-set! fndefs (format "~a" name) xs))
(define (footnote-block)
(define note-items
(for/list ([fn-name (in-list (reverse fn-names))])
`(li ((id ,(fnref-id fn-name)))
,@(append
(hash-ref fndefs fn-name)
(list `(a ((href ,(string-append "#" (fn-id fn-name))))
"↩"))))))
`(section ((class "footnotes")) (ol ,@note-items)))
(define (root . elements)
`(root ,@elements ,(footnote-block)))
--
You received this message because you are subscribed to the Google Groups
"Pollen" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.