public function compile() { $rules =& $this->ruleset->getRules(); ## apply each in order $comp = array(); foreach ($rules as $name => $rule) { $this->initRule($rule); $r = "/* {$name} */\n"; if ($rule->require) { $r .= 'require_once ' . TextWheel::export($rule->require) . ';' . "\n"; } if ($rule->if_str) { $r .= 'if_str(' . TextWheel::export($rule->if_str) . ', $t)' . "\n"; } if ($rule->if_stri) { $r .= 'if_stri(' . TextWheel::export($rule->if_stri) . ', $t)' . "\n"; } if ($rule->if_match) { $r .= 'if_match(' . TextWheel::export($rule->if_match) . ', $t)' . "\n"; } if ($rule->func_replace !== 'replace_identity') { $fun = 'TextWheel::' . $rule->func_replace; $r .= '$t = ' . $fun . '(' . TextWheel::export($rule->match) . ', ' . TextWheel::export($rule->replace) . ', $t);' . "\n"; } $comp[] = $r; } return join("\n", $comp); }
public function compile($b = null) { $rules =& $this->ruleset->getRules(); ## apply each in order $pre = array(); $comp = array(); foreach ($rules as $name => $rule) { $rule->name = $name; $this->initRule($rule); if (is_string($rule->replace) and isset($this->compiled[$rule->replace]) and $fun = $this->compiled[$rule->replace]) { $pre[] = "\n###\n## {$name}\n###\n" . $fun; preg_match(',function (\\w+), ', $fun, $r); $rule->compilereplace = $r[1]; # ne pas modifier ->replace sinon on casse l'execution... } $r = "\t/* {$name} */\n"; if ($rule->require) { $r .= "\t" . 'require_once ' . TextWheel::export($rule->require) . ';' . "\n"; } if ($rule->if_str) { $r .= "\t" . 'if (strpos($t, ' . TextWheel::export($rule->if_str) . ') === false)' . "\n"; } if ($rule->if_stri) { $r .= "\t" . 'if (stripos($t, ' . TextWheel::export($rule->if_stri) . ') === false)' . "\n"; } if ($rule->if_match) { $r .= "\t" . 'if (preg_match(' . TextWheel::export($rule->if_match) . ', $t))' . "\n"; } if ($rule->func_replace !== 'replace_identity') { $fun = 'TextWheel::' . $rule->func_replace; switch ($fun) { case 'TextWheel::replace_all_cb': $fun = $rule->replace; # trim()... break; case 'TextWheel::replace_preg': $fun = 'preg_replace'; break; case 'TextWheel::replace_str': $fun = 'str_replace'; break; case 'TextWheel::replace_preg_cb': $fun = 'preg_replace_callback'; break; default: break; } $r .= "\t" . '$t = ' . $fun . '(' . TextWheel::export($rule->match) . ', ' . TextWheel::export($rule->replace) . ', $t);' . "\n"; } $comp[] = $r; } $code = join("\n", $comp); $code = 'function ' . $b . '($t) {' . "\n" . $code . "\n\treturn \$t;\n}\n\n"; $code = join("\n", $pre) . $code; return $code; }