Mercurial > hg > isophonics-drupal-site
comparison vendor/squizlabs/php_codesniffer/src/Generators/Text.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 text-based documentation. | |
4 * | |
5 * Output is designed to be displayed in a terminal and is wrapped to 100 characters. | |
6 * | |
7 * @author Greg Sherwood <gsherwood@squiz.net> | |
8 * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600) | |
9 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence | |
10 */ | |
11 | |
12 namespace PHP_CodeSniffer\Generators; | |
13 | |
14 class Text extends Generator | |
15 { | |
16 | |
17 | |
18 /** | |
19 * Process the documentation for a single sniff. | |
20 * | |
21 * @param \DOMNode $doc The DOMNode object for the sniff. | |
22 * It represents the "documentation" tag in the XML | |
23 * standard file. | |
24 * | |
25 * @return void | |
26 */ | |
27 public function processSniff(\DOMNode $doc) | |
28 { | |
29 $this->printTitle($doc); | |
30 | |
31 foreach ($doc->childNodes as $node) { | |
32 if ($node->nodeName === 'standard') { | |
33 $this->printTextBlock($node); | |
34 } else if ($node->nodeName === 'code_comparison') { | |
35 $this->printCodeComparisonBlock($node); | |
36 } | |
37 } | |
38 | |
39 }//end processSniff() | |
40 | |
41 | |
42 /** | |
43 * Prints the title area for a single sniff. | |
44 * | |
45 * @param \DOMNode $doc The DOMNode object for the sniff. | |
46 * It represents the "documentation" tag in the XML | |
47 * standard file. | |
48 * | |
49 * @return void | |
50 */ | |
51 protected function printTitle(\DOMNode $doc) | |
52 { | |
53 $title = $this->getTitle($doc); | |
54 $standard = $this->ruleset->name; | |
55 | |
56 echo PHP_EOL; | |
57 echo str_repeat('-', (strlen("$standard CODING STANDARD: $title") + 4)); | |
58 echo strtoupper(PHP_EOL."| $standard CODING STANDARD: $title |".PHP_EOL); | |
59 echo str_repeat('-', (strlen("$standard CODING STANDARD: $title") + 4)); | |
60 echo PHP_EOL.PHP_EOL; | |
61 | |
62 }//end printTitle() | |
63 | |
64 | |
65 /** | |
66 * Print a text block found in a standard. | |
67 * | |
68 * @param \DOMNode $node The DOMNode object for the text block. | |
69 * | |
70 * @return void | |
71 */ | |
72 protected function printTextBlock(\DOMNode $node) | |
73 { | |
74 $text = trim($node->nodeValue); | |
75 $text = str_replace('<em>', '*', $text); | |
76 $text = str_replace('</em>', '*', $text); | |
77 | |
78 $lines = []; | |
79 $tempLine = ''; | |
80 $words = explode(' ', $text); | |
81 | |
82 foreach ($words as $word) { | |
83 if (strlen($tempLine.$word) >= 99) { | |
84 if (strlen($tempLine.$word) === 99) { | |
85 // Adding the extra space will push us to the edge | |
86 // so we are done. | |
87 $lines[] = $tempLine.$word; | |
88 $tempLine = ''; | |
89 } else if (strlen($tempLine.$word) === 100) { | |
90 // We are already at the edge, so we are done. | |
91 $lines[] = $tempLine.$word; | |
92 $tempLine = ''; | |
93 } else { | |
94 $lines[] = rtrim($tempLine); | |
95 $tempLine = $word.' '; | |
96 } | |
97 } else { | |
98 $tempLine .= $word.' '; | |
99 } | |
100 }//end foreach | |
101 | |
102 if ($tempLine !== '') { | |
103 $lines[] = rtrim($tempLine); | |
104 } | |
105 | |
106 echo implode(PHP_EOL, $lines).PHP_EOL.PHP_EOL; | |
107 | |
108 }//end printTextBlock() | |
109 | |
110 | |
111 /** | |
112 * Print a code comparison block found in a standard. | |
113 * | |
114 * @param \DOMNode $node The DOMNode object for the code comparison block. | |
115 * | |
116 * @return void | |
117 */ | |
118 protected function printCodeComparisonBlock(\DOMNode $node) | |
119 { | |
120 $codeBlocks = $node->getElementsByTagName('code'); | |
121 $first = trim($codeBlocks->item(0)->nodeValue); | |
122 $firstTitle = $codeBlocks->item(0)->getAttribute('title'); | |
123 | |
124 $firstTitleLines = []; | |
125 $tempTitle = ''; | |
126 $words = explode(' ', $firstTitle); | |
127 | |
128 foreach ($words as $word) { | |
129 if (strlen($tempTitle.$word) >= 45) { | |
130 if (strlen($tempTitle.$word) === 45) { | |
131 // Adding the extra space will push us to the edge | |
132 // so we are done. | |
133 $firstTitleLines[] = $tempTitle.$word; | |
134 $tempTitle = ''; | |
135 } else if (strlen($tempTitle.$word) === 46) { | |
136 // We are already at the edge, so we are done. | |
137 $firstTitleLines[] = $tempTitle.$word; | |
138 $tempTitle = ''; | |
139 } else { | |
140 $firstTitleLines[] = $tempTitle; | |
141 $tempTitle = $word; | |
142 } | |
143 } else { | |
144 $tempTitle .= $word.' '; | |
145 } | |
146 }//end foreach | |
147 | |
148 if ($tempTitle !== '') { | |
149 $firstTitleLines[] = $tempTitle; | |
150 } | |
151 | |
152 $first = str_replace('<em>', '', $first); | |
153 $first = str_replace('</em>', '', $first); | |
154 $firstLines = explode("\n", $first); | |
155 | |
156 $second = trim($codeBlocks->item(1)->nodeValue); | |
157 $secondTitle = $codeBlocks->item(1)->getAttribute('title'); | |
158 | |
159 $secondTitleLines = []; | |
160 $tempTitle = ''; | |
161 $words = explode(' ', $secondTitle); | |
162 | |
163 foreach ($words as $word) { | |
164 if (strlen($tempTitle.$word) >= 45) { | |
165 if (strlen($tempTitle.$word) === 45) { | |
166 // Adding the extra space will push us to the edge | |
167 // so we are done. | |
168 $secondTitleLines[] = $tempTitle.$word; | |
169 $tempTitle = ''; | |
170 } else if (strlen($tempTitle.$word) === 46) { | |
171 // We are already at the edge, so we are done. | |
172 $secondTitleLines[] = $tempTitle.$word; | |
173 $tempTitle = ''; | |
174 } else { | |
175 $secondTitleLines[] = $tempTitle; | |
176 $tempTitle = $word; | |
177 } | |
178 } else { | |
179 $tempTitle .= $word.' '; | |
180 } | |
181 }//end foreach | |
182 | |
183 if ($tempTitle !== '') { | |
184 $secondTitleLines[] = $tempTitle; | |
185 } | |
186 | |
187 $second = str_replace('<em>', '', $second); | |
188 $second = str_replace('</em>', '', $second); | |
189 $secondLines = explode("\n", $second); | |
190 | |
191 $maxCodeLines = max(count($firstLines), count($secondLines)); | |
192 $maxTitleLines = max(count($firstTitleLines), count($secondTitleLines)); | |
193 | |
194 echo str_repeat('-', 41); | |
195 echo ' CODE COMPARISON '; | |
196 echo str_repeat('-', 42).PHP_EOL; | |
197 | |
198 for ($i = 0; $i < $maxTitleLines; $i++) { | |
199 if (isset($firstTitleLines[$i]) === true) { | |
200 $firstLineText = $firstTitleLines[$i]; | |
201 } else { | |
202 $firstLineText = ''; | |
203 } | |
204 | |
205 if (isset($secondTitleLines[$i]) === true) { | |
206 $secondLineText = $secondTitleLines[$i]; | |
207 } else { | |
208 $secondLineText = ''; | |
209 } | |
210 | |
211 echo '| '; | |
212 echo $firstLineText.str_repeat(' ', (46 - strlen($firstLineText))); | |
213 echo ' | '; | |
214 echo $secondLineText.str_repeat(' ', (47 - strlen($secondLineText))); | |
215 echo ' |'.PHP_EOL; | |
216 }//end for | |
217 | |
218 echo str_repeat('-', 100).PHP_EOL; | |
219 | |
220 for ($i = 0; $i < $maxCodeLines; $i++) { | |
221 if (isset($firstLines[$i]) === true) { | |
222 $firstLineText = $firstLines[$i]; | |
223 } else { | |
224 $firstLineText = ''; | |
225 } | |
226 | |
227 if (isset($secondLines[$i]) === true) { | |
228 $secondLineText = $secondLines[$i]; | |
229 } else { | |
230 $secondLineText = ''; | |
231 } | |
232 | |
233 echo '| '; | |
234 echo $firstLineText.str_repeat(' ', (47 - strlen($firstLineText))); | |
235 echo '| '; | |
236 echo $secondLineText.str_repeat(' ', (48 - strlen($secondLineText))); | |
237 echo '|'.PHP_EOL; | |
238 }//end for | |
239 | |
240 echo str_repeat('-', 100).PHP_EOL.PHP_EOL; | |
241 | |
242 }//end printCodeComparisonBlock() | |
243 | |
244 | |
245 }//end class |