summaryrefslogtreecommitdiff
path: root/inc/parserutils.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/parserutils.php')
-rw-r--r--inc/parserutils.php60
1 files changed, 30 insertions, 30 deletions
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 11f044146..7a85b64e3 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -614,8 +614,13 @@ function p_render($mode,$instructions,&$info){
}
/**
+ * Figure out the correct renderer class to use for $mode,
+ * instantiate and return it
+ *
* @param $mode string Mode of the renderer to get
* @return null|Doku_Renderer The renderer
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
*/
function p_get_renderer($mode) {
/** @var Doku_Plugin_Controller $plugin_controller */
@@ -624,49 +629,44 @@ function p_get_renderer($mode) {
$rname = !empty($conf['renderer_'.$mode]) ? $conf['renderer_'.$mode] : $mode;
$rclass = "Doku_Renderer_$rname";
+ // if requested earlier or a bundled renderer
if( class_exists($rclass) ) {
$Renderer = new $rclass();
return $Renderer;
}
- // assuming the configured renderer is bundled, construct its file name
- $default = DOKU_INC."inc/parser/$rname.php";
- if (!file_exists($default)) {
- // not bundled, see if its an enabled plugin for rendering $mode
- $Renderer = $plugin_controller->load('renderer',$rname);
+ // not bundled, see if its an enabled plugin for rendering $mode
+ $Renderer = $plugin_controller->load('renderer',$rname);
+ if ($Renderer) {
if (is_a($Renderer, 'Doku_Renderer') && ($mode == $Renderer->getFormat())) {
return $Renderer;
- }
-
- // there is a configuration error!
- // not bundled, not an enabled plugin, try to fallback to a bundled renderer
- $fallback = DOKU_INC."inc/parser/$mode.php";
- if (!file_exists($fallback)) {
- msg("No renderer '$rname' found for mode '$mode'",-1);
- return null;
} else {
- $default = $fallback;
- $rclass = "Doku_Renderer_$mode";
-
- // viewers should see renderered output, so restrict the warning to admins only
- $msg = "No renderer '$rname' found for mode '$mode', check your plugins";
- if ($mode == 'xhtml') {
- $msg .= " and the 'renderer_xhtml' config setting";
- }
- $msg .= ".<br/>Attempting to fallback to the bundled renderer.";
- msg($msg,-1,'','',MSG_ADMIN_ONLY);
+ // plugin found, but not a renderer or not the right renderer for this $mode
+ msg("Renderer plugin '$rname' not valid for $mode",-1,'','',MSG_ADMINS_ONLY);
}
}
- require_once $default;
- 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;
+ // there is a configuration error!
+ // not bundled, not a valid enabled plugin, use $mode to try to fallback to a bundled renderer
+ $rclass = "Doku_Renderer_$mode";
+ if ( class_exists($rclass) ) {
+ // viewers should see renderered output, so restrict the warning to admins only
+ $msg = "No renderer '$rname' found for mode '$mode', check your plugins";
+ if ($mode == 'xhtml') {
+ $msg .= " and the 'renderer_xhtml' config setting";
+ }
+ $msg .= ".<br/>Attempting to fallback to the bundled renderer.";
+ msg($msg,-1,'','',MSG_ADMINS_ONLY);
+
+ $Renderer = new $rclass;
+ $Renderer->nocache(); // fallback only (and may include admin alerts), don't cache
+ return $Renderer;
}
- $Renderer = new $rclass();
- return $Renderer;
+ // fallback failed, alert the world
+ trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
+ msg("No renderer '$rname' found for mode '$mode'",-1);
+ return null;
}
/**