13d491f75SAndreas Gohr<?php 23d491f75SAndreas Gohr/** 33d491f75SAndreas Gohr * A simple renderer that allows downloading of code and file snippets 43d491f75SAndreas Gohr * 53d491f75SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 63d491f75SAndreas Gohr */ 73d491f75SAndreas Gohrif(!defined('DOKU_INC')) die('meh.'); 83d491f75SAndreas Gohrrequire_once DOKU_INC . 'inc/parser/renderer.php'; 93d491f75SAndreas Gohr 103d491f75SAndreas Gohrclass Doku_Renderer_code extends Doku_Renderer { 113d491f75SAndreas Gohr var $_codeblock=0; 123d491f75SAndreas Gohr 133d491f75SAndreas Gohr /** 143d491f75SAndreas Gohr * Send the wanted code block to the browser 153d491f75SAndreas Gohr * 163d491f75SAndreas Gohr * When the correct block was found it exits the script. 173d491f75SAndreas Gohr */ 18*0ea51e63SMatt Perry function code($text, $language = null, $filename='' ) { 19f0859d4bSTom N Harris global $INPUT; 203d491f75SAndreas Gohr if(!$language) $language = 'txt'; 213d491f75SAndreas Gohr if(!$filename) $filename = 'snippet.'.$language; 223009a773SAndreas Gohr $filename = utf8_basename($filename); 232d3f0c16SAndreas Gohr $filename = utf8_stripspecials($filename, '_'); 243d491f75SAndreas Gohr 25f0859d4bSTom N Harris if($this->_codeblock == $INPUT->str('codeblock')){ 263d491f75SAndreas Gohr header("Content-Type: text/plain; charset=utf-8"); 273d491f75SAndreas Gohr header("Content-Disposition: attachment; filename=$filename"); 283d491f75SAndreas Gohr header("X-Robots-Tag: noindex"); 293d491f75SAndreas Gohr echo trim($text,"\r\n"); 303d491f75SAndreas Gohr exit; 313d491f75SAndreas Gohr } 323d491f75SAndreas Gohr 333d491f75SAndreas Gohr $this->_codeblock++; 343d491f75SAndreas Gohr } 353d491f75SAndreas Gohr 363d491f75SAndreas Gohr /** 373d491f75SAndreas Gohr * Wraps around code() 383d491f75SAndreas Gohr */ 39*0ea51e63SMatt Perry function file($text, $language = null, $filename='') { 40f9d4952bSAndreas Gohr $this->code($text, $language, $filename); 413d491f75SAndreas Gohr } 423d491f75SAndreas Gohr 433d491f75SAndreas Gohr /** 443d491f75SAndreas Gohr * This should never be reached, if it is send a 404 453d491f75SAndreas Gohr */ 463d491f75SAndreas Gohr function document_end() { 479d2e1be6SAndreas Gohr http_status(404); 483d491f75SAndreas Gohr echo '404 - Not found'; 493d491f75SAndreas Gohr exit; 503d491f75SAndreas Gohr } 513d491f75SAndreas Gohr 523d491f75SAndreas Gohr /** 533d491f75SAndreas Gohr * Return the format of the renderer 543d491f75SAndreas Gohr * 553d491f75SAndreas Gohr * @returns string 'code' 563d491f75SAndreas Gohr */ 573d491f75SAndreas Gohr function getFormat(){ 583d491f75SAndreas Gohr return 'code'; 593d491f75SAndreas Gohr } 603d491f75SAndreas Gohr} 61