00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00056 class PHPTAL_Attribute_TAL_Attributes extends PHPTAL_Attribute
00057 {
00058 var
$_overwritten = array();
00059
00060 function
activate(&$g, &$tag)
00061 {
00062 global
$_phptal_xhtml_boolean_attributes;
00063
00064 $g->doPrintString(
'<', $tag->name());
00065
00066 $atts = $tag->attributes();
00067
00068 $exp =
new PHPTAL_Expression($g, $tag, $this->expression);
00069 $exp->setPolicy(
_PHPTAL_ES_RECEIVER_IS_TEMP);
00070 $err = $exp->prepare();
00071
if (PEAR::isError($err)) {
return $err; }
00072
00073
if ($exp->countSubs() > 0) {
00074 foreach ($exp->subs() as $sub) {
00075 $err = $this->
_attributeExpression($g, $tag, $sub);
00076
if (PEAR::isError($err)) {
return $err; }
00077 }
00078 }
else {
00079 $err = $this->
_attributeExpression($g, $tag, $exp);
00080
if (PEAR::isError($err)) {
return $err; }
00081 }
00082
00083
00084
00085 foreach ($atts as $key=>$value) {
00086 $test_key = strtolower($key);
00087
if (!in_array($test_key, $this->_overwritten)) {
00088
00089
if ($tag->_parser->_outputMode() == PHPTAL_XHTML
00090 && in_array($test_key, $_phptal_xhtml_boolean_attributes)) {
00091 $g->doPrintString(
' '.$key);
00092 }
else {
00093 $g->doPrintString(
' '.$key .'=
"');
00094
$g->doPrintString($value);
00095
$g->doPrintString('"');
00096 }
00097 }
00098 }
00099
00100
if ($tag->_isXHTMLEmptyElement()) {
00101 $g->doPrintString(' />');
00102
return;
00103 }
00104
00105
00106
if ($tag->hasContent()) {
00107 $g->doPrintString(
'>');
00108 }
else {
00109 $g->doPrintString('/>');
00110 }
00111
00112 $err = $tag->generateContent($g);
00113
if (PEAR::isError($err)) {
return $err; }
00114
00115
if ($tag->hasContent()) {
00116 $g->doPrintString('</', $tag->name(),
'>');
00117 }
00118 }
00119
00120 function
_printAttribute(&$g, &$tag, &$realName, &$varName, $
default=
false)
00121 {
00122 global
$_phptal_xhtml_boolean_attributes;
00123
00124
if ($tag->_parser->_outputMode() == PHPTAL_XHTML
00125 && in_array($realName, $_phptal_xhtml_boolean_attributes)) {
00126 $g->doIf('!PEAR::isError($'.$varName.') && $'.$varName);
00127 $g->doPrintString(
' '.$realName);
00128 $g->endBlock();
00129 } elseif ($
default) {
00130 $g->doIf('!PEAR::isError($'.$varName.') &&
false !== $'.$varName.' && null !== $'.$varName);
00131 $g->doPrintString(
' '. $realName . '=
"');
00132
$g->doPrintVar($varName);
00133
$g->doPrintString('"');
00134 $g->endBlock();
00135 }
else {
00136 $g->doPrintString(
' '. $realName . '=
"');
00137
$g->doPrintVar($varName);
00138
$g->doPrintString('"');
00139 }
00140 }
00141
00142 function
_attributeExpression(&$g, &$tag, &$sub)
00143 {
00144 $atts = $tag->attributes();
00145 $default =
false;
00146 $name = strtolower($sub->getReceiver());
00147
00148
00149
00150
if (preg_match('/\bdefault\b/sm', $sub->_src)) {
00151
00152
00153 $attrs = $tag->attributes();
00154
if (!array_key_exists($
name, $atts)){
00155 $g->doAffectResult('$__default__', '
false');
00156 }
else {
00157
00158 $g->doAffectResult('$__default__',
00159
'\''. str_replace(
'\'', '\\\'', $atts[$
name]) .
'\'' );
00160 }
00161 $default =
true;
00162 }
00163
00164 $real = str_replace('__phptales_dd__',
':', $
name);
00165 $this->_overwritten[] = $real;
00166 $err = $sub->generate();
00167
if (PEAR::isError($err)) {
return $err; }
00168
00169 $this->_printAttribute($g, $tag, $real, $
name, $
default);
00170 }
00171 }
00172
00173 ?>