diff options
-rw-r--r-- | inc/parserutils.php | 34 | ||||
-rw-r--r-- | inc/pluginutils.php | 18 |
2 files changed, 27 insertions, 25 deletions
diff --git a/inc/parserutils.php b/inc/parserutils.php index 2c38e88a0..b5dbce4dd 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -513,25 +513,27 @@ function p_sort_modes($a, $b){ function p_render($mode,$instructions,& $info){ if(is_null($instructions)) return ''; - // Create the renderer - $file = DOKU_INC.'lib/plugins/'.$mode.'/renderer.php'; - if(!@file_exists($file)){ - $file = DOKU_INC."inc/parser/$mode.php"; - } - if(!@file_exists($file)){ - msg("No renderer for $mode found",-1); - return null; - } - require_once $file; + // try default renderer first: + $file = DOKU_INC."inc/parser/$mode.php"; + if(@file_exists($file)){ + require_once $file; + $rclass = "Doku_Renderer_$mode"; - $rclass = "Doku_Renderer_$mode"; - if ( !class_exists($rclass) ) { - trigger_error("Unable to resolve render class $rclass",E_USER_WARNING); - msg("Renderer for $mode not valid",-1); - 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 = & new $rclass(); #FIXME any way to check for class existance? $Renderer->smileys = getSmileys(); $Renderer->entities = getEntities(); diff --git a/inc/pluginutils.php b/inc/pluginutils.php index 183e22229..8e0d686b6 100644 --- a/inc/pluginutils.php +++ b/inc/pluginutils.php @@ -5,18 +5,18 @@ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Andreas Gohr <andi@splitbrain.org> */ - + // plugin related constants if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); -$plugin_types = array('admin','syntax','action'); - +$plugin_types = array('admin','syntax','action','renderer'); + /** * Returns a list of available plugins of given type * - * @param $type string, plugin_type name; - * the type of plugin to return, + * @param $type string, plugin_type name; + * the type of plugin to return, * use empty string for all types - * @param $all bool; + * @param $all bool; * false to only return enabled plugins, * true to return both enabled and disabled plugins * @@ -30,9 +30,9 @@ function plugin_list($type='',$all=false){ while (false !== ($plugin = readdir($dh))) { if ($plugin == '.' || $plugin == '..' || $plugin == 'tmp') continue; if (is_file(DOKU_PLUGIN.$plugin)) continue; - - // if required, skip disabled plugins - if (!$all && plugin_isdisabled($plugin)) continue; + + // if required, skip disabled plugins + if (!$all && plugin_isdisabled($plugin)) continue; if ($type=='' || @file_exists(DOKU_PLUGIN."$plugin/$type.php")){ $plugins[] = $plugin; |