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 htmlList := htmlNoList orderedListNumber := 1 token := html.NewTokenizer(strings.NewReader(text)) for { tt := token.Next() switch tt { case html.ErrorToken: return builder.String() case html.TextToken: text := token.Token().Data builder.WriteString(text) case html.StartTagToken, html.EndTagToken: tag := token.Token().String() htmlList, orderedListNumber = processTagToken(&builder, tag, htmlList, orderedListNumber) } } } func processTagToken(writer io.StringWriter, tag string, htmlList, orderedListNumber int) (int, int) { switch tag { case "
", "

", "

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