anchor.diff:        (if xc xc c))))
   
   (defun render-text (out text)
  -  (declare (optimize (debug 3)))
     (macrolet ((match-second-char (c1 c2 out-char)
                   `(let ((n (peek-char nil in nil nil)))
                     (if (eql n ,c2)
  
positive.code: 
    (defparameter *xml-char-map*
      (make-hash-table-from-alist
       '((#\< . "&lt;")
         (#\> . "&gt;")
         (#\& . "&amp;")
         (#\No-Break_Space . "&#xa0;")
         (#\LEFT_DOUBLE_QUOTATION_MARK . "&#8220;")
         (#\RIGHT_DOUBLE_QUOTATION_MARK . "&#8221;")
         (#\EM_DASH . "&#8212;")
         (:eol . #\Space))))
  
    (defun get-xml-char (c)
  
negative.code:              (loop for c = (read-char in nil nil) while c
                  do 
                  (cond ((eql c #\~)
                         (princ (get-xml-char *no-break-space*) out))
                        ((eql c #\.)
                         (match-second-char #\. #\\ #\Space))
                        ((eql c #\`)
                         (match-second-char #\` #\` *left-double-quotation-mark*))
                        ((eql c #\')
                         (match-second-char #\' #\' *right-double-quotation-mark*))
                        ((eql c #\-)
                         (match-second-char #\- #\- *em-dash*))
                        (t (princ (get-xml-char c) out))))))
            (t (princ (get-xml-char text) out)))))
  
  