1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;;; ParenScript namespace system
4 (in-package :parenscript
)
6 (defun lisp-symbol-to-ps-identifier (symbol context
)
8 (:special-form
(symbol-name symbol
))
10 (otherwise (symbol-name symbol
))))
12 ;;; Symbol obfuscation
13 (defvar *obfuscate-identifiers
* nil
)
15 (defparameter *obfuscation-table
* (make-hash-table))
17 (defun obfuscated-symbol (symbol)
18 (or (gethash symbol
*obfuscation-table
*)
19 (setf (gethash symbol
*obfuscation-table
*) (string (gensym)))))
21 ;;; Interface for printing identifiers
23 (defvar *package-prefix-style
* :prefix
24 "Determines how package symbols are serialized to JavaScript identifiers. NIL for
25 no prefixes. :prefix to prefix variables with something like packagename_identifier.")
27 (defvar *package-prefix-table
* (make-hash-table))
29 (defmacro ps-package-prefix
(package)
30 "Place for storing a string to be prefixed to any symbols in the
31 designated package when translating ParenScript code."
32 `(gethash (find-package ,package
) *package-prefix-table
*))
34 (defun js-translate-symbol (symbol)
35 (cond (*obfuscate-identifiers
* (obfuscated-symbol symbol
))
36 ((and (eql *package-prefix-style
* :prefix
) (ps-package-prefix (symbol-package symbol
)))
37 (format nil
"~A~A" (ps-package-prefix (symbol-package symbol
)) (symbol-to-js symbol
)))
38 (t (symbol-to-js symbol
))))