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