package chroma
import (
"io"
)// A Formatter for Chroma lexers.type Formatter interface {
// Format returns a formatting function for tokens.
//
// If the iterator panics, the Formatter should recover.
Format(w io.Writer, style *Style, iterator Iterator) error
}// A FormatterFunc is a Formatter implemented as a function.//// Guards against iterator panics.type FormatterFunc func(w io.Writer, style *Style, iterator Iterator) error
func (f FormatterFunc) Format(w io.Writer, s *Style, it Iterator) (err error) { // nolint
defer func() {
if perr := recover(); perr != nil {
err = perr.(error)
}}()return f(w, s, it)
}type recoveringFormatter struct {
Formatter
}func (r recoveringFormatter) Format(w io.Writer, s *Style, it Iterator) (err error) {
defer func() {
if perr := recover(); perr != nil {
err = perr.(error)
}}()return r.Formatter.Format(w, s, it)
}// RecoveringFormatter wraps a formatter with panic recovery.func RecoveringFormatter(formatter Formatter) Formatter { return recoveringFormatter{formatter} }