58 $_indexed_attr = array();
60 foreach ($attributes as $key => $mixed) {
62 if (!is_array($mixed)) {
64 if (in_array(trim($mixed,
'\'"'), $this->option_flags)) {
65 $_indexed_attr[trim($mixed, '\'"')] = true;
66 // shorthand attribute ?
67 } elseif (isset($this->shorttag_order[$key])) {
68 $_indexed_attr[$this->shorttag_order[$key]] = $mixed;
70 // too many shorthands
71 $compiler->trigger_template_error('too many shorthand attributes
', $compiler->lex->taglineno);
77 if (in_array($kv['key
'], $this->option_flags)) {
78 if (is_bool($kv['value
'])) {
79 $_indexed_attr[$kv['key
']] = $kv['value
'];
80 } elseif (is_string($kv['value
']) && in_array(trim($kv['value
'], '\
'"'), array(
'true',
'false'))) {
81 if (trim($kv[
'value']) ==
'true') {
82 $_indexed_attr[$kv[
'key']] =
true;
84 $_indexed_attr[$kv[
'key']] =
false;
86 } elseif (is_numeric($kv[
'value']) && in_array($kv[
'value'], array(0, 1))) {
87 if ($kv[
'value'] == 1) {
88 $_indexed_attr[$kv[
'key']] =
true;
90 $_indexed_attr[$kv[
'key']] =
false;
93 $compiler->trigger_template_error(
"illegal value of option flag \"{$kv['key']}\"", $compiler->lex->taglineno);
98 $_indexed_attr[key($mixed)] = $mixed[key($mixed)];
103 foreach ($this->required_attributes as $attr) {
104 if (!array_key_exists($attr, $_indexed_attr)) {
105 $compiler->trigger_template_error(
"missing \"" . $attr .
"\" attribute", $compiler->lex->taglineno);
109 if ($this->optional_attributes != array(
'_any')) {
110 $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags);
111 foreach ($_indexed_attr as $key => $dummy) {
112 if (!in_array($key, $tmp_array) && $key !== 0) {
113 $compiler->trigger_template_error(
"unexpected \"" . $key .
"\" attribute", $compiler->lex->taglineno);
118 foreach ($this->option_flags as $flag) {
119 if (!isset($_indexed_attr[$flag])) {
120 $_indexed_attr[$flag] =
false;
124 return $_indexed_attr;
135 public function openTag($compiler, $openTag, $data = null)
137 array_push($compiler->_tag_stack, array($openTag, $data));
151 if (count($compiler->_tag_stack) > 0) {
153 list($_openTag, $_data) = array_pop($compiler->_tag_stack);
155 if (in_array($_openTag, (array) $expectedTag)) {
156 if (is_null($_data)) {
165 $compiler->trigger_template_error(
"unclosed {$compiler->smarty->left_delimiter}" . $_openTag .
"{$compiler->smarty->right_delimiter} tag");
170 $compiler->trigger_template_error(
"unexpected closing tag", $compiler->lex->taglineno);