117e6d639SJames Collins<?php 217e6d639SJames Collins/** 317e6d639SJames Collins * Mikio Core Syntax Plugin 417e6d639SJames Collins * 517e6d639SJames Collins * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 617e6d639SJames Collins * @author James Collins <james.collins@outlook.com.au> 717e6d639SJames Collins */ 817e6d639SJames Collins 917e6d639SJames Collinsif (!defined('DOKU_INC')) die(); 1017e6d639SJames Collinsif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 1117e6d639SJames Collins 1217e6d639SJames Collins 1317e6d639SJames Collinsclass syntax_plugin_mikioplugin_core extends DokuWiki_Syntax_Plugin { 1417e6d639SJames Collins public $pattern_entry = ''; 153deaf3a5SJames Collins public $pattern = ''; 1617e6d639SJames Collins public $pattern_exit = ''; 1717e6d639SJames Collins public $tag = ''; 1817e6d639SJames Collins public $noEndTag = false; 1917e6d639SJames Collins public $defaults = array(); 2017e6d639SJames Collins public $options = array(); 21ebb7bc5aSJames Collins public $privateOptions = false; 2217e6d639SJames Collins public $values = array(); 23a401c3b7SJames Collins public $incClasses = array('shadow', 'shadow-none', 'shadow-sm', 'shadow-lg', 'w-25', 'w-50', 'w-75', 'w-100', 'w-auto', 'h-25', 'h-50', 'h-75', 'h-100', 'h-auto', 'text-left', 'text-center', 'text-right', 'text-justify', 'text-wrap', 'text-nowrap', 'text-truncate', 'text-break', 'text-lowercase', 'text-uppercase', 'text-capitalize', 'font-weight-bold', 'font-weight-bolder', 'font-weight-normal', 'font-weight-light', 'font-weight-lighter', 'font-italic', 'text-monospace', 'text-reset', 'text-muted', 'text-decoration-none', 'text-primary', 'text-secondary', 'text-success', 'text-danger', 'text-warning', 'text-info', 'text-light'. 'text-dark', 'text-body', 'text-white', 'text-black', 'text-white-50', 'text-black-50', 'bg-primary', 'bg-secondary', 'bg-success', 'bg-danger', 'bg-warning', 'bg-info', 'bg-light', 'bg-dark', 'bg-white', 'bg-transparent', 'border', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-0', 'border-top-0', 'border-right-0', 'border-bottom-0', 'border-left-0', 'border-primary', 'border-secondary', 'border-success', 'border-danger', 'border-warning', 'border-info', 'border-light', 'border-dark', 'border-white', 'rounded', 'rounded-top', 'rounded-right', 'rounded-bottom', 'rounded-left', 'rounded-circle', 'rounded-pill', 'rounded-0', 'rounded-sm', 'rounded-lg', 'clearfix', 'align-baseline', 'align-top', 'align-middle', 'align-bottom', 'align-text-top', 'align-text-bottom', 'sm-1', 'sm-2', 'sm-3', 'sm-4', 'sm-5', 'sm-6', 'sm-7', 'sm-8', 'sm-9', 'sm-10', 'sm-11', 'sm-12', 'md-1', 'md-2', 'md-3', 'md-4', 'md-5', 'md-6', 'md-7', 'md-8', 'md-9', 'md-10', 'md-11', 'md-12', 'lg-1', 'lg-2', 'lg-3', 'lg-4', 'lg-5', 'lg-6', 'lg-7', 'lg-8', 'lg-9', 'lg-10', 'lg-11', 'lg-12'); 24a401c3b7SJames Collins public $incOptions = array('width', 'min-width', 'max-width', 'height', 'min-height', 'max-height', 'overflow', 'tooltip', 'tooltip-html', 'tooltop-left', 'tooltip-top', 'tooltip-right', 'tooltip-bottom', 'tooltip-html-top', 'tooltip-html-left', 'tooltip-html-right', 'tooltip-html-bottom'); 2517e6d639SJames Collins 2617e6d639SJames Collins 2717e6d639SJames Collins function __construct() { 28*f4aa5cdcSJames Collins if($this->tag != '') { 29ebb7bc5aSJames Collins if(count($this->incClasses) > 0 && !$this->privateOptions) { 30a401c3b7SJames Collins $this->options = array_merge($this->options, $this->incClasses, $this->incOptions); 3117e6d639SJames Collins } 3217e6d639SJames Collins } 33*f4aa5cdcSJames Collins } 3417e6d639SJames Collins 3517e6d639SJames Collins public function getType() { 3617e6d639SJames Collins return 'formatting'; 3717e6d639SJames Collins } 3817e6d639SJames Collins 3917e6d639SJames Collins 40*f4aa5cdcSJames Collins public function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } 4117e6d639SJames Collins public function getSort(){ return 32; } 4217e6d639SJames Collins 4317e6d639SJames Collins 4417e6d639SJames Collins public function connectTo($mode) { 4517e6d639SJames Collins if($this->pattern_entry == '' && $this->tag != '') { 4617e6d639SJames Collins if($this->noEndTag) { 4717e6d639SJames Collins $this->pattern_entry = '<(?:' . strtoupper($this->tag) . '|' . strtolower($this->tag) . ').*?>'; 4817e6d639SJames Collins } else { 49*f4aa5cdcSJames Collins $this->pattern_entry = '<(?:' . strtoupper($this->tag) . '|' . strtolower($this->tag) . ')(?=[ >]).*?>(?=.*?</(?:' . strtoupper($this->tag) . '|' . strtolower($this->tag) . ')>)'; 5017e6d639SJames Collins } 5117e6d639SJames Collins } 5217e6d639SJames Collins 5317e6d639SJames Collins if($this->pattern_entry != '') { 5417e6d639SJames Collins if($this->noEndTag) { 5517e6d639SJames Collins $this->Lexer->addSpecialPattern($this->pattern_entry, $mode, 'plugin_mikioplugin_'.$this->getPluginComponent()); 5617e6d639SJames Collins } else { 5717e6d639SJames Collins $this->Lexer->addEntryPattern($this->pattern_entry, $mode, 'plugin_mikioplugin_'.$this->getPluginComponent()); 5817e6d639SJames Collins } 5917e6d639SJames Collins } 603deaf3a5SJames Collins 613deaf3a5SJames Collins // if($this->pattern != '') { 623deaf3a5SJames Collins // $this->Lexer->addPattern($this->pattern, 'plugin_mikioplugin_'.$this->getPluginComponent()); 633deaf3a5SJames Collins // } 6417e6d639SJames Collins } 6517e6d639SJames Collins 6617e6d639SJames Collins 6717e6d639SJames Collins public function postConnect() { 6817e6d639SJames Collins if(!$this->noEndTag) { 6917e6d639SJames Collins if($this->pattern_exit == '' && $this->tag != '') { 7017e6d639SJames Collins $this->pattern_exit = '</(?:' . strtoupper($this->tag) . '|' . strtolower($this->tag) . ')>'; 7117e6d639SJames Collins } 7217e6d639SJames Collins 7317e6d639SJames Collins if($this->pattern_exit != '') { 7417e6d639SJames Collins $this->Lexer->addExitPattern($this->pattern_exit, 'plugin_mikioplugin_'.$this->getPluginComponent()); 7517e6d639SJames Collins } 7617e6d639SJames Collins } 7717e6d639SJames Collins } 7817e6d639SJames Collins 7917e6d639SJames Collins public function handle($match, $state, $pos, Doku_Handler $handler){ 80*f4aa5cdcSJames Collins if($this->tag == '') return array($state, $match); 81*f4aa5cdcSJames Collins 8217e6d639SJames Collins switch($state) { 8317e6d639SJames Collins case DOKU_LEXER_ENTER: 8417e6d639SJames Collins case DOKU_LEXER_SPECIAL: 8517e6d639SJames Collins $optionlist = preg_split('/\s(?=([^"]*"[^"]*")*[^"]*$)/', substr($match, strlen($this->tag) + 1, -1)); 8617e6d639SJames Collins 8717e6d639SJames Collins $options = array(); 8817e6d639SJames Collins foreach($optionlist as $item) { 8917e6d639SJames Collins $i = strpos($item, '='); 9017e6d639SJames Collins if($i !== false) { 9117e6d639SJames Collins $value = substr($item, $i + 1); 9217e6d639SJames Collins 9317e6d639SJames Collins if(substr($value, 0, 1) == '"') $value = substr($value, 1); 9417e6d639SJames Collins if(substr($value, -1) == '"') $value = substr($value, 0, -1); 9517e6d639SJames Collins 9617e6d639SJames Collins $options[substr($item, 0, $i)] = $value; 9717e6d639SJames Collins } else { 9817e6d639SJames Collins $options[$item] = true; 9917e6d639SJames Collins } 10017e6d639SJames Collins } 10117e6d639SJames Collins 10231359b6fSJames Collins $options_clean = $this->cleanOptions($options); 10331359b6fSJames Collins 10431359b6fSJames Collins $this->values = $options_clean; 10531359b6fSJames Collins 10631359b6fSJames Collins return array($state, $options_clean); 10731359b6fSJames Collins 1083deaf3a5SJames Collins case DOKU_LEXER_MATCHED: 1093deaf3a5SJames Collins return array($state, $match); 1103deaf3a5SJames Collins 11131359b6fSJames Collins case DOKU_LEXER_UNMATCHED: 11231359b6fSJames Collins return array($state, $match); 11331359b6fSJames Collins 11431359b6fSJames Collins case DOKU_LEXER_EXIT: 115*f4aa5cdcSJames Collins return array($state, $this->values); 11631359b6fSJames Collins } 11731359b6fSJames Collins 11831359b6fSJames Collins return array(); 11931359b6fSJames Collins } 12031359b6fSJames Collins 12131359b6fSJames Collins 12231359b6fSJames Collins public function cleanOptions($options) { 12331359b6fSJames Collins $options_clean = array(); 12431359b6fSJames Collins 125ebb7bc5aSJames Collins if(!$this->privateOptions) { 12617e6d639SJames Collins foreach($this->options as $item => $value) { 12717e6d639SJames Collins if(is_string($value)) { 12817e6d639SJames Collins if(array_key_exists($value, $options)) { 12917e6d639SJames Collins $options_clean[$value] = $options[$value]; 13017e6d639SJames Collins } else { 13117e6d639SJames Collins $options_clean[$value] = false; 13217e6d639SJames Collins } 13317e6d639SJames Collins } else if(is_array($value)) { 13417e6d639SJames Collins foreach($value as $avalue) { 13517e6d639SJames Collins if(array_key_exists($avalue, $options)) { 13617e6d639SJames Collins $options_clean[$item] = $avalue; 13717e6d639SJames Collins } 13817e6d639SJames Collins } 13917e6d639SJames Collins } 14017e6d639SJames Collins } 14117e6d639SJames Collins 14217e6d639SJames Collins foreach($this->defaults as $item => $value) { 14317e6d639SJames Collins if(array_key_exists($item, $options_clean) == false) { 14417e6d639SJames Collins $options_clean[$item] = $value; 14517e6d639SJames Collins } 14617e6d639SJames Collins } 147ebb7bc5aSJames Collins } else { 148ebb7bc5aSJames Collins $options_clean = $options; 149ebb7bc5aSJames Collins array_shift($options_clean); 150ebb7bc5aSJames Collins } 15117e6d639SJames Collins 15231359b6fSJames Collins return $options_clean; 15317e6d639SJames Collins } 15417e6d639SJames Collins 15517e6d639SJames Collins 15617e6d639SJames Collins public function render_lexer_enter(Doku_Renderer $renderer, $data) { 15717e6d639SJames Collins 15817e6d639SJames Collins } 15917e6d639SJames Collins 16017e6d639SJames Collins 16117e6d639SJames Collins public function render_lexer_unmatched(Doku_Renderer $renderer, $data) { 16217e6d639SJames Collins $renderer->doc .= $renderer->_xmlEntities($data); 16317e6d639SJames Collins } 16417e6d639SJames Collins 16517e6d639SJames Collins 16617e6d639SJames Collins public function render_lexer_exit(Doku_Renderer $renderer, $data) { 16717e6d639SJames Collins 16817e6d639SJames Collins } 16917e6d639SJames Collins 17017e6d639SJames Collins 17117e6d639SJames Collins public function render_lexer_special(Doku_Renderer $renderer, $data) { 17217e6d639SJames Collins 17317e6d639SJames Collins } 17417e6d639SJames Collins 17517e6d639SJames Collins 1763deaf3a5SJames Collins public function render_lexer_match(Doku_Renderer $renderer, $data) { 1773deaf3a5SJames Collins 1783deaf3a5SJames Collins } 1793deaf3a5SJames Collins 1803deaf3a5SJames Collins 18117e6d639SJames Collins public function render($mode, Doku_Renderer $renderer, $data) { 18217e6d639SJames Collins if($mode == 'xhtml'){ 18317e6d639SJames Collins list($state,$match) = $data; 18417e6d639SJames Collins 18517e6d639SJames Collins switch ($state) { 18617e6d639SJames Collins case DOKU_LEXER_ENTER: 18717e6d639SJames Collins $this->render_lexer_enter($renderer, $match); 18817e6d639SJames Collins return true; 18917e6d639SJames Collins 19017e6d639SJames Collins case DOKU_LEXER_UNMATCHED : 19117e6d639SJames Collins $this->render_lexer_unmatched($renderer, $match); 19217e6d639SJames Collins return true; 19317e6d639SJames Collins 1943deaf3a5SJames Collins case DOKU_LEXER_MATCHED: 1953deaf3a5SJames Collins $this->render_lexer_match($renderer, $match); 1963deaf3a5SJames Collins return true; 1973deaf3a5SJames Collins 19817e6d639SJames Collins case DOKU_LEXER_EXIT : 19917e6d639SJames Collins $this->render_lexer_exit($renderer, $match); 20017e6d639SJames Collins return true; 20117e6d639SJames Collins 20217e6d639SJames Collins case DOKU_LEXER_SPECIAL: 20317e6d639SJames Collins $this->render_lexer_special($renderer, $match); 20417e6d639SJames Collins return true; 20517e6d639SJames Collins } 20617e6d639SJames Collins 20717e6d639SJames Collins return true; 20817e6d639SJames Collins } 20917e6d639SJames Collins 21017e6d639SJames Collins return false; 21117e6d639SJames Collins } 21217e6d639SJames Collins 21317e6d639SJames Collins 214a007b54fSJames Collins public function buildClassString($options=null, $classes=null, $prefix='') { 21517e6d639SJames Collins $s = array(); 21617e6d639SJames Collins 217a007b54fSJames Collins if($options != null) { 218a007b54fSJames Collins if($classes != null) { 21917e6d639SJames Collins foreach($classes as $item) { 22017e6d639SJames Collins if(array_key_exists($item, $options) && $options[$item] !== false) { 22117e6d639SJames Collins $classname = $item; 22217e6d639SJames Collins 22317e6d639SJames Collins if(is_string($options[$item])) { 22417e6d639SJames Collins $classname = $options[$item]; 22517e6d639SJames Collins } 22617e6d639SJames Collins 22717e6d639SJames Collins if(is_string($prefix)) { 22817e6d639SJames Collins $classname = $prefix . $classname; 22917e6d639SJames Collins } else if(is_array($prefix)) { 23017e6d639SJames Collins foreach($prefix as $pitem => $pvalue) { 23117e6d639SJames Collins if(is_string($pvalue)) { 23217e6d639SJames Collins if($pvalue == $item) { 23317e6d639SJames Collins if(is_string($options[$item])) { 23417e6d639SJames Collins $classname = $pitem . $options[$item]; 23517e6d639SJames Collins } else { 23617e6d639SJames Collins $classname = $pitem . $item; 23717e6d639SJames Collins } 23817e6d639SJames Collins } 23917e6d639SJames Collins } 24017e6d639SJames Collins 24117e6d639SJames Collins if(is_array($pvalue)) { 24217e6d639SJames Collins foreach($pvalue as $ppitem) { 24317e6d639SJames Collins if($ppitem == $item) { 24417e6d639SJames Collins if(is_string($options[$item])) { 24517e6d639SJames Collins $classname = $pitem . $options[$item]; 24617e6d639SJames Collins } else { 24717e6d639SJames Collins $classname = $pitem . $item; 24817e6d639SJames Collins } 24917e6d639SJames Collins } 25017e6d639SJames Collins } 25117e6d639SJames Collins } 25217e6d639SJames Collins } 25317e6d639SJames Collins } 25417e6d639SJames Collins 25517e6d639SJames Collins $s[] = $classname; 25617e6d639SJames Collins } 25717e6d639SJames Collins } 258a007b54fSJames Collins } 25917e6d639SJames Collins 2608f786230SJames Collins foreach($this->incClasses as $item => $value) { 2618f786230SJames Collins if(array_key_exists($value, $options) && $options[$value] == true) { 2628f786230SJames Collins $pre = substr($value, 0, 3); 2638f786230SJames Collins if($pre == 'sm-' || $pre == 'md-' || $pre == 'lg-') $value = 'col-' . $value; 2648f786230SJames Collins 2658f786230SJames Collins $s[] = $value; 26617e6d639SJames Collins } 267a007b54fSJames Collins } 2688f786230SJames Collins } 2698f786230SJames Collins 27017e6d639SJames Collins $s = ' ' . implode(' ', $s); 27117e6d639SJames Collins return $s; 27217e6d639SJames Collins } 27317e6d639SJames Collins 274a401c3b7SJames Collins public function buildStyleString($options, $ignore=null, $append='') { 275ad1dae96SJames Collins $s = array(); 276ad1dae96SJames Collins 277ad1dae96SJames Collins if($options != null) { 278ad1dae96SJames Collins foreach($options as $item => $value) { 2796cfe6dadSJames Collins if($value != false && ($ignore == null || (is_string($ignore) && $ignore != $item) || (is_array($ignore) && in_array($item, $ignore) == false))) { 280ad1dae96SJames Collins switch($item) { 281ad1dae96SJames Collins case 'width': 282ad1dae96SJames Collins $s[] = 'width:' . $value; 283ad1dae96SJames Collins break; 284ad1dae96SJames Collins case 'height': 285ad1dae96SJames Collins $s[] = 'height:' . $value; 286ad1dae96SJames Collins break; 2876cfe6dadSJames Collins case 'min-width': 2886cfe6dadSJames Collins $s[] = 'min-width:' . $value; 2896cfe6dadSJames Collins break; 2906cfe6dadSJames Collins case 'min-height': 2916cfe6dadSJames Collins $s[] = 'min-height:' . $value; 2926cfe6dadSJames Collins break; 293ad1dae96SJames Collins case 'max-width': 294ad1dae96SJames Collins $s[] = 'max-width:' . $value; 295ad1dae96SJames Collins break; 296ad1dae96SJames Collins case 'max-height': 297ad1dae96SJames Collins $s[] = 'max-height:' . $value; 298ad1dae96SJames Collins break; 2996cfe6dadSJames Collins case 'overflow': 3006cfe6dadSJames Collins $s[] = 'overflow:' . $value; 3016cfe6dadSJames Collins break; 3026cfe6dadSJames Collins } 303ad1dae96SJames Collins } 304ad1dae96SJames Collins } 305ad1dae96SJames Collins } 306ad1dae96SJames Collins 307*f4aa5cdcSJames Collins $s = implode(';', $s) . '; ' . $append; 3086cfe6dadSJames Collins 3096cfe6dadSJames Collins if($s != '') $s = ' style="' . $s . '" '; 3106cfe6dadSJames Collins 311ad1dae96SJames Collins return $s; 312ad1dae96SJames Collins } 31317e6d639SJames Collins 314a401c3b7SJames Collins public function buildTooltipString($options) { 315a401c3b7SJames Collins $dataPlacement = 'top'; 316a401c3b7SJames Collins $dataHtml = false; 317a401c3b7SJames Collins $title = ''; 318a401c3b7SJames Collins 319a401c3b7SJames Collins if($options != null) { 320a401c3b7SJames Collins if(array_key_exists('tooltip-html-top', $options) && $options['tooltip-html-top'] != '') { 321a401c3b7SJames Collins $title = $options['tooltip-html-top']; 322a401c3b7SJames Collins $dataPlacement = 'top'; 323a401c3b7SJames Collins } 324a401c3b7SJames Collins 325a401c3b7SJames Collins if(array_key_exists('tooltip-html-left', $options) && $options['tooltip-html-left'] != '') { 326a401c3b7SJames Collins $title = $options['tooltip-html-left']; 327a401c3b7SJames Collins $dataPlacement = 'left'; 328a401c3b7SJames Collins } 329a401c3b7SJames Collins 330a401c3b7SJames Collins if(array_key_exists('tooltip-html-bottom', $options) && $options['tooltip-html-bottom'] != '') { 331a401c3b7SJames Collins $title = $options['tooltip-html-bottom']; 332a401c3b7SJames Collins $dataPlacement = 'bottom'; 333a401c3b7SJames Collins } 334a401c3b7SJames Collins 335a401c3b7SJames Collins if(array_key_exists('tooltip-html-right', $options) && $options['tooltip-html-right'] != '') { 336a401c3b7SJames Collins $title = $options['tooltip-html-right']; 337a401c3b7SJames Collins $dataPlacement = 'right'; 338a401c3b7SJames Collins } 339a401c3b7SJames Collins 340a401c3b7SJames Collins if(array_key_exists('tooltip-top', $options) && $options['tooltip-top'] != '') { 341a401c3b7SJames Collins $title = $options['tooltip-top']; 342a401c3b7SJames Collins $dataPlacement = 'top'; 343a401c3b7SJames Collins } 344a401c3b7SJames Collins 345a401c3b7SJames Collins if(array_key_exists('tooltip-left', $options) && $options['tooltip-left'] != '') { 346a401c3b7SJames Collins $title = $options['tooltip-left']; 347a401c3b7SJames Collins $dataPlacement = 'left'; 348a401c3b7SJames Collins } 349a401c3b7SJames Collins 350a401c3b7SJames Collins if(array_key_exists('tooltip-bottom', $options) && $options['tooltip-bottom'] != '') { 351a401c3b7SJames Collins $title = $options['tooltip-bottom']; 352a401c3b7SJames Collins $dataPlacement = 'bottom'; 353a401c3b7SJames Collins } 354a401c3b7SJames Collins 355a401c3b7SJames Collins if(array_key_exists('tooltip-right', $options) && $options['tooltip-right'] != '') { 356a401c3b7SJames Collins $title = $options['tooltip-right']; 357a401c3b7SJames Collins $dataPlacement = 'right'; 358a401c3b7SJames Collins } 359a401c3b7SJames Collins 360a401c3b7SJames Collins if(array_key_exists('tooltip-html', $options) && $options['tooltip-html'] != '') { 361a401c3b7SJames Collins $title = $options['tooltip-html']; 362a401c3b7SJames Collins $dataPlacement = 'top'; 363a401c3b7SJames Collins } 364a401c3b7SJames Collins 365a401c3b7SJames Collins if(array_key_exists('tooltip', $options) && $options['tooltip'] != '') { 366a401c3b7SJames Collins $title = $options['tooltip']; 367a401c3b7SJames Collins $dataPlacement = 'top'; 368a401c3b7SJames Collins } 369a401c3b7SJames Collins } 370a401c3b7SJames Collins 371a401c3b7SJames Collins if($title != '') { 372a401c3b7SJames Collins return ' data-toggle="tooltip" data-placement="' . $dataPlacement . '" ' . ($dataHtml == true ? 'data-html="true" ' : '') . 'title="' . $title . '" '; 373a401c3b7SJames Collins } 374a401c3b7SJames Collins 375a401c3b7SJames Collins return ''; 376a401c3b7SJames Collins } 377a401c3b7SJames Collins 37817e6d639SJames Collins public function getMediaFile($str) { 37917e6d639SJames Collins $i = strpos($str, '?'); 38017e6d639SJames Collins if($i !== false) $str = substr($str, 0, $i); 38117e6d639SJames Collins 38217e6d639SJames Collins $str = preg_replace('/[^\da-zA-Z:_.]+/', '', $str); 38317e6d639SJames Collins 38417e6d639SJames Collins return(tpl_getMediaFile(array($str), false)); 38517e6d639SJames Collins } 38617e6d639SJames Collins 38717e6d639SJames Collins 388f1a539d8SJames Collins public function getLink($str) { 389f1a539d8SJames Collins $i = strpos($str, '://'); 390f1a539d8SJames Collins if($i !== false) return $str; 391f1a539d8SJames Collins 392f1a539d8SJames Collins return wl($str); 393f1a539d8SJames Collins } 394f1a539d8SJames Collins 395f1a539d8SJames Collins 39617e6d639SJames Collins public function setAttr(&$attrList, $attr, $data, $newAttrName='', $newAttrVal='') { 39717e6d639SJames Collins if(array_key_exists($attr, $data) && $data[$attr] !== false) { 39817e6d639SJames Collins $value = $data[$attr]; 39917e6d639SJames Collins 40017e6d639SJames Collins if($newAttrName != '') $attr = $newAttrName; 40117e6d639SJames Collins if($newAttrVal != '') { 4023deaf3a5SJames Collins $newAttrVal = str_ireplace('%%VALUE%%', $value, $newAttrVal); 4033deaf3a5SJames Collins if(stripos($newAttrVal, '%%MEDIA%%') !== false) { 4043deaf3a5SJames Collins $newAttrVal = str_ireplace('%%MEDIA%%', $this->getMediaFile($value), $newAttrVal); 40517e6d639SJames Collins } 40617e6d639SJames Collins 40717e6d639SJames Collins $value = $newAttrVal; 40817e6d639SJames Collins } 40917e6d639SJames Collins 41017e6d639SJames Collins $attrList[$attr] = $value; 41117e6d639SJames Collins } 41217e6d639SJames Collins } 41317e6d639SJames Collins 41417e6d639SJames Collins 41517e6d639SJames Collins public function listAttr($attrName, $attrs) { 41617e6d639SJames Collins $s = ''; 41717e6d639SJames Collins 41817e6d639SJames Collins if(count($attrs) > 0) { 41917e6d639SJames Collins foreach($attrs as $item => $value) { 42017e6d639SJames Collins $s .= $item . ':' . $value . ';'; 42117e6d639SJames Collins } 42217e6d639SJames Collins 42317e6d639SJames Collins $s = $attrName . '="' . $s . '" '; 42417e6d639SJames Collins } 42517e6d639SJames Collins 42617e6d639SJames Collins return $s; 42717e6d639SJames Collins } 42817e6d639SJames Collins 42917e6d639SJames Collins 43031359b6fSJames Collins public function syntaxRender(Doku_Renderer $renderer, $className, $text, $data=null) { 43117e6d639SJames Collins $class = new $className; 43217e6d639SJames Collins 43331359b6fSJames Collins if(!is_array($data)) $data = array(); 43431359b6fSJames Collins 43531359b6fSJames Collins $data = $class->cleanOptions($data); 4363422952dSJames Collins $class->values = $data; 43731359b6fSJames Collins 43831359b6fSJames Collins if($class->noEndTag) { 43931359b6fSJames Collins $class->render_lexer_special($renderer, $data); 44031359b6fSJames Collins } else { 44131359b6fSJames Collins $class->render_lexer_enter($renderer, $data); 44217e6d639SJames Collins $renderer->doc .= $text; 44317e6d639SJames Collins $class->render_lexer_exit($renderer, null); 44417e6d639SJames Collins } 44517e6d639SJames Collins } 446ebb7bc5aSJames Collins 447ebb7bc5aSJames Collins public function getFirstArrayKey($data) { 448ebb7bc5aSJames Collins if(!function_exists('array_key_first')) { 449ebb7bc5aSJames Collins foreach($data as $key => $unused) { 450ebb7bc5aSJames Collins return $key; 451ebb7bc5aSJames Collins } 452ebb7bc5aSJames Collins } 453ebb7bc5aSJames Collins 454ebb7bc5aSJames Collins return array_key_first($data); 455ebb7bc5aSJames Collins } 45631359b6fSJames Collins}