Example #1
0
 /**
  * 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
 }