From f38b4ad8b7543b088c5c0c4018285127ad4f4680 Mon Sep 17 00:00:00 2001 From: kaa Date: Sat, 30 Aug 2025 22:03:37 -0700 Subject: Basic neatroff --- lib/parse/parse.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'lib/parse/parse.go') 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 -- cgit v1.2.3