Example #1
0
 /**
  * The main method of the Plugin
  *
  * @param	string		$content: The PlugIn content
  * @param	array		$conf: The PlugIn configuration
  * @return	The content that is displayed on the website
  */
 function main($content, $config)
 {
     // get content
     $this->pi_initPIflexForm();
     $config['content.']['lang'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'cLang', 'sVIEW');
     $config['content.']['code'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'cCode', 'sVIEW');
     $config['content.']['highlight'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'cHighlight', 'sOPTIONS');
     $config['content.']['startnumber'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'cStartnumber', 'sOPTIONS');
     // init geshi library
     $this->geshi = new GeSHi($config['content.']['code'], $config['content.']['lang']);
     // defaults
     $this->geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);
     // set highlighted lines
     if ($config['content.']['highlight'] !== '') {
         $this->geshi->highlight_lines_extra(split(',', $config['content.']['highlight']));
     }
     // set startnumber
     if (isset($config['content.']['startnumber'])) {
         $this->geshi->start_line_numbers_at($config['content.']['startnumber']);
     }
     // style
     if (isset($config['default.'])) {
         $this->_styleSubjects($config['default.']);
     }
     if (isset($config[$config['content.']['lang'] . '.'])) {
         $this->_styleSubjects($config[$config['content.']['lang'] . '.']);
     }
     // external stylesheets
     if (isset($config['global.']['external']) && $config['global.']['external'] == 0) {
         // do not use external style sheets
     } else {
         // mtness.net modification: I love stylesheets!
         $this->geshi->enable_classes();
         // Echo out the stylesheet for this code block And continue echoing the page
         $this->geshiCSS = '<style type="text/css"><!--' . $this->geshi->get_stylesheet() . '--></style>';
         // additional headerdata to include the styles
         $GLOBALS['TSFE']->additionalHeaderData['dev_null_geshi:' . $config['content.']['lang']] = $this->geshiCSS;
     }
     // xhtml compliance
     if (isset($config['global.']['xhtmlcompliant']) && $config['global.']['xhtmlcompliant'] == 1) {
         $this->geshi->set_xhtml_compliance(true);
     }
     // check for errors
     if ($this->geshi->error() !== false) {
         // log an error, this happens if the language file is missing or non-readable. Other input
         // specific errors can also occour, eg. if a non-existing container type is set for the engine.
         $GLOBALS['BE_USER']->simplelog($this->geshi->error(), $extKey = 'dev_null_geshi', 1);
     }
     // render
     return $this->pi_wrapInBaseClass($this->geshi->parse_code());
 }
	protected function formatCodeBlocks($source){
		return preg_replace_callback('/<code>([\s\S]*?)<\/code>/', function($matches){
			$geshi = new GeSHi($matches[1], 'javascript');
			$geshi->enable_classes();
			return $geshi->parse_code();
		}, $source);
	}
Example #3
0
 public function codeReplace($text)
 {
     // check if geshi available
     $geshiPath = dirname(__FILE__) . '/../vendor/geshi/geshi.php';
     if (!file_exists($geshiPath)) {
         return $text;
     }
     $regexp = '@<code class="(\\w+)">(.+?)<\\/code>@s';
     // replace codes
     if (preg_match_all($regexp, $text, $found)) {
         require_once $geshiPath;
         for ($index = 0; $index < count($found) - 1; $index++) {
             if (!isset($found[1][$index])) {
                 continue;
             }
             $language = $found[1][$index];
             $code = trim($found[2][$index]);
             $geshi = new GeSHi($code, $language);
             $geshi->set_header_type(GESHI_HEADER_NONE);
             $geshi->enable_classes();
             $geshi->set_tab_width(2);
             $geshi->enable_keyword_links(false);
             if (in_array($language, array('php', 'css', 'shell', 'ruby', 'python', 'bash', 'sql')) && String::numberOfLines($code) > 5) {
                 //$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 2);
             }
             // replace image place holders
             $text = str_replace($code, $geshi->parse_code(), $text);
         }
     }
     return $text;
 }
