1<?php 2/** 3 * 4 * @author Szymon Olewniczak 5 */ 6 7// must be run within DokuWiki 8if(!defined('DOKU_INC')) die(); 9 10/** 11 * All DokuWiki plugins to extend the parser/rendering mechanism 12 * need to inherit from this class 13 */ 14class syntax_plugin_randompage2 extends DokuWiki_Syntax_Plugin { 15 16public function getType(){ return 'formatting'; } 17 public function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } 18 public function getSort(){ return 158; } 19 public function connectTo($mode) { $this->Lexer->addEntryPattern('<randompage_link>(?=.*?</randompage_link>)',$mode,'plugin_randompage2'); } 20 public function postConnect() { $this->Lexer->addExitPattern('</randompage_link>','plugin_randompage2'); } 21 22 23 /** 24 * Handle the match 25 */ 26 public function handle($match, $state, $pos, Doku_Handler $handler){ 27 switch ($state) { 28 case DOKU_LEXER_ENTER : 29 return array($state, ''); 30 31 case DOKU_LEXER_UNMATCHED : return array($state, $match); 32 case DOKU_LEXER_EXIT : return array($state, ''); 33 } 34 return array(); 35 } 36 37 /** 38 * Create output 39 */ 40 public function render($mode, Doku_Renderer $renderer, $data) { 41 global $ID; 42 // $data is what the function handle() return'ed. 43 if($mode == 'xhtml'){ 44 /** @var Doku_Renderer_xhtml $renderer */ 45 list($state, $match) = $data; 46 switch ($state) { 47 case DOKU_LEXER_ENTER : 48 $renderer->doc .= '<a href="'.wl($ID, array('do' => 'randompage'), true).'">'; 49 break; 50 51 case DOKU_LEXER_UNMATCHED : 52 $renderer->doc .= $renderer->_xmlEntities($match); 53 break; 54 case DOKU_LEXER_EXIT : 55 $renderer->doc .= '</a>'; 56 break; 57 } 58 return true; 59 } 60 return false; 61 } 62} 63