aboutsummaryrefslogtreecommitdiffstats
path: root/specials.tl
blob: e01de8ded3830c2573621763dc910d6102c93824 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
;; 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*
  "<!DOCTYPE html PUBLIC\ \
             \"-//W3C//DTD XHTML 1.0 Strict//EN\"\ \
             \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">")

;; 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 <input disabled='disabled' />. In HTML5 boolean attributes 
;; can be defined as <input disabled>.
(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 <tag/> (XHTML mode) or <tag> (SGML
;; mode and HTML5 mode).  For all other tags, it will always generate
;; <tag></tag>
(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))

;; Used for indentation.
(defconstant +newline+ "\n")