(declare (module (jimmy html))) (import scheme (chicken base) (chicken irregex) (jimmy emit) (jimmy util)) (define (escape-entities s) (irregex-replace/all "[&<>]" s (lambda (m) (let ((c (irregex-match-substring m))) (cond ((equal? c "&") "&") ((equal? c "<") "<") ((equal? c ">") ">")))))) (define (add-inline-markup s) (define (char->tag ch tag) (lambda (s) (irregex-replace/all `(: ,ch ($ (* (~ ,ch))) ,ch) s "<" tag ">" 1 ""))) ((o (char->tag "*" "b") (char->tag "_" "i") (char->tag "`" "code")) s)) (formats '((para (line . "~a~%") (stanza . "

~% ~a

~%")) (verb (line . "~a~%") (stanza . "
~a
~%")) (link (line . "
  • ~a
  • ~%") (stanza . "~%") (inline . "~a~%")) (list (line . "
  • ~a
  • ~%") (stanza . "~%")) (quot (line . "~a~%") (stanza . "
    ~% ~a
    ~%")) (hdr1 (line . "~a") (stanza . "

    ~a

    ~%")) (hdr2 (line . "~a") (stanza . "

    ~a

    ~%")) (hdr3 (line . "~a") (stanza . "

    ~a

    ~%")))) (filters `((verb (line . ,identity) (stanza . ,join-lines)) (link (line . ,(lambda (ln) (cons (car ln) ((o list add-inline-markup escape-entities string-join) (cdr ln)))))) (default (line . ,(o list add-inline-markup escape-entities string-join)) (stanza . ,string-join))))