;;; sgml.ol -- objective lisp interface to SGML ;;; $Id$ ;;; (require 'Stream) (defClass SGML OStream (gi-stack) ) (defMethod SGML :empty (gi &optional attrs) [self :format "<~A" gi] (dolist (a attrs) (let ((n (first a)) (v (second a)) ) [self :format " ~A=\"~A\"" n v]) ) [self :format ">"] ) (defMethod SGML :start (gi &optional attrs) (push gi gi-stack) [self :empty gi attrs] ) (defMethod SGML :end (gi) (unless (eq gi (pop gi-stack)) (error "gi mismatch on" gi)) [self :format "" gi] ) (defMethod SGML :ndata (data) ;;@@ watch out for markup (~%" gi] ) (provide 'sgml)