diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-12-08 18:43:30 +0100 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-12-08 18:43:30 +0100 |
| commit | cf57d609d10fa2ea9f690bcca6896b5926340e12 (patch) | |
| tree | 16bbff764f4355a0fcf1e9f82c94e2bad56cfc70 /temper.lisp | |
| download | temper-cf57d609d10fa2ea9f690bcca6896b5926340e12.tar.gz temper-cf57d609d10fa2ea9f690bcca6896b5926340e12.tar.bz2 temper-cf57d609d10fa2ea9f690bcca6896b5926340e12.zip | |
Initial commit
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))) |
