summaryrefslogtreecommitdiff
path: root/inc/parser/xhtml.php
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2009-07-26 19:51:58 +0200
committerAndreas Gohr <andi@splitbrain.org>2009-07-26 19:51:58 +0200
commit3d491f758802dd2376dddd5d001765b940b08743 (patch)
treea9b27250e2e19c33ad52c63e1e642924be03b5bc /inc/parser/xhtml.php
parenta6783fdb13cb5cc9b0225cb1ea1ac8c028a775da (diff)
downloadrpg-3d491f758802dd2376dddd5d001765b940b08743.tar.gz
rpg-3d491f758802dd2376dddd5d001765b940b08743.tar.bz2
enhanced <code> and <file> syntax
Ignore-this: 80398f84222bec1fce56eee8f107d37a This patch enhances the code and file syntax with several new features. 1. code and file are now essentially the same and just differ in the class name. This means you now can use the file syntax with syntax highlighting as well. This also solves problems where the code to highlight already contains a <code> tag (FS#1493) 2. a filename can be given as label for the code or file block. It is specified as second parameter after the language: <code html myfile.html>...</code> If no highlighting is wanted, but a filename shall be given, you can use a dash as language: <code - somefile.foo>...</code> 3. when a filename was given (as shown above), the label links to a download of the code given in the code/file block. This is made possible by a new renderer in inc/parser/code.php. The basename of given filename is suggested as filename when downloading. darcs-hash:20090726175158-7ad00-969641a06ae1393a6d99207c3cd938fb67f23a71.gz
Diffstat (limited to 'inc/parser/xhtml.php')
-rw-r--r--inc/parser/xhtml.php47
1 files changed, 38 insertions, 9 deletions
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index 5a1c1893b..3137281e7 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -36,7 +36,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
var $node = array(0,0,0,0,0);
var $store = '';
- var $_counter = array(); // used as global counter, introduced for table classes
+ var $_counter = array(); // used as global counter, introduced for table classes
+ var $_codeblock = 0; // counts the code and file blocks, used to provide download links
function getFormat(){
return 'xhtml';
@@ -358,11 +359,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
}
function preformatted($text) {
- $this->doc .= '<pre class="code">' . trim($this->_xmlEntities($text),"\n\r") . '</pre>'. DOKU_LF;
+ $this->doc .= '<pre class="code">' . trim($this->_xmlEntities($text)) . '</pre>'. DOKU_LF;
}
function file($text) {
- $this->doc .= '<pre class="file">' . trim($this->_xmlEntities($text),"\n\r"). '</pre>'. DOKU_LF;
+ $this->doc .= '<pre class="file">' . trim($this->_xmlEntities($text)). '</pre>'. DOKU_LF;
}
function quote_open() {
@@ -373,21 +374,49 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$this->doc .= '</div></blockquote>'.DOKU_LF;
}
+ function preformatted($text) {
+ $this->doc .= '<pre class="'.$class.'">' . trim($this->_xmlEntities($text)) . '</pre>'. DOKU_LF;
+ }
+
+ function file($text, $language=null, $filename=null) {
+ $this->_highlight('file',$text,$language,$filename);
+ }
+
+ function code($text, $language=null, $filename=null) {
+ $this->_highlight('code',$text,$language,$filename);
+ }
+
/**
- * Callback for code text
- *
- * Uses GeSHi to highlight language syntax
+ * Use GeSHi to highlight language syntax in code and file blocks
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
- function code($text, $language = NULL) {
+ function _highlight($type, $text, $language=null, $filename=null) {
global $conf;
+ global $ID;
+ global $lang;
+
+ if($filename){
+ $this->doc .= '<dl class="'.$type.'">'.DOKU_LF;
+ $this->doc .= '<dt><a href="'.exportlink($ID,'code',array('codeblock'=>$this->_codeblock)).'" title="'.$lang['download'].'">';
+ $this->doc .= hsc($filename);
+ $this->doc .= '</a></dt>'.DOKU_LF.'<dd>';
+ }
if ( is_null($language) ) {
- $this->preformatted($text);
+ $this->doc .= '<pre class="'.$type.'">'.$this->_xmlEntities($text).'</pre>'.DOKU_LF;
} else {
- $this->doc .= p_xhtml_cached_geshi($text, $language);
+ $class = 'code'; //we always need the code class to make the syntax highlighting apply
+ if($type != 'code') $class .= ' '.$type;
+
+ $this->doc .= "<pre class=\"$class $language\">".p_xhtml_cached_geshi($text, $language, '').'</pre>'.DOKU_LF;
+ }
+
+ if($filename){
+ $this->doc .= '</dd></dl>'.DOKU_LF;
}
+
+ $this->_codeblock++;
}
function acronym($acronym) {