aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-01-08 03:32:07 +0100
committerCharles Cabergs <me@cacharle.xyz>2021-01-08 03:32:07 +0100
commitd85e44552a1d59ad2f8a5539d8e7c0a42a3c56b8 (patch)
treefd5d621b65b0c1cce55cb53bb8f8a649233dd5fb
parentcf57d609d10fa2ea9f690bcca6896b5926340e12 (diff)
downloadtemper-d85e44552a1d59ad2f8a5539d8e7c0a42a3c56b8.tar.gz
temper-d85e44552a1d59ad2f8a5539d8e7c0a42a3c56b8.tar.bz2
temper-d85e44552a1d59ad2f8a5539d8e7c0a42a3c56b8.zip
Changing to ejs method (imperative)
-rw-r--r--.gitignore1
-rw-r--r--temper.lisp46
-rw-r--r--test.html18
3 files changed, 38 insertions, 27 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6e92f57
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+tags
diff --git a/temper.lisp b/temper.lisp
index 5ff5008..6893071 100644
--- a/temper.lisp
+++ b/temper.lisp
@@ -5,26 +5,44 @@
"")))
-(setq *temper-open* "{%")
-(setq *temper-close* "%}")
+(defconstant +temper-open+ "<%")
+(defconstant +temper-close+ "%>")
+(defconstant +temper-close-len+ (length +temper-close+))
-(defun parse (input)
- (let ((pos (search *temper-open* input)))
+(defun lex (input)
+ (let ((pos (search +temper-open+ input)))
(if (null pos)
- (list "\"" input "\"")
+ (list (list 'string 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))))))
+ (end-pos (search +temper-close+ input))
+ (code (subseq input +temper-close-len+ end-pos))
+ (input (subseq input (+ end-pos +temper-close-len+))))
+ (append (list (list 'string before) (list 'code code)) (lex input))))))
+(defun generate (tokens)
+ `(progn
+ (setq buf "")
+ (eval ,(read-from-string
+ (concatenate 'string
+ (map
+ 'string
+ #'(lambda (token)
+ (let ((token-type (first token))
+ (token-content (second token)))
+ (if (eql token-type 'string)
+ (format nil "~A"
+ `(setf buf (concatenate 'string buf ,token-content)))
+ token-content)))
+ tokens))))))
+
+
+(setq res (generate (lex (read-all))))
+(setq str (format t "~{~A~^ ~}" res))
+
+; (princ str)
-(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)))
+; (read-from-string (lex (read-all)))
diff --git a/test.html b/test.html
index 55009bb..fc91990 100644
--- a/test.html
+++ b/test.html
@@ -1,13 +1,5 @@
-asdf
-{% (string-upcase %}
-<p>
- bonjour
- {% (subseq %}
- foofoofoo
- {% 3 6) %}
- aurevoir
-</p>
-
-{% ) %}
-
-yooooo
+<ul>
+ <% (dotimes (n 10) %>
+ <li>test</li>
+ <% ) %>
+</ul>