classspan.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
  3. if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
  4. require_once(DOKU_PLUGIN.'syntax.php');
  5. class syntax_plugin_bbcodeextensions_classspan extends DokuWiki_Syntax_Plugin {
  6. function getType() { return 'formatting'; }
  7. function getPType() { return 'normal'; }
  8. function getAllowedTypes() { return array('formatting', 'substition', 'protected'); }
  9. function getSort() { return 165; }
  10. function connectTo($mode) {
  11. $this->Lexer->addEntryPattern('\[cs\=.*?\](?=.*?\x5B/cs\x5D)',$mode,'plugin_bbcodeextensions_classspan');
  12. }
  13. function postConnect() { $this->Lexer->addExitPattern('\[/cs\]','plugin_bbcodeextensions_classspan'); }
  14. function handle($match, $state, $pos, Doku_Handler $handler) {
  15. switch ($state) {
  16. case DOKU_LEXER_ENTER :
  17. $omatch= $match;
  18. $match = explode('"',substr($match, 3, -1));
  19. return array($state, $match[1], $omatch);
  20. case DOKU_LEXER_UNMATCHED :
  21. return array($state, $match);
  22. case DOKU_LEXER_EXIT :
  23. return array($state, '');
  24. }
  25. return array();
  26. }
  27. /**
  28. * Create output
  29. */
  30. function render($mode, Doku_Renderer $renderer, $data) {
  31. if(in_array($mode, ['xhtml', 's5'], true)) {
  32. list($state, $match) = $data;
  33. $defcl= $this->getConf('class_preffix') ?? 'bbcodeextensions';
  34. switch ($state) {
  35. case DOKU_LEXER_ENTER :
  36. $renderer->doc .= <<<EOF
  37. <span class="{$defcl} {$match}" >
  38. EOF;
  39. break;
  40. case DOKU_LEXER_UNMATCHED :
  41. $match = $renderer->_xmlEntities($match);
  42. $renderer->doc .= $match;
  43. break;
  44. case DOKU_LEXER_EXIT :
  45. $renderer->doc .= '</span><!-- bbcodeextensions_span -->';
  46. break;
  47. } // switch
  48. return true;
  49. }
  50. if(in_array($mode, ['text'], true)) {
  51. list($state, $match) = $data;
  52. switch ($state) {
  53. case DOKU_LEXER_ENTER :
  54. break;
  55. case DOKU_LEXER_UNMATCHED :
  56. $renderer->doc .= $match;
  57. break;
  58. case DOKU_LEXER_EXIT :
  59. break;
  60. }
  61. return true;
  62. }
  63. return false;
  64. }
  65. }