Files @ a45f0dabc59c
Branch filter:

Location: hot67beta/libraries/domit/xml_domit_utilities.php - annotation

ethanzonca@localhost.localdomain
mneh
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
c7d7e38b2269
<?php
/**
* DOMIT Utilities are a set of utilities for the DOMIT! parser
* @package domit-xmlparser
* @copyright (C) 2004 John Heinstein. All rights reserved
* @license http://www.gnu.org/copyleft/lesser.html LGPL License
* @author John Heinstein <johnkarl@nbnet.nb.ca>
* @link http://www.engageinteractive.com/domit/ DOMIT! Home Page
* DOMIT! is Free Software
**/

/**
*@global Array Translation table for predefined XML entities
*/
$GLOBALS['DOMIT_PREDEFINED_ENTITIES'] = array('&' => '&amp;', '<' => '&lt;', '>' => '&gt;',
											'"' => '&quot;', "'" => '&apos;');
/**
* A set of utilities for the DOMIT! parser
*
* These methods are intended to be called statically
*
* @package domit-xmlparser
* @author John Heinstein <johnkarl@nbnet.nb.ca>
*/
class DOMIT_Utilities {
	/**
	* Raises an error if an attempt to instantiate the class is made
	*/
	function DOMIT_Utilities() {
	    die("DOMIT_Utilities Error: this is a static class that should never be instantiated.\n" .
		    "Please use the following syntax to access methods of this class:\n" .
		    'DOMIT_Utilities::methodName(parameters)');
	} //DOMIT_Utilities

	/**
	* Generates a normalized (formatted for readability) representation of the node and its children
	* @param Object The root node of the narmalization
	* @param boolean True if illegal xml characters in text nodes and attributes should be converted to entities
	* @return string The formatted string representation
	*/
	function toNormalizedString (&$node, $subEntities=false, $definedEntities) {
		$node_level = 0;
		$response = '';

		//$node is a DOMIT_Document
		if ($node->nodeType == DOMIT_DOCUMENT_NODE) {
			$total = $node->childCount;

			for ($i = 0; $i < $total; $i++) {
				$response .= DOMIT_Utilities::getNormalizedString($node->childNodes[$i],
											$node_level, $subEntities, $definedEntities);
			}

			return $response;
		}
		else {
			return ($response . DOMIT_Utilities::getNormalizedString($node,
								$node_level, $subEntities, $definedEntities));
		}
	} //toNormalizedString

	/**
	* Converts illegal XML characters to their entity representations
	* @param string The text to be formatted
	* @param array User defined translation table for entities
	* @return string The formatted text
	*/
	function convertEntities($text, $definedEntities) {
		global $DOMIT_PREDEFINED_ENTITIES;
		$result = strtr($text, $DOMIT_PREDEFINED_ENTITIES);
		$result = strtr($result, $definedEntities);
		return $result;
	} //convertEntities

