about summary refs log tree commit diff stats
path: root/scratchdown.scm
diff options
context:
space:
mode:
Diffstat (limited to 'scratchdown.scm')
-rwxr-xr-xscratchdown.scm55
1 files changed, 55 insertions, 0 deletions
diff --git a/scratchdown.scm b/scratchdown.scm new file mode 100755 index 0000000..2775e3f --- /dev/null +++ b/scratchdown.scm
@@ -0,0 +1,55 @@
1#!/bin/sh
2#| -*- scheme -*-
3exec csi -s "$0" "$@"
4SCRATCHDOWN --- Combine markdown and chicken-scratch
5|#
6
7(import (chicken io)
8 (chicken irregex)
9 (chicken process-context)
10 (chicken-scratch)
11 (html-parser)
12 (lowdown)
13 (sxml-transforms)
14 (utf8))
15
16(define (expand* text)
17 (expand-string
18 (irregex-replace/all '(or (: #\# #\# (look-ahead (or #\{ #\()))
19 (: #\# (look-ahead (~ #\{ #\()))
20 (: #\# eos))
21 text
22 "##")))
23
24#;(define (list-of-strings? xs)
25 (cond
26 ((null? xs) #t)
27 ((not (string? (car xs))) #f)
28 (else (list-of-strings? (cdr xs)))))
29
30#;(define (expand-text x)
31 (print x)
32 (cond
33 ((symbol? x) x)
34 ((string? x)
35 (expand* x))
36 ((list-of-strings? x)
37 (expand* (apply string-append x)))
38 ((list-of-strings? (cdr x))
39 (cons (car x)
40 (expand-text (cdr x))))
41 ((list? x)
42 (map expand-text x))
43 (else x)))
44
45(define (read-and-expand file)
46 (let* ((text (with-input-from-file file read-string))
47 (expd (irregex-replace "^#!.*\n" (expand* text) ""))
48 #;(sexp (markdown->sxml expd))
49 )
50 (markdown->html expd)))
51
52(define (main args)
53 (for-each read-and-expand args))
54
55(main (command-line-arguments))