_var_bracket_regexp . ')|\.\$?\w+|\S+!', $variable, $_match); $variable = $_match[0]; $var_name = array_shift($variable); $_result = "\$this->_confs['$var_name']"; foreach ($variable as $var) { if ($var{0} == '[') { $var = substr($var, 1, -1); if (is_numeric($var)) { $_result .= "[$var]"; } elseif ($var{0} == '$') { $_result .= "[" . $object->_compile_variable($var) . "]"; } elseif ($var{0} == '#') { $_result .= "[" . $object->_compile_config($var) . "]"; } else { $_result .= "['$var']"; } } else if ($var{0} == '.') { if ($var{1} == '$') { $_result .= "[\$this->_TPL['" . substr($var, 2) . "']]"; } else { $_result .= "['" . substr($var, 1) . "']"; } } else if (substr($var,0,2) == '->') { if(substr($var,2,2) == '__') { throw new Template_Exception('call to internal object members is not allowed', $object); } else if (substr($var, 2, 1) == '$') { $_output .= '->{(($var=$this->_TPL[\''.substr($var,3).'\']) && substr($var,0,2)!=\'__\') ? $_var : throw new Template_Exception("cannot access property \\"$var\\"", $this)}'; } } else { throw new Template_Exception('#' . $var_name.implode('', $variable) . '# is an invalid reference', $object); } } return $_result; } ?>