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)))
|