summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--inc/parserutils.php2
-rw-r--r--inc/pluginutils.php11
2 files changed, 9 insertions, 4 deletions
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 414e2e3d6..9f8b88cb6 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -594,7 +594,7 @@ function & p_get_renderer($mode) {
$Renderer = & new $rclass();
}else{
// Maybe a plugin is available?
- $Renderer =& plugin_load('renderer',$rname);
+ $Renderer =& plugin_load('renderer',$rname, true);
if(is_null($Renderer)){
msg("No renderer '$rname' found for mode '$mode'",-1);
return null;
diff --git a/inc/pluginutils.php b/inc/pluginutils.php
index 55c03f4a5..100f781f2 100644
--- a/inc/pluginutils.php
+++ b/inc/pluginutils.php
@@ -60,16 +60,21 @@ function plugin_list($type='',$all=false){
*
* @param $type string type of plugin to load
* @param $name string name of the plugin to load
+ * @param $new bool true to return a new instance of the plugin, false to use an already loaded instance
* @return objectreference the plugin object or null on failure
*/
-function &plugin_load($type,$name){
+function &plugin_load($type,$name,$new=false){
//we keep all loaded plugins available in global scope for reuse
global $DOKU_PLUGINS;
-
//plugin already loaded?
if(!empty($DOKU_PLUGINS[$type][$name])){
- return $DOKU_PLUGINS[$type][$name];
+ if ($new) {
+ $class = $type.'_plugin_'.$name;
+ return class_exists($class) ? new $class : null;
+ } else {
+ return $DOKU_PLUGINS[$type][$name];
+ }
}
//try to load the wanted plugin file