Blame view

vendor/ezyang/htmlpurifier/extras/ConfigDoc/HTMLXSLTProcessor.php 2.35 KB
abf1649b   andryeyev   Чистая установка ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  <?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