public function visit(DOMAttr $att, Compiler $context) { $node = $att->ownerElement; $expressions = ParserHelper::staticSplitExpression($att->value, ","); $varName = self::getVarname($node); $parts = array(); foreach ($expressions as $expression) { $attrExpr = ParserHelper::staticSplitExpression($expression, ":"); if (!$node->hasAttribute($attrExpr[0])) { throw new \Exception("Can't find the attribute named '" . $attrExpr[0] . "'"); } $attNode = $node->getAttributeNode($attrExpr[0]); $transParams = isset($attrExpr[1]) ? ParserHelper::staticSplitExpression(trim($attrExpr[1], "[]\n\r\t"), ",") : array(); $parts[$attrExpr[0]] = "['" . addcslashes($attNode->value, "'") . "'|trans(" . (isset($transParams[0]) ? $transParams[0] : '') . (isset($transParams[1]) ? ", {$transParams['1']}" : "") . ")]"; $node->removeAttributeNode($attNode); } $code = "set {$varName} = {$varName}|default({})|merge({" . ParserHelper::implodeKeyed(",", $parts, true) . "})"; $node->setAttribute("__attr__", $varName); $pi = $context->createControlNode($code); $node->parentNode->insertBefore($pi, $node); $node->removeAttributeNode($att); }
public function visit(\DOMAttr $att, Compiler $context) { $node = $att->ownerElement; $expressions = ParserHelper::staticSplitExpression($att->value, ","); $attributes = array(); foreach ($expressions as $k => $expression) { $expressions[$k] = $attrExpr = self::splitAttrExpression($expression); $attNode = null; if ($node->hasAttribute($attrExpr['name'])) { $attNode = $node->getAttributeNode($attrExpr['name']); $node->removeAttributeNode($attNode); } if ($attrExpr['test'] === "true" || $attrExpr['test'] === "1") { unset($expressions[$k]); $attributes[$attrExpr['name']] = "[{$attrExpr['expr']}]"; } elseif ($attNode) { $attributes[$attrExpr['name']] = "['" . addcslashes($attNode->value, "'") . "']"; } else { $attributes[$attrExpr['name']] = "[]"; } } $varName = self::getVarname($node); $code = array(); $code[] = $context->createControlNode("if {$varName} is not defined"); $code[] = $context->createControlNode("set {$varName} = {" . ParserHelper::implodeKeyed(",", $attributes, true) . " }"); $code[] = $context->createControlNode("else"); $code[] = $context->createControlNode("set {$varName} = {$varName}|merge({" . ParserHelper::implodeKeyed(",", $attributes, true) . "})"); $code[] = $context->createControlNode("endif"); foreach ($expressions as $attrExpr) { $code[] = $context->createControlNode("if {$attrExpr['test']}"); $code[] = $context->createControlNode("set {$varName} = {$varName}|merge({ '{$attrExpr['name']}':[{$attrExpr['expr']}] })"); $code[] = $context->createControlNode("endif"); } $this->addSpecialAttr($node, $varName, $code); $node->removeAttributeNode($att); }