function source_highlighter($code)
{
    $source = str_replace(array("&gt;", "&lt;", "&quot;", "&amp;"), array(">", "<", "\"", "&"), $code[1]);
    if (false !== stristr($code[0], "[php]")) {
        $lang2geshi = "php";
    } elseif (false !== stristr($code[0], "[sql]")) {
        $lang2geshi = "sql";
    } elseif (false !== stristr($code[0], "[html]")) {
        $lang2geshi = "html4strict";
    } else {
        $lang2geshi = "txt";
    }
    $geshi = new GeSHi($source, $lang2geshi);
    $geshi->set_header_type(GESHI_HEADER_PRE_VALID);
    $geshi->set_overall_style('font: normal normal 100% monospace; color: #000066;', false);
    $geshi->set_line_style('color: #003030;', 'font-weight: bold; color: #006060;', true);
    $geshi->set_code_style('color: #000020;font-family:monospace; font-size:12px;line-height:6px;', true);
    //$geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);
    $geshi->enable_classes(false);
    $geshi->set_link_styles(GESHI_LINK, 'color: #000060;');
    $geshi->set_link_styles(GESHI_HOVER, 'background-color: #f0f000;');
    $return = "<div class=\"codetop\">CODE</div><div class=\"codemain\">\n";
    $return .= $geshi->parse_code();
    $return .= "\n</div>\n";
    return $return;
}
 function load()
 {
     if ($this->exists() == true) {
         $this->import();
         $this->lng = $this->data['language'];
         $this->source = $this->data['source'];
     } else {
         if (!class_exists('GeSHi')) {
             include_once 'classes/class.geshi.php';
         }
         global $lang;
         $language = $this->hasLanguage() ? $this->lng : 'text';
         $geshi = new GeSHi($this->source, $language, 'classes/geshi');
         $geshi->set_encoding($lang->charset());
         $geshi->enable_classes(false);
         $geshi->set_header_type(GESHI_HEADER_DIV);
         $geshi->enable_keyword_links(true);
         $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5);
         if (!$this->hasLanguage()) {
             $geshi->enable_highlighting(false);
             $geshi->set_numbers_highlighting(false);
             $geshi->set_brackets_highlighting(false);
             $language = '';
         } else {
             $language = $geshi->get_language_name();
         }
         $this->data = array('language' => $language, 'parsed' => $geshi->parse_code(), 'source' => $this->source);
         $this->export();
     }
 }
Example #6
0
 /**
  * 
  * Renders a token into text matching the requested format.
  * 
  * @access public
  * 
  * @param array $options The "options" portion of the token (second
  * element).
  * 
  * @return string The text rendered from the token options.
  * 
  */
 function token($options)
 {
     $text = $options['text'];
     $attr = $options['attr'];
     $type = strtolower($attr['type']);
     $css = $this->formatConf(' class="%s"', 'css');
     $css_code = $this->formatConf(' class="%s"', 'css_code');
     $css_php = $this->formatConf(' class="%s"', 'css_php');
     $css_html = $this->formatConf(' class="%s"', 'css_html');
     $geshi_class = path::file("plugins") . "geshi/geshi.php";
     if ($type != "" && file_exists(path::file("plugins") . "geshi/geshi.php") && is_readable(path::file("plugins") . "geshi/geshi.php")) {
         require_once path::file("plugins") . "geshi/geshi.php";
         $geshi = new GeSHi(trim($text), $type, path::file("plugins") . "geshi/geshi/");
         $geshi->set_encoding("utf-8");
         $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS, 1);
         $geshi->set_header_type(GESHI_HEADER_DIV);
         $geshi->enable_classes();
         $geshi->set_overall_class('geshi_code');
         $text = $geshi->parse_code();
         $style = $geshi->get_stylesheet();
         global $page_handler;
         $style = "<style type='text/css'>\n{$style}\n</style>";
         $page_handler->add_header_data($style);
     } else {
         //generic code example:
         //convert tabs to four spaces,
         //convert entities.
         $text = trim(htmlentities($text));
         $text = str_replace("\t", " &nbsp; &nbsp;", $text);
         $text = str_replace("  ", " &nbsp;", $text);
         $text = "<code{$css_code}>{$text}</code>";
     }
     return "\n{$text}\n\n";
 }
