summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2006-12-03 20:01:38 +0100
committerAndreas Gohr <andi@splitbrain.org>2006-12-03 20:01:38 +0100
commit2d5ccb39b065724c19bf34e24edfe52ebce90e74 (patch)
treedbd18b2694c1566baa69f633d23b6e7885239136 /inc
parentf8cc712e2ad522d0bd56b9ba3983cd42abf664ad (diff)
downloadrpg-2d5ccb39b065724c19bf34e24edfe52ebce90e74.tar.gz
rpg-2d5ccb39b065724c19bf34e24edfe52ebce90e74.tar.bz2
pluggable renderers
Plugins can now provide their own renderer in lib/plugins/<name>/renderer.php The class inside this file needs to inherit from Doku_Renderer and has to be called Doku_Renderer_<name> To access the renderer the export action can be used eg: ?do darcs-hash:20061203190138-7ad00-f56b470b5dd043e1168ff2101c677eb8a9851627.gz
Diffstat (limited to 'inc')
-rw-r--r--inc/actions.php6
-rw-r--r--inc/parser/wiki.php322
-rw-r--r--inc/parserutils.php11
3 files changed, 9 insertions, 330 deletions
diff --git a/inc/actions.php b/inc/actions.php
index b37106ec5..4143416bb 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -150,7 +150,7 @@ function act_clean($act){
//remove all bad chars
$act = strtolower($act);
- $act = preg_replace('/[^a-z_]+/','',$act);
+ $act = preg_replace('/[^1-9a-z_]+/','',$act);
if($act == 'export_html') $act = 'export_xhtml';
if($act == 'export_htmlbody') $act = 'export_xhtmlbody';
@@ -393,14 +393,12 @@ function act_export($act){
// try to run renderer #FIXME use cached instructions
$mode = substr($act,7);
- $text = p_render($mode,p_get_instructions(rawWiki($ID,$REV)),$info);
+ $text = p_cached_output(wikiFN($ID,$REV), $mode);
if(!is_null($text)){
print $text;
exit;
}
-
-
return 'show';
}
diff --git a/inc/parser/wiki.php b/inc/parser/wiki.php
deleted file mode 100644
index 2f35b0a1f..000000000
--- a/inc/parser/wiki.php
+++ /dev/null
@@ -1,322 +0,0 @@
-<?php
-//FIXME!! remove the line ignoring the 'wiki' export mode from
-// inc/parserutils.php#p_renderer() when this file works.
-
-/**
-* Basis for converting to Dokuwiki syntax
-* This is not yet complete but useable for converting
-* phpWiki syntax.
-* Main issues lie with lists, quote and tables
-*/
-class Doku_Renderer_Wiki extends Doku_Renderer {
-
- var $doc = '';
-
- // This should be eliminated
- var $listMarker = '*';
-
- function document_start() {
- ob_start();
- }
-
- function document_end() {
-
- $this->doc .= ob_get_contents();
- ob_end_clean();
-
- }
-
- function header($text, $level) {
- $levels = array(
- 1=>'======',
- 2=>'=====',
- 3=>'====',
- 4=>'===',
- 5=>'==',
- );
-
- if ( isset($levels[$level]) ) {
- $token = $levels[$level];
- } else {
- $token = $levels[1];
- }
- echo "\n{$token} ";
- echo trim($text);
- echo " {$token}\n";
- }
-
- function cdata($text) {
- echo $text;
- }
-
- function linebreak() {
- echo '\\\\ ';
- }
-
- function hr() {
- echo "\n----\n";
- }
-
- function strong_open() {
- echo '**';
- }
-
- function strong_close() {
- echo '**';
- }
-
- function emphasis_open() {
- echo '//';
- }
-
- function emphasis_close() {
- echo '//';
- }
-
- function underline_open() {
- echo '__';
- }
-
- function underline_close() {
- echo '__';
- }
-
- function monospace_open() {
- echo "''";
- }
-
- function monospace_close() {
- echo "''";
- }
-
- function subscript_open() {
- echo '<sub>';
- }
-
- function subscript_close() {
- echo '</sub>';
- }
-
- function superscript_open() {
- echo '<sup>';
- }
-
- function superscript_close() {
- echo '</sup>';
- }
-
- function deleted_open() {
- echo '<del>';
- }
-
- function deleted_close() {
- echo '</del>';
- }
-
- function footnote_open() {
- echo '((';
- }
-
- function footnote_close() {
- echo '))';
- }
-
- function listu_open() {
- $this->listMarker = '*';
- echo "\n";
- }
-
- function listo_open() {
- $this->listMarker = '-';
- echo "\n";
- }
-
- /**
- * @TODO Problem here with nested lists
- */
- function listitem_open($level) {
- echo str_repeat(' ', $level).$this->listMarker;
- }
-
- function listitem_close() {
- echo "\n";
- }
-
- function unformatted($text) {
- echo '%%'.$text.'%%';
- }
-
- function php($text) {
- echo "\n<php>\n$text\n</php>\n";
- }
-
- function html($text) {
- echo "\n<html>\n$text\n</html>\n";
- }
-
- /**
- * Indent?
- */
- function preformatted($text) {
- echo "\n<code>\n$text\n</code>\n";
- }
-
- function file($text) {
- echo "\n<file>\n$text\n</file>\n";
- }
-
- /**
- * Problem here with nested quotes
- */
- function quote_open() {
- echo '>';
- }
-
- function quote_close() {
- echo "\n";
- }
-
- function code($text, $lang = NULL) {
- if ( !$lang ) {
- echo "\n<code>\n$text\n</code>\n";
- } else {
- echo "\n<code $lang>\n$text\n</code>\n";
- }
-
- }
-
- function acronym($acronym) {
- echo $acronym;
- }
-
- function smiley($smiley) {
- echo $smiley;
- }
-
- function wordblock($word) {
- echo $word;
- }
-
- function entity($entity) {
- echo $entity;
- }
-
- // 640x480 ($x=640, $y=480)
- function multiplyentity($x, $y) {
- echo "{$x}x{$y}";
- }
-
- function singlequoteopening() {
- echo "'";
- }
-
- function singlequoteclosing() {
- echo "'";
- }
-
- function doublequoteopening() {
- echo '"';
- }
-
- function doublequoteclosing() {
- echo '"';
- }
-
- // $link like 'SomePage'
- function camelcaselink($link) {
- echo $link;
- }
-
- // $link like 'wikie:syntax', $title could be an array (media)
- function internallink($link, $title = NULL) {
- if ( $title ) {
- echo '[['.$link.'|'.$title.']]';
- } else {
- echo '[['.$link.']]';
- }
- }
-
- // $link is full URL with scheme, $title could be an array (media)
- function externallink($link, $title = NULL) {
- if ( $title ) {
- echo '[['.$link.'|'.$title.']]';
- } else {
- echo '[['.$link.']]';
- }
- }
-
- // $link is the original link - probably not much use
- // $wikiName is an indentifier for the wiki
- // $wikiUri is the URL fragment to append to some known URL
- function interwikilink($link, $title = NULL, $wikiName, $wikiUri) {
- if ( $title ) {
- echo '[['.$link.'|'.$title.']]';
- } else {
- echo '[['.$link.']]';
- }
- }
-
- // Link to file on users OS, $title could be an array (media)
- function filelink($link, $title = NULL) {
- if ( $title ) {
- echo '[['.$link.'|'.$title.']]';
- } else {
- echo '[['.$link.']]';
- }
- }
-
- // Link to a Windows share, , $title could be an array (media)
- function windowssharelink($link, $title = NULL) {
- if ( $title ) {
- echo '[['.$link.'|'.$title.']]';
- } else {
- echo '[['.$link.']]';
- }
- }
-
- function email($address, $title = NULL) {
- if ( $title ) {
- echo '[['.$address.'|'.$title.']]';
- } else {
- echo '[['.$address.']]';
- }
- }
-
- // @TODO
- function internalmedialink (
- $src,$title=NULL,$align=NULL,$width=NULL,$height=NULL,$cache=NULL
- ) {
-
- }
-
- // @TODO
- function externalmedialink(
- $src,$title=NULL,$align=NULL,$width=NULL,$height=NULL,$cache=NULL
- ) {
- if ( $title ) {
- echo '{{'.$src.'|'.$title.'}}';
- } else {
- echo '{{'.$src.'}}';
- }
- }
-
- function table_open($maxcols = NULL, $numrows = NULL){}
-
- function table_close(){}
-
- function tablerow_open(){}
-
- function tablerow_close(){}
-
- function tableheader_open($colspan = 1, $align = NULL){}
-
- function tableheader_close(){}
-
- function tablecell_open($colspan = 1, $align = NULL){}
-
- function tablecell_close(){}
-
-}
-
-
-//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/inc/parserutils.php b/inc/parserutils.php
index f219696d5..45e6fd5aa 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -512,15 +512,18 @@ function p_sort_modes($a, $b){
function p_render($mode,$instructions,& $info){
if(is_null($instructions)) return '';
- if ($mode=='wiki') { msg("Renderer for $mode not valid",-1); return null; } //FIXME!! remove this line when inc/parser/wiki.php works.
-
// Create the renderer
- if(!@file_exists(DOKU_INC."inc/parser/$mode.php")){
+ $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 DOKU_INC."inc/parser/$mode.php";
+ require_once $file;
+
$rclass = "Doku_Renderer_$mode";
if ( !class_exists($rclass) ) {
trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);