<?PHP
namespace ILLI\Core\Util;
use ILLI\Core\Std\DefaultStatic\__import_IDefaultStatic;
use ILLI\Core\Std\IDefaultStatic;
use ILLI\Core\Util\Arr;
class Str implements IDefaultStatic
{
use __import_IDefaultStatic;
#:php:
static function explode($__string, $__delimiter = __str::SPACE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? explode($__delimiter, $__string)
: explode($__delimiter, $__string, $__limit);
}
static function f($__format, ...$__data)
{
$a = func_get_args();
return sprintf(...$a);
}
static function join(array $__data, $__delimiter = __str::DEVOID)
{
return join($__delimiter, $__data);
}
static function len($__string)
{
return strlen($__string);
}
static function lc($__string)
{
return strtolower($__string);
}
static function lcf($__string)
{
return ucfirst($__string);
}
static function lcw($__string)
{
return ucwords($__string);
}
static function pad($__string, $__length, $__delimiter, $__case)
{
return str_pad($__string, $__length, $__delimiter, $__case);
}
static function pos($__string, $__needle, $__offset = 0x00)
{
return strpos($__string, $__needle, $__offset);
}
static function pregMatch($__string, $__pattern, $__flag = 0x00, $__offset = 0x00)
{
if(0x02 >= func_num_args())
return preg_match($__pattern, $__string);
preg_match($__pattern, $__string, $matches, $__flag, $__offset);
return $matches;
}
static function split($__string, $__length = 0x01)
{
return str_split($__string, $__length);
}
static function sub($__string, $__start, $__length = NULL)
{
return 0x02 >= func_num_args()
? substr($__string, $__start)
: substr($__string, $__start, $__length);
}
static function tr($__string, $__from, $__to = NULL)
{
return 0x02 >= func_num_args()
? strtr($__string, $__from)
: strtr($__string, $__from, $__to);
}
static function uc($__string)
{
return strtoupper($__string);
}
static function ucf($__string)
{
return ucfirst($__string);
}
static function ucw($__string)
{
return ucwords($__string);
}
static function repeat($__string, $__length)
{
return str_repeat($__string, $__length);
}
static function replace($__string, $__search, $__replace)
{
return str_replace($__search, $__replace, $__string);
}
#::
#:crypt:
static function encrypt($__string, $__secret)
{
return mcrypt_encrypt(MCRYPT_BLOWFISH, $__secret, utf8_encode($__string), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND));
}
static function decrypt($__string, $__secret)
{
return mcrypt_decrypt(MCRYPT_BLOWFISH, $__secret, $__string, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND));
}
#::
#:generator:
static function hash($__string, array $__options = [])
{
$__options +=
[
'type' => 'sha512',
'salt' => FALSE,
'key' => FALSE,
'raw' => FALSE
];
if(TRUE === $__options['salt'])
$__string = $__options['salt'].$__string;
return TRUE === $__options['key']
? hash_hmac($__options['type'], $__string, $__options['key'], $__options['raw'])
: hash($__options['type'], $__string, $__options['raw']);
}
static function rand($__bytes, array $__options = [])
{
$__options += ['encode' => NULL];
static $__fn_STATIC_rand;
#:rand:
isset($__fn_STATIC_rand) ?: $__fn_STATIC_rand = function($__bytes)
{
$r = __str::DEVOID;
for($i = 0x00; $i < $__bytes; $i++)
$r .= chr(mt_rand(0x00, 0xFF));
return $r;
};
#::
$r = $__fn_STATIC_rand($__bytes);
return ($__options['encode'] === static::ENCODE_BASE_64)
? static::tr(rtrim(base64_encode($r), __str::EQ), __str::PLUS, __str::DOT)
: $r;
}
#::
#:format:
static function bom($__string = NULL)
{
return chr(255).chr(254).$__string;
}
static function compare($__left, $__right)
{
$r = TRUE;
if(($l = static::len($__left)) !== static::len($__right))
return FALSE;
for($i = 0x00; $i < $l; $i++)
$r = $r && ($__left[$i] === $__right[$i]);
return $r;
}
static function hexdump($__string, array $__options = [])
{
$__options +=
[
'width' => 0x10,
'eol' => __str::EOL,
'space' => __str::SPACE,
'raw' => FALSE,
'invisible' => __str::INVISIBLE,
'pattern' => '{:x} : {:line} : {:part}',
'from' => 0x20,
'to' => 0x7E
];
static $__fn_STATIC_from, $__fn_STATIC_to, $__fn_STATIC_walk;
#:walk:
isset($__fn_STATIC_walk) ?: $__fn_STATIC_walk = function($__start, $__stop, callable $__Handler, array $__options = [])
{
$r = [];
for($i = $__start; $i <= $__stop; $i++)
$r[] = $__Handler($i, $__options);
return static::join($r);
};
#::
#:from:
isset($__fn_STATIC_from) ?: $__fn_STATIC_from = $__fn_STATIC_walk
(
0x00, 0xFF,
function($__i, array $__options = []){ return chr($__i); },
$__options
);
#::
#:to:
isset($__fn_STATIC_to) ?: $__fn_STATIC_to = $__fn_STATIC_walk
(
0x00, 0xFF,
function($__i, array $__options = []){ return $__i >= $__options['from'] && $__i <= $__options['to'] ? chr($__i) : $__options['invisible']; },
$__options
);
#::
$c = static::split(static::tr($__string, $__fn_STATIC_from, $__fn_STATIC_to), $__options['width']);
$p = static::split($__string, $__options['width']);
$h = static::split(bin2hex($__string), $__options['width'] * 0x02);
$o = 0;
$r = [];
foreach($h as $i => $l)
{
$s = sizeOf($l = static::split($l, 0x02)) === $__options['width'] ?: $l += array_fill($s, $__options['width'] - $s, __str::LITSPACE);
$r[] = TRUE === $__options['raw']
? ['offset' => $o, 'line' => $l, 'part' => $c[$i], 'orig' => $p[$i]]
: static::insert($__options['pattern'], ['x' => sprintf('%8X', $o), 'line' => static::join($l, $__options['space']), 'part' => $c[$i]]);
$o += $__options['width'];
}
if(TRUE === $__options['raw'])
return $r;
return FALSE === $__options['eol']
? $r
: static::join($r, $__options['eol']);
}
static function sequence(array $__data, array $__options = [])
{
return static::__sequence($__data, $__options);
}
protected static function __sequence($__data, $__options, $__level = 0x01)
{
if(FALSE === is_array($__data))
return $__data;
if([] === $__data)
return '[]';
$__options +=
[
'eol' => __str::EOL,
'indent' => 0x00,
'head' => 0x18,
'padding' => 0x04,
'text' => 0x34,
];
$r = [];
$i = static::repeat('.', $__options['indent']);
if($__level === 0x01)
{
foreach($__data as $k => $v)
{
$_k = static::explodeEoL(wordwrap($k, $__options['head'], __str::EOL));
$_v = is_array($v)
? static::explodeEoL(static::__sequence($v, $__options, $__level + 0x01))
: static::explodeEoL(wordwrap($v, $__options['text'], __str::EOL));
$a = [];
foreach(array_keys(count($_k) > count($_v) ? $_k : $_v) as $l)
{
$a[] = sprintf(sprintf('%%%ds', $__options['head']), isset($_k[$l]) ? trim($_k[$l]) : '');
!isset($_v[$l]) ?: $a[] = ' ';
$a[] = trim(sprintf(sprintf('%%-%ds', $__options['text']), isset($_v[$l]) ? trim($_v[$l]) : ''));
$a[] = $__options['eol'].$i;
}
$r[] = $i.join('', $a);
}
}
else
{
foreach($__data as $k => $v)
{
$_k = static::explodeEoL(wordwrap($k, $__options['text'], __str::EOL));
$_v = is_array($v)
? static::explodeEoL(static::__sequence($v, $__options, $__level + 0x01))
: static::explodeEoL(wordwrap($v, $__options['text'], __str::EOL));
$a = [];
foreach($_k as $l)
{
if(is_integer($k))
continue;
$a[] = $l === '' ? '' : sprintf(sprintf('%%-%ds', $__options['text']), $l);
$a[] = static::repeat('-', $__options['text']);
}
foreach($_v as $l)
{
if($l === '')
continue;
$a[] = sprintf(sprintf('%%-%ds', $__options['text']), $l);
is_integer($k) ?: $a[] = $__options['eol'];
}
$r[] = join($__options['eol'], $a);
}
}
return join($__options['eol'], $r);
}
#::
#:tests:
static function isUtf8($__mixed)
{
return TRUE === is_string($__mixed) && 0x01 === preg_match('/^.*$/us', $__mixed);
}
#::
#:aggregate:
static function concat($__stringN)
{
return static::join(func_get_args(), __str::DEVOID);
}
static function lcfi($__string)
{
return static::lcf(static::uc($__string));
}
static function lcwi($__string)
{
return static::lcw(static::uc($__string));
}
static function match($__string, $__pattern, array $__options = [])
{
$__options += [
'matches' => FALSE,
'mod' => '',
'flag' => 0,
'offset' => 0,
'escapeSlash' => TRUE,
'format' => FALSE
];
if(FALSE !== $__options['format'])
$__pattern = static::insert($__pattern, $__options['format']);
$__pattern = static::concat
(
__str::SLASH,
TRUE === $__options['escapeSlash']
? static::replace($__pattern, __str::SLASH, __str::ESLASH)
: $__pattern,
__str::SLASH,
$__options['mod']
);
return FALSE === $__options['matches']
? (bool) static::pregMatch($__pattern, $__string)
: static::pregMatch($__pattern, $__string, $__options['flag'], $__options['offset']);
}
static function ucfi($__string)
{
return static::ucf(static::lc($__string));
}
static function ucwi($__string)
{
return static::ucw(static::lc($__string));
}
#::
#:chr:
static function insert($__string, $__insert, $__index, $__concat = TRUE, $__length = 0x01)
{
$r = static::split($__string, $__length);
array_splice($r, $__index, 0x00, $__insert);
return TRUE === $__concat ? static::join($r) : $r;
}
static function merge($__string, array $__data, $__concat = TRUE, $__length = 0x01)
{
$r = static::split($__string, $__length);
foreach($__data as $k => $v)
$r[$k] = $v;
return TRUE === $__concat ? static::join($r) : $r;
}
static function range($__string, $__index, $__count, $__concat = TRUE, $__length = 0x01)
{
$r = static::split($__string, $__length);
return TRUE === $__concat
? [
0x00 => static::join(array_slice($r, 0x00, $__index)),
0x01 => static::join(array_slice($r, $__index, $__count)),
0x02 => static::join(array_slice($r, $__index + $__count))
]
: [
0x00 => array_slice($r, 0x00, $__index),
0x01 => array_slice($r, $__index, $__count),
0x02 => array_slice($r, $__index + $__count)
];
}
static function remove($__string, $__index, $__concat = TRUE, $__length = 0x01)
{
$r = static::split($__string, $__length);
unset($r[$__index]);
return TRUE === $__concat ? static::join($r) : $r;
}
static function removeRange($__string, $__index, $__count, $__concat = TRUE, $__length = 0x01)
{
$r = static::range($__string, $__index, $__count, TRUE, $__length);
unset($r[0x01]);
return TRUE === $__concat ? static::join($r) : $r;
}
static function reverse($__string, $__concat = TRUE, $__length = 0x01)
{
$r = array_reverse(static::split($__string, $__length));
return TRUE === $__concat ? static::join($r) : $r;
}
static function reverseRange($__string, $__index, $__count, $__concat = TRUE, $__length = 0x01)
{
$r = static::range($__string, $__index, $__count, FALSE, $__length);
$r[0x01] = array_reverse($r[0x01]);
$r[0x00] = static::join($r[0x00]);
$r[0x01] = static::join($r[0x01]);
$r[0x02] = static::join($r[0x02]);
return TRUE === $__concat ? static::join($r) : $r;
}
#::
#:sequence:
static function insertAt($__string, $__delimiter, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
$r = 0x05 >= func_num_args()
? static::explode($__string, $__delimiter)
: static::explode($__string, $__delimiter, $__limit);
array_splice($r, $__index, 0x00, $__insert);
return TRUE === $__concat ? static::join($r, $__delimiter) : $r;
}
static function mergeAt($__string, $__delimiter, array $__data, $__concat = TRUE, $__limit = NULL)
{
$r = 0x04 >= func_num_args()
? static::explode($__string, $__delimiter)
: static::explode($__string, $__delimiter, $__limit);
foreach($__data as $k => $v)
$r[$k] = $v;
return TRUE === $__concat ? static::join($r, $__delimiter) : $r;
}
static function rangeAt($__string, $__delimiter, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
$r = 0x05 >= func_num_args()
? static::explode($__string, $__delimiter)
: static::explode($__string, $__delimiter, $__limit);
return TRUE === $__concat
? [
0x00 => static::join(array_slice($r, 0x00, $__index), $__delimiter),
0x01 => static::join(array_slice($r, $__index, $__count), $__delimiter),
0x02 => static::join(array_slice($r, $__index + $__count), $__delimiter)
]
: [
0x00 => array_slice($r, 0x00, $__index),
0x01 => array_slice($r, $__index, $__count),
0x02 => array_slice($r, $__index + $__count)
];
}
static function removeAt($__string, $__delimiter, $__index, $__concat = TRUE, $__limit = NULL)
{
$r = 0x03 >= func_num_args()
? static::explode($__string, $__delimiter)
: static::explode($__string, $__delimiter, $__limit);
unset($r[$__index]);
return TRUE === $__concat ? static::join($r, $__delimiter) : $r;
}
static function removeRangeAt($__string, $__delimiter, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
$r = 0x05 >= func_num_args()
? static::rangeAt($__string, $__delimiter, $__index, $__count, TRUE)
: static::rangeAt($__string, $__delimiter, $__index, $__count, TRUE, $__limit);
unset($r[0x01]);
return TRUE === $__concat ? static::join($r, $__delimiter) : $r;
}
static function reverseAt($__string, $__delimiter, $__concat = TRUE, $__limit = NULL)
{
$r = 0x03 >= func_num_args()
? static::explode($__string, $__delimiter)
: static::explode($__string, $__delimiter, $__limit);
$r = array_reverse($r);
return TRUE === $__concat ? static::join($r, $__delimiter) : $r;
}
static function reverseRangeAt($__string, $__delimiter, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
$r = 0x05 >= func_num_args()
? static::rangeAt($__string, $__delimiter, $__index, $__count, FALSE)
: static::rangeAt($__string, $__delimiter, $__index, $__count, FALSE, $__limit);
$r[0x01] = array_reverse($r[0x01]);
$r[0x00] = static::join($r[0x00], $__delimiter);
$r[0x01] = static::join($r[0x01], $__delimiter);
$r[0x02] = static::join($r[0x02], $__delimiter);
return TRUE === $__concat ? static::join($r, $__delimiter) : $r;
}
#::
#:insertAt:
static function insertAtDir($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::DIR, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::DIR, $__insert, $__index, $__concat, $__limit);
}
static function insertAtDot($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::DOT, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::DOT, $__insert, $__index, $__concat, $__limit);
}
static function insertAtEoL($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::EOL, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::EOL, $__insert, $__index, $__concat, $__limit);
}
static function insertAtMinus($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::MINUS, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::MINUS, $__insert, $__index, $__concat, $__limit);
}
static function insertAtPath($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::PATH, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::PATH, $__insert, $__index, $__concat, $__limit);
}
static function insertAtPlus($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::PLUS, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::PLUS, $__insert, $__index, $__concat, $__limit);
}
static function insertAtSlash($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::SLASH, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::SLASH, $__insert, $__index, $__concat, $__limit);
}
static function insertAtSpace($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::SPACE, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::SPACE, $__insert, $__index, $__concat, $__limit);
}
static function insertAtUnderscore($__string, $__insert, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::insertAt($__string, __str::UNDERSCORE, $__insert, $__index, $__concat)
: static::insertAt($__string, __str::UNDERSCORE, $__insert, $__index, $__concat, $__limit);
}
#::
#:rangeAt:
static function rangeAtDir($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::DIR, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::DIR, $__index, $__count, $__concat, $__limit);
}
static function rangeAtDot($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::DOT, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::DOT, $__index, $__count, $__concat, $__limit);
}
static function rangeAtEoL($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::EOL, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::EOL, $__index, $__count, $__concat, $__limit);
}
static function rangeAtMinus($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::MINUS, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::MINUS, $__index, $__count, $__concat, $__limit);
}
static function rangeAtPath($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::PATH, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::PATH, $__index, $__count, $__concat, $__limit);
}
static function rangeAtPlus($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::PLUS, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::PLUS, $__index, $__count, $__concat, $__limit);
}
static function rangeAtSlash($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::SLASH, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::SLASH, $__index, $__count, $__concat, $__limit);
}
static function rangeAtSpace($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::SPACE, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::SPACE, $__index, $__count, $__concat, $__limit);
}
static function rangeAtUnderscore($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::rangeAt($__string, __str::UNDERSCORE, $__index, $__count, $__concat)
: static::rangeAt($__string, __str::UNDERSCORE, $__index, $__count, $__concat, $__limit);
}
#::
#:mergeAt:
static function mergeAtDir($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::DIR, $__data, $__concat)
: static::mergeAt($__string, __str::DIR, $__data, $__concat, $__limit);
}
static function mergeAtDot($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::DOT, $__data, $__concat)
: static::mergeAt($__string, __str::DOT, $__data, $__concat, $__limit);
}
static function mergeAtEoL($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::EOL, $__data, $__concat)
: static::mergeAt($__string, __str::EOL, $__data, $__concat, $__limit);
}
static function mergeAtMinus($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::MINUS, $__data, $__concat)
: static::mergeAt($__string, __str::MINUS, $__data, $__concat, $__limit);
}
static function mergeAtPath($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::PATH, $__data, $__concat)
: static::mergeAt($__string, __str::PATH, $__data, $__concat, $__limit);
}
static function mergeAtPlus($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::PLUS, $__data, $__concat)
: static::mergeAt($__string, __str::PLUS, $__data, $__concat, $__limit);
}
static function mergeAtSlash($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::SLASH, $__data, $__concat)
: static::mergeAt($__string, __str::SLASH, $__data, $__concat, $__limit);
}
static function mergeAtSpace($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::SPACE, $__data, $__concat)
: static::mergeAt($__string, __str::SPACE, $__data, $__concat, $__limit);
}
static function mergeAtUnderscore($__string, array $__data, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::mergeAt($__string, __str::UNDERSCORE, $__data, $__concat)
: static::mergeAt($__string, __str::UNDERSCORE, $__data, $__concat, $__limit);
}
#::
#:removeAt:
static function removeAtDir($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::DIR, $__index, $__concat)
: static::removeAt($__string, __str::DIR, $__index, $__concat, $__limit);
}
static function removeAtDot($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::DOT, $__index, $__concat)
: static::removeAt($__string, __str::DOT, $__index, $__concat, $__limit);
}
static function removeAtEoL($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::EOL, $__index, $__concat)
: static::removeAt($__string, __str::EOL, $__index, $__concat, $__limit);
}
static function removeAtMinus($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::MINUS, $__index, $__concat)
: static::removeAt($__string, __str::MINUS, $__index, $__concat, $__limit);
}
static function removeAtPath($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::PATH, $__index, $__concat)
: static::removeAt($__string, __str::PATH, $__index, $__concat, $__limit);
}
static function removeAtPlus($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::PLUS, $__index, $__concat)
: static::removeAt($__string, __str::PLUS, $__index, $__concat, $__limit);
}
static function removeAtSlash($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::SLASH, $__index, $__concat)
: static::removeAt($__string, __str::SLASH, $__index, $__concat, $__limit);
}
static function removeAtSpace($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::SPACE, $__index, $__concat)
: static::removeAt($__string, __str::SPACE, $__index, $__concat, $__limit);
}
static function removeAtUnderscore($__string, $__index, $__concat = TRUE, $__limit = NULL)
{
return 0x03 >= func_num_args()
? static::removeAt($__string, __str::UNDERSCORE, $__index, $__concat)
: static::removeAt($__string, __str::UNDERSCORE, $__index, $__concat, $__limit);
}
#::
#:removeRangeAt:
static function removeRangeAtDir($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::DIR, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::DIR, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtDot($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::DOT, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::DOT, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtEoL($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::EOL, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::EOL, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtMinus($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::MINUS, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::MINUS, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtPath($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::PATH, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::PATH, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtPlus($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::PLUS, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::PLUS, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtSlash($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::SLASH, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::SLASH, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtSpace($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::SPACE, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::SPACE, $__index, $__count, $__concat, $__limit);
}
static function removeRangeAtUnderscore($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::removeRangeAt($__string, __str::UNDERSCORE, $__index, $__count, $__concat)
: static::removeRangeAt($__string, __str::UNDERSCORE, $__index, $__count, $__concat, $__limit);
}
#::
#:reverseAt:
static function reverseAtDir($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::DIR, $__concat)
: static::reverseAt($__string, __str::DIR, $__concat, $__limit);
}
static function reverseAtDot($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::DOT, $__concat)
: static::reverseAt($__string, __str::DOT, $__concat, $__limit);
}
static function reverseAtEoL($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::EOL, $__concat)
: static::reverseAt($__string, __str::EOL, $__concat, $__limit);
}
static function reverseAtMinus($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::MINUS, $__concat)
: static::reverseAt($__string, __str::MINUS, $__concat, $__limit);
}
static function reverseAtPath($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::PATH, $__concat)
: static::reverseAt($__string, __str::PATH, $__concat, $__limit);
}
static function reverseAtPlus($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::PLUS, $__concat)
: static::reverseAt($__string, __str::PLUS, $__concat, $__limit);
}
static function reverseAtSlash($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::SLASH, $__concat)
: static::reverseAt($__string, __str::SLASH, $__concat, $__limit);
}
static function reverseAtSpace($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::SPACE, $__concat)
: static::reverseAt($__string, __str::SPACE, $__concat, $__limit);
}
static function reverseAtUnderscore($__string, $__concat = TRUE, $__limit = NULL)
{
return 0x02 >= func_num_args()
? static::reverseAt($__string, __str::UNDERSCORE, $__concat)
: static::reverseAt($__string, __str::UNDERSCORE, $__concat, $__limit);
}
#::
#:reverseRangeAt:
static function reverseRangeAtDir($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::DIR, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::DIR, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtDot($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::DOT, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::DOT, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtEoL($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::EOL, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::EOL, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtMinus($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::MINUS, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::MINUS, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtPath($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::PATH, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::PATH, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtPlus($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::PLUS, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::PLUS, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtSlash($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::SLASH, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::SLASH, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtSpace($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::SPACE, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::SPACE, $__index, $__count, $__concat, $__limit);
}
static function reverseRangeAtUnderscore($__string, $__index, $__count, $__concat = TRUE, $__limit = NULL)
{
return 0x04 >= func_num_args()
? static::reverseRangeAt($__string, __str::UNDERSCORE, $__index, $__count, $__concat)
: static::reverseRangeAt($__string, __str::UNDERSCORE, $__index, $__count, $__concat, $__limit);
}
#::
#:explode:
static function explodeDir($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::DIR)
: static::explode($__string, __str::DIR, $__limit);
}
static function explodeDot($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::DOT)
: static::explode($__string, __str::DOT, $__limit);
}
static function explodeEoL($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::EOL)
: static::explode($__string, __str::EOL, $__limit);
}
static function explodeMinus($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::MINUS)
: static::explode($__string, __str::MINUS, $__limit);
}
static function explodePath($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::PATH)
: static::explode($__string, __str::PATH, $__limit);
}
static function explodePlus($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::PLUS)
: static::explode($__string, __str::PLUS, $__limit);
}
static function explodeSlash($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::SLASH)
: static::explode($__string, __str::SLASH, $__limit);
}
static function explodeSpace($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::SPACE)
: static::explode($__string, __str::SPACE, $__limit);
}
static function explodeUnderscore($__string, $__limit = NULL)
{
return 0x01 >= func_num_args()
? static::explode($__string, __str::UNDERSCORE)
: static::explode($__string, __str::UNDERSCORE, $__limit);
}
#::
#:join:
static function joinDir(array $__data)
{
return static::join($__data, __str::DIR);
}
static function joinDot(array $__data)
{
return static::join($__data, __str::DOT);
}
static function joinEoL(array $__data)
{
return static::join($__data, __str::EOL);
}
static function joinMinus(array $__data)
{
return static::join($__data, __str::MINUS);
}
static function joinPath(array $__data)
{
return static::join($__data, __str::PATH);
}
static function joinPlus(array $__data)
{
return static::join($__data, __str::PLUS);
}
static function joinSlash(array $__data)
{
return static::join($__data, __str::SLASH);
}
static function joinSpace(array $__data)
{
return static::join($__data, __str::SPACE);
}
static function joinUnderscore(array $__data)
{
return static::join($__data, __str::UNDERSCORE);
}
static function joinWords(array $__data, $__beforeLast = NULL)
{
if(NULL === $__beforeLast || 0x01 >= count($__data))
return static::join($__data, __str::COMMA_SPACE);
$l = array_pop($__data);
return static::concatSpace(static::join($__data, __str::COMMA_SPACE), $__beforeLast, $l);
}
#::
#:concat:
static function concatDir($__stringN)
{
return static::joinDir(func_get_args());
}
static function concatDot($__stringN)
{
return static::joinDot(func_get_args());
}
static function concatEoL($__stringN)
{
return static::joinEoL(func_get_args());
}
static function concatPath($__stringN)
{
return static::joinPath(func_get_args());
}
static function concatPlus($__stringN)
{
return static::joinPlus(func_get_args());
}
static function concatSlash($__stringN)
{
return static::joinSlash(func_get_args());
}
static function concatSpace($__stringN)
{
return static::joinSpace(func_get_args());
}
static function concatUnderscore($__stringN)
{
return static::joinUnderscore(func_get_args());
}
#::
#:pad:
static function lPad($__string, $__length, $__delimiter)
{
return static::pad($__string, $__length, $__delimiter, STR_PAD_LEFT);
}
static function lPadDot($__string, $__length)
{
return static::lPad($__string, $__length, __str::DOT);
}
static function lPadSpace($__string, $__length)
{
return static::lPad($__string, $__length, __str::SPACE);
}
static function rPad($__string, $__length, $__delimiter)
{
return static::pad($__string, $__length, $__delimiter, STR_PAD_RIGHT);
}
static function rPadDot($__string, $__length)
{
return static::rPad($__string, $__length, __str::DOT);
}
static function rPadSpace($__string, $__length)
{
return static::rPad($__string, $__length, __str::SPACE);
}
#::
#:repeat:
static function repeatDot($__length)
{
return static::repeat(__str::DOT, $__length);
}
static function repeatEoL($__length)
{
return static::repeat(__str::EOL, $__length);
}
static function repeatSpace($__length)
{
return static::repeat(__str::SPACE, $__length);
}
static function repeatTab($__length)
{
return static::repeat(chr(__chr::TAB), $__length);
}
#::
#:chrOffset:
static function lChrOffset($__string, $__char, $__until = 0x01)
{
return static::__chrOffset($__string, $__char, FALSE, $__until);
}
static function rChrOffset($__string, $__char, $__until = 0x01)
{
return static::__chrOffset($__string, $__char, TRUE, $__until);
}
protected function __chrOffset($__string, $__char, $__reverse, $__until = 0x01)
{
$i = 0x00;
$l = 0x00;
$r = TRUE === $__reverse
? static::reverse($__string, FALSE)
: static::split($__string, FALSE);
foreach($r as $c)
{
if($c === $__char
&& ++$i === $__until)
return $l;
$l++;
}
return FALSE;
}
#::
#:sub:
static function lSub($__string, $__char, $__until = 0x01, $__length = NULL)
{
if(FALSE === ($o = static::lChrOffset($__string, $__char, $__until)))
return NULL;
return 0x03 >= func_num_args()
? static::sub(static::sub($__string, 0, $o), -$o)
: static::sub(static::sub($__string, 0, $o), -$o, $__length);
}
static function rSub($__string, $__char, $__until = 0x01, $__length = NULL)
{
if(FALSE === ($o = static::rChrOffset($__string, $__char, $__until)))
return NULL;
return 0x03 >= func_num_args()
? static::sub($__string, -$o)
: static::sub($__string, -$o, $__length);
}
#::
#:is:
static function lIs($__string, $__search)
{
return static::sub($__string, 0x00, static::len($__search)) === $__search;
}
static function rIs($__string, $__search)
{
return static::sub($__string, -static::len($__search)) === $__search;
}
#::
#:count:
static function lCount($__string, $__search)
{
$c = 0x00;
$s = $__string;
while(static::lIs($s, $__search) && ++$c)
$s = static::lCut($s, $__search, FALSE);
return $c;
}
static function rCount($__string, $__search)
{
$c = 0x00;
$s = $__string;
while(static::rIs($s, $__search) && ++$c)
$s = static::rCut($s, $__search, FALSE);
return $c;
}
#::
#:cut:
static function lCut($__string, $__search, $__deep = FALSE)
{
if(is_array($__search))
{
foreach($__search as $s)
$__string = static::lCut($__string, $s, $__deep);
return $__string;
}
if(FALSE === $__deep || 0x01 === $__deep)
return FALSE === static::lIs($__string, $__search)
? $__string
: static::sub($__string, static::len($__search));
$m = 0x00;
$d = (int) $__deep;
while(static::lIs($__string, $__search))
{
if(TRUE !== $__deep && $m++ === $d)
break;
$__string = static::lCut($__string, $__search, FALSE);
}
return $__string;
}
static function rCut($__string, $__search, $__deep = FALSE)
{
if(is_array($__search))
{
foreach($__search as $s)
$__string = static::rCut($__string, $s, $__deep);
return $__string;
}
if(FALSE === $__deep || 0x01 === $__deep)
return FALSE === static::rIs($__string, $__search)
? $__string
: static::sub($__string, 0x00, -static::len($__search));
$m = 0x00;
$d = (int) $__deep;
while(static::rIs($__string, $__search))
{
if(TRUE !== $__deep && $m++ === $d)
break;
$__string = static::rCut($__string, $__search, FALSE);
}
return $__string;
}
#::
}
Comments