package chroma

import (
	
)

// 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 ( FormatterFunc) ( io.Writer,  *Style,  Iterator) ( error) { // nolint
	defer func() {
		if  := recover();  != nil {
			 = .(error)
		}
	}()
	return (, , )
}

type recoveringFormatter struct {
	Formatter
}

func ( recoveringFormatter) ( io.Writer,  *Style,  Iterator) ( error) {
	defer func() {
		if  := recover();  != nil {
			 = .(error)
		}
	}()
	return .Formatter.Format(, , )
}

// RecoveringFormatter wraps a formatter with panic recovery.
func ( Formatter) Formatter { return recoveringFormatter{} }