Mercurial > hg > isophonics-drupal-site
comparison vendor/squizlabs/php_codesniffer/src/Generators/HTML.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:c2387f117808 | 17:129ea1e6d783 |
---|---|
1 <?php | |
2 /** | |
3 * A doc generator that outputs documentation in one big HTML file. | |
4 * | |
5 * Output is in one large HTML file and is designed for you to style with | |
6 * your own stylesheet. It contains a table of contents at the top with anchors | |
7 * to each sniff. | |
8 * | |
9 * @author Greg Sherwood <gsherwood@squiz.net> | |
10 * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600) | |
11 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence | |
12 */ | |
13 | |
14 namespace PHP_CodeSniffer\Generators; | |
15 | |
16 use PHP_CodeSniffer\Config; | |
17 | |
18 class HTML extends Generator | |
19 { | |
20 | |
21 | |
22 /** | |
23 * Generates the documentation for a standard. | |
24 * | |
25 * @return void | |
26 * @see processSniff() | |
27 */ | |
28 public function generate() | |
29 { | |
30 ob_start(); | |
31 $this->printHeader(); | |
32 $this->printToc(); | |
33 | |
34 foreach ($this->docFiles as $file) { | |
35 $doc = new \DOMDocument(); | |
36 $doc->load($file); | |
37 $documentation = $doc->getElementsByTagName('documentation')->item(0); | |
38 $this->processSniff($documentation); | |
39 } | |
40 | |
41 $this->printFooter(); | |
42 | |
43 $content = ob_get_contents(); | |
44 ob_end_clean(); | |
45 | |
46 echo $content; | |
47 | |
48 }//end generate() | |
49 | |
50 | |
51 /** | |
52 * Print the header of the HTML page. | |
53 * | |
54 * @return void | |
55 */ | |
56 protected function printHeader() | |
57 { | |
58 $standard = $this->ruleset->name; | |
59 echo '<html>'.PHP_EOL; | |
60 echo ' <head>'.PHP_EOL; | |
61 echo " <title>$standard Coding Standards</title>".PHP_EOL; | |
62 echo ' <style> | |
63 body { | |
64 background-color: #FFFFFF; | |
65 font-size: 14px; | |
66 font-family: Arial, Helvetica, sans-serif; | |
67 color: #000000; | |
68 } | |
69 | |
70 h1 { | |
71 color: #666666; | |
72 font-size: 20px; | |
73 font-weight: bold; | |
74 margin-top: 0px; | |
75 background-color: #E6E7E8; | |
76 padding: 20px; | |
77 border: 1px solid #BBBBBB; | |
78 } | |
79 | |
80 h2 { | |
81 color: #00A5E3; | |
82 font-size: 16px; | |
83 font-weight: normal; | |
84 margin-top: 50px; | |
85 } | |
86 | |
87 .code-comparison { | |
88 width: 100%; | |
89 } | |
90 | |
91 .code-comparison td { | |
92 border: 1px solid #CCCCCC; | |
93 } | |
94 | |
95 .code-comparison-title, .code-comparison-code { | |
96 font-family: Arial, Helvetica, sans-serif; | |
97 font-size: 12px; | |
98 color: #000000; | |
99 vertical-align: top; | |
100 padding: 4px; | |
101 width: 50%; | |
102 background-color: #F1F1F1; | |
103 line-height: 15px; | |
104 } | |
105 | |
106 .code-comparison-code { | |
107 font-family: Courier; | |
108 background-color: #F9F9F9; | |
109 } | |
110 | |
111 .code-comparison-highlight { | |
112 background-color: #DDF1F7; | |
113 border: 1px solid #00A5E3; | |
114 line-height: 15px; | |
115 } | |
116 | |
117 .tag-line { | |
118 text-align: center; | |
119 width: 100%; | |
120 margin-top: 30px; | |
121 font-size: 12px; | |
122 } | |
123 | |
124 .tag-line a { | |
125 color: #000000; | |
126 } | |
127 </style>'.PHP_EOL; | |
128 echo ' </head>'.PHP_EOL; | |
129 echo ' <body>'.PHP_EOL; | |
130 echo " <h1>$standard Coding Standards</h1>".PHP_EOL; | |
131 | |
132 }//end printHeader() | |
133 | |
134 | |
135 /** | |
136 * Print the table of contents for the standard. | |
137 * | |
138 * The TOC is just an unordered list of bookmarks to sniffs on the page. | |
139 * | |
140 * @return void | |
141 */ | |
142 protected function printToc() | |
143 { | |
144 echo ' <h2>Table of Contents</h2>'.PHP_EOL; | |
145 echo ' <ul class="toc">'.PHP_EOL; | |
146 | |
147 foreach ($this->docFiles as $file) { | |
148 $doc = new \DOMDocument(); | |
149 $doc->load($file); | |
150 $documentation = $doc->getElementsByTagName('documentation')->item(0); | |
151 $title = $this->getTitle($documentation); | |
152 echo ' <li><a href="#'.str_replace(' ', '-', $title)."\">$title</a></li>".PHP_EOL; | |
153 } | |
154 | |
155 echo ' </ul>'.PHP_EOL; | |
156 | |
157 }//end printToc() | |
158 | |
159 | |
160 /** | |
161 * Print the footer of the HTML page. | |
162 * | |
163 * @return void | |
164 */ | |
165 protected function printFooter() | |
166 { | |
167 // Turn off errors so we don't get timezone warnings if people | |
168 // don't have their timezone set. | |
169 $errorLevel = error_reporting(0); | |
170 echo ' <div class="tag-line">'; | |
171 echo 'Documentation generated on '.date('r'); | |
172 echo ' by <a href="https://github.com/squizlabs/PHP_CodeSniffer">PHP_CodeSniffer '.Config::VERSION.'</a>'; | |
173 echo '</div>'.PHP_EOL; | |
174 error_reporting($errorLevel); | |
175 | |
176 echo ' </body>'.PHP_EOL; | |
177 echo '</html>'.PHP_EOL; | |
178 | |
179 }//end printFooter() | |
180 | |
181 | |
182 /** | |
183 * Process the documentation for a single sniff. | |
184 * | |
185 * @param \DOMNode $doc The DOMNode object for the sniff. | |
186 * It represents the "documentation" tag in the XML | |
187 * standard file. | |
188 * | |
189 * @return void | |
190 */ | |
191 public function processSniff(\DOMNode $doc) | |
192 { | |
193 $title = $this->getTitle($doc); | |
194 echo ' <a name="'.str_replace(' ', '-', $title).'" />'.PHP_EOL; | |
195 echo " <h2>$title</h2>".PHP_EOL; | |
196 | |
197 foreach ($doc->childNodes as $node) { | |
198 if ($node->nodeName === 'standard') { | |
199 $this->printTextBlock($node); | |
200 } else if ($node->nodeName === 'code_comparison') { | |
201 $this->printCodeComparisonBlock($node); | |
202 } | |
203 } | |
204 | |
205 }//end processSniff() | |
206 | |
207 | |
208 /** | |
209 * Print a text block found in a standard. | |
210 * | |
211 * @param \DOMNode $node The DOMNode object for the text block. | |
212 * | |
213 * @return void | |
214 */ | |
215 protected function printTextBlock(\DOMNode $node) | |
216 { | |
217 $content = trim($node->nodeValue); | |
218 $content = htmlspecialchars($content); | |
219 | |
220 // Allow em tags only. | |
221 $content = str_replace('<em>', '<em>', $content); | |
222 $content = str_replace('</em>', '</em>', $content); | |
223 | |
224 echo " <p class=\"text\">$content</p>".PHP_EOL; | |
225 | |
226 }//end printTextBlock() | |
227 | |
228 | |
229 /** | |
230 * Print a code comparison block found in a standard. | |
231 * | |
232 * @param \DOMNode $node The DOMNode object for the code comparison block. | |
233 * | |
234 * @return void | |
235 */ | |
236 protected function printCodeComparisonBlock(\DOMNode $node) | |
237 { | |
238 $codeBlocks = $node->getElementsByTagName('code'); | |
239 | |
240 $firstTitle = $codeBlocks->item(0)->getAttribute('title'); | |
241 $first = trim($codeBlocks->item(0)->nodeValue); | |
242 $first = str_replace('<?php', '<?php', $first); | |
243 $first = str_replace("\n", '</br>', $first); | |
244 $first = str_replace(' ', ' ', $first); | |
245 $first = str_replace('<em>', '<span class="code-comparison-highlight">', $first); | |
246 $first = str_replace('</em>', '</span>', $first); | |
247 | |
248 $secondTitle = $codeBlocks->item(1)->getAttribute('title'); | |
249 $second = trim($codeBlocks->item(1)->nodeValue); | |
250 $second = str_replace('<?php', '<?php', $second); | |
251 $second = str_replace("\n", '</br>', $second); | |
252 $second = str_replace(' ', ' ', $second); | |
253 $second = str_replace('<em>', '<span class="code-comparison-highlight">', $second); | |
254 $second = str_replace('</em>', '</span>', $second); | |
255 | |
256 echo ' <table class="code-comparison">'.PHP_EOL; | |
257 echo ' <tr>'.PHP_EOL; | |
258 echo " <td class=\"code-comparison-title\">$firstTitle</td>".PHP_EOL; | |
259 echo " <td class=\"code-comparison-title\">$secondTitle</td>".PHP_EOL; | |
260 echo ' </tr>'.PHP_EOL; | |
261 echo ' <tr>'.PHP_EOL; | |
262 echo " <td class=\"code-comparison-code\">$first</td>".PHP_EOL; | |
263 echo " <td class=\"code-comparison-code\">$second</td>".PHP_EOL; | |
264 echo ' </tr>'.PHP_EOL; | |
265 echo ' </table>'.PHP_EOL; | |
266 | |
267 }//end printCodeComparisonBlock() | |
268 | |
269 | |
270 }//end class |