annotate vendor/github.com/alecthomas/chroma/v2/remap.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 type remappingLexer struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 lexer Lexer
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 mapper func(Token) []Token
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 // RemappingLexer remaps a token to a set of, potentially empty, tokens.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 func RemappingLexer(lexer Lexer, mapper func(Token) []Token) Lexer {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 return &remappingLexer{lexer, mapper}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 func (r *remappingLexer) AnalyseText(text string) float32 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 return r.lexer.AnalyseText(text)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 func (r *remappingLexer) SetAnalyser(analyser func(text string) float32) Lexer {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 r.lexer.SetAnalyser(analyser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 return r
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 func (r *remappingLexer) SetRegistry(registry *LexerRegistry) Lexer {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 r.lexer.SetRegistry(registry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 return r
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 func (r *remappingLexer) Config() *Config {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 return r.lexer.Config()
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 func (r *remappingLexer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 it, err := r.lexer.Tokenise(options, text)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 return nil, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 var buffer []Token
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 return func() Token {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 for {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 if len(buffer) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 t := buffer[0]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 buffer = buffer[1:]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 return t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 t := it()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 if t == EOF {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 return t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 buffer = r.mapper(t)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 }, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 // TypeMapping defines type maps for the TypeRemappingLexer.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 type TypeMapping []struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 From, To TokenType
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 Words []string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 // TypeRemappingLexer remaps types of tokens coming from a parent Lexer.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 // eg. Map "defvaralias" tokens of type NameVariable to NameFunction:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 // mapping := TypeMapping{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 // {NameVariable, NameFunction, []string{"defvaralias"},
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65 // }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 // lexer = TypeRemappingLexer(lexer, mapping)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 func TypeRemappingLexer(lexer Lexer, mapping TypeMapping) Lexer {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 // Lookup table for fast remapping.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 lut := map[TokenType]map[string]TokenType{}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 for _, rt := range mapping {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 km, ok := lut[rt.From]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 if !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 km = map[string]TokenType{}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 lut[rt.From] = km
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 if len(rt.Words) == 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 km[""] = rt.To
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 for _, k := range rt.Words {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 km[k] = rt.To
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 return RemappingLexer(lexer, func(t Token) []Token {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 if k, ok := lut[t.Type]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 if tt, ok := k[t.Value]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 t.Type = tt
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
88 } else if tt, ok := k[""]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
89 t.Type = tt
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
90 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
91 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
92 return []Token{t}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
93 })
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
94 }