annotate vendor/github.com/alecthomas/chroma/v2/coalesce.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 // Coalesce is a Lexer interceptor that collapses runs of common types into a single token.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 func Coalesce(lexer Lexer) Lexer { return &coalescer{lexer} }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 type coalescer struct{ Lexer }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 func (d *coalescer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 var prev Token
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 it, err := d.Lexer.Tokenise(options, text)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 return nil, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 return func() Token {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 for token := it(); token != (EOF); token = it() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 if len(token.Value) == 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 continue
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 if prev == EOF {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 prev = token
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 if prev.Type == token.Type && len(prev.Value) < 8192 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 prev.Value += token.Value
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 out := prev
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 prev = token
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 return out
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 out := prev
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 prev = EOF
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 return out
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 }, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 }