Skip to content
Snippets Groups Projects
Commit d968d3e5 authored by Chris Smith's avatar Chris Smith
Browse files

Add support for plugin renderers to replace standard renderers

This patch is the fourth in a series aimed at making it easier for DW to allow
plugins to modify the standard handling of line-breaks.

It adds:
- new config setting 'renderer_xhtml', default value 'xhtml'
- new renderer method 'reset()' which is used by reusable renderers when used
  to render second and subsequent data. (*)

An extra step has been added to the renderer selection process.
- check $conf["renderer_$mode] for renderer name.  If it doesn't exist use $mode as
  the renderer name.

(*) It maybe that the 'document_start()' method can be used for this.  However the
current xhtml does not correctly reset itself for reuse.

darcs-hash:20080312005647-f07c6-ff2cb960c05927f5c6f3e916a364fcad470c2ce3.gz
parent 52fe2bfb
No related branches found
No related tags found
No related merge requests found
......@@ -119,6 +119,7 @@ $conf['rss_show_summary'] = 1; //Add revision summary to title? 0|1
$conf['broken_iua'] = 0; //Platform with broken ignore_user_abort (IIS+CGI) 0|1
$conf['xsendfile'] = 0; //Use X-Sendfile (1 = lighttpd, 2 = standard)
$conf['xmlrpc'] = 0; //Enable/disable XML-RPC interface
$conf['renderer_xhtml'] = 'xhtml'; //renderer to use for main page generation
//Set target to use when creating links - leave empty for same window
$conf['target']['wiki'] = '';
......
......@@ -29,6 +29,10 @@ class Doku_Renderer extends DokuWiki_Plugin {
var $entities = array();
var $interwiki = array();
// allows renderer to be used again, clean out any per-use values
function reset() {
}
function nocache() {
$this->info['cache'] = false;
}
......
......@@ -530,26 +530,10 @@ function p_sort_modes($a, $b){
function p_render($mode,$instructions,&$info){
if(is_null($instructions)) return '';
// try default renderer first:
$file = DOKU_INC."inc/parser/$mode.php";
if(@file_exists($file)){
require_once $file;
$rclass = "Doku_Renderer_$mode";
$Renderer =& p_get_renderer($mode);
if (is_null($Renderer)) return null;
if ( !class_exists($rclass) ) {
trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
msg("Renderer for $mode not valid",-1);
return null;
}
$Renderer = & new $rclass();
}else{
// Maybe a plugin is available?
$Renderer =& plugin_load('renderer',$mode);
if(is_null($Renderer)){
msg("No renderer for $mode found",-1);
return null;
}
}
$Renderer->reset();
$Renderer->smileys = getSmileys();
$Renderer->entities = getEntities();
......@@ -572,6 +556,35 @@ function p_render($mode,$instructions,&$info){
return $Renderer->doc;
}
function & p_get_renderer($mode) {
global $conf;
$rname = !empty($conf['renderer_'.$mode]) ? $conf['renderer_'.$mode] : $mode;
// try default renderer first:
$file = DOKU_INC."inc/parser/$rname.php";
if(@file_exists($file)){
require_once $file;
$rclass = "Doku_Renderer_$rname";
if ( !class_exists($rclass) ) {
trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
msg("Renderer '$rname' for $mode not valid",-1);
return null;
}
$Renderer = & new $rclass();
}else{
// Maybe a plugin is available?
$Renderer =& plugin_load('renderer',$rname);
if(is_null($Renderer)){
msg("No renderer '$rname' found for mode '$mode'",-1);
return null;
}
}
return $Renderer;
}
/**
* Gets the first heading from a file
*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment