summaryrefslogtreecommitdiff
path: root/lib/parse/parse.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/parse/parse.go')
-rw-r--r--lib/parse/parse.go21
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/parse/parse.go b/lib/parse/parse.go
index a86e166..54a77c3 100644
--- a/lib/parse/parse.go
+++ b/lib/parse/parse.go
@@ -7,13 +7,13 @@ import (
)
type Tag struct {
- name string
- attributes map[string]string
+ Name string
+ Attributes map[string]string
}
func (t *Tag) String() string {
- s := "<" + t.name
- for k, v := range t.attributes {
+ s := "<" + t.Name
+ for k, v := range t.Attributes {
s += " " + k + `="` + v + `"`
}
s += ">"
@@ -52,14 +52,21 @@ func ReadUntil(r io.Reader, sentinels []byte) (string, byte, error) {
func ReadTag(r io.Reader) (*Tag, error) {
e := new(Tag)
- e.attributes = make(map[string]string)
+ e.Attributes = make(map[string]string)
var err error
var foundSentinel byte
- e.name, foundSentinel, err = ReadUntil(r, []byte{' ', '>'})
+ e.Name, foundSentinel, err = ReadUntil(r, []byte{' ', '>'})
if err != nil {
return nil, err
}
+ if e.Name[0] == '!' {
+ // Not An Element
+ e.Name = "NAE"
+ // Consume rest of tag
+ _, _, err := ReadUntil(r, []byte{'>'})
+ return e, err
+ }
for {
if foundSentinel == '>' {
@@ -88,7 +95,7 @@ func ReadTag(r io.Reader) (*Tag, error) {
value, foundSentinel, err = ReadUntil(r, []byte{' ', '>'})
value = string(peek) + value
}
- e.attributes[key] = value
+ e.Attributes[key] = value
}
return e, err