xref: /plugin/dwtimeline/syntax/milestone.php (revision 2ddb08133455a704c2504f3e47df3918c5412eaf)
185220f43Ssaggi-dw<?php
285220f43Ssaggi-dw/**
385220f43Ssaggi-dw * DokuWiki Plugin dwtimeline (Syntax Component)
485220f43Ssaggi-dw *
585220f43Ssaggi-dw * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
685220f43Ssaggi-dw * @author  saggi <saggi@gmx.de>
785220f43Ssaggi-dw */
84ff971beSsaggi-dw
94ff971beSsaggi-dw// must be run within Dokuwiki
104ff971beSsaggi-dwif(!defined('DOKU_INC')) die();
114ff971beSsaggi-dw
1285220f43Ssaggi-dwclass syntax_plugin_dwtimeline_milestone extends \dokuwiki\Extension\SyntaxPlugin
1385220f43Ssaggi-dw{
1485220f43Ssaggi-dw    /** @inheritDoc */
1585220f43Ssaggi-dw    public function getType()
1685220f43Ssaggi-dw    {
17*2ddb0813SSteffen Sagert        return 'plugin_dwtimeline_milestone';
1885220f43Ssaggi-dw    }
1985220f43Ssaggi-dw
2085220f43Ssaggi-dw    /** @inheritDoc */
2185220f43Ssaggi-dw    public function getPType()
2285220f43Ssaggi-dw    {
2385220f43Ssaggi-dw        return 'stack';
2485220f43Ssaggi-dw    }
2585220f43Ssaggi-dw
2685220f43Ssaggi-dw    /** @inheritDoc */
2785220f43Ssaggi-dw    public function getSort()
2885220f43Ssaggi-dw    {
29*2ddb0813SSteffen Sagert        return 400;
30*2ddb0813SSteffen Sagert    }
31*2ddb0813SSteffen Sagert
32*2ddb0813SSteffen Sagert    function accepts($mode) {
33*2ddb0813SSteffen Sagert        if ($mode == "plugin_dwtimeline_timeline") return true;
34*2ddb0813SSteffen Sagert        return parent::accepts($mode);
3585220f43Ssaggi-dw    }
3685220f43Ssaggi-dw
3785220f43Ssaggi-dw    /**
3885220f43Ssaggi-dw     * @return array Things that may be inside the syntax
3985220f43Ssaggi-dw     */
4085220f43Ssaggi-dw    function getAllowedTypes() {
4185220f43Ssaggi-dw        return array('container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs');
4285220f43Ssaggi-dw    }
4385220f43Ssaggi-dw
4485220f43Ssaggi-dw    /**
4585220f43Ssaggi-dw     * Set the EntryPattern
4685220f43Ssaggi-dw     * @param type $mode
4785220f43Ssaggi-dw     */
4885220f43Ssaggi-dw    public function connectTo($mode)
4985220f43Ssaggi-dw    {
50*2ddb0813SSteffen Sagert        $this->Lexer->addEntryPattern('<milestone\b.*?>(?=.*?</milestone>)',$mode,'plugin_dwtimeline_milestone');
5108c5c745SSteffen Sagert    }
5285220f43Ssaggi-dw
5385220f43Ssaggi-dw    /**
5485220f43Ssaggi-dw     * Set the ExitPattern
5585220f43Ssaggi-dw     */
5685220f43Ssaggi-dw    public function postConnect()
5785220f43Ssaggi-dw    {
5885220f43Ssaggi-dw        $this->Lexer->addExitPattern('</milestone>', 'plugin_dwtimeline_milestone');
5985220f43Ssaggi-dw    }
6085220f43Ssaggi-dw
6185220f43Ssaggi-dw    /**
6285220f43Ssaggi-dw     * Handle the match
6385220f43Ssaggi-dw     * @param type $match
6485220f43Ssaggi-dw     * @param type $state
6585220f43Ssaggi-dw     * @param type $pos
6685220f43Ssaggi-dw     * @param Doku_Handler $handler
6785220f43Ssaggi-dw     * @return type
6885220f43Ssaggi-dw     */
6985220f43Ssaggi-dw    public function handle($match, $state, $pos, Doku_Handler $handler)
7085220f43Ssaggi-dw    {
7185220f43Ssaggi-dw        $data = [];
7285220f43Ssaggi-dw        switch ($state) {
7385220f43Ssaggi-dw            case DOKU_LEXER_ENTER :
7485220f43Ssaggi-dw                $match = trim(substr($match, 10,-1));// returns match between <milestone(10) and >(-1)
7585220f43Ssaggi-dw                $data = helper_plugin_dwtimeline::getTitleMatches($match, 'title');
764ff971beSsaggi-dw                global $align;
774ff971beSsaggi-dw                $data['align'] = $align;
7885220f43Ssaggi-dw                return array($state,$data);
7985220f43Ssaggi-dw            case DOKU_LEXER_UNMATCHED :
8085220f43Ssaggi-dw                return array($state,$match);
8185220f43Ssaggi-dw            case DOKU_LEXER_EXIT :
8285220f43Ssaggi-dw                return array($state,'');
8385220f43Ssaggi-dw        }
8485220f43Ssaggi-dw        return array();
8585220f43Ssaggi-dw    }
8685220f43Ssaggi-dw
8785220f43Ssaggi-dw    /**
8885220f43Ssaggi-dw     * Render Function
8985220f43Ssaggi-dw     * @param type $mode
9085220f43Ssaggi-dw     * @param Doku_Renderer $renderer
9185220f43Ssaggi-dw     * @param type $data
9285220f43Ssaggi-dw     * @return boolean
9385220f43Ssaggi-dw     */
9485220f43Ssaggi-dw    public function render($mode, Doku_Renderer $renderer, $data)
9585220f43Ssaggi-dw    {
9685220f43Ssaggi-dw        if ($mode == 'xhtml') {
9785220f43Ssaggi-dw            global $direction;
9808c5c745SSteffen Sagert            if (!$direction) {$direction='tl-'.$this->getConf('direction');}
9985220f43Ssaggi-dw            list($state,$indata) = $data;
10085220f43Ssaggi-dw            switch ($state) {
10185220f43Ssaggi-dw                case DOKU_LEXER_ENTER :
1024ff971beSsaggi-dw                    $renderer->doc .= '<div class="container-'.$indata['align'].' '.$direction.'"'.$indata['data'].$indata['backcolor'].'>'. DOKU_LF;
10308c5c745SSteffen Sagert                    $renderer->doc .= '<div class="tlcontent">'. DOKU_LF;
1044ff971beSsaggi-dw                    if (isset($indata['title'])) {
1054ff971beSsaggi-dw                        if (isset($indata['link'])) {
1064ff971beSsaggi-dw                            $renderer->doc .= '<div class="mstitle">'.$this->render_text('[['.$indata['link'].'|'.$indata['title'].']]').'</div>'. DOKU_LF;
10785220f43Ssaggi-dw                        } else {
1084ff971beSsaggi-dw                            $renderer->doc .= '<div class="mstitle">'.$indata['title'].'</div>'. DOKU_LF;
10985220f43Ssaggi-dw                        }
11085220f43Ssaggi-dw                    }
1114ff971beSsaggi-dw                    if (isset($indata['description'])) {$renderer->doc .= '<div class="msdesc">'.$indata['description'].'</div>'. DOKU_LF;}
11285220f43Ssaggi-dw                    break;
11385220f43Ssaggi-dw                case DOKU_LEXER_UNMATCHED :
1144ff971beSsaggi-dw                    $renderer->doc .= $renderer->cdata($indata);
11585220f43Ssaggi-dw                    break;
11685220f43Ssaggi-dw                case DOKU_LEXER_EXIT :
11785220f43Ssaggi-dw                    $renderer->doc .= '</div>'. DOKU_LF;
11885220f43Ssaggi-dw                    $renderer->doc .= '</div>'. DOKU_LF;
11985220f43Ssaggi-dw                    $direction = helper_plugin_dwtimeline::getDirection($direction);
12085220f43Ssaggi-dw                    break;
12185220f43Ssaggi-dw            }
12285220f43Ssaggi-dw            return true;
12385220f43Ssaggi-dw        }
12485220f43Ssaggi-dw        return false;
12585220f43Ssaggi-dw    }
12685220f43Ssaggi-dw
12785220f43Ssaggi-dw}
12885220f43Ssaggi-dw
129