- <?php
-
- /*
- Copyright (c) 2009-2014 F3::Factory/Bong Cosca, All rights reserved.
-
- This file is part of the Fat-Free Framework (http://fatfree.sf.net).
-
- THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
- ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- PURPOSE.
-
- Please see the license.txt file for more information.
- */
-
- //! Unicode string manager
- class UTF extends Prefab {
-
- /**
- * Get string length
- * @return int
- * @param $str string
- **/
- function strlen($str) {
- preg_match_all('/./us',$str,$parts);
- return count($parts[0]);
- }
-
- /**
- * Reverse a string
- * @return string
- * @param $str string
- **/
- function strrev($str) {
- preg_match_all('/./us',$str,$parts);
- return implode('',array_reverse($parts[0]));
- }
-
- /**
- * Find position of first occurrence of a string (case-insensitive)
- * @return int|FALSE
- * @param $stack string
- * @param $needle string
- * @param $ofs int
- **/
- function stripos($stack,$needle,$ofs=0) {
- return $this->strpos($stack,$needle,$ofs,TRUE);
- }
-
- /**
- * Find position of first occurrence of a string
- * @return int|FALSE
- * @param $stack string
- * @param $needle string
- * @param $ofs int
- * @param $case bool
- **/
- function strpos($stack,$needle,$ofs=0,$case=FALSE) {
- return preg_match('/^(.{'.$ofs.'}.*?)'.
- preg_quote($needle,'/').'/us'.($case?'i':''),$stack,$match)?
- $this->strlen($match[1]):FALSE;
- }
-
- /**
- * Returns part of haystack string from the first occurrence of
- * needle to the end of haystack (case-insensitive)
- * @return string|FALSE
- * @param $stack string
- * @param $needle string
- * @param $before bool
- **/
- function stristr($stack,$needle,$before=FALSE) {
- return $this->strstr($stack,$needle,$before,TRUE);
- }
-
- /**
- * Returns part of haystack string from the first occurrence of
- * needle to the end of haystack
- * @return string|FALSE
- * @param $stack string
- * @param $needle string
- * @param $before bool
- * @param $case bool
- **/
- function strstr($stack,$needle,$before=FALSE,$case=FALSE) {
- if (!$needle)
- return FALSE;
- preg_match('/^(.*?)'.preg_quote($needle,'/').'/us'.($case?'i':''),
- $stack,$match);
- return isset($match[1])?
- ($before?
- $match[1]:
- $this->substr($stack,$this->strlen($match[1]))):
- FALSE;
- }
-
- /**
- * Return part of a string
- * @return string|FALSE
- * @param $str string
- * @param $start int
- * @param $len int
- **/
- function substr($str,$start,$len=0) {
- if ($start<0)
- $start=$this->strlen($str)+$start;
- if (!$len)
- $len=$this->strlen($str)-$start;
- return preg_match('/^.{'.$start.'}(.{0,'.$len.'})/us',$str,$match)?
- $match[1]:FALSE;
- }
-
- /**
- * Count the number of substring occurrences
- * @return int
- * @param $stack string
- * @param $needle string
- **/
- function substr_count($stack,$needle) {
- preg_match_all('/'.preg_quote($needle,'/').'/us',$stack,
- $matches,PREG_SET_ORDER);
- return count($matches);
- }
-
- /**
- * Strip whitespaces from the beginning of a string
- * @return string
- * @param $str string
- **/
- function ltrim($str) {
- return preg_replace('/^[\pZ\pC]+/u','',$str);
- }
-
- /**
- * Strip whitespaces from the end of a string
- * @return string
- * @param $str string
- **/
- function rtrim($str) {
- return preg_replace('/[\pZ\pC]+$/u','',$str);
- }
-
- /**
- * Strip whitespaces from the beginning and end of a string
- * @return string
- * @param $str string
- **/
- function trim($str) {
- return preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u','',$str);
- }
-
- /**
- * Return UTF-8 byte order mark
- * @return string
- **/
- function bom() {
- return chr(0xef).chr(0xbb).chr(0xbf);
- }
-
- /**
- * Convert code points to Unicode symbols
- * @return string
- * @param $str string
- **/
- function translate($str) {
- return html_entity_decode(
- preg_replace('/\\\\u([[:xdigit:]]+)/i','&#x\1;',$str));
- }
-
- /**
- * Translate emoji tokens to Unicode font-supported symbols
- * @return string
- * @param $str string
- **/
- function emojify($str) {
- $map=array(
- ':('=>'\u2639', // frown
- ':)'=>'\u263a', // smile
- '<3'=>'\u2665', // heart
- ':D'=>'\u1f603', // grin
- 'XD'=>'\u1f606', // laugh
- ';)'=>'\u1f609', // wink
- ':P'=>'\u1f60b', // tongue
- ':,'=>'\u1f60f', // think
- ':/'=>'\u1f623', // skeptic
- '8O'=>'\u1f632', // oops
- )+Base::instance()->get('EMOJI');
- return $this->translate(str_replace(array_keys($map),
- array_values($map),$str));
- }
-
- }