/** * @param string contents of package.xml file, version 1.0 * @return bool success of parsing */ function parse($data, $file, $archive = false) { if (!extension_loaded('xml')) { return PEAR::raiseError('Cannot create xml parser for parsing package.xml, no xml extension'); } $xp = @xml_parser_create(); if (!$xp) { return PEAR::raiseError('Cannot create xml parser for parsing package.xml'); } xml_set_object($xp, $this); xml_set_element_handler($xp, '_element_start_1_0', '_element_end_1_0'); xml_set_character_data_handler($xp, '_pkginfo_cdata_1_0'); xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false); $this->element_stack = array(); $this->_packageInfo = array('provides' => array()); $this->current_element = false; unset($this->dir_install); $this->_packageInfo['filelist'] = array(); $this->filelist =& $this->_packageInfo['filelist']; $this->dir_names = array(); $this->in_changelog = false; $this->d_i = 0; $this->cdata = ''; $this->_isValid = true; if (!xml_parse($xp, $data, 1)) { $code = xml_get_error_code($xp); $line = xml_get_current_line_number($xp); xml_parser_free($xp); return PEAR::raiseError(sprintf("XML error: %s at line %d", $str = xml_error_string($code), $line), 2); } xml_parser_free($xp); $pf = new PEAR_PackageFile_v1(); $pf->setConfig($this->_config); if (isset($this->_logger)) { $pf->setLogger($this->_logger); } $pf->setPackagefile($file, $archive); $pf->fromArray($this->_packageInfo); return $pf; }