Mercurial > yakumo_izuru > aya
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 65:6d985efa0f7a | 66:787b5ee0289d |
|---|---|
| 1 package chroma | |
| 2 | |
| 3 // Coalesce is a Lexer interceptor that collapses runs of common types into a single token. | |
| 4 func Coalesce(lexer Lexer) Lexer { return &coalescer{lexer} } | |
| 5 | |
| 6 type coalescer struct{ Lexer } | |
| 7 | |
| 8 func (d *coalescer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { | |
| 9 var prev Token | |
| 10 it, err := d.Lexer.Tokenise(options, text) | |
| 11 if err != nil { | |
| 12 return nil, err | |
| 13 } | |
| 14 return func() Token { | |
| 15 for token := it(); token != (EOF); token = it() { | |
| 16 if len(token.Value) == 0 { | |
| 17 continue | |
| 18 } | |
| 19 if prev == EOF { | |
| 20 prev = token | |
| 21 } else { | |
| 22 if prev.Type == token.Type && len(prev.Value) < 8192 { | |
| 23 prev.Value += token.Value | |
| 24 } else { | |
| 25 out := prev | |
| 26 prev = token | |
| 27 return out | |
| 28 } | |
| 29 } | |
| 30 } | |
| 31 out := prev | |
| 32 prev = EOF | |
| 33 return out | |
| 34 }, nil | |
| 35 } |
