with security concerns */ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_htmlsafe extends DokuWiki_Syntax_Plugin { function getType() { return 'protected';} function getPType() { return 'normal';} function getSort() { return 189; } /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addSpecialPattern('.*?', $mode, 'plugin_htmlsafe'); $this->Lexer->addSpecialPattern('.*?', $mode, 'plugin_htmlsafe'); } /** * Handle the match */ function handle($match, $state, $pos, &$handler){ return array( substr($match,1,4), substr($match,6,-7) ); } /** * Create output */ function render($format, &$renderer, $data) { if($format == 'xhtml'){ list($tag,$content) = $data; global $conf; $wrapper = ($tag === "HTML") ? "pre" : "code"; if($conf['htmlok']){ $strict = strtolower(str_replace(',',' ',$this->getConf('filter'))); $strict = array_unique(array_filter(explode(' ',$strict))); $strict = implode( "|", $strict ); $renderer->doc .= preg_replace( "/<(\/?)($strict)(\s|>)/i", "<$1$2$3", $content ); } else { $renderer->doc .= p_xhtml_cached_geshi($content, 'html4strict', $wrapper); } return true; } return false; } }