, Christopher Smith * @seealso (http://www.dokuwiki.org/plugin:iframe) */ 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'); /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_google_cal extends DokuWiki_Syntax_Plugin { function getInfo(){ return array( 'author1' => 'Kite', 'email1' => 'kite@puzzlers.org', 'author2' => 'Christopher Smith', 'email2' => 'chris@jalakai.co.uk', 'date' => '2007-05-01', 'name' => 'Google Calendar Plugin', 'desc' => 'Adds a Google Calendar iframe syntax: {{cal>name@address[w,h]|alternate text}}', 'url' => 'http://www.dokuwiki.org/plugin:google_cal', ); } function getType() { return 'substition'; } function getPType(){ return 'block'; } function getSort() { return 305; } function connectTo($mode) { $this->Lexer->addSpecialPattern('{{cal>[^}]*?}}',$mode,'plugin_google_cal'); } function handle($match, $state, $pos, &$handler){ if(preg_match('/{{cal>(.*)/', $match)) { // Hook for future features // Handle the simplified style of calendar tag $match = html_entity_decode(substr($match, 6, -2)); @list($url, $alt) = explode('|',$match,2); $matches=array(); // '/^\s*([^\[|]+)(?:\[(?:([^,\]]*),)?([^,\]]*)\])?(?:\s*(?:\|\s*(.*))?)?$/mD' if (preg_match('/(.*)\[(.*)\]$/',trim($url),$matches)) { $url = $matches[1]; if (strpos($matches[2],',') !== false) { @list($w, $h) = explode(',',$matches[2],2); } else { $h = $matches[2]; $w = '98%'; } } else { $w = '98%'; $h = '600'; } if (!isset($alt)) $alt = ''; if (!$this->getConf('js_ok') && substr($url,0,11) == 'javascript:') { return array('error', $this->getLang('gcal_No_JS')); } return array('wiki', hsc(trim("$url")), hsc(trim($alt)), hsc(trim($w)), hsc(trim($h))); } else { return array('error', $this->getLang("gcal_Bad_iFrame")); // this is an error } // matched {{cal>... } function render($mode, &$renderer, $data) { list($style, $url, $alt, $w, $h) = $data; if($mode == 'xhtml'){ // Two styles: wiki and error switch($style) { case 'wiki': $renderer->doc .= "\n"; break; case 'error': $renderer->doc .= "
$url
"; break; default: $renderer->doc .= "
" . $this->getLang('gcal_Invalid_mode') . "
"; break; } return true; } return false; } } ?>