diff --git a/internal/utilities/html.go b/internal/utilities/html.go index b44f100..c72b139 100644 --- a/internal/utilities/html.go +++ b/internal/utilities/html.go @@ -14,11 +14,18 @@ const ( htmlUnorderedList ) +type htmlConvertState struct { + htmlListType int + orderedListNumber int +} + func ConvertHTMLToText(text string) string { var builder strings.Builder - htmlList := htmlNoList - orderedListNumber := 1 + state := htmlConvertState{ + htmlListType: htmlNoList, + orderedListNumber: 1, + } token := html.NewTokenizer(strings.NewReader(text)) @@ -32,35 +39,33 @@ func ConvertHTMLToText(text string) string { builder.WriteString(text) case html.StartTagToken, html.EndTagToken: tag := token.Token().String() - htmlList, orderedListNumber = processTagToken(&builder, tag, htmlList, orderedListNumber) + processTagToken(&state, &builder, tag) } } } -func processTagToken(writer io.StringWriter, tag string, htmlList, orderedListNumber int) (int, int) { +func processTagToken(state *htmlConvertState, writer io.StringWriter, tag string) { switch tag { case "
", "

", "

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