public function verifyParentIds($parents) { $parentList = explode(" ", $parents); $parents = array(); if (!is_object($this->pxeRules)) { $this->pxeRules = new PxeRules(); } foreach ($parentList as $parent) { if ($this->pxeRules->requiresAttribute($parent, 'id')) { $hashValue = substr($parent, strpos($parent, "#") + 1); $jsonData = '{"id":"' . $hashValue . '"}'; //the ENT_QUOTES flag converts both " and ' to entities $parents[] = IdmlPxeHelper::stripHash($parent) . htmlentities($jsonData, ENT_QUOTES) . "#{$hashValue}"; } else { $parents[] = $parent; } } return implode(' ', $parents); }
/** * Determiens if the child tag may be a direct descendent of the parent * @param string $parentTag * @param string $tag * @return boolean */ public function isChildAllowed($parentTag, $tag) { $tag = IdmlPxeHelper::stripHash($tag); if (strlen($parentTag) > 0 && $parentTag != "div" && $parentTag != "span") { $allowedChildren = $this->getAllowedChildren($parentTag); return in_array($tag, $allowedChildren); } return true; }
/** * Processing of IdmlXmlElements. This is the primary procesing engine for PXE tags * @param IdmlXmlElement $element * @param int $depth * @return null */ public function visitXmlElement(IdmlXmlElement $element, $depth = 0) { if ($this->shouldProcessElement($element)) { $xmlContent = $this->elementXmlContent($element); if (strlen($xmlContent) > 0 && strlen($this->currentStoryID) > 0 && $xmlContent != $this->currentStoryID) { return; } if ($xmlContent == 'u615c' || $xmlContent == 'u4d93') { $a = 1; } $tagName = strtolower(str_replace("XMLTag/", "", $element->markupTag)); if (in_array($tagName, $this->ignoredPxeTags)) { return; } $tagMethod = $this->tagHandlerMethodName($tagName); if (method_exists($this, $tagMethod)) { $this->{$tagMethod}($element); return; } $this->verifyParentStructure(); $pxeParent = $this->getPxeParent($element); if (is_object($pxeParent)) { $parentHash = $this->getElementHashTag($pxeParent); if (strlen($parentHash)) { $hashIndex = $this->findParentByHash($parentHash); if ($hashIndex < 0) { $singletonTagName = IdmlPxeHelper::stripHash(IdmlPxeHelper::getFullPxeTag($pxeParent)); if ($this->pxeRules->isSingleton($tagName)) { $this->attributes["_pxeSingletons"][$singletonTagName] = $parentHash; } $this->pushParentTag($singletonTagName, $parentHash, $element); } } } $this->stashParentCount($element); if (!strlen($tagName)) { return; } if (strlen($tagName) > 0 && !IdmlPxeHelper::hasHashValue($element) && $this->pxeRules->isPxeTag($tagName)) { $hashTag = IdmlPxeHelper::getNewTagHash(); } elseif (IdmlPxeHelper::hasHashValue($element)) { $parts = explode('#', $tagName); $hashTag = $parts[1]; } else { CakeLog::debug("[IdmlPxeProducer::visitXmlElement] Unable to process tag {$tagName}. This tag is not valid pxe, and is not in the ignore list"); return; } /* element requires descendants */ if ($this->pxeRules->hasRequiredDescendant($tagName)) { $this->pushParentTag($tagName, $hashTag, $element); return; } /* element has pxe descendants */ if ($this->numPxeElementContainerDecendents($element) > 0) { $this->pushParentTag($tagName, $hashTag, $element); return; } $childHash = ""; /* element is a singleton and already exists in the parent */ if ($this->pxeRules->isSingleton($tagName) && is_object($pxeParent)) { $childHash = $this->getSingletonHash($pxeParent, $tagName); } $this->assignPxeTag($element, $tagName, $childHash); } }