new function cxml:parse

This commit is contained in:
dlichteblau
2007-07-07 20:47:38 +00:00
parent 190f472657
commit 95b3f65a4b
5 changed files with 83 additions and 8 deletions

View File

@ -32,6 +32,7 @@
#:attribute-qname
#:attribute-value
#:parse
#:parse-file
#:parse-stream
#:parse-rod

View File

@ -3094,6 +3094,32 @@
(setf (slot-value pathname 'lisp::host) "localhost"))
pathname))
(defun parse
(input handler &rest args
&key validate dtd root entity-resolver disallow-internal-subset
recode pathname)
(declare (ignore validate dtd root entity-resolver disallow-internal-subset
recode))
(let ((args
(loop
for (name value) on args by #'cddr
unless (eq name :pathname)
append (list name value))))
(etypecase input
(xstream (apply #'make-xstream input handler args))
(pathname (apply #'parse-file input handler args))
(rod (apply #'parse-rod input handler args))
(array (apply #'parse-octets input handler args))
(stream
(let ((xstream (make-xstream input :speed 8192)))
(setf (xstream-name xstream)
(make-stream-name
:entity-name "main document"
:entity-kind :main
:uri (pathname-to-uri
(merge-pathnames (or pathname (pathname input))))))
(apply #'parse-xstream xstream handler args))))))
(defun parse-xstream (xstream handler &rest args)
(let ((*ctx* nil))
(handler-case