DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:htag

H-Tag Plugin

Compatible with DokuWiki

2013-05-10 2012-10-13 2012-01-25 and 2011-05-25

plugin An alternative heading syntax

Last updated on
2007-07-23
Provides
Syntax
Conflicts with
numberedheadings

This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.

Tagged with editing, headings

Author Adam B. Ross
Version 0.95 (2007-07-23)
DokuWiki version Tested on v.2007-06-26

Description

This is similar to Tony Pujal's @h# hack found in the discussion of the inverse headings hack. It adds an easy-to-read syntax for headings in addition to the wiki's, and as a plugin. This is my first effort at playing with DokuWiki code, so please point out any mistakes.

Usage

h1. A Heading to Rule Them All!

This plugin will convert h1. through h6. to the equivalent headings. It is not case sensitive, but does need to be marked at the start of the line.

This syntax breaks compatibility with any code or plugins that manipulate the use of ='s to mark headings, such as numberedheadings.

A demo and plugin download will be made available once I finish deploying my wiki ;P FIXME (URL to author's wiki ?)

Installation

  1. Create the directory dokuwiki/lib/plugins/htag.
  2. Copy the code below to syntax.php.

Source Code

<?php /**
 *  This plugin provides alternative heading syntax.
 *  It converts h1. to h6. to the DokuWiki headings
 *
 *  @author     Adam B. Ross <abr.programmer@gmail.com>
 *  @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 *  @version    htag syntax plugin, v0.9
 *  @since      23-Jul-2007
**/
 
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');
 
class syntax_plugin_htag extends DokuWiki_Syntax_Plugin {
 
        function getInfo() {
                return array ( 
                        'author' => 'Adam B. Ross',
                        'email' => 'grayside@gmail.com',
                        'date' => '2007-07-23',
                        'name' => 'Heading Level Tag',
                        'desc' => 'Adds outline-style markup (h1.~) syntax for headings.',
                        'url' => 'http://www.dokuwiki.org/plugin:htag'
                );
        }
 
        // header specific
        function getType() { return 'baseonly'; }
 
        // headings shouldn't be parsed..
        function accepts($mode) { return false; }
 
        function connectTo( $mode ) {
                $this->Lexer->addSpecialPattern( '^[hH][1-6]\.[ \t]*[^\n]+(?=\n)', $mode, 'plugin_htag' );
        }
 
        // Doku_Parser_Mode 60
        // header (numbered headers) 45
        function getSort() { return 44; }
 
        function handle( $match, $state, $pos, &$handler )
        {
                global $conf;
                preg_match( '/^h\d/i', $match, $htag );
                $title = substr( $match, 3 );
                $title = trim($title);
                $level = substr( $htag[0], 1, 1 );
 
                if( $handler->status['section'] ) $handler->_addCall('section_close',array(), $pos);
                if( $level <= $conf['maxseclevel'] ) {
                    $handler->_addCall('section_edit',array($handler->status['section_edit_start'], $pos-1,
                                $handler->status['section_edit_level'], $handler->status['section_edit_title']), $pos);
                    $handler->status['section_edit_start'] = $pos;
                    $handler->status['section_edit_level'] = $level;
                    $handler->status['section_edit_title'] = $title;
                }
                $handler->_addCall('header',array($title,$level,$pos), $pos);
                $handler->_addCall('section_open',array($level),$pos);
                $handler->status['section'] = true;
 
                return true;
        }
 
        function render( $format, &$renderer, $data )
        {
                return true;
        }
 
}

Changelog

  • Version 0.95 (2007-07-23): Fixed no-sections bug.
  • Version 0.9 (2007-07-17): First published version.

Discussion

Spurious blank lines

If I create a pair of headers:

h1. Heading 1
h2. Heading 2

and then export the page using the odt plugin, then I get spurious blank lines between the headings.

Looking at the content.xml file I can see that these are due to <text:p text:style-name="Text_20_body"/> tags.

However, odt exports ok if the regular heading formats are used.

Anyone got any ideas what's causing this?

Error - 10 Feb 2011

Causes the error : “Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'Doku_Renderer_metadata::section_edit' was given in /var/www/redmine-wiki/inc/parserutils.php on line 419” on the first load for each page. Refreshing the page will have it come up clean. Clearing the cache makes no difference.


11 Dec 2011 (kaj.wiik ə iki.fi)

Edit the following lines out (section edit is done now elsewhere):

if( $level <= $conf['maxseclevel'] ) {
                    $handler->_addCall('section_edit',array($handler->status['section_edit_start'], $pos-1,
                                $handler->status['section_edit_level'], $handler->status['section_edit_title']), $pos);
                    $handler->status['section_edit_start'] = $pos;
                    $handler->status['section_edit_level'] = $level;
                    $handler->status['section_edit_title'] = $title;
}
plugin/htag.txt · Last modified: 2013-10-25 12:16 by 213.211.140.219