| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | <?php/** * Decorator/extender XSLT processor specifically for HTML documents. */class ConfigDoc_HTMLXSLTProcessor{    /**     * Instance of XSLTProcessor     */    protected $xsltProcessor;    public function __construct($proc = false)    {        if ($proc === false) $proc = new XSLTProcessor();        $this->xsltProcessor = $proc;    }    /**     * @note Allows a string $xsl filename to be passed     */    public function importStylesheet($xsl)    {        if (is_string($xsl)) {            $xsl_file = $xsl;            $xsl = new DOMDocument();            $xsl->load($xsl_file);        }        return $this->xsltProcessor->importStylesheet($xsl);    }    /**     * Transforms an XML file into compatible XHTML based on the stylesheet     * @param $xml XML DOM tree, or string filename     * @return string HTML output     * @todo Rename to transformToXHTML, as transformToHTML is misleading     */    public function transformToHTML($xml)    {        if (is_string($xml)) {            $dom = new DOMDocument();            $dom->load($xml);        } else {            $dom = $xml;        }        $out = $this->xsltProcessor->transformToXML($dom);        // fudges for HTML backwards compatibility        // assumes that document is XHTML        $out = str_replace('/>', ' />', $out); // <br /> not <br/>        $out = str_replace(' xmlns=""', '', $out); // rm unnecessary xmlns        if (class_exists('Tidy')) {            // cleanup output            $config = array(                'indent'        => true,                'output-xhtml'  => true,                'wrap'          => 80            );            $tidy = new Tidy;            $tidy->parseString($out, $config, 'utf8');            $tidy->cleanRepair();            $out = (string) $tidy;        }        return $out;    }    /**     * Bulk sets parameters for the XSL stylesheet     * @param array $options Associative array of options to set     */    public function setParameters($options)    {        foreach ($options as $name => $value) {            $this->xsltProcessor->setParameter('', $name, $value);        }    }    /**     * Forward any other calls to the XSLT processor     */    public function __call($name, $arguments)    {        call_user_func_array(array($this->xsltProcessor, $name), $arguments);    }}// vim: et sw=4 sts=4
 |