Chris@4: Chris@4: * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600) Chris@4: * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence Chris@4: */ Chris@4: Chris@4: namespace PHP_CodeSniffer\Generators; Chris@4: Chris@4: use PHP_CodeSniffer\Config; Chris@4: Chris@4: class HTML extends Generator Chris@4: { Chris@4: Chris@4: Chris@4: /** Chris@4: * Generates the documentation for a standard. Chris@4: * Chris@4: * @return void Chris@4: * @see processSniff() Chris@4: */ Chris@4: public function generate() Chris@4: { Chris@4: ob_start(); Chris@4: $this->printHeader(); Chris@4: $this->printToc(); Chris@4: Chris@4: foreach ($this->docFiles as $file) { Chris@4: $doc = new \DOMDocument(); Chris@4: $doc->load($file); Chris@4: $documentation = $doc->getElementsByTagName('documentation')->item(0); Chris@4: $this->processSniff($documentation); Chris@4: } Chris@4: Chris@4: $this->printFooter(); Chris@4: Chris@4: $content = ob_get_contents(); Chris@4: ob_end_clean(); Chris@4: Chris@4: echo $content; Chris@4: Chris@4: }//end generate() Chris@4: Chris@4: Chris@4: /** Chris@4: * Print the header of the HTML page. Chris@4: * Chris@4: * @return void Chris@4: */ Chris@4: protected function printHeader() Chris@4: { Chris@4: $standard = $this->ruleset->name; Chris@4: echo ''.PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo " $standard Coding Standards".PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo "

$standard Coding Standards

".PHP_EOL; Chris@4: Chris@4: }//end printHeader() Chris@4: Chris@4: Chris@4: /** Chris@4: * Print the table of contents for the standard. Chris@4: * Chris@4: * The TOC is just an unordered list of bookmarks to sniffs on the page. Chris@4: * Chris@4: * @return void Chris@4: */ Chris@4: protected function printToc() Chris@4: { Chris@4: echo '

Table of Contents

'.PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: Chris@4: }//end printToc() Chris@4: Chris@4: Chris@4: /** Chris@4: * Print the footer of the HTML page. Chris@4: * Chris@4: * @return void Chris@4: */ Chris@4: protected function printFooter() Chris@4: { Chris@4: // Turn off errors so we don't get timezone warnings if people Chris@4: // don't have their timezone set. Chris@4: $errorLevel = error_reporting(0); Chris@4: echo '
'; Chris@4: echo 'Documentation generated on '.date('r'); Chris@4: echo ' by PHP_CodeSniffer '.Config::VERSION.''; Chris@4: echo '
'.PHP_EOL; Chris@4: error_reporting($errorLevel); Chris@4: Chris@4: echo ' '.PHP_EOL; Chris@4: echo ''.PHP_EOL; Chris@4: Chris@4: }//end printFooter() Chris@4: Chris@4: Chris@4: /** Chris@4: * Process the documentation for a single sniff. Chris@4: * Chris@4: * @param \DOMNode $doc The DOMNode object for the sniff. Chris@4: * It represents the "documentation" tag in the XML Chris@4: * standard file. Chris@4: * Chris@4: * @return void Chris@4: */ Chris@4: public function processSniff(\DOMNode $doc) Chris@4: { Chris@4: $title = $this->getTitle($doc); Chris@4: echo ' '.PHP_EOL; Chris@4: echo "

$title

".PHP_EOL; Chris@4: Chris@4: foreach ($doc->childNodes as $node) { Chris@4: if ($node->nodeName === 'standard') { Chris@4: $this->printTextBlock($node); Chris@4: } else if ($node->nodeName === 'code_comparison') { Chris@4: $this->printCodeComparisonBlock($node); Chris@4: } Chris@4: } Chris@4: Chris@4: }//end processSniff() Chris@4: Chris@4: Chris@4: /** Chris@4: * Print a text block found in a standard. Chris@4: * Chris@4: * @param \DOMNode $node The DOMNode object for the text block. Chris@4: * Chris@4: * @return void Chris@4: */ Chris@4: protected function printTextBlock(\DOMNode $node) Chris@4: { Chris@4: $content = trim($node->nodeValue); Chris@4: $content = htmlspecialchars($content); Chris@4: Chris@4: // Allow em tags only. Chris@4: $content = str_replace('<em>', '', $content); Chris@4: $content = str_replace('</em>', '', $content); Chris@4: Chris@4: echo "

$content

".PHP_EOL; Chris@4: Chris@4: }//end printTextBlock() Chris@4: Chris@4: Chris@4: /** Chris@4: * Print a code comparison block found in a standard. Chris@4: * Chris@4: * @param \DOMNode $node The DOMNode object for the code comparison block. Chris@4: * Chris@4: * @return void Chris@4: */ Chris@4: protected function printCodeComparisonBlock(\DOMNode $node) Chris@4: { Chris@4: $codeBlocks = $node->getElementsByTagName('code'); Chris@4: Chris@4: $firstTitle = $codeBlocks->item(0)->getAttribute('title'); Chris@4: $first = trim($codeBlocks->item(0)->nodeValue); Chris@4: $first = str_replace('', $first); Chris@4: $first = str_replace(' ', ' ', $first); Chris@4: $first = str_replace('', '', $first); Chris@4: $first = str_replace('', '', $first); Chris@4: Chris@4: $secondTitle = $codeBlocks->item(1)->getAttribute('title'); Chris@4: $second = trim($codeBlocks->item(1)->nodeValue); Chris@4: $second = str_replace('', $second); Chris@4: $second = str_replace(' ', ' ', $second); Chris@4: $second = str_replace('', '', $second); Chris@4: $second = str_replace('', '', $second); Chris@4: Chris@4: echo ' '.PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo " ".PHP_EOL; Chris@4: echo " ".PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo " ".PHP_EOL; Chris@4: echo " ".PHP_EOL; Chris@4: echo ' '.PHP_EOL; Chris@4: echo '
$firstTitle$secondTitle
$first$second
'.PHP_EOL; Chris@4: Chris@4: }//end printCodeComparisonBlock() Chris@4: Chris@4: Chris@4: }//end class