Example #7
0
function DoGeshi($code)
{
    $geshi = new GeSHi(trim($code), "html4strict", null);
    $geshi->set_header_type(GESHI_HEADER_NONE);
    $geshi->enable_classes();
    return "<span class=\"geshi\">" . str_replace("\n", "", $geshi->parse_code()) . "</span>";
}
Example #8
0
 function syntaxHighlight($matches)
 {
     $geshi = new GeSHi($matches[3], empty($matches[2]) ? "txt" : $matches[2]);
     $geshi->enable_classes();
     $geshi->set_overall_style("");
     // empty style
     return $geshi->parse_code();
 }
 /**
  * @param string $sContent
  * @param string $sLanguage
  * @return string
  */
 public function parseGeshi($sContent, $sLanguage, $bUseClasses = false)
 {
     $oGeshi = new \GeSHi($sContent, $sLanguage);
     if ($bUseClasses) {
         $oGeshi->enable_classes();
     }
     return $oGeshi->parse_code();
 }
function markdown_code_highlighter($code, $language, $rss = false)
{
    $code = stripslashes(trim(htmlspecialchars_decode($code, ENT_NOQUOTES)));
    $geshi = new GeSHi($code, $language);
    if ($rss == false) {
        $geshi->set_header_type(GESHI_HEADER_NONE);
        $geshi->enable_classes();
    }
    return '<pre class="lang-' . $language . '"><code>' . $geshi->parse_code() . '</code></pre>';
}
function highlight($code, $lang)
{
    if ($lang == 'php-html') {
        return smartHighlight($code);
    }
    $geshi = new GeSHi($code, $lang);
    $geshi->set_header_type(GESHI_HEADER_NONE);
    $geshi->enable_classes();
    $geshi->enable_keyword_links(false);
    $code = $geshi->parse_code();
    return '<span class="' . $lang . '">' . $code . '</span>';
}
 public function register(Application $app)
 {
     $app['geshi'] = function () use($app) {
         $geshi = new \GeSHi();
         $geshi->enable_classes();
         // this must be the first method (see Geshi doc)
         $geshi->set_encoding($app['app.charset']);
         $geshi->enable_line_numbers(GESHI_NO_LINE_NUMBERS);
         $geshi->enable_keyword_links(false);
         return $geshi;
     };
 }
Example #13
0
function handle_geshi($content, $language)
{
    $g = new GeSHi($content, $language);
    $g->enable_classes();
    $g->set_header_type(GESHI_HEADER_DIV);
    $g->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5);
    #$g->set_overall_style('color:black');
    $g->set_overall_id('source');
    $g->set_code_style('color:black;', "'Courier New', Courier, monospace");
    $g->set_line_style('color:#838383;', '', true);
    return $g->parse_code();
}
 protected function callGeshi($text, $language)
 {
     if ($language == 'html') {
         $language = 'html4strict';
     }
     $text = html_entity_decode($text);
     $geshi = new GeSHi($text, $language);
     $geshi->enable_classes();
     // disable links on PHP functions, HTML tags, ...
     $geshi->enable_keyword_links(false);
     $ret = @$geshi->parse_code();
     //fix extra space at bottom
     return str_replace("&nbsp;</pre>", "</pre>", $ret);
 }
Example #15
0
 function code_callback($matches)
 {
     $index = (int) $matches[1];
     $lang = $this->saved_code[$index]['lang'];
     $code = $this->saved_code[$index]['code'];
     // for prevent memory leaks
     unset($this->saved_code[$index]);
     // translate some language names so that simpler names can be used
     ${$lang} = strtr($lang, array('html' => 'html4strict', 'php' => 'php-brief'));
     // if we get HTML for example, it's already encoded
     $geshi = new GeSHi(htmlspecialchars_decode(trim($code, " \t\n\r\v�"), ENT_QUOTES), $lang);
     $geshi->enable_classes();
     $geshi->set_overall_class('code');
     return $geshi->parse_code();
 }
