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: use PHP_CodeSniffer\Config; Chris@17: Chris@17: class HTML extends Generator Chris@17: { Chris@17: Chris@17: Chris@17: /** Chris@17: * Generates the documentation for a standard. Chris@17: * Chris@17: * @return void Chris@17: * @see processSniff() Chris@17: */ Chris@17: public function generate() Chris@17: { Chris@17: ob_start(); Chris@17: $this->printHeader(); Chris@17: $this->printToc(); Chris@17: Chris@17: foreach ($this->docFiles as $file) { Chris@17: $doc = new \DOMDocument(); Chris@17: $doc->load($file); Chris@17: $documentation = $doc->getElementsByTagName('documentation')->item(0); Chris@17: $this->processSniff($documentation); Chris@17: } Chris@17: Chris@17: $this->printFooter(); Chris@17: Chris@17: $content = ob_get_contents(); Chris@17: ob_end_clean(); Chris@17: Chris@17: echo $content; Chris@17: Chris@17: }//end generate() Chris@17: Chris@17: Chris@17: /** Chris@17: * Print the header of the HTML page. Chris@17: * Chris@17: * @return void Chris@17: */ Chris@17: protected function printHeader() Chris@17: { Chris@17: $standard = $this->ruleset->name; Chris@17: echo ''.PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo " $standard Coding Standards".PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo "

$standard Coding Standards

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

Table of Contents

'.PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: Chris@17: }//end printToc() Chris@17: Chris@17: Chris@17: /** Chris@17: * Print the footer of the HTML page. Chris@17: * Chris@17: * @return void Chris@17: */ Chris@17: protected function printFooter() Chris@17: { Chris@17: // Turn off errors so we don't get timezone warnings if people Chris@17: // don't have their timezone set. Chris@17: $errorLevel = error_reporting(0); Chris@17: echo '
'; Chris@17: echo 'Documentation generated on '.date('r'); Chris@17: echo ' by PHP_CodeSniffer '.Config::VERSION.''; Chris@17: echo '
'.PHP_EOL; Chris@17: error_reporting($errorLevel); Chris@17: Chris@17: echo ' '.PHP_EOL; Chris@17: echo ''.PHP_EOL; Chris@17: Chris@17: }//end printFooter() 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: $title = $this->getTitle($doc); Chris@17: echo ' '.PHP_EOL; Chris@17: echo "

$title

".PHP_EOL; 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: * 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: $content = trim($node->nodeValue); Chris@17: $content = htmlspecialchars($content); Chris@17: Chris@17: // Allow em tags only. Chris@17: $content = str_replace('<em>', '', $content); Chris@17: $content = str_replace('</em>', '', $content); Chris@17: Chris@17: echo "

$content

".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: Chris@17: $firstTitle = $codeBlocks->item(0)->getAttribute('title'); Chris@17: $first = trim($codeBlocks->item(0)->nodeValue); Chris@17: $first = str_replace('', $first); Chris@17: $first = str_replace(' ', ' ', $first); Chris@17: $first = str_replace('', '', $first); Chris@17: $first = str_replace('', '', $first); Chris@17: Chris@17: $secondTitle = $codeBlocks->item(1)->getAttribute('title'); Chris@17: $second = trim($codeBlocks->item(1)->nodeValue); Chris@17: $second = str_replace('', $second); Chris@17: $second = str_replace(' ', ' ', $second); Chris@17: $second = str_replace('', '', $second); Chris@17: $second = str_replace('', '', $second); Chris@17: Chris@17: echo ' '.PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo " ".PHP_EOL; Chris@17: echo " ".PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo " ".PHP_EOL; Chris@17: echo " ".PHP_EOL; Chris@17: echo ' '.PHP_EOL; Chris@17: echo '
$firstTitle$secondTitle
$first$second
'.PHP_EOL; Chris@17: Chris@17: }//end printCodeComparisonBlock() Chris@17: Chris@17: Chris@17: }//end class