anchor.diff:              :FRAMESET-DTD   -> error when *DOCTYPE* isn't :FRAMESET.
   DOCUMENTATION:  A string used as documentation string for the macro NAME.
   "
  -    (WITH-GENSYMS (GNAME)
  -      `(LET ((,GNAME (INTERN ,(STRING NAME) +tag-package+)))
  -            (PUSH (MAKE-ELEMENT :NAME ,GNAME
  -                                :OPTIONS ',OPTIONS
  -                                :DOCUMENTATION ',DOCUMENTATION) *ELEMENTS*)
  -            (PUSH ,GNAME *ELEMENTS*))))
  +    (with-gensyms (gname)
  +      `(let ((,gname (intern ,(string name) +tag-package+)))
  +            (push (make-element :name ,gname
  +                                :options ',options
  +                                :documentation ',documentation) *elements*)
  +            (push ,gname *elements*))))
     );;eval-when
   
   ;; (eval-when (:compile-toplevel :load-toplevel :execute)
  
positive.code: ;;;;AUTHORS
  ;;;;    <PJB> Pascal J. Bourguignon <pjb@informatimago.com>
  ;;;;MODIFICATIONS
  ;;;;    2005-02-22 <PJB> Optimized WALK for HTML-SEQ.
  ;;;;    2003-11-12 <PJB> Created.
  ;;;;BUGS
  ;;;;LEGAL
  ;;;;    GPL
  ;;;;    
  ;;;;    Copyright Pascal J. Bourguignon 2003 - 2005
  ;;;;    
  ;;;;    This program is free software; you can redistribute it and/or
  ;;;;    modify it under the terms of the GNU General Public License
  
negative.code: ;;;;    Boston, MA 02111-1307 USA
  ;;;;****************************************************************************
  
  (in-package "COMMON-LISP-USER")
  (defpackage "COM.INFORMATIMAGO.COMMON-LISP.HTML-PARSER.PARSE-HTML"
    (:use "COMMON-LISP"
          "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.UTILITY"
          "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.LIST"
          "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.STRING"
          "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.PEEK-STREAM"
          "COM.INFORMATIMAGO.COMMON-LISP.HTML-GENERATOR.HTML-ENTITIES")
    (:export "HTML-ATTRIBUTE" "HTML-CONTENTS" "HTML-ATTRIBUTES" "HTML-TAG"
             "UNPARSE-HTML" "WRITE-HTML-TEXT"
             "PARSE-HTML-STRING" "PARSE-HTML-FILE")
    (:import-from "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.STRING" "UNSPLIT-STRING"
                  "SPLIT-STRING" "STRING-REPLACE")
    (:documentation "This package exports functions to parse HTML pages."))
  (in-package "COM.INFORMATIMAGO.COMMON-LISP.HTML-PARSER.PARSE-HTML")
  
  
  ;; ------------------------------------------------------------------------
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (defparameter +tag-package+ (find-package "KEYWORD"))
    (defvar *attributes* () "List of symbols of all attributes defined.")
    (defvar *elements*   () "List of symbols of all elements defined."))
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
  
    (defmacro defattribute (attr-name elements type default options documentation)
      "
  DO:       Defines an HTML attribute.
  "
      (declare (ignore attr-name elements type default options documentation))
      ;; NOP
      (values))
    );;eval-when
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (defstruct element
      name options documentation))
  
  
  (defun find-element (element-name) (getf *elements* element-name))
  
  
  (defun element-empty-p (element-name)
    (and (find-element element-name)
         (member :empty (element-options (find-element element-name))
                 :test (function eq))))
  
  
  (defun element-start-optional-p (element-name)
    (or (not (find-element element-name))
        (member :start-optional (element-options (find-element element-name))
                :test (function eq))))
  
  
  (defun element-end-optional-p (element-name)
    (or (not (find-element element-name))
        (member :end-optional (element-options (find-element element-name))
                :test (function eq))))
  
  
  (defun element-end-forbidden-p (element-name)
    (and (find-element element-name)
         (member :end-forbidden (element-options (find-element element-name))
                 :test (function eq))))
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (defmacro defelement (name options &optional (documentation "A HTML element."))
      "
  DO:         Defines a HTML element macro.
  NAME:       A symbol that will be used to define a macro.
  