Пример #1
0
 $parsed = str_replace("))", ") )", $parsed);
 $tokens = explode(" ", $parsed);
 // var_dump($tokens);
 foreach ($tokens as $token) {
     if (strcmp(substr($token, 0, 1), "(") == 0) {
         //nāk jauna frāze, jātaisa jauna lapa
         $tokenCategory = trim(substr($token, 1));
         if (!isset($rootNode)) {
             $rootNode = new Node($tokenCategory);
             $currentNode = $rootNode;
             $currentNode->level = 0;
         } else {
             $newNode = new Node($tokenCategory);
             $newNode->setParent($currentNode);
             $newNode->level = $currentNode->level + 1;
             if (!$rootNode->hasChildren()) {
                 $rootNode->addChild($newNode);
             } else {
                 $currentNode->addChild($newNode);
             }
             $currentNode = $newNode;
         }
     } elseif (strcmp(substr($token, -1, 1), ")") == 0) {
         //frāze beidzas
         //ja bija vārds, jāpievieno pie aktuālās lapas, ja nē, jāiet pie vecāka
         $tokenWord = substr($token, 0, -1);
         if (strlen($tokenWord) > 0) {
             $currentNode->setWord($tokenWord);
         }
         if ($currentNode->getParent() != null) {
             $currentNode = $currentNode->getParent();
Пример #2
0
 /**
  * Returns the DOM representation of the Node.
  *
  * @param \DOMDocument $document   The global document object
  * @param Node         $node       The Node to be converted to string
  * @param bool         $forceCdata Whether the XML content will be enclosed within CDATA tags
  *
  * @return \DOMElement The DOM rappresentation of the Node
  */
 private function createDomStructure(\DOMDocument $document, Node $node, $forceCdata)
 {
     if (!$node->getName()) {
         throw new \RuntimeException('Can not create an XML representation of a Node without a name');
     }
     $element = $document->createElement($node->getName());
     foreach ($node->getAttributes() as $key => $value) {
         $attribute = $document->createAttribute($key);
         $attribute->value = $value;
         $element->appendChild($attribute);
     }
     if (!$node->hasChildren()) {
         // The Node has no children, so only content needs to be displayed
         if ($node->getValue()) {
             // The Node has content to be displayed
             if ($node->getUseCdata() || $forceCdata) {
                 $content = $document->createCDATASection($node->getValue());
             } else {
                 $content = $document->createTextNode($node->getValue());
             }
             $element->appendChild($content);
         } else {
             // The Node has no content, and short-tag is not enabled
             if ($node->getUseCdata() || $forceCdata) {
                 $element->appendChild($document->createCDATASection($node->getValue()));
             }
         }
     } else {
         // The Node has children, so they must be displayed before closing the XML tag
         foreach ($node->getChildren() as $child) {
             $element->appendChild($this->createDomStructure($document, $child, $forceCdata));
         }
     }
     return $element;
 }
Пример #3
0
 /**
  * Adds containers to a node that is a database
  *
  * References to existing children are returned
  * if this function is called twice on the same node
  *
  * @param Node   $db   The database node, new containers will be
  *                     attached to this node
  * @param string $type The type of item being paginated on
  *                     the second level of the tree
  * @param int    $pos2 The position for the pagination of
  *                     the branch at the second level of the tree
  *
  * @return array An array of new nodes
  */
 private function _addDbContainers($db, $type, $pos2)
 {
     $retval = array();
     if ($db->hasChildren(true) == 0) {
         if ($db->getPresence('tables')) {
             $retval['tables'] = PMA_NodeFactory::getInstance('Node_Table_Container');
         }
         if ($db->getPresence('views')) {
             $retval['views'] = PMA_NodeFactory::getInstance('Node_View_Container');
         }
         if ($db->getPresence('functions')) {
             $retval['functions'] = PMA_NodeFactory::getInstance('Node_Function_Container');
         }
         if ($db->getPresence('procedures')) {
             $retval['procedures'] = PMA_NodeFactory::getInstance('Node_Procedure_Container');
         }
         if ($db->getPresence('events')) {
             $retval['events'] = PMA_NodeFactory::getInstance('Node_Event_Container');
         }
         // Add all new Nodes to the tree
         foreach ($retval as $node) {
             if ($type == $node->real_name) {
                 $node->pos2 = $pos2;
             }
             $db->addChild($node);
         }
     } else {
         foreach ($db->children as $node) {
             if ($type == $node->real_name) {
                 $node->pos2 = $pos2;
             }
             $retval[$node->real_name] = $node;
         }
     }
     return $retval;
 }
Пример #4
0
 /**
  * Recursively deserialize data for the given node.
  *
  * @param   xml.Node node
  * @return  var
  * @throws  lang.IllegalArgumentException if the data cannot be deserialized
  * @throws  lang.ClassNotFoundException in case a XP object's class could not be loaded
  * @throws  xml.XMLFormatException
  */
 protected function _unmarshall(Node $node)
 {
     // value without type is supposed to be string (XML-RPC specs)
     if ('value' == $node->getName() && !isset($node->children[0])) {
         return (string) $node->getContent();
     }
     if (!isset($node->children[0])) {
         throw new XMLFormatException('Tried to access nonexistant node.');
     }
     // Simple form: If no subnode indicating the type exists, the type
     // is string, e.g. <value>Test</value>
     if (!$node->hasChildren()) {
         return (string) $node->getContent();
     }
     // Long form - with subnode, the type is derived from the node's name,
     // e.g. <value><string>Test</string></value>.
     $c = $node->nodeAt(0);
     switch ($c->getName()) {
         case 'struct':
             $ret = array();
             foreach ($c->getChildren() as $child) {
                 $data = array();
                 $data[$child->nodeAt(0)->getName()] = $child->nodeAt(0);
                 $data[$child->nodeAt(1)->getName()] = $child->nodeAt(1);
                 $ret[$data['name']->getContent()] = $this->_unmarshall($data['value']);
                 unset($data);
             }
             if (!isset($ret['__xp_class'])) {
                 return $ret;
             }
             // Check whether this is a XP object. If so, load the class and
             // create an instance without invoking the constructor.
             $fields = XPClass::forName($ret['__xp_class'])->getFields();
             $cname = array_search($ret['__xp_class'], xp::$cn, TRUE);
             $s = '';
             $n = 0;
             foreach ($fields as $field) {
                 if (!isset($ret[$field->getName()])) {
                     continue;
                 }
                 $m = $field->getModifiers();
                 if ($m & MODIFIER_STATIC) {
                     continue;
                 } else {
                     if ($m & MODIFIER_PUBLIC) {
                         $name = $field->getName();
                     } else {
                         if ($m & MODIFIER_PROTECTED) {
                             $name = "*" . $field->getName();
                         } else {
                             if ($m & MODIFIER_PRIVATE) {
                                 $name = "" . array_search($field->getDeclaringClass()->getName(), xp::$cn, TRUE) . "" . $field->getName();
                             }
                         }
                     }
                 }
                 $s .= 's:' . strlen($name) . ':"' . $name . '";' . serialize($ret[$field->getName()]);
                 $n++;
             }
             return unserialize('O:' . strlen($cname) . ':"' . $cname . '":' . $n . ':{' . $s . '}');
         case 'array':
             $ret = array();
             foreach ($c->nodeAt(0)->getChildren() as $child) {
                 $ret[] = $this->_unmarshall($child);
             }
             return $ret;
         case 'int':
         case 'i4':
             return (int) $c->getContent();
         case 'double':
             return (double) $c->getContent();
         case 'boolean':
             return (bool) $c->getContent();
         case 'string':
             return (string) $c->getContent();
         case 'dateTime.iso8601':
             return Date::fromString($c->getContent());
         case 'nil':
             return NULL;
         case 'base64':
             return new Bytes(base64_decode($c->getContent()));
         default:
             throw new IllegalArgumentException('Could not decode node as its type is not supported: ' . $c->getName());
     }
 }