diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rwxr-xr-x | chicken-scratch.mod.scm | 10 | ||||
-rwxr-xr-x | chicken-scratch.scm | 2 | ||||
-rw-r--r-- | makefile | 8 | ||||
-rwxr-xr-x | scratchdown.scm | 55 |
5 files changed, 70 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore index 8b6a74a..5b41b96 100644 --- a/.gitignore +++ b/.gitignore | |||
@@ -1,4 +1,5 @@ | |||
1 | chicken-scratch | 1 | chicken-scratch |
2 | scratchdown | ||
2 | *.link | 3 | *.link |
3 | *.so | 4 | *.so |
4 | *.o | 5 | *.o |
diff --git a/chicken-scratch.mod.scm b/chicken-scratch.mod.scm index e47ad67..0ba704e 100755 --- a/chicken-scratch.mod.scm +++ b/chicken-scratch.mod.scm | |||
@@ -27,8 +27,7 @@ | |||
27 | (module chicken-scratch | 27 | (module chicken-scratch |
28 | (expand-string | 28 | (expand-string |
29 | expand-port | 29 | expand-port |
30 | def | 30 | def %def/replacer) |
31 | %def/replacer) | ||
32 | 31 | ||
33 | (import scheme | 32 | (import scheme |
34 | (chicken base) | 33 | (chicken base) |
@@ -50,13 +49,16 @@ | |||
50 | (let* ((delim (random-string-not-in str)) | 49 | (let* ((delim (random-string-not-in str)) |
51 | (template (make-concatenated-port | 50 | (template (make-concatenated-port |
52 | (open-input-string (string-append "#<#" delim "\n")) | 51 | (open-input-string (string-append "#<#" delim "\n")) |
53 | (open-input-string (irregex-replace "^#!.*\n" str "")) | 52 | (open-input-string "#(import chicken-scratch)") |
53 | (open-input-string str) | ||
54 | (open-input-string (string-append "\n" delim "\n")))) | 54 | (open-input-string (string-append "\n" delim "\n")))) |
55 | (expanded (open-output-string)) | 55 | (expanded (open-output-string)) |
56 | (output (begin | 56 | (output (begin |
57 | (display (eval (read template)) expanded) | 57 | (display (eval (read template)) expanded) |
58 | (get-output-string expanded)))) | 58 | (get-output-string expanded)))) |
59 | (irregex-replace/all `(seq ,(%def/replacer) (* "\n")) | 59 | (irregex-replace/all `(: (or "#<unspecified>" |
60 | ,(%def/replacer)) | ||
61 | (* whitespace)) | ||
60 | output | 62 | output |
61 | "")))) | 63 | "")))) |
62 | 64 | ||
diff --git a/chicken-scratch.scm b/chicken-scratch.scm index 6d06fb6..307aa8d 100755 --- a/chicken-scratch.scm +++ b/chicken-scratch.scm | |||
@@ -11,6 +11,8 @@ License: BSD-3. See COPYING for details. | |||
11 | (chicken process-context)) | 11 | (chicken process-context)) |
12 | 12 | ||
13 | (define (main args) | 13 | (define (main args) |
14 | ;; XXX: handle standard input piping | ||
15 | ;; XXX: Must have an #(import chicken-scratch at the beginning) | ||
14 | (for-each (lambda (file) | 16 | (for-each (lambda (file) |
15 | (when (file-exists? file) | 17 | (when (file-exists? file) |
16 | (display (with-input-from-file file expand-port)) | 18 | (display (with-input-from-file file expand-port)) |
diff --git a/makefile b/makefile index ffa747a..7587a65 100644 --- a/makefile +++ b/makefile | |||
@@ -9,9 +9,12 @@ SOURCES = chicken-scratch.scm chicken-scratch.mod.scm | |||
9 | chicken-scratch: $(SOURCES) | 9 | chicken-scratch: $(SOURCES) |
10 | chicken-install -n | 10 | chicken-install -n |
11 | 11 | ||
12 | scratchdown: scratchdown.scm chicken-scratch | ||
13 | csc $< | ||
14 | |||
12 | .PHONY: install | 15 | .PHONY: install |
13 | install: chicken-scratch | 16 | install: chicken-scratch scratchdown |
14 | install -Dt $(PREFIX)/bin $< | 17 | install -Dt $(PREFIX)/bin $^ |
15 | 18 | ||
16 | .PHONY: chicken-install | 19 | .PHONY: chicken-install |
17 | chicken-install: chicken-scratch | 20 | chicken-install: chicken-scratch |
@@ -20,3 +23,4 @@ chicken-install: chicken-scratch | |||
20 | .PHONY: clean | 23 | .PHONY: clean |
21 | clean: | 24 | clean: |
22 | rm -f *.link *.so *.o *.build.sh *.import.scm *.install.sh | 25 | rm -f *.link *.so *.o *.build.sh *.import.scm *.install.sh |
26 | rm -f chicken-scratch scratchdown | ||
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 -*- | ||
3 | exec csi -s "$0" "$@" | ||
4 | SCRATCHDOWN --- 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)) | ||