summaryrefslogtreecommitdiffstats
path: root/3rdparty/XML/Parser
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-05-11 20:25:00 +0200
committerRobin Appelman <icewind@owncloud.com>2012-05-11 20:33:56 +0200
commitd2bd78c41a58320e0f1f6ff6d602371325390747 (patch)
treefb155745eb932cf5a8adbdeb262f2c6081c2dc28 /3rdparty/XML/Parser
parent3c2af95108ee87edfe96a5518e9f9cebfbdaa414 (diff)
downloadnextcloud-server-d2bd78c41a58320e0f1f6ff6d602371325390747.tar.gz
nextcloud-server-d2bd78c41a58320e0f1f6ff6d602371325390747.zip
update MDB2 and XML_Parser
Diffstat (limited to '3rdparty/XML/Parser')
-rw-r--r--3rdparty/XML/Parser/Simple.php326
1 files changed, 326 insertions, 0 deletions
diff --git a/3rdparty/XML/Parser/Simple.php b/3rdparty/XML/Parser/Simple.php
new file mode 100644
index 00000000000..9ed0abfc6cc
--- /dev/null
+++ b/3rdparty/XML/Parser/Simple.php
@@ -0,0 +1,326 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * XML_Parser
+ *
+ * XML Parser's Simple parser class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 2002-2008 The PHP Group
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category XML
+ * @package XML_Parser
+ * @author Stephan Schmidt <schst@php.net>
+ * @copyright 2004-2008 Stephan Schmidt <schst@php.net>
+ * @license http://opensource.org/licenses/bsd-license New BSD License
+ * @version CVS: $Id: Simple.php 265444 2008-08-24 21:48:21Z ashnazg $
+ * @link http://pear.php.net/package/XML_Parser
+ */
+
+/**
+ * built on XML_Parser
+ */
+require_once 'XML/Parser.php';
+
+/**
+ * Simple XML parser class.
+ *
+ * This class is a simplified version of XML_Parser.
+ * In most XML applications the real action is executed,
+ * when a closing tag is found.
+ *
+ * XML_Parser_Simple allows you to just implement one callback
+ * for each tag that will receive the tag with its attributes
+ * and CData.
+ *
+ * <code>
+ * require_once '../Parser/Simple.php';
+ *
+ * class myParser extends XML_Parser_Simple
+ * {
+ * function myParser()
+ * {
+ * $this->XML_Parser_Simple();
+ * }
+ *
+ * function handleElement($name, $attribs, $data)
+ * {
+ * printf('handle %s<br>', $name);
+ * }
+ * }
+ *
+ * $p = &new myParser();
+ *
+ * $result = $p->setInputFile('myDoc.xml');
+ * $result = $p->parse();
+ * </code>
+ *
+ * @category XML
+ * @package XML_Parser
+ * @author Stephan Schmidt <schst@php.net>
+ * @copyright 2004-2008 The PHP Group
+ * @license http://opensource.org/licenses/bsd-license New BSD License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/XML_Parser
+ */
+class XML_Parser_Simple extends XML_Parser
+{
+ /**
+ * element stack
+ *
+ * @access private
+ * @var array
+ */
+ var $_elStack = array();
+
+ /**
+ * all character data
+ *
+ * @access private
+ * @var array
+ */
+ var $_data = array();
+
+ /**
+ * element depth
+ *
+ * @access private
+ * @var integer
+ */
+ var $_depth = 0;
+
+ /**
+ * Mapping from expat handler function to class method.
+ *
+ * @var array
+ */
+ var $handler = array(
+ 'default_handler' => 'defaultHandler',
+ 'processing_instruction_handler' => 'piHandler',
+ 'unparsed_entity_decl_handler' => 'unparsedHandler',
+ 'notation_decl_handler' => 'notationHandler',
+ 'external_entity_ref_handler' => 'entityrefHandler'
+ );
+
+ /**
+ * Creates an XML parser.
+ *
+ * This is needed for PHP4 compatibility, it will
+ * call the constructor, when a new instance is created.
+ *
+ * @param string $srcenc source charset encoding, use NULL (default) to use
+ * whatever the document specifies
+ * @param string $mode how this parser object should work, "event" for
+ * handleElement(), "func" to have it call functions
+ * named after elements (handleElement_$name())
+ * @param string $tgtenc a valid target encoding
+ */
+ function XML_Parser_Simple($srcenc = null, $mode = 'event', $tgtenc = null)
+ {
+ $this->XML_Parser($srcenc, $mode, $tgtenc);
+ }
+
+ /**
+ * inits the handlers
+ *
+ * @return mixed
+ * @access private
+ */
+ function _initHandlers()
+ {
+ if (!is_object($this->_handlerObj)) {
+ $this->_handlerObj = &$this;
+ }
+
+ if ($this->mode != 'func' && $this->mode != 'event') {
+ return $this->raiseError('Unsupported mode given',
+ XML_PARSER_ERROR_UNSUPPORTED_MODE);
+ }
+ xml_set_object($this->parser, $this->_handlerObj);
+
+ xml_set_element_handler($this->parser, array(&$this, 'startHandler'),
+ array(&$this, 'endHandler'));
+ xml_set_character_data_handler($this->parser, array(&$this, 'cdataHandler'));
+
+ /**
+ * set additional handlers for character data, entities, etc.
+ */
+ foreach ($this->handler as $xml_func => $method) {
+ if (method_exists($this->_handlerObj, $method)) {
+ $xml_func = 'xml_set_' . $xml_func;
+ $xml_func($this->parser, $method);
+ }
+ }
+ }
+
+ /**
+ * Reset the parser.
+ *
+ * This allows you to use one parser instance
+ * to parse multiple XML documents.
+ *
+ * @access public
+ * @return boolean|object true on success, PEAR_Error otherwise
+ */
+ function reset()
+ {
+ $this->_elStack = array();
+ $this->_data = array();
+ $this->_depth = 0;
+
+ $result = $this->_create();
+ if ($this->isError($result)) {
+ return $result;
+ }
+ return true;
+ }
+
+ /**
+ * start handler
+ *
+ * Pushes attributes and tagname onto a stack
+ *
+ * @param resource $xp xml parser resource
+ * @param string $elem element name
+ * @param array &$attribs attributes
+ *
+ * @return mixed
+ * @access private
+ * @final
+ */
+ function startHandler($xp, $elem, &$attribs)
+ {
+ array_push($this->_elStack, array(
+ 'name' => $elem,
+ 'attribs' => $attribs
+ ));
+ $this->_depth++;
+ $this->_data[$this->_depth] = '';
+ }
+
+ /**
+ * end handler
+ *
+ * Pulls attributes and tagname from a stack
+ *
+ * @param resource $xp xml parser resource
+ * @param string $elem element name
+ *
+ * @return mixed
+ * @access private
+ * @final
+ */
+ function endHandler($xp, $elem)
+ {
+ $el = array_pop($this->_elStack);
+ $data = $this->_data[$this->_depth];
+ $this->_depth--;
+
+ switch ($this->mode) {
+ case 'event':
+ $this->_handlerObj->handleElement($el['name'], $el['attribs'], $data);
+ break;
+ case 'func':
+ $func = 'handleElement_' . $elem;
+ if (strchr($func, '.')) {
+ $func = str_replace('.', '_', $func);
+ }
+ if (method_exists($this->_handlerObj, $func)) {
+ call_user_func(array(&$this->_handlerObj, $func),
+ $el['name'], $el['attribs'], $data);
+ }
+ break;
+ }
+ }
+
+ /**
+ * handle character data
+ *
+ * @param resource $xp xml parser resource
+ * @param string $data data
+ *
+ * @return void
+ * @access private
+ * @final
+ */
+ function cdataHandler($xp, $data)
+ {
+ $this->_data[$this->_depth] .= $data;
+ }
+
+ /**
+ * handle a tag
+ *
+ * Implement this in your parser
+ *
+ * @param string $name element name
+ * @param array $attribs attributes
+ * @param string $data character data
+ *
+ * @return void
+ * @access public
+ * @abstract
+ */
+ function handleElement($name, $attribs, $data)
+ {
+ }
+
+ /**
+ * get the current tag depth
+ *
+ * The root tag is in depth 0.
+ *
+ * @access public
+ * @return integer
+ */
+ function getCurrentDepth()
+ {
+ return $this->_depth;
+ }
+
+ /**
+ * add some string to the current ddata.
+ *
+ * This is commonly needed, when a document is parsed recursively.
+ *
+ * @param string $data data to add
+ *
+ * @return void
+ * @access public
+ */
+ function addToData($data)
+ {
+ $this->_data[$this->_depth] .= $data;
+ }
+}
+?>