|
|
|
#lang racket/base
|
|
|
|
(require racket/contract racket/match racket/set)
|
|
|
|
(require chirp/html sugar txexpr)
|
|
|
|
(require "world.rkt" "file-tools.rkt" "debug.rkt")
|
|
|
|
|
|
|
|
(provide (all-from-out "file-tools.rkt"))
|
|
|
|
|
|
|
|
;; test for well-formed meta
|
|
|
|
(define+provide/contract (meta-xexpr? x)
|
|
|
|
(any/c . -> . boolean?)
|
|
|
|
(match x
|
|
|
|
[`(meta ,(? string? key) ,(? string? value)) #t]
|
|
|
|
[else #f]))
|
|
|
|
|
|
|
|
;; initial set of block tags: from html
|
|
|
|
(define project-block-tags block-tags)
|
|
|
|
|
|
|
|
(define+provide/contract (append-block-tag tag)
|
|
|
|
(txexpr-tag? . -> . void?)
|
|
|
|
(set! project-block-tags (cons tag project-block-tags)))
|
|
|
|
|
|
|
|
;; is the txexpr a block element (as opposed to inline)
|
|
|
|
;; tags are inline unless they're registered as block tags.
|
|
|
|
(define+provide/contract (block-xexpr? x)
|
|
|
|
(any/c . -> . boolean?)
|
|
|
|
;; (car x) = shorthand for tag of xexpr
|
|
|
|
((txexpr? x) . and . ((car x) . in? . project-block-tags)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|