aboutsummaryrefslogtreecommitdiff
path: root/grammars/html.bp
diff options
context:
space:
mode:
Diffstat (limited to 'grammars/html.bp')
-rw-r--r--grammars/html.bp26
1 files changed, 26 insertions, 0 deletions
diff --git a/grammars/html.bp b/grammars/html.bp
new file mode 100644
index 0000000..cea19c1
--- /dev/null
+++ b/grammars/html.bp
@@ -0,0 +1,26 @@
+# HTML grammar
+HTML: __ [doctype __] *html-element%__ __
+
+doctype: "<!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: ''