diff --git a/examples/html.go b/examples/html.go new file mode 100644 index 0000000..fe59c87 --- /dev/null +++ b/examples/html.go @@ -0,0 +1,90 @@ +// +build ignore + +// This example illustrates a gemtext to HTML converter. + +package main + +import ( + "fmt" + "html" + "strings" + + "git.sr.ht/~adnano/go-gemini" +) + +func main() { + text := gemini.Text{ + gemini.LineHeading1("Hello, world!"), + gemini.LineText("This is a gemini text document."), + } + + html := textToHTML(text) + fmt.Print(html) +} + +// textToHTML returns the Gemini text response as HTML. +func textToHTML(text gemini.Text) string { + var b strings.Builder + var pre bool + var list bool + for _, l := range text { + if _, ok := l.(gemini.LineListItem); ok { + if !list { + list = true + fmt.Fprint(&b, "
\n") + } else { + fmt.Fprint(&b, "\n") + } + case gemini.LinePreformattedText: + text := string(l.(gemini.LinePreformattedText)) + fmt.Fprintf(&b, "%s\n", html.EscapeString(text)) + case gemini.LineHeading1: + text := string(l.(gemini.LineHeading1)) + fmt.Fprintf(&b, "
%s\n", html.EscapeString(text)) + case gemini.LineText: + text := string(l.(gemini.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() +} diff --git a/text.go b/text.go index e41424a..c35f503 100644 --- a/text.go +++ b/text.go @@ -3,7 +3,6 @@ package gemini import ( "bufio" "fmt" - "html" "io" "strings" ) @@ -151,70 +150,3 @@ 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() -}