diff options
Diffstat (limited to 'temper.lisp')
| -rw-r--r-- | temper.lisp | 30 |
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))) |
