*/ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); if (!defined('DOKU_LF')) define('DOKU_LF', "\n"); if (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once DOKU_PLUGIN.'syntax.php'; class syntax_plugin_ryubin_ryubin extends DokuWiki_Syntax_Plugin { public function getType() { return 'substition'; } public function getPType() { return 'block'; } public function getSort() { return 316; } public function connectTo($mode) { $this->Lexer->addSpecialPattern('\{\{ryubin>[^}]*\}\}',$mode,'plugin_ryubin_ryubin'); } public function handle($match, $state, $pos, &$handler){ global $conf; $data = array(); $match = substr($match,9,-2); // extract image or xml path and parameters list($img,$params) = explode('&',$match,2); $img = trim($img); $data['id'] = substr(md5($img),0,8); $data['mime'] = strtolower(explode('.',$img)); $data['img_path'] = $conf['basedir']."_media/".$img; // default values for the parameters $primary_xml = 'ryubin.xml'; if (is_file(DOKU_PLUGIN."ryubin/".$this->getconf('primary_xml'))) $primary_xml = $this->getConf('primary_xml'); $data['playmode'] = $this->getConf('playmode'); $data['fov'] = $this->getConf('fov'); $data['yaw'] = $this->getConf('yaw'); $data['pitch'] = $this->getConf('pitch'); $data['view_mode'] = intval($this->getConf('view_mode')); $data['hv_ratio'] = $this->getConf('hv_ratio'); $data['lock_nadirs'] = 'no'; if ($this->getConf('lock_nadirs')) $data['lock_nadirs'] = 'yes'; $data['lock_vertical'] = 'no'; if ($this->getConf('lock_vertical')) $data['lock_vertical'] = 'yes'; $data['lock_fov'] = 'no'; if ($this->getConf('lock_fov')) $data['lock_fov'] = 'yes'; $data['limit_vertical'] = 'no'; if ($this->getConf('limit_vertical')) $data['limit_vertical'] = 'yes'; $data['top_limit'] = $this->getConf('top_limit'); $data['bottom_limit'] = $this->getConf('bottom_limit'); $data['limit_horizontal'] = 'no'; if ($this->getConf('limit_horizontal')) $data['limit_horizontal'] = 'yes'; $data['right_limit'] = $this->getConf('right_limit'); $data['left_limit'] = $this->getConf('left_limit'); $data['proj_implicit'] = 'no'; if ($this->getConf('proj_implicit')) $data['proj_implicit'] = 'yes'; $data['elevation'] = $this->getConf('elevation'); $data['depression'] = $this->getConf('depression'); $data['proj_type'] = intval($this->getConf('proj_type')); $data['adminMode'] = 'no'; if ($this->getConf('adminMode')) $data['adminMode'] = 'yes'; $data['width'] = $this->getConf('width'); $data['height'] = $this->getConf('height'); $data['bgcolor'] = $this->getConf('bgcolor'); $data['xml_path'] = $conf['basedir']."lib/plugins/ryubin/".$primary_xml; $data['smooth'] = 'no'; if ($this->getConf('smooth')) $data['smooth'] = 'yes'; $data['disable_wheel'] = 'no'; if ($this->getConf('disable_wheel')) $data['disable_wheel'] = 'yes'; $data['allowFullScreen'] = 'false'; if ($this->getConf('allowFullScreen')) $data['allowFullScreen'] = 'true'; $data['allowScriptAccess'] = $this->getConf('allowScriptAccess'); // implement parameters from markup $params = explode('&',$params); foreach ($params as $param) { list($xml,$value)=explode('=',$param,2); $xml = trim($xml); switch ($xml) { case 'playmode': $modes = array('cube3x2','cube2x3','cube6','cube24','cylinder','doughnut','dualfisheye','fish2rect','fisheye','flat','simpleflat','sphere','sphere8','verticalfish2rect','verticalfisheye'); foreach ($modes as $mode) { if ($value == $mode) $data['playmode'] = $value; } break; case 'fov': $value = intval($value); if ($value > 19 && $value < 131) $data['fov'] = $value; break; case 'yaw': $value = intval($value); if ($value > -181 && $value < 181) $data['yaw'] = $value; break; case 'pitch': $value = intval($value); if ($value > -181 && $value < 181) $data['pitch'] = $value; break; case 'view_mode': $value = intval($value); if ($value > 0 && $value < 4) $data['view_mode'] = $value; break; case 'hv_ratio': if (is_numeric($value) && $value >= 0.1 && $value <= 10.0) $data['hv_ratio'] = $value; break; case 'lock_nadirs': if ($value == 'yes') $data['lock_nadirs'] = $value; break; case 'lock_vertical': if ($value == 'yes') $data['lock_vertical'] = $value; break; case 'lock_fov': if ($value == 'yes') $data['lock_fov'] = $value; break; case 'limit_vertical': if ($value == 'yes') $data['limit_vertical'] = $value; break; case 'top_limit': $value = intval($value); if ($value > 9 && $value < 91) $data['top_limit'] = $value; break; case 'bottom_limit': $value = intval($value); if ($value > 9 && $value < 91) $data['bottom_limit'] = $value; break; case 'limit_horizontal': if ($value == 'yes') $data['limit_horizontal'] = $value; break; case 'right_limit': $value = intval($value); if ($value > 9 && $value < 91) $data['right_limit'] = $value; break; case 'left_limit': $value = intval($value); if ($value > 9 && $value < 91) $data['left_limit'] = $value; break; case 'proj_implicit': if ($value == 'no') $data['proj_implicit'] = $value; break; case 'elevation': $value = intval($value); if ($value > 0 && $value < 91) $data['elevation'] = $value; break; case 'depression': $value = intval($value); if ($value > 0 && $value < 91) $data['depression'] = $value; break; case 'proj_type': $value = intval($value); if ($value == 2) $data['proj_type'] = $value; break; } if ($data['adminMode']) { if ($data['mime'] == 'xml') $data['xml_path'] = $conf['basedir']."_media/".$img; switch ($xml) { case 'width': $value = intval($value); if ($value > 319 && $value < 1921) $data['width'] = $value; break; case 'height': $value = intval($value); if ($value > 239 && $value < 1081) $data['height'] = $value; break; case 'bgcolor': if (preg_match("^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$",$value)) $data['bgcolor'] = $value; break; //TODO reason for preg_match warning? case 'smooth': if ($value == 'yes') $data['smooth'] = $value; break; case 'disable_wheel': if ($value == 'yes') $data['disable_wheel'] = $value; break; case 'allowFullScreen': if ($value == 'true') $data['allowFullScreen'] = $value; break; case 'allowScriptAccess': if ($value == 'sameDomain') $data['allowFullScreen'] = $value; if ($value == 'always') $data['allowFullScreen'] = $value; break; } } } // check markup parameters for consistency // TODO return $data; } public function render($mode, &$renderer, $data) { global $conf; if($mode != 'xhtml') return false; $doc = "\n
\n \n
\n\n"; $renderer->doc .= $doc; return true; } }