diff options
-rw-r--r-- | inc/parser/handler.php | 8 | ||||
-rw-r--r-- | inc/parser/parser.php | 6 | ||||
-rw-r--r-- | inc/parser/wiki.php | 315 |
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(){}
+
+}
+
|