|
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
|