xref: /plugin/mikioplugin/syntax/core.php (revision f4aa5cdcd0e03f6c42013de167faf20da20a1685)
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}