* title (optional) all text after '|' will be rendered above the main code text with a * different style. * * if no title is provided will render as native dokuwiki code syntax mode, e.g. *
...* * if title is provided will render as follows *
{title}
*...*
handler, adds a title to the box and JavaScript-based syntax highlighting.
Syntax: , title is optional and does not support any dokuwiki markup.',
'url' => 'https://www.dokuwiki.org/plugin:code3',
);
}
function getType(){ return 'protected';}
function getPType(){ return 'block';}
// must return a number lower than returned by native 'code' mode (200)
function getSort(){ return 193; }
/**
* Connect pattern to lexer
*/
function connectTo($mode) {
$this->Lexer->addEntryPattern('.*?)',$mode,'plugin_code_code');
}
function postConnect() {
$this->Lexer->addExitPattern('', 'plugin_code_code');
}
/**
* Handle the match
*/
function handle($match, $state, $pos, &$handler){
switch ($state) {
case DOKU_LEXER_ENTER:
$this->syntax = substr($match, 1);
return false;
case DOKU_LEXER_UNMATCHED:
// will include everything from
// e.g. ... [lang] [|title] > [content]
list($attr, $content) = preg_split('/>/u',$match,2);
list($lang, $title) = preg_split('/\|/u',$attr,2);
if ($this->syntax == 'code') {
$lang = trim($lang);
if ($lang == 'html') $lang = 'html4strict';
if (!$lang) $lang = NULL;
} else {
$lang = NULL;
}
return array($this->syntax, $lang, trim($title), $content);
}
return false;
}
/**
* Create output
*/
function render($mode, &$renderer, $data) {
if($mode == 'xhtml'){
if (count($data) == 4) {
list($syntax, $lang, $title, $content) = $data;
if ($title) $renderer->doc .= "".$renderer->_xmlEntities($title)."
";
if ($syntax == 'code')
$renderer->doc .= "".$renderer->_xmlEntities($content)."
";
else
$renderer->file($content);
if ($title) $renderer->doc .= "";
}
return true;
}
return false;
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :