annotate vendor/squizlabs/php_codesniffer/CodeSniffer/DocGenerators/Markdown.php @ 2:92f882872392

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