annotate vendor/github.com/alecthomas/chroma/v2/formatter.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package chroma
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 "io"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 // A Formatter for Chroma lexers.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 type Formatter interface {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 // Format returns a formatting function for tokens.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 // If the iterator panics, the Formatter should recover.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 Format(w io.Writer, style *Style, iterator Iterator) error
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 // A FormatterFunc is a Formatter implemented as a function.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 // Guards against iterator panics.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 type FormatterFunc func(w io.Writer, style *Style, iterator Iterator) error
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 func (f FormatterFunc) Format(w io.Writer, s *Style, it Iterator) (err error) { // nolint
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 defer func() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 if perr := recover(); perr != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 err = perr.(error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 }()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 return f(w, s, it)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 type recoveringFormatter struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 Formatter
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 func (r recoveringFormatter) Format(w io.Writer, s *Style, it Iterator) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 defer func() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 if perr := recover(); perr != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 err = perr.(error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 }()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 return r.Formatter.Format(w, s, it)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 // RecoveringFormatter wraps a formatter with panic recovery.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 func RecoveringFormatter(formatter Formatter) Formatter { return recoveringFormatter{formatter} }