*/ 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 .= "";*/ $renderer->doc .= $this->_renderPlayer($indata); break; // playlist case 'playlist_open' : $renderer->doc .= ""; break; case 'data': $renderer->doc .= $renderer->_xmlEntities($indata['match']); break; case 'playlist_close' : $renderer->doc .= ""; break; } return true; } return false; } function _renderPlayer($indata) { // determine player url if( strlen($this->getConf('player_base_url')) > 0 ) $prefix = $this->getConf('player_base_url'); else $prefix = PLUGIN_FLOW; if( $prefix{strlen($prefix)-1} !== '/' ) $prefix .= '/'; $params = $indata["params"]; // embed javascript $r = ''; $r .= ''; // player configuration $r .= "" . DOKU_LF; // add the player-div $r .= "
"; return $r; } } ?>