diff options
Diffstat (limited to 'lib/parse/parse.go')
-rw-r--r-- | lib/parse/parse.go | 21 |
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 |