xref: /dokuwiki/inc/parser/code.php (revision 9d2e1be699d573eebda922cf67f030d3d2aa462d)
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