DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:label

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
plugin:label [2007-05-14 13:32] – is now inline 131.220.9.185plugin:label [2015-09-13 19:22] (current) Aleksandr
Line 1: Line 1:
 +====== Label Plugin ======
  
 +---- plugin ----
 +description: Allows to mark parts of the wikipage with labels in order to be qualified for special use with the Embed Plugin
 +author     : Pascal Bihler
 +email      : bihler@iai.uni-bonn.de
 +type       : syntax
 +lastupdate : 2007-05-14
 +compatible : Anteater, Rincewind, Angua
 +depends    : embed
 +conflicts 
 +similar    : 
 +tags       : label, replace
 +downloadurl: http://pb.wh4f.de/dokuwiki/label.zip
 +----
 +
 +===== Requirements =====
 +
 +I've developed the plugin under the DokuWiki version of 2006-11-06 and seems to work with version 2007-06-26 as well.
 +
 +===== Download / Installation =====
 +
 +Download the plugin here (manually or via Plugin Manager): http://pb.wh4f.de/dokuwiki/label.zip
 +
 +===== Syntax and Use =====
 +
 +The wiki-portion to mark has to be included in %%<label%% //theLabel//%%>%%//wikicode//%%</label>%%, whereas //wikicode// is arbitrary wikicode and %%theLabel%% is an identifier consisting of letters (a-z, A-Z), number (0-9) and underscore (_).
 +
 +Example:
 +<code>
 +Here is a sample phrase:
 +<label example>
 +   The quick brown fox jumps over the lazy dog.
 +</label>
 +</code>
 +
 +The example is labeled and can be processed by another plugin, e.g. the [[plugin:embed|embed-plugin]].
 +
 +
 +
 +
 +
 +
 +===== Labels and Lists =====
 +
 +In order to be recognized as a list, a line in DokuWiki has to start with spaces before the leading ''*''. Therefore, you are required to start a label after the *, like here:
 +
 +<code>
 +  * <label element1>Element 1</label>
 +  * <label element2>Element 2</label>
 +  * <label element3>Element 3</label>
 +</code>
 +
 +
 +
 +
 +
 +===== Code =====
 +
 +//(sorry, will be properly indented when I have some time)//
 +
 +<code php>
 +<?php
 +/**
 + * Plugin Label: Allows to mark parts of the wikipage with labels in order to 
 + * be qualified for special use in other plugins
 + *
 + * Sytnax: <label [a-zA-Z0-9_]+>...</label>
 + 
 + * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 + * @author     Pascal Bihler <bihler@iai.uni-bonn.de>
 + */
 + 
 +// must be run within DokuWiki
 +if(!defined('DOKU_INC')) die();
 + 
 +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
 +require_once(DOKU_PLUGIN.'syntax.php');
 + 
 +class syntax_plugin_label extends DokuWiki_Syntax_Plugin {
 +
 + var $last_label = array();
 + var $LABEL_PATTERN = "[a-zA-Z0-9_]+";
 + 
 +    /**
 +     * return some info
 +     */
 +    function getInfo(){
 +        return array(
 +            'author' => 'Pascal Bihler',
 +            'email'  => 'bihler@iai.uni-bonn.de',
 +            'date'   => '2007-05-14',
 +            'name'   => 'Label Plugin',
 +            'desc'   => 'Allows to mark parts of the wikipage with labels',
 +            'url'    => 'http://www.dokuwiki.org/plugin:label',
 +        );
 +    }
 + 
 +    function getType(){ return 'substition'; }
 +    function getPType(){ return 'normal'; }
 +    function getSort(){ return 100; }
 +    function connectTo($mode) { 
 + $this->Lexer->addSpecialPattern('</label>',$mode,'plugin_label');
 + $this->Lexer->addSpecialPattern('<label\s+' . $this->LABEL_PATTERN . '\s*>',$mode,'plugin_label');
 +   }
 +
 +
 +    /**
 +     * Handle the match
 +     */
 +    function handle($match, $state, $pos, &$handler){
 +        switch ($state) {
 +          case DOKU_LEXER_SPECIAL : 
 +     if (preg_match('/<label\s+(' . $this->LABEL_PATTERN . ')\s*>/',$match,$matches)) {
 + $labek = $matches[1];
 + array_push($this->last_label,$label);  
 +     return array("start", $label);
 +   } else if ($match == "</label>") {
 +    $label = array_pop($this->last_label);  
 +     return array("end", $label);
 + }
 +        }
 +        return array();
 +    }
 + 
 +    /**
 +     * Create output
 +     */
 +    function render($mode, &$renderer, $data) { //doesn't do much, since label is something internal
 +        return true;
 +    }
 +}
 + 
 +//Setup VIM: ex: et ts=4 enc=utf-8 :
 +</code>

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