;; Copyright (c) 2003-2009, Dr. Edmund Weitz. All rights reserved. ;; ;; Redistribution and use in source and binary forms, with or without ;; modification, are permitted provided that the following conditions ;; are met: ;; ;; * Redistributions of source code must retain the above copyright ;; notice, this list of conditions and the following disclaimer. ;; ;; * Redistributions in binary form must reproduce the above ;; copyright notice, this list of conditions and the following ;; disclaimer in the documentation and/or other materials ;; provided with the distribution. ;; ;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED ;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ;; ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY ;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (in-package "tl-who-priv") ;; Kind of simulate Common Lisp defconstant. (defmacro defconstant (name value) ^(unless (boundp ',name) (defsymacro ,name (macro-time ,value)))) ;; This is the first line that'll be printed if the :prologue keyword ;; argument is true. (defvar *prologue* "") ;; Whether to insert line breaks and indent. Also controls amount of ;; indentation dynamically. (defvar *indent* nil) ;; :sgml for (SGML-)HTML, :xml (default) for xhtml, :html5 for html5.") (defvar *html-mode* :xml) ;; Set this to t to enable attribute minimization (also called ;; 'boolean attributes', or 'empty attribute syntax' according to the w3 ;; html standard). In XHTML attribute minimization is forbidden, and all ;; attributes must have a value. Thus in XHTML boolean attributes must be ;; defined as . In HTML5 boolean attributes ;; can be defined as . (defvar *empty-attribute-syntax* nil) ;; If true, tag and attribute names will be converted to upper case only ;; if they contain no upper case letters. This is useful when one needs to ;; output case sensitive XML. (defvar *upcase-tokens-p* nil) ;; Quote character for attributes. (defvar *attribute-quote-char* #\') ;; End of an empty tag. Default is XML style. (defvar *empty-tag-end* " />") ;; The list of HTML tags that should disable indentation inside them. ;; The initial value is a list containing only :pre and :textarea. (defvar *html-no-indent-tags* '(:pre :textarea)) ;; The list of HTML tags that should be output as empty tags. ;; See *html-empty-tag-aware-p*. (defvar *html-empty-tags* '(:area :atop :audioscope :base :basefont :br :choose :col :command :embed :frame :hr :img :input :isindex :keygen :left :limittext :link :meta :nextid :of :over :param :range :right :source :spacer :spot :tab :track :wbr)) ;; Set this to NIL to if you want to use CL-WHO as a strict XML ;; generator. Otherwise, CL-WHO will only write empty tags listed ;; in *HTML-EMPTY-TAGS* as (XHTML mode) or (SGML ;; mode and HTML5 mode). For all other tags, it will always generate ;; (defvar *html-empty-tag-aware-p* t) ;; Change certain TL-WHO behaviors to original CL-WHO behaviors. These ;; are behaviors TL-WHO changed in order to improve the security. ;; TL-WHO performs implicit HTML escaping on the output of the ;; expressions that calculate attribute values. TL-WHO's fmt function ;; also escapes the formatted output. If this varaible is twrue, these ;; behaviors revert to the CL-WHO behaviors of not escaping. (defvar *cl-who-compat* nil) ;; Hash table with tag macro bindings for deftag. (defvar *tag-macro* (hash)) ;; Current html form being expanded. (defvar *cur-form* (hash)) ;; Current macro-expansion environment. (defvar *cur-env* (hash)) ;; Used for indentation. (defconstant +newline+ "\n")