Example #16
0
function highlight_sql_query($sql)
{
    require_once 'classes/class.geshi.php';
    $path = 'classes/geshi';
    $language = 'mysql';
    if (!file_exists($path . '/' . $language . '.php')) {
        $language = 'sql';
        if (!file_exists($path . '/' . $language . '.php')) {
            return null;
        }
    }
    $geshi = new GeSHi($sql, $language, $path);
    $geshi->enable_classes(false);
    $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5);
    return $geshi->parse_code();
}
Example #17
0
 private function highlight(&$text, $lang = 'php', $lines = false)
 {
     $geshi = new GeSHi(trim($text, "\r\n"), $lang);
     $geshi->enable_classes();
     $geshi->set_header_type(GESHI_HEADER_PRE);
     $geshi->set_overall_class("code");
     $geshi->set_encoding("utf-8");
     // [[mw:user:Brianegge]] suggestion
     $geshi->set_overall_style('background: #EEEEEE; border: padding: 0.2em');
     if ($lines == true or $lines == 1 or $lines == '1') {
         $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS);
     } else {
         $geshi->enable_line_numbers(GESHI_NO_LINE_NUMBERS);
     }
     return "<style>" . $geshi->get_stylesheet() . "</style>" . $geshi->parse_code();
 }
Example #18
0
function bbcodeCodeHighlight($contents, $arg)
{
    include_once "geshi.php";
    if (!$arg) {
        return '<div class="codeblock">' . htmlentities($contents) . '</div>';
    } else {
        $language = $arg;
        $geshi = new GeSHi(trim($contents), $language, null);
        $geshi->set_header_type(GESHI_HEADER_NONE);
        $geshi->enable_classes();
        $geshi->enable_keyword_links(false);
        $code = str_replace("\n", "", $geshi->parse_code());
        $code = decodeCrapEntities($code);
        return "<div class=\"codeblock geshi\">{$code}</div>";
    }
}
Example #19
0
 /**
  * filter
  *
  * @param string $text 
  * @return string
  */
 public function filter($text)
 {
     return preg_replace_callback(self::$regex, function ($matches) {
         if (isset($matches[1]) && isset($matches[2])) {
             //we have a #lang attribute in our <code />
             $language = trim($matches[1], "#\n");
             $code = html_entity_decode(trim($matches[2], "\n"));
             $geshi = new \GeSHi($code, $language);
             $geshi->set_header_type(GESHI_HEADER_PRE_VALID);
             $geshi->set_overall_class('highlighted');
             $geshi->enable_classes();
             return $geshi->parse_code();
         }
         return $matches[0];
         //for some reason this went wrong
     }, $text);
 }
Example #20
0
function source_highlighter($source, $lang2geshi)
{
    require_once 'geshi/geshi.php';
    $source = str_replace(array("&#039;", "&gt;", "&lt;", "&quot;", "&amp;"), array("'", ">", "<", "\"", "&"), $source);
    $lang2geshi = $lang2geshi == 'html' ? 'html4strict' : $lang2geshi;
    $geshi = new GeSHi($source, $lang2geshi);
    $geshi->set_header_type(GESHI_HEADER_PRE_VALID);
    $geshi->set_overall_style('font: normal normal 100% monospace; color: #000066;', false);
    $geshi->set_line_style('color: #003030;', 'font-weight: bold; color: #006060;', true);
    $geshi->set_code_style('color: #000020;font-family:monospace; font-size:12px;line-height:13px;', true);
    $geshi->enable_classes(false);
    $geshi->set_link_styles(GESHI_LINK, 'color: #000060;');
    $geshi->set_link_styles(GESHI_HOVER, 'background-color: #f0f000;');
    $return = "<div class=\"codetop\">Code</div><div class=\"codemain\">\n";
    $return .= $geshi->parse_code();
    $return .= "\n</div>\n";
    return $return;
}
Example #21
0
function bbcode_highlite($s, $language = false)
{
    $s = base64_decode($s);
    if (!$language) {
        return '<code>' . htmlspecialchars($s, ENT_COMPAT, 'UTF-8') . '</code>';
    }
    $geshi = new GeSHi($s, $language);
    $geshi->enable_classes(true);
    $geshi->set_header_type(GESHI_HEADER_DIV);
    $geshi->enable_keyword_links(false);
    $geshi->set_tab_width(4);
    $output = $geshi->parse_code();
    if ($geshi->error()) {
        return false;
    }
    head('stylesheet', 'geshi/' . $language, 'screen');
    return '<div class="geshi">' . $output . '</div>';
}
Example #22
0
 function highlight($code, $lang, $path)
 {
     if (empty($lang)) {
         $lang = 'c';
     }
     $geshi = new GeSHi($code, $lang);
     $geshi->enable_classes();
     $geshi->set_overall_class('highlight');
     $geshi->set_header_type(GESHI_HEADER_NONE);
     /* Now this feature works, maybe activate it? */
     /* $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 1); */
     $result = $geshi->parse_code();
     /* This thing fixes styles when line numbers are disabled */
     $result = '<div class="highlight ' . $lang . '">' . $result . '</div>';
     if ($geshi->error()) {
         $result = $code;
     }
     return $result;
 }
