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;
     }
 }
 static function createNamespaceChangeNode($variableData, $parameters = array())
 {
     if (is_string($variableData)) {
         $variableData = array(eZTemplateNodeTool::createStringElement($variableData));
     } else {
         if (is_numeric($variableData)) {
             $variableData = array(eZTemplateNodeTool::createNumericElement($variableData));
         }
     }
     $node = array(eZTemplate::NODE_INTERNAL_NAMESPACE_CHANGE, $variableData, $parameters);
     return $node;
 }
 function operatorTransform($operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters)
 {
     if (!eZTemplateNodeTool::isConstantElement($parameters[1]) || count($parameters) > 2 && !eZTemplateNodeTool::isConstantElement($parameters[2])) {
         return false;
     }
     // We do not support non-static values for decimal_count, decimal_symbol and thousands_separator
     if (count($parameters) > 3 and !eZTemplateNodeTool::isConstantElement($parameters[3])) {
         return false;
     }
     if (count($parameters) > 4 and !eZTemplateNodeTool::isConstantElement($parameters[4])) {
         return false;
     }
     if (count($parameters) > 5 and !eZTemplateNodeTool::isConstantElement($parameters[5])) {
         return false;
     }
     $locale = eZLocale::instance();
     $decimalCount = $locale->decimalCount();
     $decimalSymbol = $locale->decimalSymbol();
     $decimalThousandsSeparator = $locale->thousandsSeparator();
     if (count($parameters) > 2) {
         $prefix = eZTemplateNodeTool::elementConstantValue($parameters[2]);
     } else {
         $prefix = 'auto';
     }
     if (count($parameters) > 3) {
         $decimalCount = eZTemplateNodeTool::elementConstantValue($parameters[3]);
     } elseif ($prefix == 'none') {
         $decimalCount = 0;
     }
     if (count($parameters) > 4) {
         $decimalSymbol = eZTemplateNodeTool::elementConstantValue($parameters[4]);
     }
     if (count($parameters) > 5) {
         $decimalThousandsSeparator = eZTemplateNodeTool::elementConstantValue($parameters[5]);
     }
     $decimalSymbolText = eZPHPCreator::variableText($decimalSymbol, 0, 0, false);
     $decimalThousandsSeparatorText = eZPHPCreator::variableText($decimalThousandsSeparator, 0, 0, false);
     $unit = eZTemplateNodeTool::elementConstantValue($parameters[1]);
     $ini = eZINI::instance();
     if ($prefix == "auto") {
         $prefixes = $ini->variableArray("UnitSettings", "BinaryUnits");
         if (in_array($unit, $prefixes)) {
             $prefix = "binary";
         } else {
             $prefix = "decimal";
         }
     }
     $unit_ini = eZINI::instance("units.ini");
     $use_si = $ini->variable("UnitSettings", "UseSIUnits") == "true";
     $fake = $use_si ? "" : "Fake";
     if ($unit_ini->hasVariable("Base", $unit)) {
         $base = $unit_ini->variable("Base", $unit);
     }
     $hasInput = false;
     $output = false;
     if (eZTemplateNodeTool::isConstantElement($parameters[0])) {
         $output = eZTemplateNodeTool::elementConstantValue($parameters[0]);
         $hasInput = true;
     }
     $prefix_var = "";
     if ($prefix == "decimal") {
         $prefixes = $unit_ini->group("DecimalPrefixes");
         $prefix_group = $unit_ini->group("DecimalPrefixes");
         $prefixes = array();
         foreach ($prefix_group as $prefix_item) {
             $prefixes[] = explode(";", $prefix_item);
         }
         usort($prefixes, "eZTemplateUnitCompareFactor");
         $prefix_var = "";
         if ($hasInput) {
             if ($output >= 0 and $output < 10) {
                 $prefix_var = '';
             } else {
                 foreach ($prefixes as $prefix) {
                     $val = pow(10, (int) $prefix[0]);
                     if ($val <= $output) {
                         $prefix_var = $prefix[1];
                         $output = number_format($output / $val, $decimalCount, $decimalSymbol, $decimalThousandsSeparator);
                         break;
                     }
                 }
             }
         } else {
             $values = array();
             $values[] = $parameters[0];
             $values[] = array(eZTemplateNodeTool::createArrayElement($prefixes));
             $values[] = array(eZTemplateNodeTool::createStringElement($base));
             $code = 'if ( %1% >= 0 and %1% < 10 )' . "\n" . '{' . "\n" . '    %tmp3% = \'\';' . "\n" . '}' . "\n" . 'else' . "\n" . '{' . "\n" . '    %tmp3% = "";' . "\n" . '    foreach ( %2% as %tmp1% )' . "\n" . '    {' . "\n" . '        %tmp2% = pow( 10, (int)%tmp1%[0] );' . "\n" . '        if ( %tmp2% <= %1% )' . "\n" . '        {' . "\n" . '            %tmp3% = %tmp1%[1];' . "\n" . '            %1% = number_format( %1% / %tmp2%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' );' . "\n" . '            break;' . "\n" . '        }' . "\n" . '    }' . "\n" . '}' . "\n" . '%output% = %1% . \' \' . %tmp3% . %3%;';
             return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 3));
         }
     } else {
         if ($prefix == "binary") {
             $prefix_group = $unit_ini->group($fake . "BinaryPrefixes");
             $prefixes = array();
             foreach ($prefix_group as $prefix_item) {
                 $prefixes[] = explode(";", $prefix_item);
             }
             usort($prefixes, "eZTemplateUnitCompareFactor");
             $prefix_var = "";
             if ($hasInput) {
                 if ($output >= 0 and $output < 10) {
                     $prefix_var = '';
                 }
                 foreach ($prefixes as $prefix) {
                     $val = pow(2, (int) $prefix[0]);
                     if ($val <= $output) {
                         $prefix_var = $prefix[1];
                         $output = number_format($output / $val, $decimalCount, $decimalSymbol, $decimalThousandsSeparator);
                         break;
                     }
                 }
             } else {
                 $values = array();
                 $values[] = $parameters[0];
                 $values[] = array(eZTemplateNodeTool::createArrayElement($prefixes));
                 $values[] = array(eZTemplateNodeTool::createStringElement($base));
                 $code = 'if ( %1% >= 0 and %1% < 10 )' . "\n" . '{' . "\n" . '    %tmp3% = \'\';' . "\n" . '}' . "\n" . 'else' . "\n" . '{' . "\n" . '    %tmp3% = "";' . "\n" . '    foreach ( %2% as %tmp1% )' . "\n" . '    {' . "\n" . '      %tmp2% = pow( 2, (int)%tmp1%[0] );' . "\n" . '      if ( %tmp2% <= %1% )' . "\n" . '      {' . "\n" . '        %tmp3% = %tmp1%[1];' . "\n" . '        %1% = number_format( %1% / %tmp2%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' );' . "\n" . '        break;' . "\n" . '      }' . "\n" . '    }' . "\n" . '}' . "\n" . '%output% = %1% . \' \' . %tmp3% . %3%;';
                 return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 3));
             }
         } else {
             if ($unit_ini->hasVariable("BinaryPrefixes", $prefix)) {
                 $prefix_base = 2;
                 $prefix_var = $unit_ini->variableArray("BinaryPrefixes", $prefix);
             } else {
                 if ($unit_ini->hasVariable("DecimalPrefixes", $prefix)) {
                     $prefix_base = 10;
                     $prefix_var = $unit_ini->variableArray("DecimalPrefixes", $prefix);
                 } else {
                     if ($prefix == "none") {
                         $prefix_var = '';
                         if ($hasInput) {
                             $output = number_format($output, $decimalCount, $decimalSymbol, $decimalThousandsSeparator);
                         } else {
                             $values = array();
                             $values[] = $parameters[0];
                             $values[] = array(eZTemplateNodeTool::createStringElement(''));
                             $values[] = array(eZTemplateNodeTool::createStringElement($base));
                             $code = '%output% = number_format( %1%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' ) . \' \' . %2% . %3%;';
                             return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
                         }
                     }
                 }
             }
             if (is_array($prefix_var)) {
                 if ($hasInput) {
                     $val = pow($prefix_base, (int) $prefix_var[0]);
                     $output = number_format($output / $val, $decimalCount, $decimalSymbol, $decimalThousandsSeparator);
                     $prefix_var = $prefix_var[1];
                 } else {
                     $values = array();
                     $values[] = $parameters[0];
                     $values[] = array(eZTemplateNodeTool::createNumericElement(pow($prefix_base, (int) $prefix_var[0])));
                     $values[] = array(eZTemplateNodeTool::createStringElement($prefix_var[1]));
                     $values[] = array(eZTemplateNodeTool::createStringElement($base));
                     $code = '%output% = number_format( %1% / %2%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' ) . \' \' . %3% . %4%;';
                     return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
                 }
             }
         }
     }
     if ($hasInput) {
         return array(eZTemplateNodeTool::createStringElement($output . ' ' . $prefix_var . $base));
     }
     $values = array();
     $values[] = $parameters[0];
     $values[] = array(eZTemplateNodeTool::createStringElement($prefix_var));
     $values[] = array(eZTemplateNodeTool::createStringElement($base));
     $code = '%output% = %1% . \' \' . %2% . %3%;';
     return array(eZTemplateNodeTool::createCodePieceElement($code, $values));
 }
    function romanTransformation( $operatorName, &$node, $tpl, &$resourceData,
                                  $element, $lastElement, $elementList, $elementTree, &$parameters )
    {
        $values = array();
        if ( count( $parameters ) != 1 )
            return false;
        $newElements = array();

        if ( eZTemplateNodeTool::isConstantElement( $parameters[0] ) )
        {
            $staticResult = $this->buildRoman( eZTemplateNodeTool::elementConstantValue( $parameters[0] ) );
            return array( eZTemplateNodeTool::createNumericElement( $staticResult ) );
        }
        else
        {
            return false;
        }
    }