You are here

function Smarty_Compiler::Smarty_Compiler in Quiz 6.6

Same name and namespace in other branches
  1. 6.5 includes/moodle/lib/smarty/Smarty_Compiler.class.php \Smarty_Compiler::Smarty_Compiler()

The class constructor.

File

includes/moodle/lib/smarty/Smarty_Compiler.class.php, line 80

Class

Smarty_Compiler
Template compiling class @package Smarty

Code

function Smarty_Compiler() {

  // matches double quoted strings:
  // "foobar"
  // "foo\"bar"
  $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';

  // matches single quoted strings:
  // 'foobar'
  // 'foo\'bar'
  $this->_si_qstr_regexp = '\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'';

  // matches single or double quoted strings
  $this->_qstr_regexp = '(?:' . $this->_db_qstr_regexp . '|' . $this->_si_qstr_regexp . ')';

  // matches bracket portion of vars
  // [0]
  // [foo]
  // [$bar]
  $this->_var_bracket_regexp = '\\[\\$?[\\w\\.]+\\]';

  // matches numerical constants
  // 30
  // -12
  // 13.22
  $this->_num_const_regexp = '(?:\\-?\\d+(?:\\.\\d+)?)';

  // matches $ vars (not objects):
  // $foo
  // $foo.bar
  // $foo.bar.foobar
  // $foo[0]
  // $foo[$bar]
  // $foo[5][blah]
  // $foo[5].bar[$foobar][4]
  $this->_dvar_math_regexp = '(?:[\\+\\*\\/\\%]|(?:-(?!>)))';
  $this->_dvar_math_var_regexp = '[\\$\\w\\.\\+\\-\\*\\/\\%\\d\\>\\[\\]]';
  $this->_dvar_guts_regexp = '\\w+(?:' . $this->_var_bracket_regexp . ')*(?:\\.\\$?\\w+(?:' . $this->_var_bracket_regexp . ')*)*(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?';
  $this->_dvar_regexp = '\\$' . $this->_dvar_guts_regexp;

  // matches config vars:
  // #foo#
  // #foobar123_foo#
  $this->_cvar_regexp = '\\#\\w+\\#';

  // matches section vars:
  // %foo.bar%
  $this->_svar_regexp = '\\%\\w+\\.\\w+\\%';

  // matches all valid variables (no quotes, no modifiers)
  $this->_avar_regexp = '(?:' . $this->_dvar_regexp . '|' . $this->_cvar_regexp . '|' . $this->_svar_regexp . ')';

  // matches valid variable syntax:
  // $foo
  // $foo
  // #foo#
  // #foo#
  // "text"
  // "text"
  $this->_var_regexp = '(?:' . $this->_avar_regexp . '|' . $this->_qstr_regexp . ')';

  // matches valid object call (one level of object nesting allowed in parameters):
  // $foo->bar
  // $foo->bar()
  // $foo->bar("text")
  // $foo->bar($foo, $bar, "text")
  // $foo->bar($foo, "foo")
  // $foo->bar->foo()
  // $foo->bar->foo->bar()
  // $foo->bar($foo->bar)
  // $foo->bar($foo->bar())
  // $foo->bar($foo->bar($blah,$foo,44,"foo",$foo[0].bar))
  $this->_obj_ext_regexp = '\\->(?:\\$?' . $this->_dvar_guts_regexp . ')';
  $this->_obj_restricted_param_regexp = '(?:' . '(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')(?:' . $this->_obj_ext_regexp . '(?:\\((?:(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')' . '(?:\\s*,\\s*(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . '))*)?\\))?)*)';
  $this->_obj_single_param_regexp = '(?:\\w+|' . $this->_obj_restricted_param_regexp . '(?:\\s*,\\s*(?:(?:\\w+|' . $this->_var_regexp . $this->_obj_restricted_param_regexp . ')))*)';
  $this->_obj_params_regexp = '\\((?:' . $this->_obj_single_param_regexp . '(?:\\s*,\\s*' . $this->_obj_single_param_regexp . ')*)?\\)';
  $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)';
  $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ')?(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?)';

  // matches valid modifier syntax:
  // |foo
  // |@foo
  // |foo:"bar"
  // |foo:$bar
  // |foo:"bar":$foobar
  // |foo|bar
  // |foo:$foo->bar
  $this->_mod_regexp = '(?:\\|@?\\w+(?::(?:\\w+|' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_avar_regexp . '|' . $this->_qstr_regexp . '))*)';

  // matches valid function name:
  // foo123
  // _foo_bar
  $this->_func_regexp = '[a-zA-Z_]\\w*';

  // matches valid registered object:
  // foo->bar
  $this->_reg_obj_regexp = '[a-zA-Z_]\\w*->[a-zA-Z_]\\w*';

  // matches valid parameter values:
  // true
  // $foo
  // $foo|bar
  // #foo#
  // #foo#|bar
  // "text"
  // "text"|bar
  // $foo->bar
  $this->_param_regexp = '(?:\\s*(?:' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '|' . $this->_num_const_regexp . '|\\w+)(?>' . $this->_mod_regexp . '*)\\s*)';

  // matches valid parenthesised function parameters:
  //
  // "text"
  //    $foo, $bar, "text"
  // $foo|bar, "foo"|bar, $foo->bar($foo)|bar
  $this->_parenth_param_regexp = '(?:\\((?:\\w+|' . $this->_param_regexp . '(?:\\s*,\\s*(?:(?:\\w+|' . $this->_param_regexp . ')))*)?\\))';

  // matches valid function call:
  // foo()
  // foo_bar($foo)
  // _foo_bar($foo,"bar")
  // foo123($foo,$foo->bar(),"foo")
  $this->_func_call_regexp = '(?:' . $this->_func_regexp . '\\s*(?:' . $this->_parenth_param_regexp . '))';
}