# HTML grammar
HTML: __ [doctype __] *html-element%__ __
doctype: "
html-element: (
>(`<("area"/"base"/"br"/"col"/"embed"/"hr"/"img"/"input"/"link"/"meta"/"param"/"source"/"track"/"wbr")) void-element
/ >(`<("script"/"style"/"textarea"/"title")) raw-element
/ >(`<("template")) template-element
/ normal-element)
void-element: `< @tag=(id==match-tag) __attributes__ [`/] __ `>
template-element: `< @tag=(id==match-tag) __`> __ >match-body @body=*(!`<$. / comment / html-element / !(""tag__`>)$.) (""tag__`>)
raw-element: `< @tag=(id==match-tag) __attributes__ `> >match-body @body=.. (""tag__`>)
normal-element: `< @tag=(id==match-tag) __attributes__ `> >match-body @body=*(!`<$. / comment / html-element / !(""tag__`>)$.) ""tag__`>
comment: ""
attributes: *attribute%__
attribute: (+id%`:)__`=__ (id / `" ..`" / `' ..`')
attribute: (+id%`:)__`=__ (id / `" ..`" / `' ..`')
match-tag: id
match-body: ''