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