1 ;;;; recoder.lisp -- SAX handler for string conversion
3 ;;;; This file is part of the CXML parser, released under Lisp-LGPL.
4 ;;;; See file COPYING for details.
6 ;;;; Developed 2004 for headcraft - http://headcraft.de/
7 ;;;; Copyright: David Lichteblau
12 ((recoder :initarg
:recoder
:accessor recoder
)
13 (chained-handler :initarg
:chained-handler
:accessor chained-handler
)))
15 (defun make-recoder (chained-handler recoder-fn
)
16 (make-instance 'recoder
18 :chained-handler chained-handler
))
20 (macrolet ((%string
(rod)
22 (if (typep rod
'(or rod string
))
23 (funcall (recoder handler
) rod
)
25 (defwrapper (name (&rest args
) &rest forms
)
26 `(defmethod ,name
((handler recoder
) ,@args
)
27 (,name
(chained-handler handler
) ,@forms
))))
28 (defwrapper sax
:start-document
())
30 (defwrapper sax
:start-element
31 (namespace-uri local-name qname attributes
)
32 (%string namespace-uri
)
35 (mapcar (lambda (attr)
37 :namespace-uri
(%string
(sax:attribute-namespace-uri attr
))
38 :local-name
(%string
(sax:attribute-local-name attr
))
39 :qname
(%string
(sax:attribute-qname attr
))
40 :value
(%string
(sax:attribute-value attr
))
41 :specified-p
(sax:attribute-specified-p attr
)))
44 (defwrapper sax
:start-prefix-mapping
(prefix uri
)
48 (defwrapper sax
:characters
(data)
51 (defwrapper sax
:processing-instruction
(target data
)
55 (defwrapper sax
:end-prefix-mapping
(prefix)
58 (defwrapper sax
:end-element
(namespace-uri local-name qname
)
59 (%string namespace-uri
)
63 (defwrapper sax
:end-document
())
65 (defwrapper sax
:comment
(data)
68 (defwrapper sax
:start-cdata
())
70 (defwrapper sax
:end-cdata
())
72 (defwrapper sax
:start-dtd
(name public-id system-id
)
77 (defwrapper sax
:start-internal-subset
())
78 (defwrapper sax
:end-internal-subset
())
80 (defwrapper sax
:end-dtd
())
82 (defwrapper sax
:unparsed-entity-declaration
83 (name public-id system-id notation-name
)
87 (%string notation-name
))
89 (defwrapper sax
:external-entity-declaration
90 (kind name public-id system-id
)
96 (defwrapper sax
:internal-entity-declaration
102 (defwrapper sax
:notation-declaration
103 (name public-id system-id
)
108 (defwrapper sax
:element-declaration
(name model
)
112 (defwrapper sax
:attribute-declaration
113 (element-name attribute-name type default
)
114 (%string element-name
)
115 (%string attribute-name
)
119 (defwrapper sax
:entity-resolver