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