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