summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-02-17 13:39:57 +0000
committerpaltherr <paltherr@epfl.ch>2003-02-17 13:39:57 +0000
commita1f09f8344406301f71dec8578447aec5c68be82 (patch)
treeaabf10aa1fd59a3432fd6c63f930e4d1ffa370a2 /bin
parent5253396420ebd8cfedf0adbc8d12bf9ea2b269bf (diff)
downloadscala-a1f09f8344406301f71dec8578447aec5c68be82.tar.gz
scala-a1f09f8344406301f71dec8578447aec5c68be82.tar.bz2
scala-a1f09f8344406301f71dec8578447aec5c68be82.zip
- Added expand-template and expand-template.scm
Diffstat (limited to 'bin')
-rwxr-xr-xbin/expand-template16
-rwxr-xr-xbin/expand-template.scm50
2 files changed, 66 insertions, 0 deletions
diff --git a/bin/expand-template b/bin/expand-template
new file mode 100755
index 0000000000..177f73fd61
--- /dev/null
+++ b/bin/expand-template
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# $Id$
+
+SOURCE="$0";
+while [ -h "$SOURCE" ]; do
+ LOOKUP="`ls -ld "$SOURCE"`";
+ TARGET="`expr "$LOOKUP" : '.*-> \(.*\)$'`";
+ if expr "${TARGET:-.}/" : '/.*/$' > /dev/null; then
+ SOURCE="${TARGET:-.}";
+ else
+ SOURCE="`dirname "$SOURCE"`/${TARGET:-.}";
+ fi;
+done;
+
+scsh -e main -s "$SOURCE.scm" "$@"
diff --git a/bin/expand-template.scm b/bin/expand-template.scm
new file mode 100755
index 0000000000..96147abf85
--- /dev/null
+++ b/bin/expand-template.scm
@@ -0,0 +1,50 @@
+#!/home/linuxsoft/bin/scsh \
+-e main -s
+!#
+
+;; $Id$
+
+(define expand
+ (let ((variable-rx (rx "[#" (submatch (+ (| alphanum ("-")))) "#]")))
+ (lambda (env in-port out-port)
+ (awk (read-line in-port 'concat) (line) ()
+ (#t (regexp-substitute/global out-port
+ variable-rx
+ line
+ 'pre
+ (lambda (match)
+ (let* ((var (string->symbol
+ (match:substring match 1)))
+ (expansion (assoc var env)))
+ (if expansion
+ (cdr expansion)
+ (error "Unknown variable in template"
+ var))))
+ 'post))))))
+
+(define (display-usage-and-exit prog)
+ (format #t "Usage: ~a <rule-file> <template-file> <target-file>~%" prog)
+ (format #t "where <rule-file> is a Scheme file containing expansion rules,~%")
+ (format #t " <template-file> is the template file, and~%")
+ (format #t " <target-file> is the file to generate.~%")
+ (exit 1))
+
+(define initial-environment
+ '((do-not-edit . "DO NOT EDIT. Automatically generated file!")))
+
+(define (main cmd-line)
+ (let ((prog (car cmd-line))
+ (args (cdr cmd-line)))
+ (if (= (length args) 3)
+ (let ((rule (first args))
+ (tmpl (second args))
+ (file (third args)))
+ (load rule)
+ (call-with-input-file tmpl
+ (lambda (in-port)
+ (call-with-output-file file
+ (lambda (out-port)
+ (expand (append initial-environment (make-env file))
+ in-port
+ out-port))))))
+ (display-usage-and-exit prog))))