annotate vendor/squizlabs/php_codesniffer/CodeSniffer/DocGenerators/Text.php @ 0:4c8ae668cc8c

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