Current File : //opt/RZphp74/includes/XML/CSSML/xslt.php
<?php
// {{{ license

// +----------------------------------------------------------------------+
// | PHP version 4.0                                                      |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group                                |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the PHP license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/2_02.txt.                                 |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | license@php.net so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Authors: Dan Allen <dan@mojavelinux.com>                             |
// +----------------------------------------------------------------------+

// $Id: xslt.php,v 1.4 2005/10/12 12:38:13 toggg Exp $

// }}}
// {{{ description

// XML_CSSML is a CSSML to CSS xslt parser

// }}}

// {{{ class XML_CSSML_xslt

/**
 * The XML_CSSML_xslt is a container class which
 * provides the sablotron xsl functions to parse a CSSML
 * document into a stylesheet with the ability to output
 * to a file or return
 *
 * @author   Dan Allen <dan@mojavelinux.com>
 * @version  Revision: 0.1
 * @access   public
 * @package  XML_CSSML
 */

// }}}
class XML_CSSML_xslt extends XML_CSSML
{
    // {{{ properties

    /**
     * The sabltron extension can use xml strings as arguments for the
     * processor, but must do so when calling xslt_process.  This variable
     * holds those parameters.
     * @var array $arguments
     */
    var $arguments = array();

    // }}}
    // {{{ constructor

    function XML_CSSML_xslt($in_CSSML = null, $in_type = 'string', $in_params = null)
    {
        if (!function_exists('xslt_create')) {
            $this = PEAR::raiseError(null, XML_CSSML_ERROR, null, E_USER_ERROR,
             'This driver needs the xslt extension to run', 'XML_CSSML_Error', true);
            return;
        }
        $this->loaded = false;
        if (!is_null($in_CSSML)) {
            $this->load($in_CSSML, $in_type);
        }

        if (!is_null($in_params)) {
            $this->setParams($in_params);
        }

        $this->stylesheetDoc = dirname(__FILE__) . '/xslt.xsl';
    }

    // }}}
    // {{{ process()

    // I need some error checking in here
    function process()
    {
        if (parent::isError($process = parent::process())) {
            return $process;
        }

        // Prepare the params for passing to the stylesheet
        $params = array(
            'filter'        => $this->filter,
            'browser'       => $this->browser,
            'comment'       => $this->comment,
        );

        $xh = xslt_create();

        $result = xslt_process($xh, $this->CSSMLDoc, $this->stylesheetDoc, null, $this->arguments, $params);

        if ($this->output != 'STDOUT') {
            $fp = fopen($this->output, 'w');
            fwrite($fp, $result);
            fclose($fp);
            $result = true;
        }

        return $result;
    }

    // }}}
    // {{{ load()

    // I need some more error checking in here
    function load($in_CSSML, $in_type = 'string')
    {
        if (parent::isError($load = parent::load())) {
            return $load;
        }

        if ($in_type == 'file' && @file_exists($in_CSSML)) {
            $this->CSSMLDoc = $in_CSSML;
        } elseif ($in_type == 'string' && is_string($in_CSSML)) {
            $this->CSSMLDoc = 'arg:/_xml';
            $this->arguments = array('/_xml' => $in_CSSML);
        } else {
            return PEAR::raiseError(null, XML_CSSML_INVALID_DATA, null, E_USER_WARNING, "Request data: $in_CSSML", 'XML_CSSML_Error', true);
        }

        $this->loaded = true;
    }

    // }}}
}
?>