*/ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); 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 */ /* * * text * * width: percent of window size * align: number of pixels from left margin, (0 or 'c' centers block), 'r' floats right * border: CSS style: width type color * font-family: font name * font size: specify points or pixels * * Example: * * * This creates a block 80% of page width,centered on page, background of block is rgb(102, 51, 255), * text-color is rgb(255, 255, 153); the box border is 2px wide, dashed, its color is rgb(255, 102, 255). * The font is 10pt Comic Sans MS. * * Only width and alignment are required. In this case, if alignment is 'c' or 'r', * then you must follow it with a colon: 'c:' */ class syntax_plugin_block extends DokuWiki_Syntax_Plugin { var $edit = false; function getType(){ return 'formatting'; } function getAllowedTypes() { return array('formatting','baseonly', 'substition','container', 'paragraphs'); } function getSort(){ return 160; } function connectTo($mode) { $this->Lexer->addEntryPattern('(?=.*?)',$mode,'plugin_block'); } function postConnect() { $this->Lexer->addExitPattern('','plugin_block'); } function getPType() { return "stack"; } /** * Handle the match */ function handle($match, $state, $pos, Doku_Handler $handler){ $padding = 0; $width = "100%"; $margin = ' margin: auto '; $bgcolor = 'white'; $text_color = ""; $border = ""; $font = ""; $face = ""; $font_size = ""; $rounded_corners = " class='blocks_round' "; $class = ""; global $INPUT; $this->edit = $INPUT->str('edit'); switch ($state) { case DOKU_LEXER_ENTER : list($type, $val) = preg_split("/\s+/u", substr($match, 1, -1), 2); if(!isset($type)) return array($state, ''); if(!isset($val)) { $this->edit = false; return array($state, '
'); } if(preg_match("/rounded\s*$/",$val)) { $val = preg_replace("/rounded\s*$/","",$val); $class = $rounded_corners; } if(preg_match('/(\d+)\%?:(\d+|r|c):(.*)/',$val, $matches)) { $width = $matches[1] .'%'; if($matches[2] == 'r') { $margin = ' float: right '; } elseif($matches[2]> 0) { $margin = ' margin-left: ' . $matches[2] . 'px'; } $color = $matches[3]; if($color) { list($bg,$fg,$border,$font) = explode(';',$color); if($bg) $bgcolor = "$bg;"; if($fg) $text_color = "color: $fg;"; if($border) $border = "border: $border;"; if($font) { list($face,$size) = explode('/',$font); if($face) { $face = " font-family: $face; "; } if($size) { $font_size =" font-size: $size; "; } $font = $face . $font_size; } } } elseif(preg_match('/(\d+)\%?:(\d+)/',$val, $matches)) { $width = $matches[1] .'%'; if($matches[2]> 0) $margin = ' margin-left: ' . $matches[2] . 'px'; } if($this->edit){ return array($state, "
" ); } return array($state, "
"); return array($state, $match); case DOKU_LEXER_UNMATCHED : return array($state, $match); case DOKU_LEXER_EXIT : return array($state,$match); } return array(); } /** * Create output */ function render($mode, Doku_Renderer $renderer, $data) { if($mode == 'xhtml'){ list($state, $match) = $data; switch ($state) { case DOKU_LEXER_ENTER : $renderer->doc .= $match; break; case DOKU_LEXER_UNMATCHED : $renderer->doc .= $renderer->_xmlEntities($match); break; case DOKU_LEXER_EXIT : if($this->edit){ $renderer->doc .= "

"; } else { $renderer->doc .= "
"; } break; } return true; } return false; } function _isValid($c) { $c = trim($c); $pattern = "/ ([a-zA-z]+)| #colorname - not verified (\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))| #colorvalue (rgb\(([0-9]{1,3}%?,){2}[0-9]{1,3}%?\)) #rgb triplet /x"; if (preg_match($pattern, $c)) return $c; return ""; } function write_debug($data) { if (!$handle = fopen('block_check.txt', 'a')) { return; } // Write $somecontent to our opened file. fwrite($handle, "$data\n"); fclose($handle); } } ?>