anchor.diff:  ;;;;AUTHORS
   ;;;;    <PJB> Pascal J. Bourguignon <pjb@informatimago.com>
   ;;;;MODIFICATIONS
  +;;;;    2012-03-13 <PJB> Renamed package to match its position in the hierarchy.
   ;;;;    2005-02-22 <PJB> Optimized WALK for HTML-SEQ.
   ;;;;    2003-11-12 <PJB> Created.
   ;;;;BUGS
   ;;;;LEGAL
   ;;;;    GPL
   ;;;;    
  -;;;;    Copyright Pascal J. Bourguignon 2003 - 2005
  +;;;;    Copyright Pascal J. Bourguignon 2003 - 2012
   ;;;;    
   ;;;;    This program is free software; you can redistribute it and/or
   ;;;;    modify it under the terms of the GNU General Public License
  
positive.code:     (write-text html)))
  
  
  ;;;; parse-html.lisp                  --                     --          ;;;;
  
  
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.
  