diff -r 000000000000 -r 4eba9c11703f web/Zend/Pdf/NameTree.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/Zend/Pdf/NameTree.php Mon Dec 13 18:29:26 2010 +0100 @@ -0,0 +1,154 @@ + object tree entries + * + * @var array + */ + protected $_items = array(); + + /** + * Object constructor + * + * @param $rootDictionary root of name dictionary + */ + public function __construct(Zend_Pdf_Element $rootDictionary) + { + if ($rootDictionary->getType() != Zend_Pdf_Element::TYPE_DICTIONARY) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Name tree root must be a dictionary.'); + } + + $intermediateNodes = array(); + $leafNodes = array(); + if ($rootDictionary->Kids !== null) { + $intermediateNodes[] = $rootDictionary; + } else { + $leafNodes[] = $rootDictionary; + } + + while (count($intermediateNodes) != 0) { + $newIntermediateNodes = array(); + foreach ($intermediateNodes as $node) { + foreach ($node->Kids->items as $childNode) { + if ($childNode->Kids !== null) { + $newIntermediateNodes[] = $childNode; + } else { + $leafNodes[] = $childNode; + } + } + } + $intermediateNodes = $newIntermediateNodes; + } + + foreach ($leafNodes as $leafNode) { + $destinationsCount = count($leafNode->Names->items)/2; + for ($count = 0; $count < $destinationsCount; $count++) { + $this->_items[$leafNode->Names->items[$count*2]->value] = $leafNode->Names->items[$count*2 + 1]; + } + } + } + + public function current() + { + return current($this->_items); + } + + + public function next() + { + return next($this->_items); + } + + + public function key() + { + return key($this->_items); + } + + + public function valid() { + return current($this->_items)!==false; + } + + + public function rewind() + { + reset($this->_items); + } + + + public function offsetExists($offset) + { + return array_key_exists($offset, $this->_items); + } + + + public function offsetGet($offset) + { + return $this->_items[$offset]; + } + + + public function offsetSet($offset, $value) + { + if ($offset === null) { + $this->_items[] = $value; + } else { + $this->_items[$offset] = $value; + } + } + + + public function offsetUnset($offset) + { + unset($this->_items[$offset]); + } + + + public function clear() + { + $this->_items = array(); + } + + public function count() + { + return count($this->_items); + } +}