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