package ui import ( "bytes" "fmt" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" "github.com/maddalax/htmgo/framework/h" "strings" ) func FormatCode(code string, customStyles ...string) string { var buf bytes.Buffer lexer := lexers.Get("go") style := styles.Get("github") formatter := html.New( html.WithCustomCSS(map[chroma.TokenType]string{ chroma.PreWrapper: fmt.Sprintf("padding: 12px; overflow: auto; %s", strings.Join(customStyles, ";")), })) iterator, err := lexer.Tokenise(nil, code) if err != nil { return "" } err = formatter.Format(&buf, style, iterator) return buf.String() } func CodeSnippet(code string) *h.Element { return h.Div( h.UnsafeRaw(FormatCode(code)), ) }