annotate vendor/squizlabs/php_codesniffer/src/Generators/Markdown.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@17 1 <?php
Chris@17 2 /**
Chris@17 3 * A doc generator that outputs documentation in Markdown format.
Chris@17 4 *
Chris@17 5 * @author Stefano Kowalke <blueduck@gmx.net>
Chris@17 6 * @copyright 2014 Arroba IT
Chris@17 7 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@17 8 */
Chris@17 9
Chris@17 10 namespace PHP_CodeSniffer\Generators;
Chris@17 11
Chris@17 12 use PHP_CodeSniffer\Config;
Chris@17 13
Chris@17 14 class Markdown extends Generator
Chris@17 15 {
Chris@17 16
Chris@17 17
Chris@17 18 /**
Chris@17 19 * Generates the documentation for a standard.
Chris@17 20 *
Chris@17 21 * @return void
Chris@17 22 * @see processSniff()
Chris@17 23 */
Chris@17 24 public function generate()
Chris@17 25 {
Chris@17 26 ob_start();
Chris@17 27 $this->printHeader();
Chris@17 28
Chris@17 29 foreach ($this->docFiles as $file) {
Chris@17 30 $doc = new \DOMDocument();
Chris@17 31 $doc->load($file);
Chris@17 32 $documentation = $doc->getElementsByTagName('documentation')->item(0);
Chris@17 33 $this->processSniff($documentation);
Chris@17 34 }
Chris@17 35
Chris@17 36 $this->printFooter();
Chris@17 37 $content = ob_get_contents();
Chris@17 38 ob_end_clean();
Chris@17 39
Chris@17 40 echo $content;
Chris@17 41
Chris@17 42 }//end generate()
Chris@17 43
Chris@17 44
Chris@17 45 /**
Chris@17 46 * Print the markdown header.
Chris@17 47 *
Chris@17 48 * @return void
Chris@17 49 */
Chris@17 50 protected function printHeader()
Chris@17 51 {
Chris@17 52 $standard = $this->ruleset->name;
Chris@17 53
Chris@17 54 echo "# $standard Coding Standard".PHP_EOL;
Chris@17 55
Chris@17 56 }//end printHeader()
Chris@17 57
Chris@17 58
Chris@17 59 /**
Chris@17 60 * Print the markdown footer.
Chris@17 61 *
Chris@17 62 * @return void
Chris@17 63 */
Chris@17 64 protected function printFooter()
Chris@17 65 {
Chris@17 66 // Turn off errors so we don't get timezone warnings if people
Chris@17 67 // don't have their timezone set.
Chris@17 68 error_reporting(0);
Chris@17 69 echo 'Documentation generated on '.date('r');
Chris@17 70 echo ' by [PHP_CodeSniffer '.Config::VERSION.'](https://github.com/squizlabs/PHP_CodeSniffer)'.PHP_EOL;
Chris@17 71
Chris@17 72 }//end printFooter()
Chris@17 73
Chris@17 74
Chris@17 75 /**
Chris@17 76 * Process the documentation for a single sniff.
Chris@17 77 *
Chris@17 78 * @param \DOMNode $doc The DOMNode object for the sniff.
Chris@17 79 * It represents the "documentation" tag in the XML
Chris@17 80 * standard file.
Chris@17 81 *
Chris@17 82 * @return void
Chris@17 83 */
Chris@17 84 protected function processSniff(\DOMNode $doc)
Chris@17 85 {
Chris@17 86 $title = $this->getTitle($doc);
Chris@17 87 echo "## $title".PHP_EOL;
Chris@17 88
Chris@17 89 foreach ($doc->childNodes as $node) {
Chris@17 90 if ($node->nodeName === 'standard') {
Chris@17 91 $this->printTextBlock($node);
Chris@17 92 } else if ($node->nodeName === 'code_comparison') {
Chris@17 93 $this->printCodeComparisonBlock($node);
Chris@17 94 }
Chris@17 95 }
Chris@17 96
Chris@17 97 }//end processSniff()
Chris@17 98
Chris@17 99
Chris@17 100 /**
Chris@17 101 * Print a text block found in a standard.
Chris@17 102 *
Chris@17 103 * @param \DOMNode $node The DOMNode object for the text block.
Chris@17 104 *
Chris@17 105 * @return void
Chris@17 106 */
Chris@17 107 protected function printTextBlock(\DOMNode $node)
Chris@17 108 {
Chris@17 109 $content = trim($node->nodeValue);
Chris@17 110 $content = htmlspecialchars($content);
Chris@17 111
Chris@17 112 $content = str_replace('&lt;em&gt;', '*', $content);
Chris@17 113 $content = str_replace('&lt;/em&gt;', '*', $content);
Chris@17 114
Chris@17 115 echo $content.PHP_EOL;
Chris@17 116
Chris@17 117 }//end printTextBlock()
Chris@17 118
Chris@17 119
Chris@17 120 /**
Chris@17 121 * Print a code comparison block found in a standard.
Chris@17 122 *
Chris@17 123 * @param \DOMNode $node The DOMNode object for the code comparison block.
Chris@17 124 *
Chris@17 125 * @return void
Chris@17 126 */
Chris@17 127 protected function printCodeComparisonBlock(\DOMNode $node)
Chris@17 128 {
Chris@17 129 $codeBlocks = $node->getElementsByTagName('code');
Chris@17 130
Chris@17 131 $firstTitle = $codeBlocks->item(0)->getAttribute('title');
Chris@17 132 $first = trim($codeBlocks->item(0)->nodeValue);
Chris@17 133 $first = str_replace("\n", "\n ", $first);
Chris@17 134 $first = str_replace('<em>', '', $first);
Chris@17 135 $first = str_replace('</em>', '', $first);
Chris@17 136
Chris@17 137 $secondTitle = $codeBlocks->item(1)->getAttribute('title');
Chris@17 138 $second = trim($codeBlocks->item(1)->nodeValue);
Chris@17 139 $second = str_replace("\n", "\n ", $second);
Chris@17 140 $second = str_replace('<em>', '', $second);
Chris@17 141 $second = str_replace('</em>', '', $second);
Chris@17 142
Chris@17 143 echo ' <table>'.PHP_EOL;
Chris@17 144 echo ' <tr>'.PHP_EOL;
Chris@17 145 echo " <th>$firstTitle</th>".PHP_EOL;
Chris@17 146 echo " <th>$secondTitle</th>".PHP_EOL;
Chris@17 147 echo ' </tr>'.PHP_EOL;
Chris@17 148 echo ' <tr>'.PHP_EOL;
Chris@17 149 echo '<td>'.PHP_EOL.PHP_EOL;
Chris@17 150 echo " $first".PHP_EOL.PHP_EOL;
Chris@17 151 echo '</td>'.PHP_EOL;
Chris@17 152 echo '<td>'.PHP_EOL.PHP_EOL;
Chris@17 153 echo " $second".PHP_EOL.PHP_EOL;
Chris@17 154 echo '</td>'.PHP_EOL;
Chris@17 155 echo ' </tr>'.PHP_EOL;
Chris@17 156 echo ' </table>'.PHP_EOL;
Chris@17 157
Chris@17 158 }//end printCodeComparisonBlock()
Chris@17 159
Chris@17 160
Chris@17 161 }//end class