Exemple #1
0
 /**
  * @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;
 }