diff --git a/internal/utilities/html.go b/internal/utilities/html.go index 52aa8e4..b44f100 100644 --- a/internal/utilities/html.go +++ b/internal/utilities/html.go @@ -2,15 +2,23 @@ package utilities import ( "io" + "strconv" "strings" "golang.org/x/net/html" ) +const ( + htmlNoList int = iota + htmlOrderedList + htmlUnorderedList +) + func ConvertHTMLToText(text string) string { var builder strings.Builder - var unorderedList bool + htmlList := htmlNoList + orderedListNumber := 1 token := html.NewTokenizer(strings.NewReader(text)) @@ -24,24 +32,35 @@ func ConvertHTMLToText(text string) string { builder.WriteString(text) case html.StartTagToken, html.EndTagToken: tag := token.Token().String() - unorderedList = processTag(&builder, tag, unorderedList) + htmlList, orderedListNumber = processTagToken(&builder, tag, htmlList, orderedListNumber) } } } -func processTag(writer io.StringWriter, tag string, unorderedList bool) bool { +func processTagToken(writer io.StringWriter, tag string, htmlList, orderedListNumber int) (int, int) { switch tag { case "
", "

", "

", "": _, _ = writer.WriteString("\n") case "": - unorderedList = false + htmlList = htmlNoList + case "": + htmlList = htmlNoList + orderedListNumber = 1 case "
  • ": - if unorderedList { + switch htmlList { + case htmlUnorderedList: _, _ = writer.WriteString("• ") + case htmlOrderedList: + _, _ = writer.WriteString(strconv.Itoa(orderedListNumber) + ". ") + orderedListNumber++ } } - return unorderedList + return htmlList, orderedListNumber }