Example #23
0
function bbcodeCodeHighlight($dom, $contents, $arg)
{
    // in <pre> style
    $contents = preg_replace('/^\\n|\\n$/', "", $contents);
    include_once "geshi.php";
    if (!$arg) {
        $div = $dom->createElement('div');
        $div->setAttribute('class', 'codeblock');
        $div->appendChild($dom->createTextNode($contents));
        return $div;
    } else {
        $language = $arg;
        $geshi = new GeSHi($contents, $language);
        $geshi->set_header_type(GESHI_HEADER_NONE);
        $geshi->enable_classes();
        $geshi->enable_keyword_links(false);
        $code = str_replace("\n", "", $geshi->parse_code());
        return markupToMarkup($dom, "<div class=\"codeblock geshi\">{$code}</div>");
    }
}
 function onParseContentBlock($page, $name, $text, $shortcut)
 {
     $output = NULL;
     if (!empty($name) && !$shortcut) {
         list($language, $lineNumber, $class, $id) = $this->getHighlightInfo($name);
         if (!empty($language)) {
             $geshi = new GeSHi(trim($text), $language);
             $geshi->set_language_path($this->yellow->config->get("pluginDir") . "/highlight/");
             $geshi->set_header_type(GESHI_HEADER_PRE_TABLE);
             $geshi->set_overall_class($class);
             $geshi->set_overall_id($id);
             $geshi->enable_line_numbers($lineNumber ? GESHI_NORMAL_LINE_NUMBERS : GESHI_NO_LINE_NUMBERS);
             $geshi->start_line_numbers_at($lineNumber);
             $geshi->enable_classes(true);
             $geshi->enable_keyword_links(false);
             $output = $geshi->parse_code();
             $output = preg_replace("#<pre(.*?)>(.+?)</pre>#s", "<pre\$1><code>\$2</code></pre>", $output);
         }
     }
     return $output;
 }
Example #25
0
 protected function formatGeshiCode(array $matches)
 {
     $code = $matches[2];
     $language = $matches[1];
     $cacheKey = md5($code . $language);
     if ($this->getOption('use_cache') && ($cache = $this->cacheManager->getCache('markdown')->get($cacheKey))) {
         return $cache;
     }
     $code = html_entity_decode($code);
     require_once dmOs::join(sfConfig::get('sf_lib_dir'), 'vendor/geshi/geshi.php');
     $geshi = new GeSHi($code, $language);
     $geshi->enable_classes();
     $html = $geshi->parse_code();
     $html = dmString::str_replace_once('>&nbsp;', '>', $html);
     $html = dmString::str_replace_once("\n<span class=\"kw2\">&lt;?php</span>", '', $html);
     $html = dmString::str_replace_once("\n", '', $html);
     $html = dmString::str_replace_once('  ', '', $html);
     if ($this->getOption('use_cache')) {
         $this->cacheManager->getCache('markdown')->set($cacheKey, $html);
     }
     return $html;
 }
