Example #1
0
 /**
  * Parse children. We override this because the xml DOM hierarchy has rows, columns, and cells as children of table
  * we need to change the idml element hierarchy so tables are parents of rows which are parents of cells
  * @param DOMElement $parentNode
  */
 protected function parseChildren($parentNode)
 {
     foreach ($parentNode->childNodes as $childNode) {
         if (IdmlParserHelper::isParsableChildIdmlObjectNode($childNode)) {
             $parsableObject = IdmlElementFactory::createFromNode($childNode);
             if (is_object($parsableObject)) {
                 //set the parent first since sometimes parse requires or sets parent data
                 $parsableObject->parentElement = $this;
                 if (!IdmlParserHelper::isIdmlTagNode($childNode) && IdmlParserHelper::getIdmlObjectType($parsableObject) != "TableCell") {
                     $this->childrenElements[] = $parsableObject;
                     //don't set IdmlTable as parent for IdmlTableCell
                 }
                 $parsableObject->parse($childNode);
             }
         }
     }
 }
Example #2
0
 /**
  * Parse children.
  * 
  * @param DOMNode $parentNode
  */
 private function parseChildren($parentNode)
 {
     //same logic/code as for IdmlElement method - more comprehensive and easier to maintain
     foreach ($parentNode->childNodes as $childNode) {
         if (IdmlParserHelper::isParsableChildIdmlObjectNode($childNode)) {
             if (Configure::read("dev.idmlHtmlDebugOutput") == true) {
                 CakeLog::debug(sprintf("[IdmlStory::parseChildren] Parse Story %8s %30s --> %sKb", $this->UID, $childNode->nodeName, round(memory_get_usage(true) / 1024)));
             }
             $parsableObject = IdmlElementFactory::createFromNode($childNode);
             //we must set the parent before parsing since children need parent
             $parsableObject->parentElement = $this;
             $parsableObject->parse($childNode);
             $this->childrenElements[] = $parsableObject;
         }
     }
 }
Example #3
0
 /**
  * Parse children.
  * @param DOMElement $parentNode
  */
 protected function parseChildren($parentNode)
 {
     foreach ($parentNode->childNodes as $childNode) {
         if (IdmlParserHelper::isParsableChildIdmlObjectNode($childNode)) {
             $parsableObject = IdmlElementFactory::createFromNode($childNode);
             if (is_object($parsableObject)) {
                 //set the parent first since sometimes parse requires or sets parent data
                 $parsableObject->parentElement = $this;
                 //set this parsable child object as a child of the parent (bypassing xml parent)
                 $this->childrenElements[] = $parsableObject;
                 $parsableObject->parse($childNode);
             }
         }
     }
 }
Example #4
0
 /**
  * @param DOMNode $node
  * @return IdmlElement $object
  */
 public static function createFromNode(DOMNode $node)
 {
     if (IdmlParserHelper::isParsableChildIdmlObjectNode($node)) {
         $object = null;
         switch ($node->nodeName) {
             case 'Rectangle':
                 // @TODO - determine whether spans should be used for rectangles parallel to the axes, and code accordingly
                 //                    $object = new IdmlRectangle();
                 $object = new IdmlPolygon();
                 break;
             case 'TextFrame':
                 $object = new IdmlTextFrame();
                 break;
             case 'Element':
                 $object = new IdmlElement();
                 break;
             case 'CharacterStyleRange':
                 $object = new IdmlCharacterRange();
                 break;
             case 'ParagraphStyleRange':
                 $object = new IdmlParagraphRange();
                 break;
             case 'Image':
             case 'PDF':
                 /* Adobe Illustrator PDF image */
             /* Adobe Illustrator PDF image */
             case 'EPS':
                 /* Encapsulated Postscript image */
                 $object = new IdmlImage();
                 break;
             case 'Group':
                 $object = new IdmlGroup();
                 break;
             case 'Story':
                 $object = new IdmlStory();
                 break;
             case 'Change':
                 $object = new IdmlChange();
                 break;
             case 'Content':
                 $object = new IdmlContent();
                 break;
             case 'Br':
                 $object = new IdmlBrContent();
                 break;
             case 'XMLElement':
                 $object = new IdmlXmlElement();
                 break;
             case 'Table':
                 $object = new IdmlTable();
                 break;
             case 'Cell':
                 $object = new IdmlTableCell();
                 break;
             case 'Column':
                 $object = new IdmlTableColumn();
                 break;
             case 'Row':
                 $object = new IdmlTableRow();
                 break;
             case 'HyperlinkTextSource':
                 $object = new IdmlHyperlink();
                 break;
             case 'HyperlinkTextDestination':
                 $object = new IdmlHyperlinkDestination();
                 break;
             case 'Sound':
                 $object = new IdmlSound();
                 break;
             case 'Movie':
                 $object = new IdmlMovie();
                 break;
             case 'TextVariableInstance':
                 $object = new IdmlTextVariableInstance();
                 break;
             case 'GraphicLine':
                 $object = new IdmlGraphicLine();
                 break;
             case 'Polygon':
                 $object = new IdmlPolygon();
                 break;
             case 'Oval':
                 $object = new IdmlOval();
                 break;
             default:
                 CakeLog::debug("[IdmlElementFactory::createFromNode] '{$node->nodeName}' not implemented");
                 $object = null;
         }
         return $object;
     }
 }
Example #5
0
 public function parseChildrenRecursively($node, $nodeNamespace)
 {
     // Within the node there are many, many attributes that we *may* be interested in
     foreach ($node->attributes as $key => $attr) {
         // For example <ParagraphStyle FontStyle="Regular" /> becomes: $idmlKeyValues['FontStyle'] => 'Regular'
         // For example, <Properties><AppliedFont>Minion Pro</AppliedFont></Properties> becomes: $idmlKeyValues['Properties::AppliedFont'] => 'Minion Pro'
         if ($nodeNamespace != '') {
             $key = $nodeNamespace . '->' . $key;
         }
         $this->idmlKeyValues[$key] = $attr->value;
     }
     // Now loop through all child elements
     foreach ($node->childNodes as $childNode) {
         if ($childNode->nodeType != XML_ELEMENT_NODE) {
             continue;
         }
         if (IdmlParserHelper::isParsableChildIdmlObjectNode($childNode) == true) {
             continue;
         }
         if ($nodeNamespace == '') {
             $key = $childNode->tagName;
         } else {
             $key = $nodeNamespace . '::' . $childNode->tagName;
         }
         $value = $childNode->textContent;
         $key = $this->makeUniqueKey($key);
         $this->idmlKeyValues[$key] = $value;
         $this->parseChildrenRecursively($childNode, $key);
     }
 }