public function visit(\DOMAttr $att, Compiler $context) { $node = $att->ownerElement; $sets = ParserHelper::staticSplitExpression(html_entity_decode($att->value), ","); foreach ($sets as $set) { $pi = $context->createControlNode("set " . $set); $node->parentNode->insertBefore($pi, $node); } $node->removeAttributeNode($att); }
public static function splitAttrExpression($str) { $parts = ParserHelper::staticSplitExpression($str, "?"); if (count($parts) == 1) { $attr = self::findAttrParts($parts[0]); $attr['test'] = 'true'; return $attr; } elseif (count($parts) == 2) { $attr = self::findAttrParts($parts[1]); $attr['test'] = $parts[0]; return $attr; } else { throw new Exception(__CLASS__ . "::splitAttrExpression error in '{$str}'"); } }
public function visit(DOMAttr $att, Compiler $context) { $node = $att->ownerElement; $expessions = ParserHelper::staticSplitExpression(html_entity_decode($att->value), ","); $params = 'trans'; if (isset($expessions[0]) && trim($expessions[0])) { $params .= " with " . $expessions[0]; } if (isset($expessions[1]) && strlen($expessions[1])) { $params .= " from " . $expessions[1]; } $start = $context->createControlNode($params); $end = $context->createControlNode("endtrans"); $node->insertBefore($start, $node->firstChild); $node->appendChild($end); $node->removeAttributeNode($att); }
public function visit(DOMAttr $att, Compiler $context) { $node = $att->ownerElement; $expessions = ParserHelper::staticSplitExpression($att->value, ","); if (!isset($expessions[0]) || !strlen($expessions[0])) { throw new \Exception("The count for trans-n is required"); } $with = '{\'%count%\':' . $expessions[0] . '}'; if (isset($expessions[1]) && strlen($expessions[1])) { $with = "{$with}|merge(" . $expessions[1] . ')'; } $from = ''; if (isset($expessions[2]) && strlen($expessions[2])) { $from = " from {$expessions['2']}"; } $start = $context->createControlNode("transchoice " . $expessions[0] . " with {$with}" . $from); $end = $context->createControlNode("endtranschoice"); $node->insertBefore($start, $node->firstChild); $node->appendChild($end); $node->removeAttributeNode($att); }
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 (!isset($attributes[$attrExpr['name']])) { $attributes[$attrExpr['name']] = array(); } if ($node->hasAttribute($attrExpr['name'])) { $attNode = $node->getAttributeNode($attrExpr['name']); $node->removeAttributeNode($attNode); $attributes[$attrExpr['name']][] = "'" . addcslashes($attNode->value, "'") . "'"; } if ($attrExpr['test'] === "true" || $attrExpr['test'] === "1") { unset($expressions[$k]); $attributes[$attrExpr['name']][] = $attrExpr['expr']; } } $code = array(); $varName = self::getVarname($node); $code[] = $context->createControlNode("if {$varName} is not defined"); $code[] = $context->createControlNode("set {$varName} = {" . ParserHelper::implodeKeyedDouble(",", $attributes, true) . " }"); $code[] = $context->createControlNode("else"); $code[] = $context->createControlNode("set {$varName} = {$varName}|merge({" . ParserHelper::implodeKeyedDouble(",", $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']}':{$varName}.{$attrExpr['name']}|merge([{$attrExpr['expr']}]) })"); $code[] = $context->createControlNode("endif"); } $this->addSpecialAttr($node, $varName, $code); $node->removeAttributeNode($att); }
/** * @dataProvider getWrongData * @expectedException Exception */ public function testWrongExpressions($expression) { $splitted = ParserHelper::staticSplitExpression($expression, "x"); }