Example #26
0
function pretty_file($file, $language, $startline = 0, $endline = 0, $number = false)
{
    if (!$file) {
        return false;
    }
    $s = read_file($file, $startline, $endline);
    if (!$s) {
        return false;
    }
    if (!$language) {
        return $s;
    }
    $output = false;
    switch ($language) {
        case 'plain':
            $s = preg_replace("/\\]\\=\\>\n(\\s+)/m", "] => ", $s);
            $s = htmlentities($s, ENT_COMPAT, 'UTF-8');
            $output = '<pre class="plain">' . PHP_EOL . $s . '</pre>' . PHP_EOL;
            break;
        default:
            $geshi = new GeSHi($s, $language);
            $geshi->enable_classes(true);
            $geshi->set_header_type(GESHI_HEADER_DIV);
            if ($number) {
                $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);
                $geshi->start_line_numbers_at($startline > 0 ? $startline : 1);
            }
            $geshi->enable_keyword_links(false);
            $geshi->set_tab_width(4);
            //			echo '<pre>' . PHP_EOL .$geshi->get_stylesheet( ). '</pre>' . PHP_EOL;
            $output = $geshi->parse_code();
            if ($geshi->error()) {
                return false;
            }
    }
    return $output;
}
/**
 * User handler for code block
 *
 * @param TexyHandlerInvocation  handler invocation
 * @param string  block type
 * @param string  text to highlight
 * @param string  language
 * @param TexyModifier modifier
 * @return TexyHtml
 */
function blockHandler($invocation, $blocktype, $content, $lang, $modifier)
{
    if ($blocktype !== 'block/code') {
        return $invocation->proceed();
    }
    $texy = $invocation->getTexy();
    global $geshiPath;
    if ($lang == 'html') {
        $lang = 'html4strict';
    }
    $content = Texy::outdent($content);
    $geshi = new GeSHi($content, $lang, $geshiPath . 'geshi/');
    // GeSHi could not find the language
    if ($geshi->error) {
        return $invocation->proceed();
    }
    // do syntax-highlighting
    $geshi->set_encoding('UTF-8');
    $geshi->set_header_type(GESHI_HEADER_PRE);
    $geshi->enable_classes();
    $geshi->set_overall_style('color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', true);
    $geshi->set_line_style('font: normal normal 95% \'Courier New\', Courier, monospace; color: #003030;', 'font-weight: bold; color: #006060;', true);
    $geshi->set_code_style('color: #000020;', 'color: #000020;');
    $geshi->set_link_styles(GESHI_LINK, 'color: #000060;');
    $geshi->set_link_styles(GESHI_HOVER, 'background-color: #f0f000;');
    // save generated stylesheet
    $texy->styleSheet .= $geshi->get_stylesheet();
    $content = $geshi->parse_code();
    // check buggy GESHI, it sometimes produce not UTF-8 valid code :-((
    $content = iconv('UTF-8', 'UTF-8//IGNORE', $content);
    // protect output is in HTML
    $content = $texy->protect($content, Texy::CONTENT_BLOCK);
    $el = TexyHtml::el();
    $el->setText($content);
    return $el;
}
Example #28
0
/**
 * Wrapper for GeSHi Code Highlighter, provides caching of its output
 *
 * @param  string   $code       source code to be highlighted
 * @param  string   $language   language to provide highlighting
 * @param  string   $wrapper    html element to wrap the returned highlighted text
 *
 * @author Christopher Smith <*****@*****.**>
 * @author Andreas Gohr <*****@*****.**>
 */
