1 (in-package :parenscript
)
3 (defmacro ps
(&body body
)
4 "Given Parenscript forms (an implicit progn), compiles those forms
5 to a JavaScript string at macro-expansion time."
6 `(concatenate 'string
,@(parenscript-print (compile-parenscript-form `(progn ,@body
) :expecting
:statement
))))
8 (defmacro ps-doc
(&body body
)
9 "Expands Parenscript forms in a clean environment."
10 (let ((*ps-gensym-counter
* 0)
11 (*ps-special-variables
* nil
))
12 (macroexpand-1 `(ps ,@body
))))
14 (defun ps-doc* (ps-form)
15 (let ((*ps-gensym-counter
* 0)
16 (*ps-special-variables
* nil
))
20 (with-output-to-string (s)
22 (princ (if (stringp x
)
26 (parenscript-print (compile-parenscript-form ps-form
:expecting
:statement
)))))
28 (defun ps* (&rest body
)
29 "Compiles BODY to a JavaScript string.
31 (ps1* `(progn ,@body
)))
33 (defvar *js-inline-string-delimiter
* #\"
34 "Controls the string delimiter char used when compiling Parenscript in ps-inline.")
36 (defun ps-inline* (form &optional
(*js-string-delimiter
* *js-inline-string-delimiter
*))
37 (concatenate 'string
"javascript:" (ps1* form
)))
39 (defmacro/ps ps-inline
(form &optional
(string-delimiter *js-inline-string-delimiter
*))
40 `(concatenate 'string
"javascript:"
41 ,@(let ((*js-string-delimiter
* string-delimiter
))
42 (parenscript-print (compile-parenscript-form form
:expecting
:statement
)))))