|
|
|
|
|
(in-package txt2web)
|
|
|
|
|
|
(defvar *delivered* nil)
|
|
|
|
|
|
(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)
|
|
|
(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))
|
|
|
|