summaryrefslogtreecommitdiffstats
path: root/schmooz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'schmooz.scm')
-rw-r--r--schmooz.scm33
1 files changed, 33 insertions, 0 deletions
diff --git a/schmooz.scm b/schmooz.scm
index f50a397..7bcab97 100644
--- a/schmooz.scm
+++ b/schmooz.scm
@@ -358,6 +358,39 @@
((not (and (char? chr) (not (char-whitespace? chr)))) str)
(read-char port)))
+;;; Output files would be schmoozed
+(define schmooz-which-files
+ (let* ((scheme-file? (filename:match-ci?? "*??scm"))
+ (txi-file? (filename:match-ci?? "*??txi"))
+ (texi-file? (let ((tex? (filename:match-ci?? "*??tex"))
+ (texi? (filename:match-ci?? "*??texi")))
+ (lambda (filename) (or (txi-file? filename)
+ (tex? filename)
+ (texi? filename)))))
+ (txi->scm (filename:substitute?? "*txi" "*scm"))
+ (scm->txi (filename:substitute?? "*scm" "*txi")))
+ (define (schmooz-texi-file file)
+ (call-with-input-file file
+ (lambda (port)
+ (do ((pos (find-string-from-port? "@include" port)
+ (find-string-from-port? "@include" port)))
+ ((not pos))
+ (let ((fname #f))
+ (cond ((not (eqv? 1 (fscanf port " %s" fname))))
+ ((not (txi-file? fname)))
+ ((not (file-exists? (txi->scm fname))))
+ (else (display (txi->scm fname)) (display " "))))))))
+ (lambda files
+ (for-each (lambda (file)
+ (define sl (string-length file))
+ (cond ((texi-file? file) (schmooz-texi-file file))
+ ((scheme-file? file)
+ (schmooz-scm-file file (scm->txi file)))
+ (else (schmooz-scm-file
+ file (string-append file ".txi")))))
+ files))))
+
+
;;;@ SCHMOOZ files.
(define schmooz
(let* ((scheme-file? (filename:match-ci?? "*??scm"))