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 } else if (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 } else if (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 }
else if (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;
138 array_push($compiler->_tag_stack, array($openTag,
$data));
152 if (count($compiler->_tag_stack) > 0) {
154 list($_openTag, $_data) = array_pop($compiler->_tag_stack);
156 if (in_array($_openTag, (array) $expectedTag)) {
157 if (is_null($_data)) {
166 $compiler->trigger_template_error(
"unclosed {" . $_openTag .
"} tag");
170 $compiler->trigger_template_error(
"unexpected closing tag", $compiler->lex->taglineno);
foreach(array('date1', 'date2', 'type', 'renewals', 'width') as $item) $data
openTag($compiler, $openTag, $data=null)
Push opening tag name on stack.
getAttributes($compiler, $attributes)
This function checks if the attributes passed are valid.
closeTag($compiler, $expectedTag)
Pop closing tag.