	/**
	* Gets a normalized (formatted for readability) representation of the current node
	* @param Object The node to be normalized
	* @param int The level in the DOM hierarchy where the node is located
	* @param boolean True if illegal xml characters in text nodes and attributes should be converted to entities
	* @param array User defined translation table for entities
	* @return string The normalized string representation
	*/
	function getNormalizedString(&$node, $node_level, $subEntities=false, $definedEntities) {
		$response = '';

		switch ($node->nodeType)  {
			case DOMIT_ELEMENT_NODE:
				$response .= DOMIT_Utilities::getNormalizedElementString($node, $response,
									 		$node_level, $subEntities, $definedEntities);
				break;

			case DOMIT_TEXT_NODE:
				if ($node->nextSibling == null) {
					$node_level--;
				}

				$response .= ($subEntities ?
								DOMIT_Utilities::convertEntities($node->nodeValue, $definedEntities) :
								$node->nodeValue);
				break;

			case DOMIT_CDATA_SECTION_NODE:
				if ($node->nextSibling == null) {
					$node_level--;
				}

				$response .= '<![CDATA[' . $node->nodeValue . ']]>';
				break;

			case DOMIT_ATTRIBUTE_NODE:
				$response .= $node->toString(false, $subEntities);
				break;

			case DOMIT_DOCUMENT_FRAGMENT_NODE:
				$total = $node->childCount;

				for ($i = 0; $i < $total; $i++) {
					$response .= DOMIT_Utilities::getNormalizedString($node->childNodes[$i], $node_level,
															$subEntities, $definedEntities);
				}

				break;

			case DOMIT_COMMENT_NODE:
				$response .= '<!--' . $node->nodeValue . '-->';

				if ($node->nextSibling == null) {
					$node_level--;
				}

				$response .= DOMIT_Utilities::getIndentation($node_level) ;

				break;

			case DOMIT_PROCESSING_INSTRUCTION_NODE:
				$response .= '<' . '?' . $node->nodeName . ' ' . $node->nodeValue . '?' . '>';

				if ($node->nextSibling == null) {
					$node_level--;
				}

				$response .= DOMIT_Utilities::getIndentation($node_level) ;

				break;

			case DOMIT_DOCUMENT_TYPE_NODE:
				$response .= $node->toString() . "\n";
				break;
		}

		return $response;
	} //getNormalizedString

	/**
	* Gets a normalized (formatted for readability) representation of the current element
	* @param Object The node to be normalized
	* @param string The current normalized text
	* @param int The level in the DOM hierarchy where the node is located
	* @param boolean True if illegal xml characters in text nodes and attributes should be converted to entities
	* @param array User defined translation table for entities
	* @return string The normalized string representation
	*/
	function getNormalizedElementString(&$node, $response, $node_level,
											$subEntities, $definedEntities) {
		$response .= '<' . $node->nodeName;

		//get attributes text
		if (is_object($node->attributes)) { //DOMIT
			$response .= $node->attributes->toString(false, $subEntities);

			/*
			if ($node->ownerDocument->isNamespaceAware) {
				foreach ($node->namespaceURIMap as $key => $value) {
					$response .= ' xmlns:' . $value . '="' . $key . '"';
				}
			}
			*/
		}
		else { //DOMIT_Lite
			foreach ($node->attributes as $key => $value) {
				$response .= ' ' . $key . '="';
				$response .= ($subEntities ? DOMIT_Utilities::convertEntities($value,
														$definedEntities) : $value);
				$response .= '"';
			}
		}

		$node_level++;

		//if node is childless
		if ($node->childCount == 0) {
            if ($node->ownerDocument->doExpandEmptyElementTags) {
				if (in_array($node->nodeName, $node->ownerDocument->expandEmptyElementExceptions)) {
					$response .= ' />';
				}
				else {
                	$response .= '></' . $node->nodeName . '>';
				}
		    }
		    else {
				if (in_array($node->nodeName, $node->ownerDocument->expandEmptyElementExceptions)) {
					$response .= '></' . $node->nodeName . '>';
				}
				else {
					$response .= ' />';
				}
		    }
		}
		else {
			$response .= '>';

			//get children
			$myNodes =& $node->childNodes;
			$total = $node->childCount;

			//no indentation if first child is a text node
			if (!DOMIT_Utilities::isTextNode($node->firstChild)) {
				$response .= DOMIT_Utilities::getIndentation($node_level);
			 }

			for ($i = 0; $i < $total; $i++) {
				$child =& $myNodes[$i];
				$response .= DOMIT_Utilities::getNormalizedString($child, $node_level,
												$subEntities, $definedEntities);
			}

			$response .= '</' . $node->nodeName . '>';
		}

		$node_level--;

		if ($node->nextSibling == null) {
			$node_level--;
			$response .= DOMIT_Utilities::getIndentation($node_level);
		}
		else {
			//no indentation if next sibling is a text node
			if (!DOMIT_Utilities::isTextNode($node->nextSibling)) {
				$response .= DOMIT_Utilities::getIndentation($node_level);
			}
		}

		return $response;
	} //getNormalizedElementString

