芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp74/includes/XML/CSSML.php
| // +----------------------------------------------------------------------+ // $Id: CSSML.php,v 1.8 2005/10/12 12:38:12 toggg Exp $ // }}} // {{{ description // XML_CSSML is a CSSML to CSS xslt parser // }}} // {{{ error codes define('XML_CSSML_OK', 0); define('XML_CSSML_ERROR', -1); define('XML_CSSML_ALREADY_EXISTS', -2); define('XML_CSSML_NOT_LOADED', -3); define('XML_CSSML_INVALID_DATA', -4); define('XML_CSSML_INVALID_DOCUMENT', -5); define('XML_CSSML_INVALID_FILE', -6); // }}} // {{{ includes require_once 'PEAR.php'; require_once 'XML/CSSML/Error.php'; // }}} // {{{ functions /** * Replace function is_a() * * @category PHP * @package PHP_Compat * @link http://php.net/function.is_a * @author Aidan Lister
* @version $Revision: 1.8 $ * @since PHP 4.2.0 * @require PHP 4.0.0 (user_error) (is_subclass_of) */ if (!function_exists('is_a')) { function is_a($object, $class) { if (!is_object($object)) { return false; } if (get_class($object) == strtolower($class)) { return true; } else { return is_subclass_of($object, $class); } } } // }}} // {{{ class XML_CSSML /** * The XML_CSSML class provides the xsl functions * to parse a CSSML document into a stylesheet * with the ability to output to a file or return * * @author Dan Allen
* @version Revision: 0.1 * @access public * @package XML_CSSML */ // }}} class XML_CSSML { // {{{ properties /** * domxml object which holds the xml document with the css information * @var object $CSSMLDoc */ var $CSSMLDoc; /** * domxml object which holds the xsl document which parses the cssml document * @var object $stylesheetDoc */ var $stylesheetDoc; /** * Redirection method for the output of the cssml (file, stdout) * If redirection is a file, it must be absolute * @var string $outputMethod */ var $output = 'STDOUT'; /** * Code corresponding to the user agent of the browser, * such as is generated with Net_UserAgentDetect * @var string $browser */ var $browser = ''; /** * Filter for the entries in the CSSML * @var string $filter */ var $filter = ''; /** * Comment to be used at the top of the stylesheet output * @var string $comment */ var $comment = ''; /** * Boolean which defines if the CSSML document has been loaded * @var boolean $loaded */ var $loaded = false; // }}} // {{{ constructor /** * Class constructor, prepare the cssml document object from either a string, file or object * * @param mixed $in_cssml Optionally the CSSML data can be passed to the constructor * @return void * @access private */ function XML_CSSML($in_driver, $in_CSSML = null, $in_type = 'string', $in_params = null) { $this = $this->factory($in_driver, $in_CSSML, $in_type, $in_params); } // }}} // {{{ factory() function &factory($in_driver, $in_CSSML = null, $in_type = 'string', $in_params = null) { $interface_path = 'CSSML/' . $in_driver . '.php'; $interface_class = 'XML_CSSML_' . $in_driver; @include_once $interface_path; $obj =& new $interface_class($in_CSSML, $in_type, $in_params); return $obj; } // }}} // {{{ load() /** * Prepare the CSSML document object from either a string, file or object. This * will set the CSSMLDoc class variable which will be parsed by the xsl stylesheet * into a CSS stylesheet * * @param mixed $in_CSSML The CSSML document which contains the information for * generating the CSS document * * @return void * */ function load() { if ($this->loaded) { return PEAR::raiseError(null, XML_CSSML_ALREADY_EXISTS, null, E_USER_WARNING, $this->CSSMLDoc, 'XML_CSSML_Error', true); } } // }}} // {{{ setParams() /** * Set the params (params) that will be used when calling the stylesheet parser. * This pertains particularly to variables such as browser code, image path and * the filter. It works by passing an associative array with any number of the * possible parameters for the stylesheet. If a variable is not set, the default * will be used * * @param array $in_params Associative array of the params * * @return void * */ function setParams($in_params) { if (isset($in_params['browser'])) { $this->browser = $in_params['browser']; } if (isset($in_params['filter'])) { $this->filter = $in_params['filter']; } if (isset($in_params['comment'])) { $this->comment = str_replace(array('/*', '*/'), '', $in_params['comment']); } if (isset($in_params['output'])) { $this->output = $in_params['output']; if ($in_params['output'] != 'STDOUT') { // check to make sure this is a file...this needs work if (!@file_exists($in_params['output']) && !@touch($in_params['output'])) { $this->output = 'STDOUT'; return PEAR::raiseError(null, XML_CSSML_INVALID_FILE, PEAR_ERROR_PRINT, E_USER_NOTICE, '', 'XML_CSSML_Error', true); } } } } // }}} // {{{ process() /** * Run the transformation on the CSSML document using the CSSML xsl stylesheet. If * the output method is to a file, then the function will not return. If the output * is set to STDOUT, the xml string will be returned (really the css document) after * some clean up of entities and domxml bugs have been fixed * * @return css string if output method is STDOUT, else void * @access public */ function process() { if (!$this->loaded) { return PEAR::raiseError(null, XML_CSSML_NOT_LOADED, null, E_USER_WARNING, 'use load() function', 'XML_CSSML_Error', true); } } // }}} // {{{ isError() /** * Tell whether a result code from a XML_CSSML method is an error. * * @param object $in_value object in question * * @access public * @return boolean whether object is an error object */ function isError($in_value) { return is_a($in_value, 'xml_cssml_error'); } // }}} // {{{ errorMessage() /** * Return a textual error message for an XML_CSSML error code. * * @param int $in_value error code * * @access public * @return string error message, or false if not error code */ function errorMessage($in_value) { // make the variable static so that it only has to do the defining on the first call static $errorMessages; // define the varies error messages if (!isset($errorMessages)) { $errorMessages = array( XML_CSSML_OK => 'no error', XML_CSSML_ERROR => 'unknown error', XML_CSSML_ALREADY_EXISTS => 'cssml document already loaded', XML_CSSML_NOT_LOADED => 'cssml document has not been loaded', XML_CSSML_INVALID_DATA => 'invalid cssml data to parse', XML_CSSML_INVALID_DOCUMENT => 'cssml domdocument could not be created', XML_CSSML_INVALID_FILE => 'output file does not exist', ); } // If this is an error object, then grab the corresponding error code if (XML_CSSML::isError($in_value)) { $in_value = $in_value->getCode(); } // return the textual error message corresponding to the code return isset($errorMessages[$in_value]) ? $errorMessages[$in_value] : $errorMessages[XML_CSSML_ERROR]; } // }}} // {{{ reset() /** * Resets the object so it is possible to load another xml document. * * @access public * @return void */ function reset() { $this->CSSMLDoc = null; $this->loaded = false; } // }}} // {{{ free() /** * Kill the class object to free memory. Not really sure how necessary this is, but xml * documents can be pretty big. This will kill everything, so only use it when you are done * * @access public * @return void */ function free() { $vars = get_class_vars('XML_CSSML'); foreach ($vars as $var => $value) { $this->$var = null; } } // }}} } ?>