1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- /**
- * A simple renderer that allows downloading of code and file snippets
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- class Doku_Renderer_code extends Doku_Renderer {
- protected $_codeblock = 0;
- /**
- * Send the wanted code block to the browser
- *
- * When the correct block was found it exits the script.
- *
- * @param string $text
- * @param string $language
- * @param string $filename
- */
- public function code($text, $language = null, $filename = '') {
- global $INPUT;
- if(!$language) $language = 'txt';
- $language = preg_replace(PREG_PATTERN_VALID_LANGUAGE, '', $language);
- if(!$filename) $filename = 'snippet.'.$language;
- $filename = \dokuwiki\Utf8\PhpString::basename($filename);
- $filename = \dokuwiki\Utf8\Clean::stripspecials($filename, '_');
- // send CRLF to Windows clients
- if(strpos($INPUT->server->str('HTTP_USER_AGENT'), 'Windows') !== false) {
- $text = str_replace("\n", "\r\n", $text);
- }
- if($this->_codeblock == $INPUT->str('codeblock')) {
- header("Content-Type: text/plain; charset=utf-8");
- header("Content-Disposition: attachment; filename=$filename");
- header("X-Robots-Tag: noindex");
- echo trim($text, "\r\n");
- exit;
- }
- $this->_codeblock++;
- }
- /**
- * Wraps around code()
- *
- * @param string $text
- * @param string $language
- * @param string $filename
- */
- public function file($text, $language = null, $filename = '') {
- $this->code($text, $language, $filename);
- }
- /**
- * This should never be reached, if it is send a 404
- */
- public function document_end() {
- http_status(404);
- echo '404 - Not found';
- exit;
- }
- /**
- * Return the format of the renderer
- *
- * @returns string 'code'
- */
- public function getFormat() {
- return 'code';
- }
- }
|