q.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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_q extends DokuWiki_Syntax_Plugin {
  6. function getType() { return 'formatting'; }
  7. function getPType() { return 'normal'; }
  8. function getAllowedTypes() { return array('formatting', 'disabled'); }
  9. function getSort() { return 220; }
  10. function connectTo($mode){
  11. $this->Lexer->addSpecialPattern('\[q.+?\[/q\]', $mode, 'plugin_bbcodeextensions_q');
  12. }
  13. function handle($match, $state, $pos, Doku_Handler $handler) {
  14. $match= trim(substr($match, 2, -4));
  15. $arr= explode(']', $match, 2);
  16. foreach ($arr as &$a) { $a= trim($a); }
  17. if (preg_match('/^cite=".+?"/', $arr[0])) {
  18. //$arr[0]= substr($arr[0], 5,-1);
  19. } else $arr[0]= '';
  20. $match= $arr;
  21. switch ($state) {
  22. case DOKU_LEXER_ENTER :
  23. return array($state, $match);
  24. case DOKU_LEXER_UNMATCHED :
  25. return array($state, $match);
  26. case DOKU_LEXER_EXIT :
  27. return array($state, '');
  28. case DOKU_LEXER_SPECIAL :
  29. return array($state, $match);
  30. }
  31. return array();
  32. }
  33. function render($mode, Doku_Renderer $renderer, $data) {
  34. list ($state, $match) = $data;
  35. switch ($state) {
  36. case DOKU_LEXER_ENTER :
  37. break;
  38. //case DOKU_LEXER_UNMATCHED :
  39. case DOKU_LEXER_SPECIAL :
  40. if(in_array($mode, ['xhtml', 's5'], true)) {
  41. //$match= $renderer->_xmlEntities($match);
  42. //$renderer->doc .= print_r($match,true);
  43. $match[1]= $renderer->_xmlEntities($match[1]);
  44. $renderer->doc.= <<<EOF
  45. <q {$match[0]}> {$match[1]} </q>
  46. EOF
  47. ;
  48. } else {
  49. $renderer->doc .= $match;
  50. }
  51. break;
  52. case DOKU_LEXER_EXIT:
  53. break;
  54. }
  55. return false;
  56. }
  57. }