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