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