*/ if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); define('PLUGIN_FLOW', DOKU_BASE.'lib/plugins/flowplay2/flowplayer/'); require_once(DOKU_PLUGIN.'syntax.php'); if (!function_exists('hsc')) { function hsc($string){ return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); } } class syntax_plugin_flowplay2 extends DokuWiki_Syntax_Plugin { function getInfo() { return array ( 'author' => 'bSpot', 'email' => 'blind@bspot.de', 'date' => '2008-04-16', 'version'=> '0.3', 'name' => 'flowplay2', 'desc' => 'Embeds a video stream player flash applet into your page', 'url' => 'http://wiki.splitbrain.org/plugin:flowplay2', 'ack' => 'This is mostly based on the flowplay-plugin by Dave Kliczbor et al.', ); } function getType() { return 'protected';} function getAllowedTypes() { return array('container','substition','protected','disabled','formatting','paragraphs'); } function getPType() { return 'normal';} function getSort() { return 191; } function connectTo($mode) { // pattern for the flashplayer $this->Lexer->addSpecialPattern('{{flowplay>.*?}}', $mode, 'plugin_flowplay2'); // entry pattern for playlist-items $this->Lexer->addEntryPattern('\[\[flowplay>[^|]*\|',$mode,'plugin_flowplay2'); } function postConnect() { // exit pattern for playlist-items $this->Lexer->addExitPattern('\]\]','plugin_flowplay2'); } function handle($match,$state,$pos,&$handler) { $m = array(); switch ($state) { // player case DOKU_LEXER_SPECIAL: list($url, $paramStr) = explode('?', substr($match, strlen('{{flowplay>'), -2), 2); // prepare parameter list foreach (explode(" ", $paramStr) as $param) { // width/height parameter if ( preg_match('/(\d+)x(\d+)/', $param, $m) ) { $params['width'] = $m[1]; $params['height'] = $m[2]; } // non-boolean parameter else if ( preg_match('/([^:]+):(.*)$/', $param, $m) ) $params[$m[1]] = $m[2]; // boolean parameter set to false else if (substr($param, 0, 2) == "no") $params[strtolower(substr($param, 2, 1)) . substr($param, 3)] = False; // boolean parameter set to true else $params[$param] = True; } return array('type' => 'player', 'url' => $url, 'paramStr' => $paramStr, 'params' => $params); // playlist case DOKU_LEXER_ENTER: $url = substr($match, strlen('[[flowplay>'), -1); return array('type' => 'playlist_open', 'url' => $url); case DOKU_LEXER_MATCHED: return array('type' => 'data', 'match' => $match); case DOKU_LEXER_UNMATCHED: return array('type' => 'data', 'match' => $match); case DOKU_LEXER_EXIT: return array('type' => 'playlist_close', 'match' => $match); } return false; } function render($mode, &$renderer, $indata) { if($mode == 'xhtml') { switch ($indata['type']) { // player case 'player' : /* // DISABLED DEBUG OUTPUT $renderer->doc .= "