<?php
// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
/**
 * Toc rule end renderer for Xhtml
 *
 * PHP versions 4 and 5
 *
 * @category   Text
 * @package    Text_Wiki
 * @author     Paul M. Jones <pmjones@php.net>
 * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
 * @version    CVS: $Id: Toc.php,v 1.1 2006/09/21 07:51:45 julien Exp $
 * @link       http://pear.php.net/package/Text_Wiki
 */

/**
 * This class inserts a table of content in XHTML.
 *
 * @category   Text
 * @package    Text_Wiki
 * @author     Paul M. Jones <pmjones@php.net>
 * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
 * @version    Release: @package_version@
 * @link       http://pear.php.net/package/Text_Wiki
 */
class Text_Wiki_Render_Xhtml_Toc extends Text_Wiki_Render {

    var 
$conf = array(
        
'css_list' => null,
        
'css_item' => null,
        
'title' => '<strong>Table of Contents</strong>',
        
'div_id' => 'toc',
        
'collapse' => true
    
);

    var 
$min 1;

    
/**
    *
    * Renders a token into text matching the requested format.
    *
    * @access public
    *
    * @param array $options The "options" portion of the token (second
    * element).
    *
    * @return string The text rendered from the token options.
    *
    */

    
function token($options)
    {
        static 
$headingIndexToc;
        
// type, id, level, count, attr
        
extract($options);

        switch (
$type) {

        case 
'list_start':

            
$css $this->getConf('css_list');
            
$html '';

            
// collapse div within a table?
            
if ($this->getConf('collapse')) {
                
$html .= '<table border="0" cellspacing="0" cellpadding="0">';
                
$html .= "<tr><td>\n";
            }

            
// add the div, class, and id
            
$html .= '<div';
            if (
$css) {
                
$html .= " class=\"$css\"";
            }

            
$div_id $this->getConf('div_id');
            if (
$div_id) {
                
$html .= " id=\"$div_id\"";
            }

            
// add the title, and done
            
$html .= '>';
            
$html .= $this->getConf('title');
            return 
$html;
            break;

        case 
'list_end':
            if (
$this->getConf('collapse')) {
                return 
"\n</div>\n</td></tr></table>\n\n";
            } else {
                return 
"\n</div>\n\n";
            }
            break;

        case 
'item_start':
            
$headingPrefix "";

            if(
$this->getConf('headingIndexes')){
                if (!isset(
$headingIndexToc[$level])){
                    
$headingIndexToc[$level] = 1;
                } else {
                    
$headingIndexToc[$level]++;
                    for (
$i $level 1$i <= 6$i ++){
                        
$headingIndexToc[$i] = 0;
                    }
                }
                foreach (
$headingIndexToc as $value){
                    if (
$value 0){
                        
$headingPrefix .= "{$value}.";
                    }
                }
            }

            
$html "\n\t<div";

            
$css $this->getConf('css_item');
            if (
$css) {
                
$html .= " class=\"$css\"";
            }

            
$pad = ($level $this->min);
            
$html .= " style=\"margin-left: {$pad}em;\">";

            
$html .= "<a href=\"#$id\">".$headingPrefix " ";
            return 
$html;
            break;

        case 
'item_end':
            return 
"</a></div>";
            break;
        }
    }
}
?>