diff --git a/conf/dokuwiki.php b/conf/dokuwiki.php index 9cfdb5c3bcaa3c6f938b5a0c78179e29dd55ba59..6475ff291befb9af54d1dabcabda60c79d3c5271 100644 --- a/conf/dokuwiki.php +++ b/conf/dokuwiki.php @@ -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'] = ''; diff --git a/inc/parser/renderer.php b/inc/parser/renderer.php index aa4da9dc12c3fee1a07ab67f69b7c63c2e1164cf..92bbf51fb9ba723c7c841f500fbb94d16b7a481d 100644 --- a/inc/parser/renderer.php +++ b/inc/parser/renderer.php @@ -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; } diff --git a/inc/parserutils.php b/inc/parserutils.php index c6518523914596a5c32b92004cfa99767abc33bd..d03ad8d1eac123cf605daea796d9f608c633fc73 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -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 *