function_name = $s; return $this; } public function setArgumentsTypes(array $a) { $this->args_type = $a; $this->no_of_args = count($a); return $this; } public function getExpectedNoOfArguments() { return $this->no_of_args; } public function getFunctionName() { return $this->function_name; } } function registerAction(Action $a) { global $actions; $actions[$a->getFunctionName()] = $a; return true;} // Register all actions available require_once __DIR__."/actions/index.php"; function ExpandFetcherCommands(string $text) { global $actions; // Make it recursive, while you have parenthesis while(preg_match("/\(([^()]+)\)/",$text, $matches)) $text = str_replace($matches[0],ExpandFetcherCommands($matches[1]),$text); $function_name_regex_format = "@([a-zA-Z_][a-zA-Z0-9_]+)"; $arguments_regex_format = "([\w:\/\.-]+)"; if (preg_match("/$function_name_regex_format( |$)/",$text,$matches)) { $function_name = $matches[1]; if ( !isset($actions[$function_name]) || !function_exists($function_name )) return "[[ Action $function_name not available. ]]"; $action = $actions[$function_name]; // Fetch the arguments $reg_exp = array_fill(0,$action->getExpectedNoOfArguments(),"([\w:\/\.-]+)"); array_unshift($reg_exp, $function_name_regex_format); if (!preg_match("/".implode(" ",$reg_exp)."/",$text,$matches)) return "[[ Action $function_name was passed with wrong number of arguemnts. Expected: ".$a->getExpectedNoOfArguments()." ]]"; $full_action_requested_string = $matches[0]; array_shift($matches); // Clip the first whole-string result array_shift($matches); // Clip the function name $arguments = $matches; $actionResult = call_user_func_array($function_name, $arguments); $text = str_replace($full_action_requested_string,$actionResult,$text); } return $text; }