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))
 
 (defun 1+ (n)
   (+ 1 n))
 
 (define head-tag-num (make-parameter 0))
 (defun current-head-tag ()
   (println (format "at head tag: ~a" (head-tag-num)))
   (string->symbol (format "h~d" (head-tag-num))))
 
 (defun headline (element)
   ((default-tag-function (current-head-tag)) empty element))
 
ee0b3ccd
 (define (term val)
   (let ([code (default-tag-function 'code)]
865712d7
         [u (default-tag-function 'u)]
         [a (default-tag-function 'a)])
ee0b3ccd
     (code (u (a #:href (string-append "#" val)
865712d7
                 val)))))
 
ee0b3ccd
 (define def (default-tag-function 'a #:name "foo"))
865712d7
 
ee0b3ccd
 (define items (default-tag-function 'ul))
865712d7
 
ee0b3ccd
 (define item (default-tag-function 'li 'p))
865712d7
 
ee0b3ccd
 (define (link url text) `(a ((href ,url)) ,text))
865712d7
 
 (define %section-tag (default-tag-function 'section))
 
 ;; 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))])
        (println (format "At head-tag-num ~d" (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)))))]))
 
 (define (sidenote label . xs)
   `(splice-me
     (label ((for ,label) (class "margin-toggle sidenote-number")))
     (input ((id ,label) (class "margin-toggle")(type "checkbox")))
     (span ((class "sidenote")) ,@xs)))