- 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} }
|