function p_xhtml_cached_geshi($code, $language, $wrapper = 'pre')
{
    global $conf, $config_cascade, $INPUT;
    $language = strtolower($language);
    // remove any leading or trailing blank lines
    $code = preg_replace('/^\\s*?\\n|\\s*?\\n$/', '', $code);
    $cache = getCacheName($language . $code, ".code");
    $ctime = @filemtime($cache);
    if ($ctime && !$INPUT->bool('purge') && $ctime > filemtime(DOKU_INC . 'inc/geshi.php') && $ctime > @filemtime(DOKU_INC . 'inc/geshi/' . $language . '.php') && $ctime > filemtime(reset($config_cascade['main']['default']))) {
        // dokuwiki changed
        $highlighted_code = io_readFile($cache, false);
    } else {
        $geshi = new GeSHi($code, $language, DOKU_INC . 'inc/geshi');
        $geshi->set_encoding('utf-8');
        $geshi->enable_classes();
        $geshi->set_header_type(GESHI_HEADER_PRE);
        $geshi->set_link_target($conf['target']['extern']);
        // remove GeSHi's wrapper element (we'll replace it with our own later)
        // we need to use a GeSHi wrapper to avoid <BR> throughout the highlighted text
        $highlighted_code = trim(preg_replace('!^<pre[^>]*>|</pre>$!', '', $geshi->parse_code()), "\n\r");
        io_saveFile($cache, $highlighted_code);
    }
    // add a wrapper element if required
    if ($wrapper) {
        return "<{$wrapper} class=\"code {$language}\">{$highlighted_code}</{$wrapper}>";
    } else {
        return $highlighted_code;
    }
}
Example #29
0
/**
 * Wrapper for GeSHi Code Highlighter, provides caching of its output
 *
 * @author Christopher Smith <*****@*****.**>
 */
function p_xhtml_cached_geshi($code, $language)
{
    $cache = getCacheName($language . $code, ".code");
    if (@file_exists($cache) && !$_REQUEST['purge'] && filemtime($cache) > filemtime(DOKU_INC . 'inc/geshi.php')) {
        $highlighted_code = io_readFile($cache, false);
        @touch($cache);
    } else {
        require_once DOKU_INC . 'inc/geshi.php';
        $geshi = new GeSHi($code, strtolower($language), DOKU_INC . 'inc/geshi');
        $geshi->set_encoding('utf-8');
        $geshi->enable_classes();
        $geshi->set_header_type(GESHI_HEADER_PRE);
        $geshi->set_overall_class("code {$language}");
        $geshi->set_link_target($conf['target']['extern']);
        $highlighted_code = $geshi->parse_code();
        io_saveFile($cache, $highlighted_code);
    }
    return $highlighted_code;
}
Example #30
0
    $sourcecode['source'] = html_entity_decode($sourcecode['source'], ENT_QUOTES);
    ($code = $plugins->load('popup_hlcode_start')) ? eval($code) : null;
    if ($_GET['temp'] == 1) {
        viscacha_header('Content-Type: text/plain');
        viscacha_header('Content-Length: ' . strlen($sourcecode['source']));
        viscacha_header('Content-Disposition: attachment; filename="' . date('d-m-Y_H-i') . '.txt"');
        echo $sourcecode['source'];
        $slog->updatelogged();
        $db->close();
        exit;
    } else {
        require_once 'classes/class.geshi.php';
        $geshi = new GeSHi($sourcecode['source'], strtolower($sourcecode['language']), 'classes/geshi');
        $geshi->set_encoding($lang->phrase('charset'));
        // Use classes for colouring
        $geshi->enable_classes();
        // Output in a div instead in a pre-element
        $geshi->set_header_type(GESHI_HEADER_DIV);
        // Linenumbers on  - each 5th element is bold
        $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5);
        $lang_name = $geshi->get_language_name();
        // Print Stylesheet
        $htmlhead .= '<style type="text/css"><!-- ' . $geshi->get_stylesheet() . ' --></style>';
        echo $tpl->parse("popup/header");
        ($code = $plugins->load('popup_hlcode_initialized')) ? eval($code) : null;
        $sourcecode['hl'] = $geshi->parse_code();
        echo $tpl->parse("popup/hlcode");
        ($code = $plugins->load('popup_hlcode_end')) ? eval($code) : null;
    }
} elseif ($_GET['action'] == "filetypes") {
    ($code = $plugins->load('popup_filetypes_query')) ? eval($code) : null;