| // 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 |
| } |