*/
class syntax_plugin_caption_reference extends DokuWiki_Syntax_Plugin {
/**
* Array containing the types of environment supported by the plugin
*/
/**
* return some info
*/
function getInfo(){
return confToHash(dirname(__FILE__).'/../plugin.info.txt');
}
public function getType() {
return 'substition';
}
public function getAllowedTypes() {
return array('formatting', 'substition', 'disabled', 'container', 'protected');
}
public function getPType() {
return 'normal';
}
public function getSort() {
return 319;
}
public function connectTo($mode) {
$this->Lexer->addSpecialPattern('{{ref>.+?}}',$mode,'plugin_caption_reference');
}
public function handle($match, $state, $pos, Doku_Handler $handler){
if (!(strpos($match,'{{ref>')===false)) {
return array($state, substr($match,6,-2));
}
return array();
}
public function render($mode, Doku_Renderer $renderer, $data) {
if ($mode == 'xhtml') {
list($state,$match) = $data;
switch ($state) {
case DOKU_LEXER_SPECIAL :
global $caption_labels;
$renderer->doc .= '';
if (isset($caption_labels[$match]) && $caption_labels[$match]) {
$renderer->doc .= $caption_labels[$match];
} else {
$renderer->doc .= '##REF:'.$match.'##';
}
$renderer->doc .= '';
break;
}
return true;
}
if ($mode == 'latex') {
list($state,$match) = $data;
switch ($state) {
case DOKU_LEXER_SPECIAL :
$renderer->doc .= '\ref{'.$match.'}';
break;
}
return true;
}
if ($mode == 'odt') {
list($state,$match) = $data;
switch ($state) {
case DOKU_LEXER_SPECIAL :
$renderer->doc .= '';
global $caption_labels;
if (isset($caption_labels[$match]) && $caption_labels[$match]) {
$renderer->doc .= $caption_labels[$match];
} else {
$renderer->doc .= '##REF:'.$match.'##';
}
$renderer->doc .= '';
break;
}
return true;
}
// unsupported $mode
return false;
}
}
// vim:ts=4:sw=4:et: