public function eval_function($function, $args) { $method = '__' . $function; $result = ''; if (strpos($function, '::') !== false) { list($class, $class_method) = explode('::', $function, 2); if (!isset($this->xt_syntax_plugins[$class]) || $this->xt_syntax_plugins[$class]) { if (!isset($this->xt_syntax_plugins[$class])) { if (file_exists($this->xt_syntax_plugins_directory . 'xt_' . $class . '.php')) { require $this->xt_syntax_plugins_directory . 'xt_' . $class . '.php'; if (class_exists('xt_' . $class)) { $this->xt_syntax_plugins[$class] = true; if (method_exists('xt_' . $class, '__setup') && is_callable(array('xt_' . $class, '__setup'))) { call_user_func(array('xt_' . $class, '__setup'), $this->url, $this->info); } } } } foreach ($args as $key => $val) { $args[$key] = $this->eval_vars($val); } return call_user_func(array('xt_' . $class, $class_method), $args); } } if (method_exists($this, $method)) { foreach ($args as $key => $val) { $args[$key] = $this->eval_vars($val); } $result = call_user_func(array($this, $method), $args); } else { if (!isset($this->xt_syntax_functions[$function]['code'])) { $result = 'XtScript Error: Undefined function `' . $function . '`'; } else { $arguments = $this->xt_syntax_functions[$function]['args']; foreach ($arguments as $key => $val) { if (isset($args[$key])) { $arguments[$key] = $this->eval_vars($args[$key]); } } $vars = array_merge($this->vars, $arguments); $obj = new script($this->url, $this->info, $vars, $this->xt_syntax_functions); $result = $obj->eval_syntax($this->xt_syntax_functions[$function]['code'], $this->version); } } return $result; }
<?php $DIR = dirname(__FILE__); //dummy xtgem functions require $DIR . '/xtgem.php'; //main xtscript file require $DIR . '/script.php'; //example content $contents = file_get_contents($DIR . '/examples.txt'); //example site $url = 'test.xtgem.com/index'; $info = array(); $url_vars = array(); if (preg_match_all('#<!--parser:xtscript-->(.+?)<!--/parser:xtscript-->#mis', $contents, $sm)) { $script = new script($url, $info, $url_vars); $version = 1; try { foreach ($sm[1] as $key => $part) { $contents = preg_replace('#' . preg_quote($sm[0][$key], '#') . '#', $script->eval_syntax($part, $version), $contents, 1); } } catch (SyntaxException $e) { die($e->errorMessage($syntax, $e)); } } die($contents);