mirror of
https://github.com/alecthomas/chroma.git
synced 2025-02-05 13:05:18 +02:00
cc0e4a59ab
This is to solve an issue where writers returned by the Formatter were often stateful, but this fact was not obvious to the API consumer, and failed in interesting ways.
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package formatters
|
|
|
|
import (
|
|
"io"
|
|
"sort"
|
|
|
|
"github.com/alecthomas/chroma"
|
|
"github.com/alecthomas/chroma/formatters/html"
|
|
)
|
|
|
|
var (
|
|
// NoOp formatter.
|
|
NoOp = Register("noop", chroma.FormatterFunc(func(w io.Writer, s *chroma.Style, iterator chroma.Iterator) error {
|
|
for t := iterator(); t != nil; t = iterator() {
|
|
if _, err := io.WriteString(w, t.Value); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}))
|
|
// Default HTML formatter outputs self-contained HTML.
|
|
htmlFull = Register("html", html.New(html.Standalone(), html.WithClasses()))
|
|
)
|
|
|
|
// Fallback formatter.
|
|
var Fallback = NoOp
|
|
|
|
// Registry of Formatters.
|
|
var Registry = map[string]chroma.Formatter{}
|
|
|
|
// Names of registered formatters.
|
|
func Names() []string {
|
|
out := []string{}
|
|
for name := range Registry {
|
|
out = append(out, name)
|
|
}
|
|
sort.Strings(out)
|
|
return out
|
|
}
|
|
|
|
// Get formatter by name.
|
|
//
|
|
// If the given formatter is not found, the Fallback formatter will be returned.
|
|
func Get(name string) chroma.Formatter {
|
|
if f, ok := Registry[name]; ok {
|
|
return f
|
|
}
|
|
return Fallback
|
|
}
|
|
|
|
// Register a named formatter.
|
|
func Register(name string, formatter chroma.Formatter) chroma.Formatter {
|
|
Registry[name] = formatter
|
|
return formatter
|
|
}
|