annotate vendor/squizlabs/php_codesniffer/src/Generators/Markdown.php @ 4:a9cd425dd02b

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