47 $this->_search = $search;
48 $this->_index = array();
49 $this->_tree = array();
50 $this->_replace = array();
51 $this->_repSize = array();
55 $last_size = $size = 0;
56 foreach ($search as
$i => $search_element)
60 $tree[-1] = min (count($replace) - 1,
$i - 1);
61 $tree[-2] = $last_size;
64 if (is_array ($search_element))
66 foreach ($search_element as $k => $char)
68 $this->_index[$char] =
true;
69 if (!isset($tree[$char]))
71 $tree[$char] = array();
73 $tree = &$tree[$char];
76 $size = max($size, $last_size);
81 if (!isset($tree[$search_element]))
83 $tree[$search_element] = array();
85 $tree = &$tree[$search_element];
86 $size = max($last_size, $size);
87 $this->_index[$search_element] =
true;
92 $tree[-1] = min (count ($replace) - 1,
$i);
93 $tree[-2] = $last_size;
94 $this->_treeMaxLen = $size;
96 foreach ($replace as $rep)
102 $this->_replace[] = $rep;
104 for (
$i = count($this->_replace) - 1;
$i >= 0; --
$i)
106 $this->_replace[
$i] = $rep = $this->
filter($this->_replace[
$i], $i);
107 $this->_repSize[
$i] = count($rep);
118 $endOfBuffer = end($buffer);
119 return isset ($this->_index[$endOfBuffer]);
127 public function filter($buffer, $_minReplaces = -1)
129 if ($this->_treeMaxLen == 0)
134 $newBuffer = array();
135 $buf_size = count($buffer);
136 for (
$i = 0;
$i < $buf_size; ++
$i)
139 $last_found = PHP_INT_MAX;
144 if (isset ($buffer [
$p =
$i + $j]) && isset($search_pos[$buffer[
$p]]))
146 $search_pos = $search_pos[$buffer[
$p]];
148 if (isset($search_pos[- 1]) && $search_pos[-1] < $last_found
149 && $search_pos[-1] > $_minReplaces)
151 $last_found = $search_pos[-1];
152 $last_size = $search_pos[-2];
156 elseif ($last_found !== PHP_INT_MAX)
159 $rep_size = $this->_repSize[$last_found];
160 for ($j = 0; $j < $rep_size; ++$j)
162 $newBuffer[] = $this->_replace[$last_found][$j];
165 $i += $last_size - 1;
169 $newBuffer[] = $buffer[
$i];
182 $newBuffer[] = $buffer[
$i];