smilie shortcut * 'icons' => icon in html * * @hook smilie ('texts' => smilies texts array, 'icons' => smilies html array) */ public static function get_list() { $texts = array( '<3', '</3', '<\\3', ':-)', ';-)', ':-(', ':-P', ':-p', ':-"', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O', ':-O', '\\o/', 'o.O', 'O.o', 'o_O', 'O_o', ":'(", ":-!", ":-/", ":-[", "8-)", ':beer', ':homebrew', ':coffee', ':facepalm', ':like', ':dislike', '~friendica', 'red#', 'red#matrix' ); $icons = array( '<3', '</3', '<\\3', ':-)', ';-)', ':-(', ':-P', ':-p', ':-\', ':-\', ':-x', ':-X', ':-D', '8-|', '8-O', ':-O', '\\o/', 'o.O', 'O.o', 'o_O', 'O_o', ':\'(', ':-!', ':-/', ':-[', '8-)', ':beer', ':homebrew', ':coffee', ':facepalm', ':like', ':dislike', '~friendica ~friendica', 'redred#matrix', 'redred#matrixmatrix' ); $params = array('texts' => $texts, 'icons' => $icons); call_hooks('smilie', $params); return $params; } /** * @brief Replaces text emoticons with graphical images * * It is expected that this function will be called using HTML text. * We will escape text between HTML pre and code blocks from being * processed. * * At a higher level, the bbcode [nosmile] tag can be used to prevent this * function from being executed by the prepare_text() routine when preparing * bbcode source for HTML display * * @param string $s Text that should be replaced * @param boolean $sample * @param boolean $no_images Only replace emoticons without images * * @return string HML Output of the Smilie */ public static function replace($s, $sample = false, $no_images = false) { if(intval(get_config('system','no_smilies')) || (local_user() && intval(get_pconfig(local_user(),'system','no_smilies')))) return $s; $s = preg_replace_callback('/
(.*?)<\/pre>/ism','self::encode',$s);
		$s = preg_replace_callback('/(.*?)<\/code>/ism','self::encode',$s);

		$params = self::get_list();

		if ($no_images) {
			$cleaned = array('texts' => array(), 'icons' => array());
			$icons = $params['icons'];
			foreach ($icons AS $key => $icon) {
				if (!strstr($icon, '
' . $params['icons'][$x] . '
'; } } else { $params['string'] = preg_replace_callback('/<(3+)/','self::preg_heart',$params['string']); $s = str_replace($params['texts'],$params['icons'],$params['string']); } $s = preg_replace_callback('/
(.*?)<\/pre>/ism','self::decode',$s);
		$s = preg_replace_callback('/(.*?)<\/code>/ism','self::decode',$s);

		return $s;
	}

	private function encode($m) {
		return(str_replace($m[1],base64url_encode($m[1]),$m[0]));
	}

	private function decode($m) {
		return(str_replace($m[1],base64url_decode($m[1]),$m[0]));
	}


	/**
	 * @brief expand <3333 to the correct number of hearts
	 *
	 * @param string $x
	 * @return string HTML Output
	 *
	 * @todo: Rework because it doesn't work correctly
	 */
	private function preg_heart($x) {
		if(strlen($x[1]) == 1)
			return $x[0];
		$t = '';
		for($cnt = 0; $cnt < strlen($x[1]); $cnt ++)
			$t .= '<3';
		$r =  str_replace($x[0],$t,$x[0]);
		return $r;
	}
}