diff --git a/parser.go b/parser.go index 423004e..33bf205 100644 --- a/parser.go +++ b/parser.go @@ -75,23 +75,21 @@ func ParseHeading(l string) (GemtextObject, error) { // "isPreformatted" takes a true if the line is in a preformatted block, else otherwise. func ParseLine(line string, isPreformatted bool) (GemtextObject, error) { l := strings.TrimSpace(line) - if strings.HasPrefix(l, "=>") { - return ParseLink(line) - } else if strings.HasPrefix(l, "```") { - return GemtextObject{Type: PREFORMATTED_TOGGLE, Literal: l}, nil - } else if strings.HasPrefix(l, "#") { - return ParseHeading(line) - } else if strings.HasPrefix(l, ">") { - return GemtextObject{Type: QUOTE, Text: strings.TrimSpace(l[1:]), Literal: l}, nil - } else if strings.HasPrefix(l, "*") { - return GemtextObject{Type: LIST, Text: strings.TrimSpace(l[1:]), Literal: l}, nil - } else { // Everything else is just text - if isPreformatted { - return GemtextObject{Type: PREFORMATTED_TEXT, Text: l, Literal: l}, nil - } else { - return GemtextObject{Type: TEXT, Text: l, Literal: l}, nil - } - } + switch { + case strings.HasPrefix(l, "=>"): + return ParseLink(line) + case strings.HasPrefix(l, "```"): + return GemtextObject{Type: PREFORMATTED_TOGGLE, Literal: l}, nil + case strings.HasPrefix(l, "#"): + return ParseHeading(line) + case strings.HasPrefix(l, ">"): + return GemtextObject{Type: QUOTE, Text: strings.TrimSpace(l[1:]), Literal: l}, nil + case strings.HasPrefix(l, "*"): + return GemtextObject{Type: LIST, Text: strings.TrimSpace(l[1:]), Literal: l}, nil + case isPreformatted: + return GemtextObject{Type: PREFORMATTED_TEXT, Text: l, Literal: l}, nil + } + return GemtextObject{Type: TEXT, Text: l, Literal: l}, nil } // ParsePage takes a string containing the contents of a gemtext page and returns a GemtextPage.