1<?php 2/** 3 * Creole Plugin, underline component: Creole style underline text 4 * 5 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6 * @author LarsDW223 7 */ 8 9/** 10 * All DokuWiki plugins to extend the parser/rendering mechanism 11 * need to inherit from this class 12 */ 13class syntax_plugin_creole_underline extends DokuWiki_Syntax_Plugin { 14 var $eventhandler = NULL; 15 16 function getInfo() { 17 return array( 18 'author' => 'Gina Häußge, Michael Klier, Esther Brunner, LarsDW223', 19 'email' => 'dokuwiki@chimeric.de', 20 'date' => '2015-08-29', 21 'name' => 'Creole Plugin, underline component', 22 'desc' => 'Creole style underline text', 23 'url' => 'http://wiki.splitbrain.org/plugin:creole', 24 ); 25 } 26 27 function getType() { return 'protected'; } 28 function getSort() { return 9; } 29 30 function connectTo($mode) { 31 $this->Lexer->addSpecialPattern( 32 '__', 33 $mode, 34 'plugin_creole_underline' 35 ); 36 } 37 38 /** 39 * Constructor. 40 */ 41 public function __construct() { 42 $this->eventhandler = plugin_load('helper', 'creole_eventhandler'); 43 $this->eventhandler->addOnNotify('insert', 'header', 'header', 44 'open', 'underline', NULL, 45 array($this, 'onHeaderCallback')); 46 $this->eventhandler->addOnNotify('found', 'emptyline', NULL, 47 'open', 'underline', NULL, 48 array($this, 'onHeaderCallback')); 49 $this->eventhandler->addOnNotify('open', 'list', NULL, 50 'open', 'underline', NULL, 51 array($this, 'onHeaderCallback')); 52 $this->eventhandler->addOnNotify('open', 'table', NULL, 53 'open', 'underline', NULL, 54 array($this, 'onHeaderCallback')); 55 } 56 57 function handle($match, $state, $pos, Doku_Handler $handler) { 58 if ( $this->eventhandler->queuedEventExists ('open', 'underline', NULL) == false ) { 59 $state = DOKU_LEXER_ENTER; 60 } else { 61 $state = DOKU_LEXER_EXIT; 62 } 63 64 switch ($state) { 65 case DOKU_LEXER_ENTER: 66 $this->eventhandler->notifyEvent('open', 'underline', NULL, $pos, $match, $handler); 67 $handler->addCall('underline_open', array(), $pos); 68 break; 69 case DOKU_LEXER_UNMATCHED: 70 $handler->addCall('cdata', array($match), $pos); 71 break; 72 case DOKU_LEXER_EXIT: 73 $this->eventhandler->notifyEvent('close', 'underline', NULL, $pos, $match, $handler); 74 $handler->addCall('underline_close', array(), $pos); 75 break; 76 } 77 return true; 78 } 79 80 function render($mode, Doku_Renderer $renderer, $data) { 81 return true; 82 } 83 84 public function onHeaderCallback (creole_syntax_event $myEvent, $pos, $match, $handler) { 85 $this->eventhandler->notifyEvent('close', 'underline', NULL, $pos, $match, $handler); 86 $handler->addCall('underline_close', array(), $pos); 87 } 88} 89// vim:ts=4:sw=4:et:enc=utf-8: 90