diff --git a/text.go b/text.go index e3d2aec..5e34ef5 100644 --- a/text.go +++ b/text.go @@ -3,6 +3,7 @@ package gmi import ( "bufio" "fmt" + "html" "io" "strings" ) @@ -150,3 +151,70 @@ func (t Text) String() string { } return b.String() } + +// HTML returns the Gemini text response as HTML. +func (t Text) HTML() string { + var b strings.Builder + var pre bool + var list bool + for _, l := range t { + if _, ok := l.(LineListItem); ok { + if !list { + list = true + fmt.Fprint(&b, "
\n") + } else { + fmt.Fprint(&b, "\n") + } + case LinePreformattedText: + text := string(l.(LinePreformattedText)) + fmt.Fprintf(&b, "%s\n", html.EscapeString(text)) + case LineHeading1: + text := string(l.(LineHeading1)) + fmt.Fprintf(&b, "
%s\n", html.EscapeString(text)) + case LineText: + text := string(l.(LineText)) + if text == "" { + fmt.Fprint(&b, "
%s
\n", html.EscapeString(text)) + } + } + } + if pre { + fmt.Fprint(&b, "\n") + } + if list { + fmt.Fprint(&b, "\n") + } + return b.String() +}