Chris@17: Chris@17: * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600) Chris@17: * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence Chris@17: */ Chris@17: Chris@17: namespace PHP_CodeSniffer\Generators; Chris@17: Chris@17: class Text extends Generator Chris@17: { Chris@17: Chris@17: Chris@17: /** Chris@17: * Process the documentation for a single sniff. Chris@17: * Chris@17: * @param \DOMNode $doc The DOMNode object for the sniff. Chris@17: * It represents the "documentation" tag in the XML Chris@17: * standard file. Chris@17: * Chris@17: * @return void Chris@17: */ Chris@17: public function processSniff(\DOMNode $doc) Chris@17: { Chris@17: $this->printTitle($doc); Chris@17: Chris@17: foreach ($doc->childNodes as $node) { Chris@17: if ($node->nodeName === 'standard') { Chris@17: $this->printTextBlock($node); Chris@17: } else if ($node->nodeName === 'code_comparison') { Chris@17: $this->printCodeComparisonBlock($node); Chris@17: } Chris@17: } Chris@17: Chris@17: }//end processSniff() Chris@17: Chris@17: Chris@17: /** Chris@17: * Prints the title area for a single sniff. Chris@17: * Chris@17: * @param \DOMNode $doc The DOMNode object for the sniff. Chris@17: * It represents the "documentation" tag in the XML Chris@17: * standard file. Chris@17: * Chris@17: * @return void Chris@17: */ Chris@17: protected function printTitle(\DOMNode $doc) Chris@17: { Chris@17: $title = $this->getTitle($doc); Chris@17: $standard = $this->ruleset->name; Chris@17: Chris@17: echo PHP_EOL; Chris@17: echo str_repeat('-', (strlen("$standard CODING STANDARD: $title") + 4)); Chris@17: echo strtoupper(PHP_EOL."| $standard CODING STANDARD: $title |".PHP_EOL); Chris@17: echo str_repeat('-', (strlen("$standard CODING STANDARD: $title") + 4)); Chris@17: echo PHP_EOL.PHP_EOL; Chris@17: Chris@17: }//end printTitle() Chris@17: Chris@17: Chris@17: /** Chris@17: * Print a text block found in a standard. Chris@17: * Chris@17: * @param \DOMNode $node The DOMNode object for the text block. Chris@17: * Chris@17: * @return void Chris@17: */ Chris@17: protected function printTextBlock(\DOMNode $node) Chris@17: { Chris@17: $text = trim($node->nodeValue); Chris@17: $text = str_replace('', '*', $text); Chris@17: $text = str_replace('', '*', $text); Chris@17: Chris@17: $lines = []; Chris@17: $tempLine = ''; Chris@17: $words = explode(' ', $text); Chris@17: Chris@17: foreach ($words as $word) { Chris@17: if (strlen($tempLine.$word) >= 99) { Chris@17: if (strlen($tempLine.$word) === 99) { Chris@17: // Adding the extra space will push us to the edge Chris@17: // so we are done. Chris@17: $lines[] = $tempLine.$word; Chris@17: $tempLine = ''; Chris@17: } else if (strlen($tempLine.$word) === 100) { Chris@17: // We are already at the edge, so we are done. Chris@17: $lines[] = $tempLine.$word; Chris@17: $tempLine = ''; Chris@17: } else { Chris@17: $lines[] = rtrim($tempLine); Chris@17: $tempLine = $word.' '; Chris@17: } Chris@17: } else { Chris@17: $tempLine .= $word.' '; Chris@17: } Chris@17: }//end foreach Chris@17: Chris@17: if ($tempLine !== '') { Chris@17: $lines[] = rtrim($tempLine); Chris@17: } Chris@17: Chris@17: echo implode(PHP_EOL, $lines).PHP_EOL.PHP_EOL; Chris@17: Chris@17: }//end printTextBlock() Chris@17: Chris@17: Chris@17: /** Chris@17: * Print a code comparison block found in a standard. Chris@17: * Chris@17: * @param \DOMNode $node The DOMNode object for the code comparison block. Chris@17: * Chris@17: * @return void Chris@17: */ Chris@17: protected function printCodeComparisonBlock(\DOMNode $node) Chris@17: { Chris@17: $codeBlocks = $node->getElementsByTagName('code'); Chris@17: $first = trim($codeBlocks->item(0)->nodeValue); Chris@17: $firstTitle = $codeBlocks->item(0)->getAttribute('title'); Chris@17: Chris@17: $firstTitleLines = []; Chris@17: $tempTitle = ''; Chris@17: $words = explode(' ', $firstTitle); Chris@17: Chris@17: foreach ($words as $word) { Chris@17: if (strlen($tempTitle.$word) >= 45) { Chris@17: if (strlen($tempTitle.$word) === 45) { Chris@17: // Adding the extra space will push us to the edge Chris@17: // so we are done. Chris@17: $firstTitleLines[] = $tempTitle.$word; Chris@17: $tempTitle = ''; Chris@17: } else if (strlen($tempTitle.$word) === 46) { Chris@17: // We are already at the edge, so we are done. Chris@17: $firstTitleLines[] = $tempTitle.$word; Chris@17: $tempTitle = ''; Chris@17: } else { Chris@17: $firstTitleLines[] = $tempTitle; Chris@17: $tempTitle = $word; Chris@17: } Chris@17: } else { Chris@17: $tempTitle .= $word.' '; Chris@17: } Chris@17: }//end foreach Chris@17: Chris@17: if ($tempTitle !== '') { Chris@17: $firstTitleLines[] = $tempTitle; Chris@17: } Chris@17: Chris@17: $first = str_replace('', '', $first); Chris@17: $first = str_replace('', '', $first); Chris@17: $firstLines = explode("\n", $first); Chris@17: Chris@17: $second = trim($codeBlocks->item(1)->nodeValue); Chris@17: $secondTitle = $codeBlocks->item(1)->getAttribute('title'); Chris@17: Chris@17: $secondTitleLines = []; Chris@17: $tempTitle = ''; Chris@17: $words = explode(' ', $secondTitle); Chris@17: Chris@17: foreach ($words as $word) { Chris@17: if (strlen($tempTitle.$word) >= 45) { Chris@17: if (strlen($tempTitle.$word) === 45) { Chris@17: // Adding the extra space will push us to the edge Chris@17: // so we are done. Chris@17: $secondTitleLines[] = $tempTitle.$word; Chris@17: $tempTitle = ''; Chris@17: } else if (strlen($tempTitle.$word) === 46) { Chris@17: // We are already at the edge, so we are done. Chris@17: $secondTitleLines[] = $tempTitle.$word; Chris@17: $tempTitle = ''; Chris@17: } else { Chris@17: $secondTitleLines[] = $tempTitle; Chris@17: $tempTitle = $word; Chris@17: } Chris@17: } else { Chris@17: $tempTitle .= $word.' '; Chris@17: } Chris@17: }//end foreach Chris@17: Chris@17: if ($tempTitle !== '') { Chris@17: $secondTitleLines[] = $tempTitle; Chris@17: } Chris@17: Chris@17: $second = str_replace('', '', $second); Chris@17: $second = str_replace('', '', $second); Chris@17: $secondLines = explode("\n", $second); Chris@17: Chris@17: $maxCodeLines = max(count($firstLines), count($secondLines)); Chris@17: $maxTitleLines = max(count($firstTitleLines), count($secondTitleLines)); Chris@17: Chris@17: echo str_repeat('-', 41); Chris@17: echo ' CODE COMPARISON '; Chris@17: echo str_repeat('-', 42).PHP_EOL; Chris@17: Chris@17: for ($i = 0; $i < $maxTitleLines; $i++) { Chris@17: if (isset($firstTitleLines[$i]) === true) { Chris@17: $firstLineText = $firstTitleLines[$i]; Chris@17: } else { Chris@17: $firstLineText = ''; Chris@17: } Chris@17: Chris@17: if (isset($secondTitleLines[$i]) === true) { Chris@17: $secondLineText = $secondTitleLines[$i]; Chris@17: } else { Chris@17: $secondLineText = ''; Chris@17: } Chris@17: Chris@17: echo '| '; Chris@17: echo $firstLineText.str_repeat(' ', (46 - strlen($firstLineText))); Chris@17: echo ' | '; Chris@17: echo $secondLineText.str_repeat(' ', (47 - strlen($secondLineText))); Chris@17: echo ' |'.PHP_EOL; Chris@17: }//end for Chris@17: Chris@17: echo str_repeat('-', 100).PHP_EOL; Chris@17: Chris@17: for ($i = 0; $i < $maxCodeLines; $i++) { Chris@17: if (isset($firstLines[$i]) === true) { Chris@17: $firstLineText = $firstLines[$i]; Chris@17: } else { Chris@17: $firstLineText = ''; Chris@17: } Chris@17: Chris@17: if (isset($secondLines[$i]) === true) { Chris@17: $secondLineText = $secondLines[$i]; Chris@17: } else { Chris@17: $secondLineText = ''; Chris@17: } Chris@17: Chris@17: echo '| '; Chris@17: echo $firstLineText.str_repeat(' ', (47 - strlen($firstLineText))); Chris@17: echo '| '; Chris@17: echo $secondLineText.str_repeat(' ', (48 - strlen($secondLineText))); Chris@17: echo '|'.PHP_EOL; Chris@17: }//end for Chris@17: Chris@17: echo str_repeat('-', 100).PHP_EOL.PHP_EOL; Chris@17: Chris@17: }//end printCodeComparisonBlock() Chris@17: Chris@17: Chris@17: }//end class