summaryrefslogtreecommitdiff
path: root/examples/html.go
diff options
context:
space:
mode:
Diffstat (limited to 'examples/html.go')
-rw-r--r--examples/html.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/examples/html.go b/examples/html.go
new file mode 100644
index 0000000..88a3913
--- /dev/null
+++ b/examples/html.go
@@ -0,0 +1,35 @@
+package main
+
+import (
+ "fmt"
+
+ . "github.com/vektah/goparsify"
+)
+
+func html(p Pointer) (Node, Pointer) {
+ opentag := Exact("<")
+ closetag := Exact(">")
+ equal := Exact("=")
+ slash := Exact("/")
+ identifier := And(Char(Range("a-z")), CharRun(Range("a-zA-Z0-9")))
+ text := CharRunUntil("<>")
+
+ var tag Parser
+
+ element := Any(text, &tag)
+ elements := Kleene(element)
+ //attr := And(identifier, equal, String())
+ attr := And(identifier, equal, Exact(`"test"`))
+ attrws := And(attr, WS)
+ attrs := Kleene(attrws)
+ tstart := And(opentag, identifier, attrs, closetag)
+ tend := And(opentag, slash, identifier, closetag)
+ tag = And(tstart, elements, tend)
+
+ return element(p)
+}
+
+func main() {
+ node, _ := html(Input("<h1>hello world</h1>"))
+ fmt.Printf("%#v\n", node)
+}