xref: /dokuwiki/inc/Parsing/ParserMode/Smiley.php (revision be906b566b9bdfd92c032ee07c4fd077d820a8d1)
1*be906b56SAndreas Gohr<?php
2*be906b56SAndreas Gohr
3*be906b56SAndreas Gohrnamespace dokuwiki\Parsing\ParserMode;
4*be906b56SAndreas Gohr
5*be906b56SAndreas Gohruse dokuwiki\Parsing\Lexer\Lexer;
6*be906b56SAndreas Gohr
7*be906b56SAndreas Gohrclass Smiley extends AbstractMode
8*be906b56SAndreas Gohr{
9*be906b56SAndreas Gohr    protected $smileys = array();
10*be906b56SAndreas Gohr    protected $pattern = '';
11*be906b56SAndreas Gohr
12*be906b56SAndreas Gohr    /**
13*be906b56SAndreas Gohr     * Smiley constructor.
14*be906b56SAndreas Gohr     * @param string[] $smileys
15*be906b56SAndreas Gohr     */
16*be906b56SAndreas Gohr    public function __construct($smileys)
17*be906b56SAndreas Gohr    {
18*be906b56SAndreas Gohr        $this->smileys = $smileys;
19*be906b56SAndreas Gohr    }
20*be906b56SAndreas Gohr
21*be906b56SAndreas Gohr    /** @inheritdoc */
22*be906b56SAndreas Gohr    public function preConnect()
23*be906b56SAndreas Gohr    {
24*be906b56SAndreas Gohr        if (!count($this->smileys) || $this->pattern != '') return;
25*be906b56SAndreas Gohr
26*be906b56SAndreas Gohr        $sep = '';
27*be906b56SAndreas Gohr        foreach ($this->smileys as $smiley) {
28*be906b56SAndreas Gohr            $this->pattern .= $sep.'(?<=\W|^)'. Lexer::escape($smiley).'(?=\W|$)';
29*be906b56SAndreas Gohr            $sep = '|';
30*be906b56SAndreas Gohr        }
31*be906b56SAndreas Gohr    }
32*be906b56SAndreas Gohr
33*be906b56SAndreas Gohr    /** @inheritdoc */
34*be906b56SAndreas Gohr    public function connectTo($mode)
35*be906b56SAndreas Gohr    {
36*be906b56SAndreas Gohr        if (!count($this->smileys)) return;
37*be906b56SAndreas Gohr
38*be906b56SAndreas Gohr        if (strlen($this->pattern) > 0) {
39*be906b56SAndreas Gohr            $this->Lexer->addSpecialPattern($this->pattern, $mode, 'smiley');
40*be906b56SAndreas Gohr        }
41*be906b56SAndreas Gohr    }
42*be906b56SAndreas Gohr
43*be906b56SAndreas Gohr    /** @inheritdoc */
44*be906b56SAndreas Gohr    public function getSort()
45*be906b56SAndreas Gohr    {
46*be906b56SAndreas Gohr        return 230;
47*be906b56SAndreas Gohr    }
48*be906b56SAndreas Gohr}
49