diff options
author | Ctibor Brančík <ctibor@brancik.cz> | 2016-03-23 20:43:48 +0100 |
---|---|---|
committer | Ctibor Brančík <ctibor@brancik.cz> | 2016-03-23 20:43:48 +0100 |
commit | 68656728cf13ee1317e9082ae3705ca7bb7a1392 (patch) | |
tree | d70e49faaf54bd26ee4215810fffff06ae254daa /lib/plugins/imagebox/syntax.php | |
parent | 972179a6d4f9a64843f72b5429e1d9cd62285b36 (diff) | |
download | rpg-68656728cf13ee1317e9082ae3705ca7bb7a1392.tar.gz rpg-68656728cf13ee1317e9082ae3705ca7bb7a1392.tar.bz2 |
Add imagebox and note plugins.
Diffstat (limited to 'lib/plugins/imagebox/syntax.php')
-rwxr-xr-x | lib/plugins/imagebox/syntax.php | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/lib/plugins/imagebox/syntax.php b/lib/plugins/imagebox/syntax.php new file mode 100755 index 000000000..1fe6fe1f3 --- /dev/null +++ b/lib/plugins/imagebox/syntax.php @@ -0,0 +1,119 @@ +<?php +/** + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author FFTiger <fftiger@wikisquare.com>, myst6re <myst6re@wikisquare.com> + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +class syntax_plugin_imagebox extends DokuWiki_Syntax_Plugin { + + function getInfo(){ + return array( + 'author' => 'FFTiger / myst6re', + 'email' => 'myst6re@wikisquare.com', + 'date' => '2010-05-30', + 'name' => 'Imagebox Plugin', + 'desc' => 'Entoure les images avec un cadre de décoration.', + 'url' => 'http://www.wikisquare.com/', + ); + } + + function getType(){ return 'protected'; } + function getAllowedTypes() { return array('substition','protected','disabled','formatting'); } + function getSort(){ return 315; } + function getPType(){ return 'block'; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[\{\{[^\|\}]+\|*(?=[^\}]*\}\}\])',$mode,'plugin_imagebox'); } + function postConnect() { $this->Lexer->addExitPattern('\}\}\]','plugin_imagebox'); } + + function handle($match, $state, $pos, &$handler){ + switch($state){ + case DOKU_LEXER_ENTER: + $match=Doku_Handler_Parse_Media(substr($match,3)); + $match['w'] = $match['width']; + $dispMagnify = ($match['w'] || $match['height']) && $this->getConf('display_magnify')=='If necessary' || $this->getConf('display_magnify')=='Always'; + + $gimgs = false; + list($src,$hash) = explode('#',$match['src'],2); + + if($match['type']=='internalmedia') { + global $ID; + $exists = false; + resolve_mediaid(getNS($ID), $src, $exists); + + if($dispMagnify) { + $match['detail'] = ml($src,array('id'=>$ID,'cache'=>$match['cache']),($match['linking']=='direct')); + if($hash) $match['detail'] .= '#'.$hash; + } + + if($exists) $gimgs = @getImageSize(mediaFN($src)); + } + else { + if($dispMagnify) { + $match['detail'] = ml($src,array('cache'=>'cache'),false); + if($hash) $match['detail'] .= '#'.$hash; + } + + $gimgs = @getImageSize($src); + } + + $match['exist'] = $gimgs!==false; + + if(!$match['w'] && $match['exist']){ + ($match['height'])? + $match['w'] = $match['height']*$gimgs[0]/$gimgs[1]: + $match['w'] = $gimgs[0]; + } + + if(!$match['align'] || $match['align']=='center'&&!$this->getConf('center_align')) + $match['align'] = 'rien'; + return array($state,$match); + + case DOKU_LEXER_UNMATCHED: + return array($state,$match); + + case DOKU_LEXER_EXIT: + return array($state,$match); + } + } + + function render($mode, &$renderer, $data){ + if($mode == 'xhtml'){ + list($state,$match) = $data; + + switch($state){ + case DOKU_LEXER_ENTER: + $renderer->doc.= '<div class="thumb2 t'.$match['align'].'" style="width:'.($match['w']?($match['w']+10).'px':'auto').'"><div class="thumbinner">'; + if($match['exist']) + $renderer->$match['type']($match['src'],$match['title'],'box2',$match['width'],$match['height'],$match['cache'],$match['linking']); + else + $renderer->doc.= 'Invalid Link'; + $renderer->doc.= '<div class="thumbcaption">'; + if($match['detail']) { + $renderer->doc.= '<div class="magnify">'; + $renderer->doc.= '<a class="internal" title="'.$this->getLang('enlarge').'" href="'.$match['detail'].'">'; + $renderer->doc.= '<img width="15" height="11" alt="" src="'.DOKU_BASE.'lib/plugins/imagebox/magnify-clip.png"/>'; + $renderer->doc.= '</a></div>'; + } + break; + + case DOKU_LEXER_UNMATCHED: + $style=$this->getConf('default_caption_style'); + if($style=='Italic') $renderer->doc .= '<em>'.$renderer->_xmlEntities($match).'</em>'; + elseif($style=='Bold') $renderer->doc .= '<strong>'.$renderer->_xmlEntities($match).'</strong>'; + else $renderer->doc .= $renderer->_xmlEntities($match); + break; + + case DOKU_LEXER_EXIT: + $renderer->doc.= '</div></div></div>'; + break; + } + return true; + } + return false; + } +} + +//Setup VIM: ex: et ts=4 enc=utf-8 : |