Lisp. Both the name and the code have been lifted from files
[published][s-xml] by one [nonperson][nonperson] known as Sven Van
Caekenberghe, who, fortunately, wrote a library that is relatively small
-(around a thousand LoC), is organized so that it can be grasped in one
-sitting, and is known to work[^2]. Unfortunately though, as with most
-(all?) heathen programs encountered, this one isn't without warts. Thus,
-in addition to providing a patch, this article discusses the structure
-of S-XML and its current problems.
+(around a thousand LoC), is organized so that it can be grasped in a
+relatively short time, and is known to work[^2]. Unfortunately though,
+as with most (all?) heathen programs encountered, this one isn't without
+warts. Thus, in addition to providing a patch, this article discusses
+the structure of S-XML and its current problems.
The patch for S-XML is available in my
[V source repository][s-xml-v]. Now, as to the library itself, it is
structured as follows.
-S-XML contains two layers of abstraction: a. the core parsing code, that
-reads characters from a stream and returns XML elements, stored in
-`xml.lisp`; b. a series of wrappers over the parser that take the parser
-results and give them a particular structure; and c. an interface
-between (a) and (b), stored in `dom.lisp`. In fact, one could say that
-the layering goes exactly the other way around: the code in (b) provides
-a set of functions for the parser (a), while the parser takes a
-string/stream, reads it and calls the functions provided by (b) so it
-can decide what to do once it has all the required data, e.g. tags,
-attributes etc. The wrappers in (b) are stored in `xml-struct-dom.lisp`,
-`lxml-dom.lisp` and `sxml-dom.lisp`[^3].
+S-XML contains three layers of abstraction: a. the core parsing code,
+that reads characters from a stream and returns XML elements, stored in
+`xml.lisp`; b. a series of so-called "wrappers" over the parser that
+take its results and give them a particular structure; and c. an
+interface between (a) and (b), stored in `dom.lisp`. In fact, one could
+say that the layering goes exactly the other way around: the code in (b)
+provides a set of functions for the parser (a), while the parser takes a
+string/stream, processes it and calls the functions provided by (b) so
+that it can decide what to do once it has all the required data,
+e.g. tags, attributes etc. The wrappers in (b) are stored in
+`xml-struct-dom.lisp`, `lxml-dom.lisp` and `sxml-dom.lisp`[^3].
The advantage of this design is that it doesn't constrain the user to
any particular DOM tree representation. Personally, I find this
it than to wait for the moment when said hero gets off his or her ass
and makes the thing shine. Meanwhile, the more pressing matter for yours
truly, and the next episode of this series, will involve publishing a
-small RSS/Atom parser based on S-XML.
+small RSS/Atom parser based on S-XML DOM trees.
[^1]: This style, nowadays immediately recognizable by TMSR citizens as
the "FFA style", draws from [Asciilifeform][alf]'s
[botworks]: /posts/y05/080-botworks-regrind.html
[s-xml]: https://archive.is/Ra6bA
[nonperson]: http://btcbase.org/log-search?q=nonperson
-[s-xml-v]: http://lucian.mogosanu.ro/src/ TODO update this with actual dir
+[s-xml-v]: http://lucian.mogosanu.ro/src/s-xml
[lxml]: https://archive.is/DpZnN
[sxml]: https://archive.is/Sl4Ev
[hallucinated-freedom]: http://trilema.com/2017/the-practical-costs-of-hallucinated-freedom/