anchor.diff:             :value (rod value))
             (cdr *current-element*))))
   
  -(defun cdata (data)
  +(defun cdata (data &aux (sink *sink*))
     "@arg[data]{String.}
      @return{undocumented}
   
  
positive.code: 
     Writes a doctype declaration to the current output sink, using the
     specified name, public ID, system ID, and optionally an internal subset."
    (sax:start-dtd *sink* name public-id system-id)
    (when internal-subset
      (sax:unparsed-internal-subset *sink* internal-subset))
    (sax:end-dtd *sink*))
  
  (defun maybe-emit-start-tag ()
    (when *current-element*
      ;; starting child node, need to emit opening tag of parent first:
      (destructuring-bind ((uri lname qname) &rest attributes) *current-element*
        (sax:start-element *sink* uri lname qname (nreverse attributes)))
      (setf *current-element* nil)))
  
  (defun invoke-with-namespace (fn prefix uri)
    (let ((*unparse-namespace-bindings*
           (acons prefix uri *unparse-namespace-bindings*))
          (*current-namespace-bindings*
           (acons prefix uri *current-namespace-bindings*)))
      (sax:start-prefix-mapping *sink* prefix uri)
      (multiple-value-prog1
          (funcall fn)
        (sax:end-prefix-mapping *sink* prefix))))
  
  (defun invoke-with-element (fn qname)
    (setf qname (rod qname))
  
negative.code:    Note: It is currently the caller's responsibily to ensure that the CDATA
     section will not contain forbidden character sequences."
    (maybe-emit-start-tag)
    (sax:start-cdata sink)
    (sax:characters sink (rod data))
    (sax:end-cdata sink)
    data)
  
  (defun text (data)
  