lin
2025-06-05 ed3dd9d3e7519a82bb871d5eedb24a2fa0c91f47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
package strings
 
func (r *Replacer) Replacer() interface{} {
   r.once.Do(r.buildOnce)
   return r.r
}
 
func (r *Replacer) PrintTrie() string {
   r.once.Do(r.buildOnce)
   gen := r.r.(*genericReplacer)
   return gen.printNode(&gen.root, 0)
}
 
func (r *genericReplacer) printNode(t *trieNode, depth int) (s string) {
   if t.priority > 0 {
       s += "+"
   } else {
       s += "-"
   }
   s += "\n"
 
   if t.prefix != "" {
       s += Repeat(".", depth) + t.prefix
       s += r.printNode(t.next, depth+len(t.prefix))
   } else if t.table != nil {
       for b, m := range r.mapping {
           if int(m) != r.tableSize && t.table[m] != nil {
               s += Repeat(".", depth) + string([]byte{byte(b)})
               s += r.printNode(t.table[m], depth+1)
           }
       }
   }
   return
}
 
func StringFind(pattern, text string) int {
   return makeStringFinder(pattern).next(text)
}
 
func DumpTables(pattern string) ([]int, []int) {
   finder := makeStringFinder(pattern)
   return finder.badCharSkip[:], finder.goodSuffixSkip
}