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
|
;;;; recoder.lisp -- SAX handler for string conversion
;;;;
;;;; This file is part of the CXML parser, released under Lisp-LGPL.
;;;; See file COPYING for details.
;;;;
;;;; Developed 2004 for headcraft - http://headcraft.de/
;;;; Copyright: David Lichteblau
(in-package :cxml)
(defclass recoder ()
((recoder :initarg :recoder :accessor recoder)
(chained-handler :initarg :chained-handler :accessor chained-handler)))
(defun make-recoder (chained-handler recoder-fn)
(make-instance 'recoder
:recoder recoder-fn
:chained-handler chained-handler))
(macrolet ((%string (rod)
`(let ((rod ,rod))
(if (typep rod '(or rod string))
(funcall (recoder handler) rod)
rod)))
(defwrapper (name (&rest args) &rest forms)
`(defmethod ,name ((handler recoder) ,@args)
(,name (chained-handler handler) ,@forms))))
(defwrapper sax:start-document ())
(defwrapper sax:start-element
(namespace-uri local-name qname attributes)
(%string namespace-uri)
(%string local-name)
(%string qname)
(mapcar (lambda (attr)
(sax:make-attribute
:namespace-uri (%string (sax:attribute-namespace-uri attr))
:local-name (%string (sax:attribute-local-name attr))
:qname (%string (sax:attribute-qname attr))
:value (%string (sax:attribute-value attr))
:specified-p (sax:attribute-specified-p attr)))
attributes))
(defwrapper sax:start-prefix-mapping (prefix uri)
(%string prefix)
(%string uri))
(defwrapper sax:characters (data)
(%string data))
(defwrapper sax:processing-instruction (target data)
(%string target)
(%string data))
(defwrapper sax:end-prefix-mapping (prefix)
(%string prefix))
(defwrapper sax:end-element (namespace-uri local-name qname)
(%string namespace-uri)
(%string local-name)
(%string qname))
(defwrapper sax:end-document ())
(defwrapper sax:comment (data)
(%string data))
(defwrapper sax:start-cdata ())
(defwrapper sax:end-cdata ())
(defwrapper sax:start-dtd (name public-id system-id)
(%string name)
(%string public-id)
(%string system-id))
(defwrapper sax:start-internal-subset ())
(defwrapper sax:end-internal-subset ())
(defwrapper sax:end-dtd ())
(defwrapper sax:unparsed-entity-declaration
(name public-id system-id notation-name)
(%string name)
(%string public-id)
(%string system-id)
(%string notation-name))
(defwrapper sax:external-entity-declaration
(kind name public-id system-id)
(%string kind)
(%string name)
(%string public-id)
(%string system-id))
(defwrapper sax:internal-entity-declaration
(kind name value)
kind
(%string name)
(%string value))
(defwrapper sax:notation-declaration
(name public-id system-id)
(%string name)
(%string public-id)
(%string system-id))
(defwrapper sax:element-declaration (name model)
(%string name)
model)
(defwrapper sax:attribute-declaration
(element-name attribute-name type default)
(%string element-name)
(%string attribute-name)
(%string type)
(%string default))
(defwrapper sax:entity-resolver
(resolver)
resolver)
(defwrapper sax::dtd
(dtd)
dtd))
|