Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.0 KiB
43 lines
1.0 KiB
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} }
|
|
|