static function handleInlineNode($child, $generator, $prevLineBreak = false)
 {
     $paragraphParameters = array();
     $imageArray = array();
     switch ($child->localName) {
         case "line":
             // @todo: (Alex) check why this is needed here and not after the next line
             if ($prevLineBreak) {
                 $paragraphParameters[] = array(eZOOGenerator::LINE, '');
             }
             // Todo: support inline tags
             $paragraphParameters[] = array(eZOOGenerator::TEXT, $child->textContent);
             foreach ($child->childNodes as $lineChild) {
                 if ($lineChild->localName == 'embed') {
                     // Only support objects of image class for now
                     $object = eZContentObject::fetch($lineChild->getAttribute("object_id"));
                     if ($object && $object->canRead()) {
                         $classIdentifier = $object->attribute("class_identifier");
                         // Todo: read class identifiers from configuration
                         if ($classIdentifier == "image") {
                             $imageSize = $lineChild->getAttribute('size');
                             if ($imageSize == "") {
                                 $imageSize = "large";
                             }
                             $imageAlignment = $lineChild->getAttribute('align');
                             if ($imageAlignment == "") {
                                 $imageAlignment = "center";
                             }
                             $dataMap = $object->dataMap();
                             $imageAttribute = $dataMap['image'];
                             $imageHandler = $imageAttribute->content();
                             $originalImage = $imageHandler->attribute('original');
                             $fileHandler = eZClusterFileHandler::instance($originalImage['url']);
                             $uniqueFile = $fileHandler->fetchUnique();
                             $displayImage = $imageHandler->attribute($imageSize);
                             $displayWidth = $displayImage['width'];
                             $displayHeight = $displayImage['height'];
                             $imageArray[] = array("FileName" => $uniqueFile, "Alignment" => $imageAlignment, "DisplayWidth" => $displayWidth, "DisplayHeight" => $displayHeight);
                         }
                     } else {
                         eZDebug::writeError("Image (object_id = " . $child->getAttribute('object_id') . " ) could not be used (does not exist or due to insufficient privileges)");
                     }
                 }
             }
             break;
             // text nodes
         // text nodes
         case "":
             $paragraphParameters[] = array(eZOOGenerator::TEXT, $child->textContent);
             break;
         case "link":
             $href = $child->getAttribute('href');
             if (!$href) {
                 $url_id = $child->getAttribute('url_id');
                 if ($url_id) {
                     $eZUrl = eZURL::fetch($url_id);
                     if (is_object($eZUrl)) {
                         $href = $eZUrl->attribute('url');
                     }
                 }
             }
             $paragraphParameters[] = array(eZOOGenerator::LINK, $href, $child->textContent);
             break;
         case "emphasize":
         case "strong":
             $style = $child->localName == 'strong' ? 'bold' : 'italic';
             $paragraphParameters[] = array(eZOOGenerator::STYLE_START, $style);
             foreach ($child->childNodes as $inlineNode) {
                 $return = self::handleInlineNode($inlineNode);
                 $paragraphParameters = array_merge($paragraphParameters, $return['paragraph_parameters']);
             }
             $paragraphParameters[] = array(eZOOGenerator::STYLE_STOP);
             break;
         case "literal":
             $literalContent = $child->textContent;
             $literalContentArray = explode("\n", $literalContent);
             foreach ($literalContentArray as $literalLine) {
                 $generator->addParagraph("Preformatted_20_Text", htmlspecialchars($literalLine));
             }
             break;
         case "custom":
             $customTagName = $child->getAttribute('name');
             // Check if the custom tag is inline
             $ini = eZINI::instance('content.ini');
             $isInlineTagList = $ini->variable('CustomTagSettings', 'IsInline');
             $isInline = array_key_exists($customTagName, $isInlineTagList) && $isInlineTagList[$customTagName];
             // Handle inline custom tags
             if ($isInline) {
                 $paragraphParameters[] = array(eZOOGenerator::STYLE_START, "eZCustominline_20_{$customTagName}");
                 $paragraphParameters[] = array(eZOOGenerator::TEXT, $child->textContent);
                 $paragraphParameters[] = array(eZOOGenerator::STYLE_STOP);
             } else {
                 $GLOBALS['CustomTagStyle'] = "eZCustom_20_{$customTagName}";
                 foreach ($child->childNodes as $customParagraph) {
                     // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak
                     self::handleNode($customParagraph, $generator, $prevLineBreak);
                 }
                 $GLOBALS['CustomTagStyle'] = false;
             }
             break;
         case "ol":
         case "ul":
             $listType = $child->localName == "ol" ? "ordered" : "unordered";
             $generator->startList($listType);
             foreach ($child->childNodes as $listItem) {
                 foreach ($listItem->childNodes as $childNode) {
                     if ($childNode->nodeType == XML_TEXT_NODE) {
                         $generator->addParagraph($childNode->textContent);
                     } else {
                         // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak
                         self::handleNode($childNode, $generator, $prevLineBreak);
                     }
                 }
                 $generator->nextListItem();
             }
             $generator->endList();
             break;
         case "table":
             $generator->startTable();
             $rows = 1;
             foreach ($child->childNodes as $row) {
                 foreach ($row->childNodes as $cell) {
                     // Set the correct col span
                     $colSpan = $cell->getAttribute("colspan");
                     if (is_numeric($colSpan)) {
                         $generator->setCurrentColSpan($colSpan);
                     }
                     // Check for table header
                     if ($cell->localName == 'th' and $rows == 1) {
                         $generator->setIsInsideTableHeading(true);
                     }
                     // If the cell is empty, create a dummy so the cell is properly exported
                     if (!$cell->hasChildNodes()) {
                         $dummy = $cell->ownerDocument->createElement("paragraph");
                         $cell->appendChild($dummy);
                         // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak
                         eZOOConverter::handleNode($dummy, $generator, $prevLineBreak);
                     }
                     eZDebug::writeDebug($cell->ownerDocument->saveXML($cell), 'ezxmltext table cell');
                     foreach ($cell->childNodes as $cellNode) {
                         // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak
                         self::handleNode($cellNode, $generator, $prevLineBreak);
                     }
                     $generator->nextCell();
                 }
                 $generator->nextRow();
                 ++$rows;
             }
             $generator->endTable();
             break;
         case 'object':
         case 'embed':
             $objectID = $child->localName == 'embed' ? $child->getAttribute("object_id") : $child->getAttribute("id");
             // Only support objects of image class for now
             $object = eZContentObject::fetch($objectID);
             if ($object && $object->canRead()) {
                 $classIdentifier = $object->attribute("class_identifier");
                 // Todo: read class identifiers from configuration
                 if ($classIdentifier == "image") {
                     $imageSize = $child->getAttribute('size');
                     $imageAlignment = $child->getAttribute('align');
                     $dataMap = $object->dataMap();
                     $imageAttribute = $dataMap['image'];
                     $imageHandler = $imageAttribute->content();
                     $originalImage = $imageHandler->attribute('original');
                     $fileHandler = eZClusterFileHandler::instance($originalImage['url']);
                     $uniqueFile = $fileHandler->fetchUnique();
                     $displayImage = $imageHandler->attribute($imageSize);
                     $displayWidth = $displayImage['width'];
                     $displayHeight = $displayImage['height'];
                     $imageArray[] = array("FileName" => $uniqueFile, "Alignment" => $imageAlignment, "DisplayWidth" => $displayWidth, "DisplayHeight" => $displayHeight);
                 }
             } else {
                 eZDebug::writeError("Image (object_id = " . $child->getAttribute('object_id') . " ) could not be used (does not exist or insufficient privileges)");
             }
             break;
         default:
             eZDebug::writeError("Unsupported node at this level" . $child->localName);
     }
     return array("paragraph_parameters" => $paragraphParameters, "image_array" => $imageArray);
 }