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