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 */ 183d491f75SAndreas Gohr 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); 233d491f75SAndreas Gohr 24f0859d4bSTom N Harris if($this->_codeblock == $INPUT->str('codeblock')){ 253d491f75SAndreas Gohr header("Content-Type: text/plain; charset=utf-8"); 263d491f75SAndreas Gohr header("Content-Disposition: attachment; filename=$filename"); 273d491f75SAndreas Gohr header("X-Robots-Tag: noindex"); 283d491f75SAndreas Gohr echo trim($text,"\r\n"); 293d491f75SAndreas Gohr exit; 303d491f75SAndreas Gohr } 313d491f75SAndreas Gohr 323d491f75SAndreas Gohr $this->_codeblock++; 333d491f75SAndreas Gohr } 343d491f75SAndreas Gohr 353d491f75SAndreas Gohr /** 363d491f75SAndreas Gohr * Wraps around code() 373d491f75SAndreas Gohr */ 38f9d4952bSAndreas Gohr function file($text, $language = NULL, $filename='') { 39f9d4952bSAndreas Gohr $this->code($text, $language, $filename); 403d491f75SAndreas Gohr } 413d491f75SAndreas Gohr 423d491f75SAndreas Gohr /** 433d491f75SAndreas Gohr * This should never be reached, if it is send a 404 443d491f75SAndreas Gohr */ 453d491f75SAndreas Gohr function document_end() { 46*9d2e1be6SAndreas Gohr http_status(404); 473d491f75SAndreas Gohr echo '404 - Not found'; 483d491f75SAndreas Gohr exit; 493d491f75SAndreas Gohr } 503d491f75SAndreas Gohr 513d491f75SAndreas Gohr /** 523d491f75SAndreas Gohr * Return the format of the renderer 533d491f75SAndreas Gohr * 543d491f75SAndreas Gohr * @returns string 'code' 553d491f75SAndreas Gohr */ 563d491f75SAndreas Gohr function getFormat(){ 573d491f75SAndreas Gohr return 'code'; 583d491f75SAndreas Gohr } 593d491f75SAndreas Gohr} 60