	/**
	* Determines whether the specified node is a Text node
	* @param Object The node to be tested
	* @return boolean True if the node is a Text node
	*/
	function isTextNode(&$node) {
		$type = $node->nodeType;
		return (($type == DOMIT_TEXT_NODE) || ($type == DOMIT_CDATA_SECTION_NODE));
	} //isTextNode

	/**
	* Returns the indentation required for the specified node level
	* @param int The current node level
	* @return string The indentation required for the specified node level
	*/
	function getIndentation($node_level) {
		$INDENT_LEN = '    ';
		$indentation = "\n";

		for ($i = 0; $i < $node_level; $i++) {
			$indentation .= $INDENT_LEN;
		}

		return $indentation;
	} //getIndentation

	/**
	* Removes the extension from the specified file name
	* @param string The file name
	* @return string The file name, stripped of its extension
	*/
	function removeExtension($fileName) {
		$total = strlen($fileName);
		$index = -1;

		for ($i = ($total - 1); $i >= 0; $i--) {
			if ($fileName{$i} == '.') {
				$index = $i;
			}
		}

		if ($index == -1) {
			return $fileName;
		}

		return (substr($fileName, 0, $index));
	} //removeExtension

	/**
	* Determines whether the XML string is valid (NOT FULLY IMPLEMENTED!)
	* @param string The XML text
	* @return boolean True if the XML text is valid
	*/
	function validateXML($xmlText) {
		//this does only rudimentary validation
		//at this point in time
		$isValid = true;

		if (is_string($xmlText)) {
			$text = trim($xmlText);

			switch ($text) {
				case '':
					$isValid = false;
					break;
			}
		}
		else {
			$isValid = false;
		}

		return $isValid;
	} //validateXML

	/**
	* Set the browser header to interpret data as UTF-8 formatted
	* @param string The content type of the data
	*/
	function printUTF8Header($contentType = 'text/html') {
		echo header('Content-type: ' . $contentType . '; charset=utf-8');
	} //printUTF8Header

	/**
	* Formats a string for presentation as HTML
	* @param string The string to be formatted
	* @param boolean True if the string is to be sent directly to output
	* @return string The HTML formatted string
	*/
	function forHTML($text, $doPrint = false) {
		if ($doPrint) {
			print ('<pre>' . htmlspecialchars($text) . '</pre>');
		}
		else {
			return ('<pre>' . htmlspecialchars($text) . '</pre>');
		}
	} //forHTML

	/**
	* Generates a node tree from an array and appends it to the specified document or node
	* @param object The document or node to which the child nodes should be appended
	* @param array An associative multidimensional array of elements and values
	*/
	function fromArray (&$node, &$myArray) {
		if ($node->nodeType == DOMIT_DOCUMENT_NODE) {
			$docNode =& $node;
		}
		else {
			$docNode =& $node->ownerDocument;
		}

		foreach ($myArray as $key => $value) {
			if (is_array($value)) {
				//check for numeric indices
				$total = count($value);

				if (($total > 0)  && isset($value[0])){
					for ($i = 0; $i < $total; $i++) {
						$node->appendChild($docNode->createElement($key));
						DOMIT_Utilities::fromArray($node->lastChild, $value[$i]);
					}
				}
				else {
					//generate child elements
					$node->appendChild($docNode->createElement($key));
					DOMIT_Utilities::fromArray($node->lastChild, $value);
				}
			}
			else {
				$node->appendChild($docNode->createElement($key));
				$node->lastChild->appendChild($docNode->createTextNode($value));
			}
		}
	} //fromArray

	function parseAttributes() {

	} //parseAttributes
} //DOMIT_Utilities
?>