#lang racket
(require xml)
(define-struct html-element (attributes))
(define-struct (html-full html-element) (content))
(define-struct (mzscheme html-full) ())
(define-struct (html html-full) ())
(define-struct (div html-full) ())
(define-struct (center html-full) ())
(define-struct (blockquote html-full) ())
(define-struct (ins html-full) ())
(define-struct (del html-full) ())
(define-struct (dd html-full) ())
(define-struct (li html-full) ())
(define-struct (th html-full) ())
(define-struct (td html-full) ())
(define-struct (iframe html-full) ())
(define-struct (noframes html-full) ())
(define-struct (noscript html-full) ())
(define-struct (style html-full) ())
(define-struct (script html-full) ())
(define-struct (option html-full) ())
(define-struct (textarea html-full) ())
(define-struct (title html-full) ())
(define-struct (head html-full) ())
(define-struct (tr html-full) ())
(define-struct (colgroup html-full) ())
(define-struct (thead html-full) ())
(define-struct (tfoot html-full) ())
(define-struct (tbody html-full) ())
(define-struct (tt html-full) ())
(define-struct (i html-full) ())
(define-struct (b html-full) ())
(define-struct (u html-full) ())
(define-struct (s html-full) ())
(define-struct (strike html-full) ())
(define-struct (big html-full) ())
(define-struct (small html-full) ())
(define-struct (em html-full) ())
(define-struct (strong html-full) ())
(define-struct (dfn html-full) ())
(define-struct (code html-full) ())
(define-struct (samp html-full) ())
(define-struct (kbd html-full) ())
(define-struct (var html-full) ())
(define-struct (cite html-full) ())
(define-struct (abbr html-full) ())
(define-struct (acronym html-full) ())
(define-struct (sub html-full) ())
(define-struct (sup html-full) ())
(define-struct (span html-full) ())
(define-struct (bdo html-full) ())
(define-struct (font html-full) ())
(define-struct (p html-full) ())
(define-struct (h1 html-full) ())
(define-struct (h2 html-full) ())
(define-struct (h3 html-full) ())
(define-struct (h4 html-full) ())
(define-struct (h5 html-full) ())
(define-struct (h6 html-full) ())
(define-struct (q html-full) ())
(define-struct (dt html-full) ())
(define-struct (legend html-full) ())
(define-struct (caption html-full) ())
(define-struct (table html-full) ())
(define-struct (button html-full) ())
(define-struct (fieldset html-full) ())
(define-struct (optgroup html-full) ())
(define-struct (select html-full) ())
(define-struct (label html-full) ())
(define-struct (form html-full) ())
(define-struct (ol html-full) ())
(define-struct (ul html-full) ())
(define-struct (dir html-full) ())
(define-struct (menu html-full) ())
(define-struct (dl html-full) ())
(define-struct (pre html-full) ())
(define-struct (object html-full) ())
(define-struct (applet html-full) ())
(define-struct (-map html-full) ())
(define-struct (a html-full) ())
(define-struct (address html-full) ())
(define-struct (body html-full) ())
(define-struct (basefont html-element) ())
(define-struct (br html-element) ())
(define-struct (area html-element) ())
(define-struct (alink html-element) ())
(define-struct (img html-element) ())
(define-struct (param html-element) ())
(define-struct (hr html-element) ())
(define-struct (input html-element) ())
(define-struct (col html-element) ())
(define-struct (isindex html-element) ())
(define-struct (base html-element) ())
(define-struct (meta html-element) ())
;; Html-content = Html-element | Pc-data | Entity
(define html-content/c
(or/c html-element? pcdata? entity?))
(provide/contract
[html-content/c contract?]
[struct html-element ([attributes (listof attribute?)])]
[struct (html-full html-element)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (mzscheme html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (html html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (div html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (center html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (blockquote html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (ins html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (del html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (dd html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (li html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (th html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (td html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (iframe html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (noframes html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (noscript html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (style html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (script html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (option html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (textarea html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (title html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (head html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (tr html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (colgroup html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (thead html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (tfoot html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (tbody html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (tt html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (i html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (b html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (u html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (s html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (strike html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (big html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (small html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (em html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (strong html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (dfn html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (code html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (samp html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (kbd html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (var html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (cite html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (abbr html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (acronym html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (sub html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (sup html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (span html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (bdo html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (font html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (p html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (h1 html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (h2 html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (h3 html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (h4 html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (h5 html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (h6 html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (q html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (dt html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (legend html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (caption html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (table html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (button html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (fieldset html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (optgroup html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (select html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (label html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (form html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (ol html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (ul html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (dir html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (menu html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (dl html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (pre html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (object html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (applet html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (-map html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (a html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (address html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (body html-full)
([attributes (listof attribute?)]
[content (listof html-content/c)])]
[struct (basefont html-element)
([attributes (listof attribute?)])]
[struct (br html-element)
([attributes (listof attribute?)])]
[struct (area html-element)
([attributes (listof attribute?)])]
[struct (alink html-element)
([attributes (listof attribute?)])]
[struct (img html-element)
([attributes (listof attribute?)])]
[struct (param html-element)
([attributes (listof attribute?)])]
[struct (hr html-element)
([attributes (listof attribute?)])]
[struct (input html-element)
([attributes (listof attribute?)])]
[struct (col html-element)
([attributes (listof attribute?)])]
[struct (isindex html-element)
([attributes (listof attribute?)])]
[struct (base html-element)
([attributes (listof attribute?)])]
[struct (meta html-element)
([attributes (listof attribute?)])])