utils.lisp
51 lines
| 1.3 KiB
| text/x-common-lisp
|
CommonLispLexer
/ src / utils.lisp
r46 | ||||
(in-package txt2web) | ||||
r54 | (defvar *delivered* nil) | |||
r46 | (defun src-file (filename) | |||
(uiop/pathname:merge-pathnames* | ||||
filename | ||||
(asdf:system-source-directory :txt2web))) | ||||
(defun read-progn-from-string (string) | ||||
`(progn | ||||
,@(read-code-from-string string))) | ||||
(defun read-code-from-string (string) | ||||
(with-input-from-string (in string) | ||||
(let ((*package* *package*)) | ||||
(loop :for form := (read in nil :eof) | ||||
:until (eq form :eof) | ||||
:when (eq (first form) 'cl:in-package) | ||||
:do (setf *package* (find-package (second form))) | ||||
:else | ||||
:collect form)))) | ||||
(defun load-src (filename) | ||||
r58 | (alexandria:read-file-into-string (src-file filename) :external-format :utf-8)) | |||
;;;; For testing | ||||
(defvar *dont-expand* '(setf)) | ||||
(defun should-expand (form) | ||||
(cond ((not (listp form)) | ||||
nil) | ||||
((listp (car form)) | ||||
t) | ||||
((member (car form) *dont-expand*) | ||||
nil) | ||||
((not (symbolp (car form))) | ||||
nil) | ||||
((not (eq (symbol-package (car form)) | ||||
(find-package :parenscript))) | ||||
t))) | ||||
(defun ps-macroexpand-all (form) | ||||
(if (should-expand form) | ||||
(let ((form (ps::ps-macroexpand form))) | ||||
(if (listp form) | ||||
(mapcar #'ps-macroexpand-all form) | ||||
form)) | ||||
form)) | ||||