uw Sun Feb 18 08:56:18 2001 EDT Modified files: /php4/pear/PHPDoc/xmlreader PhpdocXMLReader.php Log: Sorry, whitespace only changes to follow the PEAR Coding conventions. Replaced tabs with spaces.
Index: php4/pear/PHPDoc/xmlreader/PhpdocXMLReader.php diff -u php4/pear/PHPDoc/xmlreader/PhpdocXMLReader.php:1.3 php4/pear/PHPDoc/xmlreader/PhpdocXMLReader.php:1.4 --- php4/pear/PHPDoc/xmlreader/PhpdocXMLReader.php:1.3 Thu Jan 11 13:17:56 2001 +++ php4/pear/PHPDoc/xmlreader/PhpdocXMLReader.php Sun Feb 18 08:56:18 2001 @@ -2,224 +2,224 @@ /** * Reads XML documents into a multi dimensional Array. * -* @version $Id: PhpdocXMLReader.php,v 1.3 2001/01/11 21:17:56 chagenbu Exp $ +* @version $Id: PhpdocXMLReader.php,v 1.4 2001/02/18 16:56:18 uw Exp $ */ class PhpdocXMLReader extends PhpdocObject { - - /** - * PHPDocFileHandler object. - * - * @var object PhpdocFileHandler - * @see createFileHandler() - */ - var $filehandler; - - /** - * Values array from xml_parse_into_struct(). - * - * @var array - * @see parse(), stripCloseFromStructvalues(), importXML() - */ - var $structvalues = array(); - - /** - * Parses a given XML file and returns the data as a hash. - * - * Please do not ask me for a in detail explanation of how it is done, - * the documentation is in the source... - * - * @param string $filename Name of the xml document - * @access public - * @throws PhpdocError - * @see importXML() - */ - function parse($filename) { - - if (""==$filename) { - $this->err[] = new PhpdocError("No filename given.", __FILE__, __LINE__); - return array(); - } - - $parser = @xml_parser_create(); - if (!$parser) { - $this->err = PhpdocError("Can't create a XML Parser.", __FILE__, __LINE__); - return array(); - } - xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); - - $this->createFileHandler(); - $xml = $this->filehandler->getFile($filename); - - $values = array(); - $index = array(); - xml_parse_into_struct($parser, $xml, $values, $index); - - xml_parser_free($parser); - - $this->structvalues = $values; - $this->stripCloseFromStructvalues(); - list($data, $last) = $this->importXML(); - $this->structvalues = array(); - - return $data; - } // end func parse - - /** - * Creates a PhpdocFileHandler object and saves it to $filehandler if it does not already exist. - * - * @see $filehandler - */ - function createFilehandler() { - - if (!isset($this->filehandler)) - $this->filehandler = new PhpdocFileHandler; - - } // end func createFilehandler - - /** - * Strips all values out of the xml_parse_intro_struct() values array with the type "open". - * - * @see $structvalues - */ - function stripCloseFromStructvalues() { - - $values = array(); - - reset($this->structvalues); - while (list($k, $v) = each($this->structvalues)) - if ("close" != $v["type"]) - $values[] = $v; - - $this->structvalues = $values; - } // end func stripCloseFromStructvalues - - /** - * Converts an xml_parse_into_struct value array to an array that's simmilar to phpdocs internal arrays. - * - * Well, don't ask me to explain this hack. Just take it as it. For those who want to unterstand and optimize - * it: - * - PHP3 compatibility is a must - * - no XML DOM - * - no eval(), this can't be optimized by the compiler - * - * @param integer - * @param integer - * @return array $data[0] = daten, $data[1] = some index value used for the recursion - * @see addToArray() - */ - function importXML($start = 0, $allowed_level = 1) { - - $data = array(); - $last = 0; - - for ($i=$start; $i<count($this->structvalues); $i++) { - if ($allowed_level != $this->structvalues[$i]["level"]) - break; - - $value = (isset($this->structvalues[$i]["value"])) ? $this->structvalues[$i]["value"] : ""; - $attribs = (isset($this->structvalues[$i]["attributes"])) ? $this->structvalues[$i]["attributes"] : ""; - $tag = $this->structvalues[$i]["tag"]; - - if ("open" == $this->structvalues[$i]["type"]) { - - list($inner, $next) = $this->importXML($i+1, $this->structvalues[$i]["level"]+1); - - // append the inner data to the current one - $data = $this->addToArray($data, $tag, $value, $attribs, $inner); - - // skip some entries in $this->structvalues - $i = $next; - - } else { - - // same level, append to the array - $data = $this->addToArray($data, $tag, $value, $attribs); - - } - - // remember the last index in $this->structvalues we've worked on - $last = $i; - } - - return array($data, $last); - } // end func importXML - - /** - * Appends some values to an array - * Well, don't ask me; just improve it with the remarks on buildXMLResult() - * @param array - * @param string - * @param string - * @param array - * @param array - * @return array $target - */ - function addToArray($target, $key, $value="", $attributes = "", $inner = "") { - - if (!isset($target[$key]["value"]) && !isset($target[$key][0])) { - - if (""!=$inner) - $target[$key] = $inner; - - if (""!=$attributes) { - reset($attributes); - while (list($k, $v) = each($attributes)) - $target[$key][$k] = $this->xmldecode($v); - } - - $target[$key]["value"] = $this->xmldecode($value); - - } else { - - if (!isset($target[$key][0])) { - - $oldvalue = $target[$key]; - $target[$key] = array(); - $target[$key][0] = $oldvalue; - - if ("" != $inner) - $target[$key][1] = $inner; - - if ("" != $attributes) { - reset($attributes); - while (list($k, $v)=each($attributes)) - $target[$key][1][$k] = $this->xmldecode($v); - } - - $target[$key][1]["value"] = $this->xmldecode($value); - - } else { - - $index = count($target[$key]); - - if ("" != $inner) - $target[$key][$index] = $inner; - - if (""!=$attributes) { - reset($attributes); - while (list($k, $v) = each($attributes)) - $target[$key][$index][$k] = $this->xmldecode($v); - } - - $target[$key][$index]["value"] = $this->xmldecode($value); - - } - - } - - return $target; - } // end func addToArray - - /** - * Replaces some basic entities with their character counterparts. - * - * @param string String to decode - * @return string Decoded string - */ - function xmldecode($value) { - #return preg_replace( array("@<@", "@>@", "@'@", "@"@", "@&@"), array("<", ">", "'", '"', "&"), $value); - return utf8_decode(preg_replace( array("@<@", "@>@", "@'@", "@"@", "@&@"), array("<", ">", "'", '"', "&"), $value)); - } // end func xmldecode + + /** + * PHPDocFileHandler object. + * + * @var object PhpdocFileHandler + * @see createFileHandler() + */ + var $filehandler; + + /** + * Values array from xml_parse_into_struct(). + * + * @var array + * @see parse(), stripCloseFromStructvalues(), importXML() + */ + var $structvalues = array(); + + /** + * Parses a given XML file and returns the data as a hash. + * + * Please do not ask me for a in detail explanation of how it is done, + * the documentation is in the source... + * + * @param string $filename Name of the xml document + * @access public + * @throws PhpdocError + * @see importXML() + */ + function parse($filename) { + + if (""==$filename) { + $this->err[] = new PhpdocError("No filename given.", __FILE__, __LINE__); + return array(); + } + + $parser = xml_parser_create(); + if (!$parser) { + $this->err = PhpdocError("Can't create a XML Parser.", __FILE__, +__LINE__); + return array(); + } + xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); + + $this->createFileHandler(); + $xml = $this->filehandler->getFile($filename); + + $values = array(); + $index = array(); + xml_parse_into_struct($parser, $xml, $values, $index); + + xml_parser_free($parser); + + $this->structvalues = $values; + $this->stripCloseFromStructvalues(); + list($data, $last) = $this->importXML(); + $this->structvalues = array(); + + return $data; + } // end func parse + + /** + * Creates a PhpdocFileHandler object and saves it to $filehandler if it does not +already exist. + * + * @see $filehandler + */ + function createFilehandler() { + + if (!isset($this->filehandler)) + $this->filehandler = new PhpdocFileHandler; + + } // end func createFilehandler + + /** + * Strips all values out of the xml_parse_intro_struct() values array with the +type "open". + * + * @see $structvalues + */ + function stripCloseFromStructvalues() { + + $values = array(); + + reset($this->structvalues); + while (list($k, $v) = each($this->structvalues)) + if ("close" != $v["type"]) + $values[] = $v; + + $this->structvalues = $values; + } // end func stripCloseFromStructvalues + + /** + * Converts an xml_parse_into_struct value array to an array that's simmilar to +phpdocs internal arrays. + * + * Well, don't ask me to explain this hack. Just take it as it. For those who want +to unterstand and optimize + * it: + * - PHP3 compatibility is a must + * - no XML DOM + * - no eval(), this can't be optimized by the compiler + * + * @param integer + * @param integer + * @return array $data[0] = daten, $data[1] = some index value used for the +recursion + * @see addToArray() + */ + function importXML($start = 0, $allowed_level = 1) { + + $data = array(); + $last = 0; + + for ($i = $start; $i < count($this->structvalues); $i++) { + if ($allowed_level != $this->structvalues[$i]["level"]) + break; + + $value = (isset($this->structvalues[$i]["value"])) ? +$this->structvalues[$i]["value"] : ""; + $attribs = (isset($this->structvalues[$i]["attributes"])) ? +$this->structvalues[$i]["attributes"] : ""; + $tag = $this->structvalues[$i]["tag"]; + + if ("open" == $this->structvalues[$i]["type"]) { + + list($inner, $next) = $this->importXML($i+1, +$this->structvalues[$i]["level"] + 1); + + // append the inner data to the current one + $data = $this->addToArray($data, $tag, $value, +$attribs, $inner); + + // skip some entries in $this->structvalues + $i = $next; + + } else { + + // same level, append to the array + $data = $this->addToArray($data, $tag, $value, $attribs); + + } + + // remember the last index in $this->structvalues we've worked on + $last = $i; + } + + return array($data, $last); + } // end func importXML + + /** + * Appends some values to an array + * Well, don't ask me; just improve it with the remarks on buildXMLResult() + * @param array + * @param string + * @param string + * @param array + * @param array + * @return array $target + */ + function addToArray($target, $key, $value = "", $attributes = "", $inner = "") { + + if (!isset($target[$key]["value"]) && !isset($target[$key][0])) { + + if ("" != $inner) + $target[$key] = $inner; + + if ("" != $attributes) { + reset($attributes); + while (list($k, $v) = each($attributes)) + $target[$key][$k] = $this->xmldecode($v); + } + + $target[$key]["value"] = $this->xmldecode($value); + + } else { + + if (!isset($target[$key][0])) { + + $oldvalue = $target[$key]; + $target[$key] = array(); + $target[$key][0] = $oldvalue; + + if ("" != $inner) + $target[$key][1] = $inner; + + if ("" != $attributes) { + reset($attributes); + while (list($k, $v)=each($attributes)) + $target[$key][1][$k] = $this->xmldecode($v); + } + + $target[$key][1]["value"] = $this->xmldecode($value); + + } else { + + $index = count($target[$key]); + + if ("" != $inner) + $target[$key][$index] = $inner; + + if ("" != $attributes) { + reset($attributes); + while (list($k, $v) = each($attributes)) + $target[$key][$index][$k] = $this->xmldecode($v); + } + + $target[$key][$index]["value"] = $this->xmldecode($value); + + } + + } + + return $target; + } // end func addToArray + + /** + * Replaces some basic entities with their character counterparts. + * + * @param string String to decode + * @return string Decoded string + */ + function xmldecode($value) { + #return preg_replace( array("@<@", "@>@", "@'@", "@"@", +"@&@"), array("<", ">", "'", '"', "&"), $value); + return utf8_decode(preg_replace( array("@<@", "@>@", "@'@", +"@"@", "@&@"), array("<", ">", "'", '"', "&"), $value)); + } // end func xmldecode } // end class PhpdocXMLReader ?>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]