function arrayTrans($operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters)
 {
     switch ($operatorName) {
         case $this->ArrayName:
             $code = '';
             $paramCount = 0;
             $values = array();
             $staticArray = array();
             for ($i = 0; $i < count($parameters); ++$i) {
                 if ($i != 0) {
                     $code .= ', ';
                 } else {
                     $code .= '%output% = array( ';
                 }
                 if (!eZTemplateNodeTool::isStaticElement($parameters[$i])) {
                     $values[] = $parameters[$i];
                     ++$paramCount;
                     $code .= '%' . $paramCount . '%';
                 } else {
                     if ($paramCount == 0) {
                         $staticArray[] = eZTemplateNodeTool::elementStaticValue($parameters[$i]);
                     }
                     $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i]), 0, 0, false);
                 }
             }
             if ($paramCount == 0) {
                 return array(eZTemplateNodeTool::createArrayElement($staticArray));
             }
             $code .= ' );';
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->HashName:
             $code = '';
             $paramCount = 0;
             $values = array();
             $staticArray = array();
             $staticKeys = true;
             $keys = array();
             $vals = array();
             $hashCount = (int) (count($parameters) / 2);
             for ($i = 0; $i < $hashCount; ++$i) {
                 if ($i != 0) {
                     $code .= ', ';
                 } else {
                     $code .= '%output% = array( ';
                 }
                 if (!eZTemplateNodeTool::isStaticElement($parameters[$i * 2])) {
                     $staticKeys = false;
                     $values[] = $parameters[$i * 2];
                     ++$paramCount;
                     $code .= '%' . $paramCount . '%';
                 } else {
                     $keys[] = eZTemplateNodeTool::elementStaticValue($parameters[$i * 2]);
                     $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i * 2]), 0, 0, false);
                 }
                 $code .= ' => ';
                 if (!eZTemplateNodeTool::isStaticElement($parameters[$i * 2 + 1])) {
                     $values[] = $parameters[$i * 2 + 1];
                     ++$paramCount;
                     $code .= '%' . $paramCount . '%';
                 } else {
                     if ($paramCount == 0) {
                         $staticArray[eZTemplateNodeTool::elementStaticValue($parameters[$i * 2])] = eZTemplateNodeTool::elementStaticValue($parameters[$i * 2 + 1]);
                     }
                     $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i * 2 + 1]), 0, 0, false);
                 }
                 if ($staticKeys) {
                     $vals[$keys[count($keys) - 1]] = $parameters[$i * 2 + 1];
                 }
             }
             if ($paramCount == 0) {
                 return array(eZTemplateNodeTool::createArrayElement($staticArray));
             }
             if ($staticKeys) {
                 return array(eZTemplateNodeTool::createDynamicArrayElement($keys, $vals));
             }
             $code .= ' );';
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->ContainsName:
             $values = array();
             $inParam = null;
             $isString = false;
             $isArray = false;
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 $inParam = eZTemplateNodeTool::elementStaticValue($parameters[0]);
                 if (is_string($inParam)) {
                     $isString = true;
                 } else {
                     if (is_array($inParam)) {
                         $isArray = true;
                     }
                 }
                 $inParamCode = eZPHPCreator::variableText($inParam, 0, 0, false);
             } else {
                 $values[] = $parameters[0];
                 $inParamCode = '%' . count($values) . '%';
             }
             if (eZTemplateNodeTool::isStaticElement($parameters[1])) {
                 $matchParam = eZTemplateNodeTool::elementStaticValue($parameters[1]);
                 if (count($values) == 0) {
                     if ($isString) {
                         $result = strpos($inParam, $matchParam) !== false;
                     } else {
                         if ($isArray) {
                             $result = in_array($matchParam, $inParam);
                         }
                     }
                     return array(eZTemplateNodeTool::createBooleanElement($result));
                 }
                 $matchParamCode = eZPHPCreator::variableText($matchParam, 0, 0, false);
             } else {
                 $values[] = $parameters[1];
                 $matchParamCode = '%' . count($values) . '%';
             }
             if ($isString) {
                 $code = '%output% = ( strpos( ' . $inParamCode . ', ' . $matchParamCode . ' ) !== false );';
             } else {
                 if ($isArray) {
                     $code = '%output% = in_array( ' . $matchParamCode . ', ' . $inParamCode . ' );';
                 } else {
                     $code = 'if( is_string( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . '  %output% = ( strpos( ' . $inParamCode . ', ' . $matchParamCode . ' ) !== false );' . "\n" . '}' . "\n" . 'else if ( is_array( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . '  %output% = in_array( ' . $matchParamCode . ', ' . $inParamCode . ' );' . "\n" . '}' . "\n" . 'else' . "\n" . '{' . "\n" . '%output% = false;' . "\n" . '}';
                 }
             }
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->CompareName:
             $inParam = null;
             $isString = false;
             $isArray = false;
             $values = array();
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 $inParam = eZTemplateNodeTool::elementStaticValue($parameters[0]);
                 if (is_string($inParam)) {
                     $isString = true;
                 } else {
                     if (is_array($inParam)) {
                         $isArray = true;
                     }
                 }
                 $inParamCode = eZPHPCreator::variableText($inParam, 0, 0, false);
             } else {
                 $values[] = $parameters[0];
                 $inParamCode = '%' . count($values) . '%';
             }
             if (eZTemplateNodeTool::isStaticElement($parameters[1])) {
                 $matchParam = eZTemplateNodeTool::elementStaticValue($parameters[1]);
                 if (count($values) == 0) {
                     if ($isString) {
                         $result = strcmp($inParam, $matchParam) === 0;
                     } else {
                         if ($isArray) {
                             $result = (count(array_diff($matchParam, $inParam)) == 0 and count(array_diff($inParam, $matchParam)) == 0);
                         }
                     }
                     return array(eZTemplateNodeTool::createBooleanElement($result));
                 }
                 $matchParamCode = eZPHPCreator::variableText($matchParam, 0, 0, false);
             } else {
                 $values[] = $parameters[1];
                 $matchParamCode = '%' . count($values) . '%';
             }
             if ($isString) {
                 $code = '%output% = strcmp( ' . $inParamCode . ', ' . $matchParamCode . ' ) === 0;';
             } else {
                 if ($isArray) {
                     $code = '%output% = ( ( count( array_diff( ' . $inParamCode . ', ' . $matchParamCode . " ) ) == 0 ) and\n" . ' ( count( array_diff( ' . $matchParamCode . ', ' . $inParamCode . ' ) ) == 0 ) );';
                 } else {
                     $code = 'if( is_string( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . '  %output% = strcmp( ' . $inParamCode . ', ' . $matchParamCode . ') === 0;' . "\n" . '}' . "\n" . 'else if ( is_array( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . '  %output% = ( ( count( array_diff( ' . $inParamCode . ', ' . $matchParamCode . " ) ) == 0 ) and\n" . '( count( array_diff( ' . $matchParamCode . ', ' . $inParamCode . ' ) ) == 0 ) );' . "\n" . '}';
                 }
             }
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->ImplodeName:
             $values = array();
             if (!eZTemplateNodeTool::isStaticElement($parameters[1])) {
                 $values[] = $parameters[1];
                 $code = '%1%, ';
             } else {
                 $code = eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[1]), 0, 0, false) . ', ';
             }
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 if (count($values) == 0) {
                     return array(eZTemplateNodeTool::createStringElement(implode(eZTemplateNodeTool::elementStaticValue($parameters[1]), eZTemplateNodeTool::elementStaticValue($parameters[0]))));
                 } else {
                     $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[0]), 0, 0, false);
                 }
             } else {
                 $values[] = $parameters[0];
                 $code .= '%' . count($values) . '%';
             }
             $code = '%output% = implode( ' . $code . ' );';
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->UniqueName:
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 return array(eZTemplateNodeTool::createArrayElement(array_unique(eZTemplateNodeTool::elementStaticValue($parameters[0]))));
             }
             $values = array($parameters[0]);
             $code = '%output% = array_unique( %1% );';
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->ExplodeName:
             $values = array();
             $inParam = null;
             $isString = false;
             $isArray = false;
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 $inParam = eZTemplateNodeTool::elementStaticValue($parameters[0]);
                 if (is_string($inParam)) {
                     $isString = true;
                 } else {
                     if (is_array($inParam)) {
                         $isArray = true;
                     }
                 }
                 $inParamCode = eZPHPCreator::variableText($inParam, 0, 0, false);
             } else {
                 $values[] = $parameters[0];
                 $inParamCode = '%' . count($values) . '%';
             }
             if (eZTemplateNodeTool::isStaticElement($parameters[1])) {
                 $matchParam = eZTemplateNodeTool::elementStaticValue($parameters[1]);
                 if (count($values) == 0) {
                     if ($isString) {
                         $result = explode($matchParam, $inParam);
                     } else {
                         if ($isArray) {
                             $result = array(array_slice($inParam, 0, $matchParam), array_slice($inParam, $matchParam));
                         }
                     }
                     return array(eZTemplateNodeTool::createArrayElement($result));
                 }
                 $matchParamCode = eZPHPCreator::variableText($matchParam, 0, 0, false);
             } else {
                 $values[] = $parameters[1];
                 $matchParamCode = '%' . count($values) . '%';
             }
             if ($isString) {
                 $code = '%output% = explode( ' . $matchParamCode . ', ' . $inParamCode . ' );';
             } else {
                 if ($isArray) {
                     $code = '%output% = array( array_slice( ' . $inParamCode . ', 0,' . $matchParamCode . ' ), array_slice( ' . $inParamCode . ', ' . $matchParamCode . ' ) );';
                 } else {
                     $code = "if ( is_string( {$inParamCode} ) )\n" . "{\n" . "\t%output% = explode( {$matchParamCode}, {$inParamCode} );\n" . "}\n" . "else if ( is_array( {$inParamCode} ) )\n" . "{\n" . "\t%output% = array( array_slice( {$inParamCode}, 0, {$matchParamCode} ), array_slice( {$inParamCode}, {$matchParamCode} ) );\n" . "}\n" . "else\n" . "{\n" . "\t%output% = null;\n" . "}\n";
                 }
             }
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->RemoveName:
             $values = array();
             $isArray = false;
             $isString = false;
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 $inputArray = eZTemplateNodeTool::elementStaticValue($parameters[0]);
                 $inputArrayCode = eZPHPCreator::variableText($inputArray, 0, 0, false);
                 $isString = is_string($inputArray);
                 $isArray = is_array($inputArray);
             } else {
                 $values[] = $parameters[0];
                 $inputArrayCode = '%' . count($values) . '%';
             }
             if (eZTemplateNodeTool::isStaticElement($parameters[1])) {
                 $offset = eZTemplateNodeTool::elementStaticValue($parameters[1]);
                 $offsetCode = eZPHPCreator::variableText($offset, 0, 0, false);
             } else {
                 $values[] = $parameters[1];
                 $offsetCode = '%' . count($values) . '%';
             }
             $length = false;
             $lengthCode = '';
             if (count($parameters) > 2) {
                 if (eZTemplateNodeTool::isStaticElement($parameters[2])) {
                     $length = eZTemplateNodeTool::elementStaticValue($parameters[2]);
                     $lengthCode = eZPHPCreator::variableText($length, 0, 0, false);
                 } else {
                     $values[] = $parameters[2];
                     $lengthCode = '%' . count($values) . '%';
                 }
             }
             if (count($values) == 0) {
                 if ($isString) {
                     return array(eZTemplateNodeTool::createStringElement(substr($inputArray, $offset, $length)));
                 } else {
                     if ($isArray) {
                         if ($length === false) {
                             $length = 1;
                         }
                         $array_one = array_slice($inputArray, 0, $offset);
                         $array_two = array_slice($inputArray, $offset + $length);
                         return array(eZTemplateNodeTool::createArrayElement(array_merge($array_one, $array_two)));
                     }
                 }
             }
             if ($isString) {
                 $code = '%output% = substr( ' . $inputArrayCode . ', ' . $offsetCode;
                 if ($lengthCode) {
                     $code .= ', ' . $lengthCode;
                 }
                 $code .= ' );';
             } else {
                 if ($isArray) {
                     $code = '%output% = array_merge( array_slice( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ), array_slice( ' . $inputArrayCode . ', ' . $offsetCode;
                     if ($lengthCode) {
                         $code .= ' + ' . $lengthCode;
                     }
                     $code .= ' ) );';
                 } else {
                     $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" . 'if ( is_string( %tmp1% ) )' . "\n" . '{' . "\n" . '    %output% = ( substr( %tmp1%, 0, ' . $offsetCode . ' )';
                     $lengthCode = !$lengthCode ? 1 : $lengthCode;
                     if ($lengthCode) {
                         $code .= ' . substr( %tmp1%, ' . $offsetCode . ' + ' . $lengthCode . ' )';
                     }
                     $code .= ' );' . "\n" . '}' . "\n" . 'else if ( is_array( %tmp1% ) )' . "\n" . '{' . "\n" . '    %output% = array_merge( array_slice( %tmp1%, 0, ' . $offsetCode . ' )';
                     if ($lengthCode) {
                         $code .= ', array_slice( %tmp1%, ' . $offsetCode . ' + ' . $lengthCode . ' )';
                     }
                     $code .= ' );' . "\n" . '}';
                 }
             }
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 1));
             break;
         case $this->InsertName:
             $values = array();
             $isArray = false;
             $isString = false;
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 $inputArray = eZTemplateNodeTool::elementStaticValue($parameters[0]);
                 $inputArrayCode = eZPHPCreator::variableText($inputArray, 0, 0, false);
                 $isString = is_string($inputArray);
                 $isArray = is_array($inputArray);
             } else {
                 $values[] = $parameters[0];
                 $inputArrayCode = '%' . count($values) . '%';
             }
             if (eZTemplateNodeTool::isStaticElement($parameters[1])) {
                 $offset = eZTemplateNodeTool::elementStaticValue($parameters[1]);
                 $offsetCode = eZPHPCreator::variableText($offset, 0, 0, false);
             } else {
                 $values[] = $parameters[1];
                 $offsetCode = '%' . count($values) . '%';
             }
             if (count($parameters) > 2) {
                 if (eZTemplateNodeTool::isStaticElement($parameters[2])) {
                     $insertText = eZTemplateNodeTool::elementStaticValue($parameters[2]);
                 }
             }
             $insertElemCode = array();
             for ($i = 2; $i < count($parameters); ++$i) {
                 if (eZTemplateNodeTool::isStaticElement($parameters[$i])) {
                     $insertElemCode[] = eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i]), 0, 0, false);
                 } else {
                     $values[] = $parameters[$i];
                     $insertElemCode[] = '%' . count($values) . '%';
                 }
             }
             if (count($values) == 0) {
                 if ($isString) {
                     return array(eZTemplateNodeTool::createStringElement(substr($inputArray, 0, $offset) . $insertText . substr($inputArray, $offset)));
                 } else {
                     if ($isArray) {
                         $array_one = array_slice($inputArray, 0, $offset);
                         $array_two = array_slice($inputArray, $offset);
                         $array_to_insert = array();
                         for ($i = 2; $i < count($parameters); ++$i) {
                             $array_to_insert[] = eZTemplateNodeTool::elementStaticValue($parameters[$i]);
                         }
                         return array(eZTemplateNodeTool::createArrayElement(array_merge($array_one, $array_to_insert, $array_two)));
                     }
                 }
             }
             $tmpCount = 0;
             if ($isString) {
                 $code = '%output% = substr( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ) . ' . $insertElemCode[0] . ' . substr( ' . $inputArrayCode . ', ' . $offsetCode . ' );';
             } else {
                 if ($isArray) {
                     $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" . '%tmp2% = array_slice( %tmp1%, 0, ' . $offsetCode . ' );' . "\n" . '%tmp3% = array_slice( %tmp1%, ' . $offsetCode . ' );' . "\n" . '%tmp4% = array( ';
                     for ($i = 0; $i < count($insertElemCode); ++$i) {
                         if ($i != 0) {
                             $code .= ", ";
                         }
                         $code .= $insertElemCode[$i];
                     }
                     $code .= ' );' . "\n" . '%output% = array_merge( %tmp2%, %tmp4%, %tmp3% );' . "\n";
                     $tmpCount = 4;
                 } else {
                     $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" . 'if ( is_string( %tmp1% ) )' . "\n" . '{' . "\n" . '  %output% = substr( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ) . ' . $insertElemCode[0] . ' . substr( ' . $inputArrayCode . ', ' . $offsetCode . ' );' . "\n" . '}' . "\n" . 'else if ( is_array( %tmp1% ) )' . "\n" . '{' . "\n" . '  %tmp2% = array_slice( %tmp1%, 0, ' . $offsetCode . ' );' . "\n" . '  %tmp3% = array_slice( %tmp1%, ' . $offsetCode . ' );' . "\n" . '  %tmp4% = array( ';
                     for ($i = 0; $i < count($insertElemCode); ++$i) {
                         if ($i != 0) {
                             $code .= ", ";
                         }
                         $code .= $insertElemCode[$i];
                     }
                     $code .= ' );' . "\n" . '  %output% = array_merge( %tmp2%, %tmp4%, %tmp3% );' . "\n" . '}' . "\n";
                     $tmpCount = 4;
                 }
             }
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, $tmpCount));
             break;
         case $this->ReverseName:
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 if (is_string(eZTemplateNodeTool::elementStaticValue($parameters[0]))) {
                     return array(eZTemplateNodeTool::createStringElement(strrev(eZTemplateNodeTool::elementStaticValue($parameters[0]))));
                 } else {
                     if (is_array(eZTemplateNodeTool::elementStaticValue($parameters[0]))) {
                         return array(eZTemplateNodeTool::createArrayElement(array_reverse(eZTemplateNodeTool::elementStaticValue($parameters[0]))));
                     }
                 }
             }
             $values = array($parameters[0]);
             $code = 'if ( is_string( %1% ) )' . "\n" . '{' . "\n" . '  %output% = strrev( %1% );' . "\n" . '}' . "\n" . 'else if( is_array( %1% ) )' . "\n" . '{' . "\n" . '  %output% = array_reverse( %1% );' . "\n" . '}' . "\n";
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->ArraySumName:
             if (eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 return array(eZTemplateNodeTool::createNumericElement(array_sum(eZTemplateNodeTool::elementStaticValue($parameters[0]))));
             }
             $values = array($parameters[0]);
             $code = '%output% = array_sum( %1% );';
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
             break;
         case $this->RepeatName:
             $values = array();
             $isString = false;
             $isArray = false;
             if (!eZTemplateNodeTool::isStaticElement($parameters[0])) {
                 $values[] = $parameters[0];
                 $arrayCode = '%' . count($values) . '%';
             } else {
                 $arrayCode = eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[0]), 0, 0, false);
                 $isString = is_string(eZTemplateNodeTool::elementStaticValue($parameters[0]));
                 $isArray = is_array(eZTemplateNodeTool::elementStaticValue($parameters[0]));
             }
             if (!eZTemplateNodeTool::isStaticElement($parameters[1])) {
                 $values[] = $parameters[1];
                 $countCode = '%' . count($values) . '%';
             } else {
                 $count = (int) eZTemplateNodeTool::elementStaticValue($parameters[1]);
                 if (count($values) == 0) {
                     if ($isString) {
                         $retText = '';
                         $origText = eZTemplateNodeTool::elementStaticValue($parameters[0]);
                         for ($i = 0; $i < $count; $i++) {
                             $retText .= $origText;
                         }
                         return array(eZTemplateNodeTool::createStringElement($retText));
                     } else {
                         if ($isArray) {
                             $retArray = array();
                             $origArray = eZTemplateNodeTool::elementStaticValue($parameters[0]);
                             for ($i = 0; $i < $count; $i++) {
                                 $retArray = array_merge($retArray, $origArray);
                             }
                             return array(eZTemplateNodeTool::createArrayElement($retArray));
                         }
                     }
                 }
                 $countCode = (string) $count;
             }
             $code = '%tmp2% = ' . $arrayCode . ';' . "\n" . 'if ( is_string( %tmp2% ) )' . "\n" . '  %output% = \'\';' . "\n" . 'else if ( is_array(  %tmp2% ) )' . "\n" . '  %output% = array();' . "\n" . 'for( %tmp1% = 0; %tmp1% < ' . $countCode . '; ++%tmp1% )' . "\n" . '{' . "\n" . '  if ( is_string( %tmp2% )  )' . "\n" . '    %output% .= %tmp2%;' . "\n" . '  else if ( is_array( %tmp2% ) )' . "\n" . '    %output% = array_merge( %output%, %tmp2% );' . "\n" . '}' . "\n";
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 2));
             break;
     }
 }