git.fiddlerwoaroof.com
docs/pollen.rkt
865712d7
 #lang racket
 
 (require pollen/tag compatibility/defmacro)
 (require pollen/decode txexpr srfi/48)
ee0b3ccd
 (provide (all-defined-out))
865712d7
 
 (defmacro defun (name args . body)
   `(define (,name ,@args)
      ,@body))
 
3d27451d
 (defmacro funcall (fun . args)
   `(,fun ,@args))
865712d7
 
3d27451d
 (defmacro defvar (name def)
   `(define ,name ,def))
865712d7
 
 ;; This is a macro so that the parameterize form evaluates in the right order
 (define-syntax section
   (syntax-rules ()
     [(section #:headline %headline . body)
      (parameterize ([head-tag-num (1+ (head-tag-num))])
        (section `,(headline %headline) . body))]
     [(section . body)
      (txexpr 'section empty
              (decode-elements (list . body)
                               #:txexpr-elements-proc
                               (lambda (x)
                                 (decode-paragraphs x
                                                    #:linebreak-proc
                                                    (lambda (y) y)))))]))
 
3d27451d
 (defvar head-tag-num
   (make-parameter 0))
 
 (defvar def
   (default-tag-function 'a #:name "foo"))
 
 (defvar items
   (default-tag-function 'ul))
 
 (defvar item
   (default-tag-function 'li 'p))
 
 (defvar %section-tag
   (default-tag-function 'section))
 
 (defun 1+ (n)
   (+ 1 n))
 
 (defun current-head-tag ()
   (string->symbol (format "h~d" (head-tag-num))))
 
 (defun headline (element)
   (funcall (default-tag-function (current-head-tag)) empty element))
 
 (defun term (val)
   (let ([code (default-tag-function 'code)]
         [u (default-tag-function 'u)]
         [a (default-tag-function 'a)])
     (code (u (a #:href (string-append "#" val)
                 val)))))
 
 (defun link (url text)
   `(a (funcall (href ,url)) ,text))
 
 (defun sidenote (label . xs)
865712d7
   `(splice-me
     (label ((for ,label) (class "margin-toggle sidenote-number")))
     (input ((id ,label) (class "margin-toggle")(type "checkbox")))
     (span ((class "sidenote")) ,@xs)))