Quoting Douglas Crosher (dtc@scieneer.com):
o Add support for the Scieneer CL.
The Scieneer CL has a very fast stream implementation which is comparable in performance to the runes implementation so CXML on the SCL can use CL streams rather than xstreams and ystreams - enabled via the :x&y-streams-are-stream feature. This also enables support for a wider range of encodings.
Hmm. When I came to Closure XML, the package glisp/runes was full of implementation-specific code, and I am glad that most read-time conditionals are gone now. So I hesitate to add more hacks for specific implementations.
On the other hand, use of normal streams is the right direction to take in the long term.
For now I have committed your patch as-is, although I would prefer to see other implementations switched to the same strategy if possible. At least Allegro should be easy to support in this way.
Ideally that should be done in a way that minimizing the amount of copy&paste. While the subclassing of STREAM is obviously implementation-dependent (but probably easy to do for most lisps, using whatever version of DEFCLASS or DEFSTRUCT necessary), the rest of the code should be shared.
That leaves the patch with one remaining problem, which had stopped me from pursuing this idea in the past, namely the lack of (SETF STREAM-EXTERNAL-FORMAT) on most Lisps.
I take it that Scieneer does not have (setf s-e-f) either? How does ext:make-xml-character-conversion-stream work?
The Scieneer CL also supports http and https URLs for pathnames so can open such external files without the need for an entity resolver.
Nice.
Applied using #+cxml-system::uri-is-namestring instead of #+scl for clarity. The feature is activated automatically in cxml.asd.
#-x&y-streams-are-stream (:file "encodings")
Where do you add :x&y-streams-are-stream to *features*?