summaryrefslogtreecommitdiff
path: root/inc/parserutils.php
diff options
context:
space:
mode:
authorChris Smith <chris.eureka@jalakai.co.uk>2008-03-12 01:56:47 +0100
committerChris Smith <chris.eureka@jalakai.co.uk>2008-03-12 01:56:47 +0100
commitd968d3e5210d971ea439f2f29c47af438c1106c8 (patch)
treec88b6d1ab0a9c8f1fef625b8c40c47d1e94bfd75 /inc/parserutils.php
parent52fe2bfb49cad82b7f887b3dfa327f898720c4cd (diff)
downloadrpg-d968d3e5210d971ea439f2f29c47af438c1106c8.tar.gz
rpg-d968d3e5210d971ea439f2f29c47af438c1106c8.tar.bz2
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
Diffstat (limited to 'inc/parserutils.php')
-rw-r--r--inc/parserutils.php51
1 files changed, 32 insertions, 19 deletions
diff --git a/inc/parserutils.php b/inc/parserutils.php
index c65185239..d03ad8d1e 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
*