From af587fa822e0477bda4288e75b171f81ea8e68ce Mon Sep 17 00:00:00 2001 From: andi <andi@splitbrain.org> Date: Sun, 10 Apr 2005 19:59:16 +0200 Subject: [PATCH] new parser: code for section editing added darcs-hash:20050410175916-9977f-92bd9f70d66160b0f6188f42870d12b2e0964077.gz --- inc/parser/action.php | 2 ++ inc/parser/handler.php | 6 ++++-- inc/parser/renderer.php | 2 +- inc/parser/xhtml.php | 27 +++++++++++++++++++++++---- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/inc/parser/action.php b/inc/parser/action.php index 82bebf0ae..ed85f5cf9 100644 --- a/inc/parser/action.php +++ b/inc/parser/action.php @@ -73,6 +73,8 @@ function parse_to_instructions($text){ function render_as_xhtml($instructions){ +#dbg($instructions); + // Create the renderer require_once DOKU_INC . 'inc/parser/xhtml.php'; $Renderer = & new Doku_Renderer_XHTML(); diff --git a/inc/parser/handler.php b/inc/parser/handler.php index 752ba49f7..72880736d 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -88,7 +88,7 @@ class Doku_Handler { $markerLen = strlen($iLevels[$level]); $title = substr($match, $markerLen, strlen($match)-($markerLen*2)); - $this->__addCall('header',array($title,$level), $pos); + $this->__addCall('header',array($title,$level,$pos), $pos); $this->meta['section'] = TRUE; return TRUE; } @@ -1353,9 +1353,11 @@ class Doku_Handler_Toc { var $numHeaders = 0; function process($calls) { + #FIXME can this be done better? + global $conf; foreach ( $calls as $call ) { - if ( $call[0] == 'header' && $call[1][1] < 4 ) { + if ( $call[0] == 'header' && $call[1][1] <= $conf['maxtoclevel'] ) { $this->numHeaders++; $this->addToToc($call); } diff --git a/inc/parser/renderer.php b/inc/parser/renderer.php index d6072e0a4..60462a2b4 100644 --- a/inc/parser/renderer.php +++ b/inc/parser/renderer.php @@ -19,7 +19,7 @@ class Doku_Renderer { function toc_close() {} - function header($text, $level) {} + function header($text, $level, $pos) {} function section_open($level) {} diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 63bd9a974..b66a92ec4 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -32,11 +32,15 @@ class Doku_Renderer_XHTML extends Doku_Renderer { var $entities = array(); var $interwiki = array(); + var $lastsec = 0; + function document_start() { ob_start(); } function document_end() { + // add button for last section if any + if($this->lastsec) $this->__secedit($this->lastsec,''); if ( count ($this->footnotes) > 0 ) { echo '<div class="footnotes">'.DOKU_LF; @@ -87,7 +91,16 @@ class Doku_Renderer_XHTML extends Doku_Renderer { echo '</div>'.DOKU_LF.'</div>'.DOKU_LF; } - function header($text, $level) { + function header($text, $level, $pos) { + global $conf; + //handle section editing + if($level <= $conf['maxseclevel']){ + // add button for last section if any + if($this->lastsec) $this->__secedit($this->lastsec,$pos-1); + // remember current position + $this->lastsec = $pos; + } + echo DOKU_LF.'<a name="'.$this->__headerToLink($text).'"></a><h'.$level.'>'; echo $this->__xmlEntities($text); echo "</h$level>".DOKU_LF; @@ -283,8 +296,7 @@ class Doku_Renderer_XHTML extends Doku_Renderer { if ( is_null($language) ) { $this->preformatted($text); } else { - - // Handle with Geshi here (needs tuning) + // Handle with Geshi here FIXME: strip first beginning newline require_once(DOKU_INC . 'inc/geshi.php'); $geshi = new GeSHi($text, strtolower($language), DOKU_INC . 'inc/geshi'); $geshi->enable_classes(); @@ -742,6 +754,13 @@ class Doku_Renderer_XHTML extends Doku_Renderer { function __headerToLink($title) { return preg_replace('/\W/','_',trim($title)); } + + /** + * Adds code for section editing button + */ + function __secedit($f, $t){ + print '<!-- SECTION ['.$f.'-'.$t.'] -->'; + } function __getLinkTitle($title, $default, & $isImage) { $isImage = FALSE; @@ -838,7 +857,7 @@ function interwikiImgExists($name) { * @deprecated -> resolve_pagename should be used */ function wikiPageExists($name) { - +msg("deprecated wikiPageExists called",-1); static $pages = array(); if ( array_key_exists($name,$pages) ) { -- GitLab