staticSplitExpression() public static method

public static staticSplitExpression ( $str, $splitter, $limit )
Beispiel #1
0
 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);
 }
Beispiel #2
0
 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);
 }
Beispiel #6
0
 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);
 }
Beispiel #7
0
 /**
  * @dataProvider getWrongData
  * @expectedException Exception
  */
 public function testWrongExpressions($expression)
 {
     $splitted = ParserHelper::staticSplitExpression($expression, "x");
 }