• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/textparser.php
  • Класс: CTextParser
  • Вызов: CTextParser::initSmilePatterns
protected function initSmilePatterns()
{
	$this->smilePatterns = [];
	$this->smileReplaces = [];

	$pre = '';
	foreach ($this->smiles as $row)
	{
		if (preg_match("/\w$/", $row['TYPING']))
		{
			$pre .= '|' . preg_quote($row['TYPING'], '/');
		}
	}

	foreach ($this->smiles as $row)
	{
		if ($row['TYPING'] != '' && $row['IMAGE'] != '')
		{
			$code = str_replace(["'", "<", ">"], ["\'", "<", ">"], $row["TYPING"]);
			$patt = preg_quote($code, "/");
			$code = preg_quote(str_replace(["x5C"], ["\"], $code));
			$image = preg_quote(str_replace("'", "\'", $row["IMAGE"]));
			$description = preg_quote(htmlspecialcharsbx(str_replace(["x5C"], ["\"], $row["DESCRIPTION"]), ENT_QUOTES), "/");

			$patternName = 'pattern' . count($this->smilePatterns);

			$this->smilePatterns[] = "/(?<=^|\>|[" . $this->wordSeparator . "\&]" . $pre . ")(?P<" . $patternName . ">$patt)(?=$|\<|[" . $this->wordSeparator . "\&])/s" . BX_UTF_PCRE_MODIFIER;

			$this->smileReplaces[$patternName] = [
				'code' => $code,
				'image' => $image,
				'description' => $description,
				'width' => intval($row['IMAGE_WIDTH']),
				'height' => intval($row['IMAGE_HEIGHT']),
				'descriptionDecode' => $row['DESCRIPTION_DECODE'] == 'Y',
				'imageDefinition' => $row['IMAGE_DEFINITION'] ?: CSmile::IMAGE_SD
			];
		}
	}
	usort($this->smilePatterns, function($a, $b) { return (mb_strlen($a) > mb_strlen($b) ? -1 : 1); });
}