/** * Initializing a rule a first call * including file, creating function or wheel * optimizing tests * * @param TextWheelRule $rule */ protected function initRule(&$rule) { # language specific if ($rule->require) { require_once $rule->require; } # optimization: strpos or stripos? if (isset($rule->if_str)) { if (strtolower($rule->if_str) !== strtoupper($rule->if_str)) { $rule->if_stri = $rule->if_str; $rule->if_str = null; } } if ($rule->create_replace) { $compile = $rule->replace . '($t)'; $rule->replace = create_function('$m', $rule->replace); $this->compiled[$rule->replace] = $compile; $rule->create_replace = false; $rule->is_callback = true; } elseif ($rule->is_wheel) { $n = count(TextWheel::$subwheel); TextWheel::$subwheel[] = $this->createSubWheel($rule->replace); $var = '$m[' . intval($rule->pick_match) . ']'; if ($rule->type == 'all' or $rule->type == 'str' or $rule->type == 'split' or !isset($rule->match)) { $var = '$m'; } $code = 'return TextWheel::getSubWheel(' . $n . ')->text(' . $var . ');'; $rule->replace = create_function('$m', $code); $cname = 'compiled_' . str_replace('-', '_', $rule->name); $compile = TextWheel::getSubWheel($n)->compile($cname); $this->compiled[$rule->replace] = $compile; $rule->is_wheel = false; $rule->is_callback = true; } # optimization $rule->func_replace = ''; if (isset($rule->replace)) { switch ($rule->type) { case 'all': $rule->func_replace = 'replace_all'; break; case 'str': $rule->func_replace = 'replace_str'; // test if quicker strtr usable if (!$rule->is_callback and is_array($rule->match) and is_array($rule->replace) and $c = array_map('strlen', $rule->match) and $c = array_unique($c) and count($c) == 1 and reset($c) == 1 and $c = array_map('strlen', $rule->replace) and $c = array_unique($c) and count($c) == 1 and reset($c) == 1) { $rule->match = implode('', $rule->match); $rule->replace = implode('', $rule->replace); $rule->func_replace = 'replace_strtr'; } break; case 'split': $rule->func_replace = 'replace_split'; $rule->match = array($rule->match, is_null($rule->glue) ? $rule->match : $rule->glue); break; case 'preg': default: $rule->func_replace = 'replace_preg'; break; } if ($rule->is_callback) { $rule->func_replace .= '_cb'; } } if (!method_exists("TextWheel", $rule->func_replace)) { $rule->disabled = true; $rule->func_replace = 'replace_identity'; } # /end }