DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:tab:old
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


plugin:tab:old [2020-05-14 21:07] (current) – created Juergen_aus_Zuendorf
Line 1: Line 1:
 +===== Description =====
 +
 +Nothing too special.  I have some poetry on my site, so I wanted a way to add 'tabs' Since you can't really do tabs in HTML, I decided to just use non-breaking spaces (nbsp's) instead.  5 nbsp's = 1 tab.
 +
 +===== Use =====
 +
 +Simply insert '<tab>' into the text.  When DokuWiki parses it, it will replace '<tab>' with 5 nbsp's.
 +     
 +===== Code =====
 +<code php lib/plugins/tab/syntax.php>
 +<?php
 +/**
 + * Plugin Tab: Inserts "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" into the document for every <tab> it encounters
 + 
 + * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 + * @author     Tim Skoch <timskoch@hotmail.com>
 + */
 + 
 +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');
 + 
 +/**
 + * All DokuWiki plugins to extend the parser/rendering mechanism
 + * need to inherit from this class
 + */
 +class syntax_plugin_tab extends DokuWiki_Syntax_Plugin {
 + 
 +    /**
 +     * return some info
 +     */
 +    function getInfo(){
 +        return array(
 +            'author' => 'Tim Skoch',
 +            'email'  => 'timskoch@hotmail.com',
 +            'date'   => '2018-02-06',
 +            'name'   => 'Tab Plugin',
 +            'desc'   => 'Inserts "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" into the html of the document for every <tab> it encounters',
 +            'url'    => 'http://www.dokuwiki.org/wiki:plugins:tab',
 +        );
 +    }
 + 
 +    /**
 +     * What kind of syntax are we?
 +     */
 +    function getType(){
 +        return 'substition';
 +    }
 +
 +    /**
 +     * What kind of syntax do we allow (optional)
 +     */
 +//    function getAllowedTypes() {
 +//        return array();
 +//    }
 +   
 +    /**
 +     * What about paragraphs? (optional)
 +     */
 +//    function getPType(){
 +//        return 'normal';
 +//    }
 + 
 +    /**
 +     * Where to sort in?
 +     */ 
 +    function getSort(){
 +        return 999;
 +    }
 + 
 + 
 +    /**
 +     * Connect pattern to lexer
 +     */
 +    function connectTo($mode) {
 +      $this->Lexer->addSpecialPattern('<tab>',$mode,'plugin_tab');
 +//      $this->Lexer->addEntryPattern('<TEST>',$mode,'plugin_test');
 +    }
 +
 +//    function postConnect() {
 +//      $this->Lexer->addExitPattern('</TEST>','plugin_test');
 +//    }
 + 
 + 
 +    /**
 +     * Handle the match
 +     */
 +    function handle($match, $state, $pos, Doku_Handler $handler){
 +        switch ($state) {
 +          case DOKU_LEXER_ENTER : 
 +            break;
 +          case DOKU_LEXER_MATCHED :
 +            break;
 +          case DOKU_LEXER_UNMATCHED :
 +            break;
 +          case DOKU_LEXER_EXIT :
 +            break;
 +          case DOKU_LEXER_SPECIAL :
 +            break;
 +        }
 +        return array();
 +    }
 + 
 +    /**
 +     * Create output
 +     */
 +    function render($mode, Doku_Renderer $renderer, $data) {
 +        if($mode == 'xhtml'){
 +            $renderer->doc .= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";            // ptype = 'normal'
 +//            $renderer->doc .= "<p>Hello World!</p>";     // ptype = 'block'
 +            return true;
 +        }
 +        return false;
 +    }
 +}
 + 
 +//Setup VIM: ex: et ts=4 enc=utf-8 :
 +</code>
 +
 +--- [[user>Juergen_aus_Zuendorf|Juergen_aus_Zuendorf]] //2018-02-06 16:27//\\
 +-> Changes for compatibility to PHP7:\\
 +"&$handler" and "&$renderer" to "Doku_Handler $handler" and "Doku_Renderer $renderer"
 +===== Installation =====
 +
 +Just like any other plugin:  Create a new folder "lib/plugins/tab", and create a file "syntax.php" with the above code as its contents.
 +
 +Enjoy!
 +
 +
 +
 +===== Discussion =====
 +
 +Is any really necessary? ;-)
 +
 +======
 +Tim,
 +
 +We used your code to spawn our [[plugin:pagebreak|pagebreak]] plugin.  Thanks a million for giving us a starting point.
 +~[[mailto:j.mcbride@mail.utexas.edu|Jonathan]] and Chris
 +
 +----
 +
 +2010-05-18
 +:?: It doesn't work in lastest version. Did you test it in lastest version?
 +==== New Code ====
 +
 +Could be done in less lines (drop test code etc). 
 +<code php>
 +<?php
 +
 +/**
 + * Plugin Tab: Inserts "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" into the document for every <tab> it encounters
 + 
 + * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 + * @author     Tim Skoch <timskoch@hotmail.com>
 + */
 + 
 +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');
 + 
 +/**
 + * All DokuWiki plugins to extend the parser/rendering mechanism
 + * need to inherit from this class
 + */
 +class syntax_plugin_tab extends DokuWiki_Syntax_Plugin {
 + 
 +    /**
 +     * return some info
 +     */
 +    function getInfo(){
 +        return array(
 +            'author' => 'Tim Skoch',
 +            'email'  => 'timskoch@hotmail.com',
 +            'date'   => '2006-08-16',
 +            'name'   => 'Tab Plugin',
 +            'desc'   => 'Inserts "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" into the html of the document for every <tab> it encounters',
 +            'url'    => 'http://www.dokuwiki.org/plugin:tab',
 +        );
 +    }
 + 
 +    /**
 +     * What kind of syntax are we?
 +     */
 +    function getType(){
 +        return 'substition';
 +    }
 + 
 +    /**
 +     * Where to sort in?
 +     */ 
 +    function getSort(){
 +        return 999;
 +    }
 + 
 +    /**
 +     * Connect pattern to lexer
 +     */
 +    function connectTo($mode) {
 +      $this->Lexer->addSpecialPattern('<tab>', $mode, 'plugin_tab');
 +    }
 + 
 +    /**
 +     * Handle the match
 +     */
 +    function handle($match, $state, $pos, &$handler){
 +        return array();
 +    }
 + 
 +    /**
 +     * Create output
 +     */
 +    function render($mode, &$renderer, $data) {
 +        if($mode == 'xhtml'){
 +            $renderer->doc .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
 +            return true;
 +        }
 +        return false;
 +    }
 +}
 +
 +?>
 +</code>
 +
 +When we updated to the latest version of DokuWiki, this broke.  It failed to interpret "&nbsp;" as a non-breaking space, and simply displayed it as text instead.  The quick fix for me was to replace "''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;''" with "''&#160;&#160;&#160;&#160;&#160;''" Works for us, but we are a one-language shop and our limited user base is almost exclusively using Firefox.  YMMV.\\  //--- [[nathan.randall@arbor.edu|Nathan Randall]] 2008-04-15 10:33//
 +
 +2011-07-26
 +Works great in latest version using "New Code" above.  Thanks
 +
 +----
 +
 +==== Enhancement/Feature Extension ====
 +//2011-09-22 by Taggic// \\ 
 +
 +If you modify the code according below you can define the quantity of "&nbsp" signs. If the parameter is missing it is using automatically the old behaiviour so that nobody has to search through all pages and replace the formerly used "tabs".
 +
 +following both syntax lines are working:
 +<code>
 +<tab> 5 times "&nbsp;" as before
 +<tab2> 2 times "&nbsp;" (where 2 can be each positive integer value, a negative value will be ignored)
 +</code>
 +
 +<code php>
 +    // Connect pattern to lexer
 +    function connectTo($mode) { 
 +      $this->Lexer->addSpecialPattern('<tab\d*>', $mode, 'plugin_tab'); }
 + 
 +    // Handle the match
 +    function handle($match, $state, $pos, &$handler){
 +        $match = substr($match,4,-1);             //strip markup from start and end
 +        
 +        if ((strlen($match)>0) && ($match >0)) {  // add as many space as defined if value is positive
 +            $data .= str_repeat('&#160;', $match);
 +        }
 +        else {                                    // if standard tab is used then insert 5 spaces
 +          $data = '&#160;&#160;&#160;&#160;&#160;';                        
 +        }
 +        return $data;
 +    }
 +
 +    // Create output
 +    function render($mode, &$renderer, $data) {
 +        if($mode == 'xhtml'){
 +            $renderer->doc .= $data;
 +            return true;         }
 +        return false;
 +    }
 +</code>
  
plugin/tab/old.txt · Last modified: 2020-05-14 21:07 by Juergen_aus_Zuendorf

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki