940 lines
19 KiB
PHP
940 lines
19 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* TeamSpeak 3 PHP Framework
|
|
*
|
|
* $Id: String.php 06/06/2016 22:27:13 scp@Svens-iMac $
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* @package TeamSpeak3
|
|
* @version 1.1.24
|
|
* @author Sven 'ScP' Paulsen
|
|
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
|
|
*/
|
|
|
|
/**
|
|
* @class TeamSpeak3_Helper_String
|
|
* @brief Helper class for string handling.
|
|
*/
|
|
class TeamSpeak3_Helper_String implements ArrayAccess, Iterator, Countable
|
|
{
|
|
/**
|
|
* Stores the original string.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $string;
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
protected $position = 0;
|
|
|
|
/**
|
|
* The TeamSpeak3_Helper_String constructor.
|
|
*
|
|
* @param string $string
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function __construct($string)
|
|
{
|
|
$this->string = (string) $string;
|
|
}
|
|
|
|
/**
|
|
* Returns a TeamSpeak3_Helper_String object for thegiven string.
|
|
*
|
|
* @param string $string
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public static function factory($string)
|
|
{
|
|
return new self($string);
|
|
}
|
|
|
|
/**
|
|
* Replaces every occurrence of the string $search with the string $replace.
|
|
*
|
|
* @param string $search
|
|
* @param string $replace
|
|
* @param boolean $caseSensitivity
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function replace($search, $replace, $caseSensitivity = TRUE)
|
|
{
|
|
if($caseSensitivity)
|
|
{
|
|
$this->string = str_replace($search, $replace, $this->string);
|
|
}
|
|
else
|
|
{
|
|
$this->string = str_ireplace($search, $replace, $this->string);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* This function replaces indexed or associative signs with given values.
|
|
*
|
|
* @param array $args
|
|
* @param string $char
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function arg(array $args, $char = "%")
|
|
{
|
|
$args = array_reverse($args, TRUE);
|
|
|
|
foreach($args as $key => $val)
|
|
{
|
|
$args[$char . $key] = $val;
|
|
unset($args[$key]);
|
|
}
|
|
|
|
$this->string = strtr($this->string, $args);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Returns true if the string starts with $pattern.
|
|
*
|
|
* @param string $pattern
|
|
* @return boolean
|
|
*/
|
|
public function startsWith($pattern)
|
|
{
|
|
return (substr($this->string, 0, strlen($pattern)) == $pattern) ? TRUE : FALSE;
|
|
}
|
|
|
|
/**
|
|
* Returns true if the string ends with $pattern.
|
|
*
|
|
* @param string $pattern
|
|
* @return boolean
|
|
*/
|
|
public function endsWith($pattern)
|
|
{
|
|
return (substr($this->string, strlen($pattern)*-1) == $pattern) ? TRUE : FALSE;
|
|
}
|
|
|
|
/**
|
|
* Returns the position of the first occurrence of a char in a string.
|
|
*
|
|
* @param string $needle
|
|
* @return integer
|
|
*/
|
|
public function findFirst($needle)
|
|
{
|
|
return strpos($this->string, $needle);
|
|
}
|
|
|
|
/**
|
|
* Returns the position of the last occurrence of a char in a string.
|
|
*
|
|
* @param string $needle
|
|
* @return integer
|
|
*/
|
|
public function findLast($needle)
|
|
{
|
|
return strrpos($this->string, $needle);
|
|
}
|
|
|
|
/**
|
|
* Returns the lowercased string.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function toLower()
|
|
{
|
|
return new self(strtolower($this->string));
|
|
}
|
|
|
|
/**
|
|
* Returns the uppercased string.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function toUpper()
|
|
{
|
|
return new self(strtoupper($this->string));
|
|
}
|
|
|
|
/**
|
|
* Returns true if the string contains $pattern.
|
|
*
|
|
* @param string $pattern
|
|
* @param boolean $regexp
|
|
* @return boolean
|
|
*/
|
|
public function contains($pattern, $regexp = FALSE)
|
|
{
|
|
if(empty($pattern))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
if($regexp)
|
|
{
|
|
return (preg_match("/" . $pattern . "/i", $this->string)) ? TRUE : FALSE;
|
|
}
|
|
else
|
|
{
|
|
return (stristr($this->string, $pattern) !== FALSE) ? TRUE : FALSE;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns part of a string.
|
|
*
|
|
* @param integer $start
|
|
* @param integer $length
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function substr($start, $length = null)
|
|
{
|
|
$string = ($length !== null) ? substr($this->string, $start, $length) : substr($this->string, $start);
|
|
|
|
return new self($string);
|
|
}
|
|
|
|
/**
|
|
* Splits the string into substrings wherever $separator occurs.
|
|
*
|
|
* @param string $separator
|
|
* @param integer $limit
|
|
* @return array
|
|
*/
|
|
public function split($separator, $limit = 0)
|
|
{
|
|
$parts = explode($separator, $this->string, ($limit) ? intval($limit) : $this->count());
|
|
|
|
foreach($parts as $key => $val)
|
|
{
|
|
$parts[$key] = new self($val);
|
|
}
|
|
|
|
return $parts;
|
|
}
|
|
|
|
/**
|
|
* Appends $part to the string.
|
|
*
|
|
* @param string $part
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function append($part)
|
|
{
|
|
$this->string = $this->string . strval($part);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Prepends $part to the string.
|
|
*
|
|
* @param string $part
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function prepend($part)
|
|
{
|
|
$this->string = strval($part) . $this->string;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Returns a section of the string.
|
|
*
|
|
* @param string $separator
|
|
* @param integer $first
|
|
* @param integer $last
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function section($separator, $first = 0, $last = 0)
|
|
{
|
|
$sections = explode($separator, $this->string);
|
|
|
|
$total = count($sections);
|
|
$first = intval($first);
|
|
$last = intval($last);
|
|
|
|
if($first > $total) return null;
|
|
if($first > $last) $last = $first;
|
|
|
|
for($i = 0; $i < $total; $i++)
|
|
{
|
|
if($i < $first || $i > $last)
|
|
{
|
|
unset($sections[$i]);
|
|
}
|
|
}
|
|
|
|
$string = implode($separator, $sections);
|
|
|
|
return new self($string);
|
|
}
|
|
|
|
/**
|
|
* Sets the size of the string to $size characters.
|
|
*
|
|
* @param integer $size
|
|
* @param string $char
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function resize($size, $char = "\0")
|
|
{
|
|
$chars = ($size - $this->count());
|
|
|
|
if($chars < 0)
|
|
{
|
|
$this->string = substr($this->string, 0, $chars);
|
|
}
|
|
elseif($chars > 0)
|
|
{
|
|
$this->string = str_pad($this->string, $size, strval($char));
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Strips whitespaces (or other characters) from the beginning and end of the string.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function trim()
|
|
{
|
|
$this->string = trim($this->string);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Escapes a string using the TeamSpeak 3 escape patterns.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function escape()
|
|
{
|
|
foreach(TeamSpeak3::getEscapePatterns() as $search => $replace)
|
|
{
|
|
$this->string = str_replace($search, $replace, $this->string);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Unescapes a string using the TeamSpeak 3 escape patterns.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function unescape()
|
|
{
|
|
$this->string = strtr($this->string, array_flip(TeamSpeak3::getEscapePatterns()));
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Removes any non alphanumeric characters from the string.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function filterAlnum()
|
|
{
|
|
$this->string = preg_replace("/[^[:alnum:]]/", "", $this->string);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Removes any non alphabetic characters from the string.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function filterAlpha()
|
|
{
|
|
$this->string = preg_replace("/[^[:alpha:]]/", "", $this->string);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Removes any non numeric characters from the string.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function filterDigits()
|
|
{
|
|
$this->string = preg_replace("/[^[:digit:]]/", "", $this->string);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Returns TRUE if the string is a numeric value.
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function isInt()
|
|
{
|
|
return (is_numeric($this->string) && !$this->contains(".")) ? TRUE : FALSE;
|
|
}
|
|
|
|
/**
|
|
* Returns the integer value of the string.
|
|
*
|
|
* @return float
|
|
* @return integer
|
|
*/
|
|
public function toInt()
|
|
{
|
|
if($this->string == pow(2, 63) || $this->string == pow(2, 64))
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
return ($this->string > pow(2, 31)) ? floatval($this->string) : intval($this->string);
|
|
}
|
|
|
|
/**
|
|
* Calculates and returns the crc32 polynomial of the string.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function toCrc32()
|
|
{
|
|
return crc32($this->string);
|
|
}
|
|
|
|
/**
|
|
* Calculates and returns the md5 checksum of the string.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function toMd5()
|
|
{
|
|
return md5($this->string);
|
|
}
|
|
|
|
/**
|
|
* Calculates and returns the sha1 checksum of the string.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function toSha1()
|
|
{
|
|
return sha1($this->string);
|
|
}
|
|
|
|
/**
|
|
* Returns TRUE if the string is UTF-8 encoded. This method searches for non-ascii multibyte
|
|
* sequences in the UTF-8 range.
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function isUtf8()
|
|
{
|
|
$pattern = array();
|
|
|
|
$pattern[] = "[\xC2-\xDF][\x80-\xBF]"; // non-overlong 2-byte
|
|
$pattern[] = "\xE0[\xA0-\xBF][\x80-\xBF]"; // excluding overlongs
|
|
$pattern[] = "[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}"; // straight 3-byte
|
|
$pattern[] = "\xED[\x80-\x9F][\x80-\xBF]"; // excluding surrogates
|
|
$pattern[] = "\xF0[\x90-\xBF][\x80-\xBF]{2}"; // planes 1-3
|
|
$pattern[] = "[\xF1-\xF3][\x80-\xBF]{3}"; // planes 4-15
|
|
$pattern[] = "\xF4[\x80-\x8F][\x80-\xBF]{2}"; // plane 16
|
|
|
|
return preg_match("%(?:" . implode("|", $pattern) . ")+%xs", $this->string);
|
|
}
|
|
|
|
/**
|
|
* Converts the string to UTF-8.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function toUtf8()
|
|
{
|
|
if(!$this->isUtf8())
|
|
{
|
|
$this->string = utf8_encode($this->string);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Encodes the string with MIME base64 and returns the result.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function toBase64()
|
|
{
|
|
return base64_encode($this->string);
|
|
}
|
|
|
|
/**
|
|
* Decodes the string with MIME base64 and returns the result as an TeamSpeak3_Helper_String
|
|
*
|
|
* @param string $base64
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public static function fromBase64($base64)
|
|
{
|
|
return new self(base64_decode($base64));
|
|
}
|
|
|
|
/**
|
|
* Returns the hexadecimal value of the string.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function toHex()
|
|
{
|
|
$hex = "";
|
|
|
|
foreach($this as $char)
|
|
{
|
|
$hex .= $char->toHex();
|
|
}
|
|
|
|
return $hex;
|
|
}
|
|
|
|
/**
|
|
* Returns the TeamSpeak3_Helper_String based on a given hex value.
|
|
*
|
|
* @param string $hex
|
|
* @throws TeamSpeak3_Helper_Exception
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public static function fromHex($hex)
|
|
{
|
|
$string = "";
|
|
|
|
if(strlen($hex)%2 == 1)
|
|
{
|
|
throw new TeamSpeak3_Helper_Exception("given parameter '" . $hex . "' is not a valid hexadecimal number");
|
|
}
|
|
|
|
foreach(str_split($hex, 2) as $chunk)
|
|
{
|
|
$string .= chr(hexdec($chunk));
|
|
}
|
|
|
|
return new self($string);
|
|
}
|
|
|
|
/**
|
|
* Returns the string transliterated from UTF-8 to Latin.
|
|
*
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function transliterate()
|
|
{
|
|
$utf8_accents = array(
|
|
"à" => "a",
|
|
"ô" => "o",
|
|
"ď" => "d",
|
|
"ḟ" => "f",
|
|
"ë" => "e",
|
|
"š" => "s",
|
|
"ơ" => "o",
|
|
"ß" => "ss",
|
|
"ă" => "a",
|
|
"ř" => "r",
|
|
"ț" => "t",
|
|
"ň" => "n",
|
|
"ā" => "a",
|
|
"ķ" => "k",
|
|
"ŝ" => "s",
|
|
"ỳ" => "y",
|
|
"ņ" => "n",
|
|
"ĺ" => "l",
|
|
"ħ" => "h",
|
|
"ṗ" => "p",
|
|
"ó" => "o",
|
|
"ú" => "u",
|
|
"ě" => "e",
|
|
"é" => "e",
|
|
"ç" => "c",
|
|
"ẁ" => "w",
|
|
"ċ" => "c",
|
|
"õ" => "o",
|
|
"ṡ" => "s",
|
|
"ø" => "o",
|
|
"ģ" => "g",
|
|
"ŧ" => "t",
|
|
"ș" => "s",
|
|
"ė" => "e",
|
|
"ĉ" => "c",
|
|
"ś" => "s",
|
|
"î" => "i",
|
|
"ű" => "u",
|
|
"ć" => "c",
|
|
"ę" => "e",
|
|
"ŵ" => "w",
|
|
"ṫ" => "t",
|
|
"ū" => "u",
|
|
"č" => "c",
|
|
"ö" => "oe",
|
|
"è" => "e",
|
|
"ŷ" => "y",
|
|
"ą" => "a",
|
|
"ł" => "l",
|
|
"ų" => "u",
|
|
"ů" => "u",
|
|
"ş" => "s",
|
|
"ğ" => "g",
|
|
"ļ" => "l",
|
|
"ƒ" => "f",
|
|
"ž" => "z",
|
|
"ẃ" => "w",
|
|
"ḃ" => "b",
|
|
"å" => "a",
|
|
"ì" => "i",
|
|
"ï" => "i",
|
|
"ḋ" => "d",
|
|
"ť" => "t",
|
|
"ŗ" => "r",
|
|
"ä" => "ae",
|
|
"í" => "i",
|
|
"ŕ" => "r",
|
|
"ê" => "e",
|
|
"ü" => "ue",
|
|
"ò" => "o",
|
|
"ē" => "e",
|
|
"ñ" => "n",
|
|
"ń" => "n",
|
|
"ĥ" => "h",
|
|
"ĝ" => "g",
|
|
"đ" => "d",
|
|
"ĵ" => "j",
|
|
"ÿ" => "y",
|
|
"ũ" => "u",
|
|
"ŭ" => "u",
|
|
"ư" => "u",
|
|
"ţ" => "t",
|
|
"ý" => "y",
|
|
"ő" => "o",
|
|
"â" => "a",
|
|
"ľ" => "l",
|
|
"ẅ" => "w",
|
|
"ż" => "z",
|
|
"ī" => "i",
|
|
"ã" => "a",
|
|
"ġ" => "g",
|
|
"ṁ" => "m",
|
|
"ō" => "o",
|
|
"ĩ" => "i",
|
|
"ù" => "u",
|
|
"į" => "i",
|
|
"ź" => "z",
|
|
"á" => "a",
|
|
"û" => "u",
|
|
"þ" => "th",
|
|
"ð" => "dh",
|
|
"æ" => "ae",
|
|
"µ" => "u",
|
|
"ĕ" => "e",
|
|
"œ" => "oe",
|
|
"À" => "A",
|
|
"Ô" => "O",
|
|
"Ď" => "D",
|
|
"Ḟ" => "F",
|
|
"Ë" => "E",
|
|
"Š" => "S",
|
|
"Ơ" => "O",
|
|
"Ă" => "A",
|
|
"Ř" => "R",
|
|
"Ț" => "T",
|
|
"Ň" => "N",
|
|
"Ā" => "A",
|
|
"Ķ" => "K",
|
|
"Ŝ" => "S",
|
|
"Ỳ" => "Y",
|
|
"Ņ" => "N",
|
|
"Ĺ" => "L",
|
|
"Ħ" => "H",
|
|
"Ṗ" => "P",
|
|
"Ó" => "O",
|
|
"Ú" => "U",
|
|
"Ě" => "E",
|
|
"É" => "E",
|
|
"Ç" => "C",
|
|
"Ẁ" => "W",
|
|
"Ċ" => "C",
|
|
"Õ" => "O",
|
|
"Ṡ" => "S",
|
|
"Ø" => "O",
|
|
"Ģ" => "G",
|
|
"Ŧ" => "T",
|
|
"Ș" => "S",
|
|
"Ė" => "E",
|
|
"Ĉ" => "C",
|
|
"Ś" => "S",
|
|
"Î" => "I",
|
|
"Ű" => "U",
|
|
"Ć" => "C",
|
|
"Ę" => "E",
|
|
"Ŵ" => "W",
|
|
"Ṫ" => "T",
|
|
"Ū" => "U",
|
|
"Č" => "C",
|
|
"Ö" => "Oe",
|
|
"È" => "E",
|
|
"Ŷ" => "Y",
|
|
"Ą" => "A",
|
|
"Ł" => "L",
|
|
"Ų" => "U",
|
|
"Ů" => "U",
|
|
"Ş" => "S",
|
|
"Ğ" => "G",
|
|
"Ļ" => "L",
|
|
"Ƒ" => "F",
|
|
"Ž" => "Z",
|
|
"Ẃ" => "W",
|
|
"Ḃ" => "B",
|
|
"Å" => "A",
|
|
"Ì" => "I",
|
|
"Ï" => "I",
|
|
"Ḋ" => "D",
|
|
"Ť" => "T",
|
|
"Ŗ" => "R",
|
|
"Ä" => "Ae",
|
|
"Í" => "I",
|
|
"Ŕ" => "R",
|
|
"Ê" => "E",
|
|
"Ü" => "Ue",
|
|
"Ò" => "O",
|
|
"Ē" => "E",
|
|
"Ñ" => "N",
|
|
"Ń" => "N",
|
|
"Ĥ" => "H",
|
|
"Ĝ" => "G",
|
|
"Đ" => "D",
|
|
"Ĵ" => "J",
|
|
"Ÿ" => "Y",
|
|
"Ũ" => "U",
|
|
"Ŭ" => "U",
|
|
"Ư" => "U",
|
|
"Ţ" => "T",
|
|
"Ý" => "Y",
|
|
"Ő" => "O",
|
|
"Â" => "A",
|
|
"Ľ" => "L",
|
|
"Ẅ" => "W",
|
|
"Ż" => "Z",
|
|
"Ī" => "I",
|
|
"Ã" => "A",
|
|
"Ġ" => "G",
|
|
"Ṁ" => "M",
|
|
"Ō" => "O",
|
|
"Ĩ" => "I",
|
|
"Ù" => "U",
|
|
"Į" => "I",
|
|
"Ź" => "Z",
|
|
"Á" => "A",
|
|
"Û" => "U",
|
|
"Þ" => "Th",
|
|
"Ð" => "Dh",
|
|
"Æ" => "Ae",
|
|
"Ĕ" => "E",
|
|
"Œ" => "Oe",
|
|
);
|
|
|
|
return new self($this->toUtf8()->replace(array_keys($utf8_accents), array_values($utf8_accents)));
|
|
}
|
|
|
|
/**
|
|
* Processes the string and replaces all accented UTF-8 characters by unaccented ASCII-7 "equivalents",
|
|
* whitespaces are replaced by a pre-defined spacer and the string is lowercase.
|
|
*
|
|
* @param string $spacer
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function uriSafe($spacer = "-")
|
|
{
|
|
$this->string = str_replace($spacer, " ", $this->string);
|
|
$this->string = $this->transliterate();
|
|
$this->string = preg_replace("/(\s|[^A-Za-z0-9\-])+/", $spacer, trim(strtolower($this->string)));
|
|
$this->string = trim($this->string, $spacer);
|
|
|
|
return new self($this->string);
|
|
}
|
|
|
|
/**
|
|
* Replaces space characters with percent encoded strings.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function spaceToPercent()
|
|
{
|
|
return str_replace(" ", "%20", $this->string);
|
|
}
|
|
|
|
/**
|
|
* Returns the string as a standard string
|
|
*
|
|
* @return string
|
|
*/
|
|
public function toString()
|
|
{
|
|
return $this->string;
|
|
}
|
|
|
|
/**
|
|
* Magical function that allows you to call PHP's built-in string functions on the TeamSpeak3_Helper_String object.
|
|
*
|
|
* @param string $function
|
|
* @param array $args
|
|
* @throws TeamSpeak3_Helper_Exception
|
|
* @return TeamSpeak3_Helper_String
|
|
*/
|
|
public function __call($function, $args)
|
|
{
|
|
if(!function_exists($function))
|
|
{
|
|
throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' on this object");
|
|
}
|
|
|
|
if(count($args))
|
|
{
|
|
if(($key = array_search($this, $args, TRUE)) !== FALSE)
|
|
{
|
|
$args[$key] = $this->string;
|
|
}
|
|
else
|
|
{
|
|
throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' without the " . __CLASS__ . " object parameter");
|
|
}
|
|
|
|
$return = call_user_func_array($function, $args);
|
|
}
|
|
else
|
|
{
|
|
$return = call_user_func($function, $this->string);
|
|
}
|
|
|
|
if(is_string($return))
|
|
{
|
|
$this->string = $return;
|
|
}
|
|
else
|
|
{
|
|
return $return;
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Returns the character as a standard string.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function __toString()
|
|
{
|
|
return (string) $this->string;
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function count()
|
|
{
|
|
return strlen($this->string);
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function rewind()
|
|
{
|
|
$this->position = 0;
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function valid()
|
|
{
|
|
return $this->position < $this->count();
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function key()
|
|
{
|
|
return $this->position;
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function current()
|
|
{
|
|
return new TeamSpeak3_Helper_Char($this->string{$this->position});
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function next()
|
|
{
|
|
$this->position++;
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function offsetExists($offset)
|
|
{
|
|
return ($offset < strlen($this->string)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function offsetGet($offset)
|
|
{
|
|
return ($this->offsetExists($offset)) ? new TeamSpeak3_Helper_Char($this->string{$offset}) : null;
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function offsetSet($offset, $value)
|
|
{
|
|
if(!$this->offsetExists($offset)) return;
|
|
|
|
$this->string{$offset} = strval($value);
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
public function offsetUnset($offset)
|
|
{
|
|
if(!$this->offsetExists($offset)) return;
|
|
|
|
$this->string = substr_replace($this->string, "", $offset, 1);
|
|
}
|
|
}
|