aboutsummaryrefslogtreecommitdiff
path: root/temper.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'temper.lisp')
-rw-r--r--temper.lisp30
1 files changed, 30 insertions, 0 deletions
diff --git a/temper.lisp b/temper.lisp
new file mode 100644
index 0000000..5ff5008
--- /dev/null
+++ b/temper.lisp
@@ -0,0 +1,30 @@
+(defun read-all ()
+ (let ((line (read-line *standard-input* nil)))
+ (if line
+ (concatenate 'string line '(#\linefeed) (read-all))
+ "")))
+
+
+(setq *temper-open* "{%")
+(setq *temper-close* "%}")
+
+(defun parse (input)
+ (let ((pos (search *temper-open* input)))
+ (if (null pos)
+ (list "\"" input "\"")
+ (let* ((before (subseq input 0 pos))
+ (input (subseq input pos))
+ (end-pos (search *temper-close* input))
+ (close-len (length *temper-close*))
+ (code (subseq input close-len end-pos))
+ (input (subseq input (+ end-pos close-len))))
+ (append (list "\"" before "\"" code) (parse input))))))
+
+
+
+(setq res (append '("(concatenate 'string ") (parse (read-all)) '(" ) ") ))
+(setq str (format nil "~{~A~^ ~}" res))
+(princ str)
+; (print (eval (read-from-string str)))
+
+; (read-from-string (parse (read-all)))