Update of /project/cxml/cvsroot/closure-common
In directory clnet:/tmp/cvs-serv30482
Modified Files:
hax.lisp
Log Message:
HAX documentation
--- /project/cxml/cvsroot/closure-common/hax.lisp 2007/10/14 17:29:43 1.1
+++ /project/cxml/cvsroot/closure-common/hax.lisp 2007/10/21 14:11:28 1.2
@@ -129,3 +129,268 @@
(:method ((handler default-handler) data)
(declare (ignore data))
nil))
+
+
+;;;; documentation
+
+(setf (documentation (find-package :hax) t)
+ "An event protocol for HTML serialization, this package is similar
+ to the HAX protocol defined by cxml for XML serialization.
+
+ (Technically, this package should have been spelled SAH, but HAX
+ sounds better.)
+
+ Note that Closure HTML is not a streaming parser yet. Documents
+ are always parsed in full before the first HAX event is emitted.
+ In spite of this restriction, the HAX API is useful for HTML
+ serialization and transformation purposes, and for integration
+ with SAX.
+
+ @begin[HAX handlers]{section}
+ @aboutclass{abstract-handler}
+ @aboutclass{default-handler}
+ @end{section}
+ @begin[The attribute protocol]{section}
+ @aboutclass{standard-attribute}
+ @aboutfun{make-attribute}
+ @aboutfun{attribute-name}
+ @aboutfun{attribute-value}
+ @aboutfun{attribute-specified-p}
+ @end{section}
+ @begin[HAX events]{section}
+ @aboutfun{start-document}
+ @aboutfun{start-element}
+ @aboutfun{end-element}
+ @aboutfun{characters}
+ @aboutfun{comment}
+ @aboutfun{end-document}
+ @end{section}")
+
+(setf (documentation 'abstract-handler 'type)
+ "@short{The superclass of all HAX handlers.}
+
+ Direct subclasses have to implement all event methods, since
+ no default methods are defined on this class.
+
+ Note that it is permissible to use handlers that are not
+ instances of this class in some circumstances.
+
+ In particular,
+ @code{nil} is a valid HAX handler and ignores all events.
+
+ In addition,
+ @a[http://common-lisp.net/project/cxml/sax.html#sax]{SAX handlers}
+ are valid HAX handlers (and vice versa), even though
+ hax:abstract-handler and sax:abstract-handler do not
+ share a specific superclass. HAX events sent to SAX handlers are
+ automatically re-signalled as XHTML SAX events, and SAX events sent
+ to HAX handlers are re-signalled as namespace-less HAX events.
+
+ However, user code should define subclasses of the documented
+ superclasses to enable the HAX/SAX bridging described above.
+
+ @see{chtml:parse}
+ @see{chtml:serialize-lhtml}
+ @see{chtml:serialize-pt}
+ @see{start-document}
+ @see{end-document}
+ @see{start-element}
+ @see{end-element}
+ @see{characters}
+ @see{comment}")
+
+(setf (documentation 'default-handler 'type)
+ "@short{A no-op HAX handler.}
+
+ This class defines methods for all HAX events that do nothing.
+ It is useful as a superclass when implementing a HAX handler that
+ is interested in only some events and not others.
+
+ @see{chtml:parse}
+ @see{chtml:serialize-lhtml}
+ @see{chtml:serialize-pt}
+ @see{start-document}
+ @see{end-document}
+ @see{start-element}
+ @see{end-element}
+ @see{characters}
+ @see{comment}")
+
+(setf (documentation 'standard-attribute 'type)
+ "@short{An implementation of the HAX attribute protocol.}
+
+ A standard class implementing the generic functions for HAX
+ attributes. Instances of this class can be passed to
+ @fun{hax:start-element} in the list of attributes.
+
+ @see-slot{attribute-name}
+ @see-slot{attribute-value}
+ @see-slot{attribute-specified-p}
+ @see-constructor{make-instance}")
+
+(setf (documentation 'make-attribute 'function)
+ "@arg[name]{a string/rod}
+ @arg[value]{a string/rod}
+ @arg[specified-p]{a boolean, default is @code{t}}
+ @return{an instance of @class{standard-attribute}.}
+ @short{Creates a HAX attribute.}
+
+ Creates an instance that can be used with the generic functions
+ for HAX attributes. The result can be passed to
+ @fun{hax:start-element} in the list of attributes.
+
+ @see{attribute-name}
+ @see{attribute-value}
+ @see{attribute-specified-p}")
+
+(setf (documentation 'find-attribute 'function)
+ "@arg[name]{a string/rod}
+ @arg[attrs]{a list of attributes}
+ @return{an attribute, or nil}
+ @short{Searches for an attribute by name.}
+
+ Returns the first attribute in @var{attrs} with the specified name,
+ or @code{nil} if no such attribute was found.
+
+ @see{attribute-name}")
+
+(setf (documentation 'attribute-name 'function)
+ "@arg[instance]{any class implementing this function}
+ @return{a string/rod}
+ @short{Return an attribute's name.}
+
+ Instances of this classes implementing this function can be passed to
+ @fun{hax:start-element} in the list of attributes.
+
+ @see{attribute-value}
+ @see{attribute-specified-p}")
+
+(setf (documentation 'attribute-value 'function)
+ "@arg[instance]{any class implementing this function}
+ @return{a string/rod}
+ @short{Return an attribute's value.}
+
+ Instances of this classes implementing this function can be passed to
+ @fun{hax:start-element} in the list of attributes.
+
+ @see{attribute-name}
+ @see{attribute-specified-p}")
+
+(setf (documentation 'attribute-specified-p 'function)
+ "@arg[instance]{any class implementing this function}
+ @return{a string/rod}
+ @short{Return whether the attribute was contained the parsed document.}
+
+ Attributes return @code{nil} here if they resulted from a default
+ value declaration in a DTD.
+
+ Instances of this classes implementing this function can be passed to
+ @fun{hax:start-element} in the list of attributes.
+
+ @see{attribute-name}
+ @see{attribute-value}")
+
+(setf (documentation 'start-document 'function)
+ "@arg[handler]{a HAX/SAX handler
+ (see @class{abstract-handler} for details)}
+ @arg[name]{root element name, a rod/string}
+ @arg[public-id]{nil or the Public ID, a rod/string}
+ @arg[system-id]{nil or the System ID/URI, a rod/string}
+ @return{unspecified}
+ @short{Signals the beginning on an HTML document.}
+
+ This is the first event sent to any handler.
+
+ If @var{system-id} is non-nil, the document includes a doctype
+ declaration.
+
+ @see{start-element}
+ @see{end-element}
+ @see{characters}
+ @see{comment}
+ @see{end-document}")
+
+(setf (documentation 'start-element 'function)
+ "@arg[handler]{a HAX/SAX handler
+ (see @class{abstract-handler} for details)}
+ @arg[name]{root element name, a rod/string}
+ @arg[attributes]{a list of attributes}
+ @return{unspecified}
+ @short{Signals the beginning of an HTML element.}
+
+ This event corresponds to the opening tag of an element.
+
+ Elements of the attribute list can have any class, but must implement
+ the generic functions for attributes. See @class{standard-attribute}
+ for the built-in attribute implementation.
+
+ @see{find-attribute}
+ @see{start-document}
+ @see{end-element}
+ @see{characters}
+ @see{comment}
+ @see{end-document}")
+
+(setf (documentation 'end-element 'function)
+ "@arg[handler]{a HAX/SAX handler
+ (see @class{abstract-handler} for details)}
+ @arg[name]{root element name, a rod/string}
+ @return{unspecified}
+ @short{Signals the end of an HTML element.}
+
+ This event corresponds to the closing tag of an element.
+
+ @see{start-document}
+ @see{start-element}
+ @see{characters}
+ @see{comment}
+ @see{end-document}")
+
+(setf (documentation 'characters 'function)
+ "@arg[handler]{a HAX/SAX handler
+ (see @class{abstract-handler} for details)}
+ @arg[data]{rod/string}
+ @return{unspecified}
+ @short{Signals character data.}
+
+ This event represents character data in a document.
+
+ @see{start-document}
+ @see{start-element}
+ @see{end-element}
+ @see{comment}
+ @see{end-document}")
+
+(setf (documentation 'comment 'function)
+ "@arg[handler]{a HAX/SAX handler
+ (see @class{abstract-handler} for details)}
+ @arg[data]{rod/string}
+ @return{unspecified}
+ @short{Signals a comment.}
+
+ This event represents a comment.
+
+ @see{start-document}
+ @see{start-element}
+ @see{end-element}
+ @see{characters}
+ @see{end-document}")
+
+(setf (documentation 'end-document 'function)
+ "@arg[handler]{a HAX/SAX handler
+ (see @class{abstract-handler} for details)}
+ @return{The return value of this function depends on the handler class.}
+ @short{Signals the end on an HTML document.}
+
+ This is the last event sent to any handler, and signals the end of
+ serialization.
+
+ The return value of this function is usually returned to user code
+ by higher-level serialization functions and can be considered the
+ result of serialization and \"return value\" of the handler.
+
+ @see{start-document}
+ @see{start-element}
+ @see{end-element}
+ @see{characters}
+ @see{comment}")