summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--inc/parser/handler.php8
-rw-r--r--inc/parser/parser.php6
-rw-r--r--inc/parser/wiki.php315
3 files changed, 324 insertions, 5 deletions
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index 24f095599..752ba49f7 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -14,6 +14,8 @@ class Doku_Handler {
'toc' => TRUE,
);
+ var $rewriteBlocks = TRUE;
+
function Doku_Handler() {
$this->CallWriter = & new Doku_Handler_CallWriter($this);
}
@@ -29,8 +31,10 @@ class Doku_Handler {
$this->calls = $S->process($this->calls);
}
- $B = & new Doku_Handler_Block();
- $this->calls = $B->process($this->calls);
+ if ( $this->rewriteBlocks ) {
+ $B = & new Doku_Handler_Block();
+ $this->calls = $B->process($this->calls);
+ }
if ( $this->meta['toc'] ) {
$T = & new Doku_Handler_Toc();
diff --git a/inc/parser/parser.php b/inc/parser/parser.php
index 9a67ce1ba..2091b2c65 100644
--- a/inc/parser/parser.php
+++ b/inc/parser/parser.php
@@ -21,8 +21,8 @@ class Doku_Parser {
var $connected = FALSE;
- function addBaseMode() {
- $this->modes['base'] = & new Doku_Parser_Mode_Base();
+ function addBaseMode(& $BaseMode) {
+ $this->modes['base'] = & $BaseMode;
if ( !$this->Lexer ) {
$this->Lexer = & new Doku_Lexer($this->Handler,'base', TRUE);
}
@@ -35,7 +35,7 @@ class Doku_Parser {
*/
function addMode($name, & $Mode) {
if ( !isset($this->modes['base']) ) {
- $this->addBaseMode();
+ $this->addBaseMode(new Doku_Parser_Mode_Base());
}
$Mode->Lexer = & $this->Lexer;
$this->modes[$name] = & $Mode;
diff --git a/inc/parser/wiki.php b/inc/parser/wiki.php
new file mode 100644
index 000000000..d79be3a4a
--- /dev/null
+++ b/inc/parser/wiki.php
@@ -0,0 +1,315 @@
+<?php
+/**
+* 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 = '*';
+ }
+
+ function listo_open() {
+ $this->listMarker = '-';
+ }
+
+ /**
+ * @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(){}
+
+}
+