abstract class AbstractStringWrapper in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php \Zend\Stdlib\StringWrapper\AbstractStringWrapper
Hierarchy
- class \Zend\Stdlib\StringWrapper\AbstractStringWrapper implements StringWrapperInterface
Expanded class hierarchy of AbstractStringWrapper
File
- vendor/
zendframework/ zend-stdlib/ src/ StringWrapper/ AbstractStringWrapper.php, line 15
Namespace
Zend\Stdlib\StringWrapperView source
abstract class AbstractStringWrapper implements StringWrapperInterface {
/**
* The character encoding working on
* @var string|null
*/
protected $encoding = 'UTF-8';
/**
* An optionally character encoding to convert to
* @var string|null
*/
protected $convertEncoding;
/**
* Check if the given character encoding is supported by this wrapper
* and the character encoding to convert to is also supported.
*
* @param string $encoding
* @param string|null $convertEncoding
* @return bool
*/
public static function isSupported($encoding, $convertEncoding = null) {
$supportedEncodings = static::getSupportedEncodings();
if (!in_array(strtoupper($encoding), $supportedEncodings)) {
return false;
}
if ($convertEncoding !== null && !in_array(strtoupper($convertEncoding), $supportedEncodings)) {
return false;
}
return true;
}
/**
* Set character encoding working with and convert to
*
* @param string $encoding The character encoding to work with
* @param string|null $convertEncoding The character encoding to convert to
* @return StringWrapperInterface
*/
public function setEncoding($encoding, $convertEncoding = null) {
$supportedEncodings = static::getSupportedEncodings();
$encodingUpper = strtoupper($encoding);
if (!in_array($encodingUpper, $supportedEncodings)) {
throw new Exception\InvalidArgumentException('Wrapper doesn\'t support character encoding "' . $encoding . '"');
}
if ($convertEncoding !== null) {
$convertEncodingUpper = strtoupper($convertEncoding);
if (!in_array($convertEncodingUpper, $supportedEncodings)) {
throw new Exception\InvalidArgumentException('Wrapper doesn\'t support character encoding "' . $convertEncoding . '"');
}
$this->convertEncoding = $convertEncodingUpper;
}
else {
$this->convertEncoding = null;
}
$this->encoding = $encodingUpper;
return $this;
}
/**
* Get the defined character encoding to work with
*
* @return string
* @throws Exception\LogicException If no encoding was defined
*/
public function getEncoding() {
return $this->encoding;
}
/**
* Get the defined character encoding to convert to
*
* @return string|null
*/
public function getConvertEncoding() {
return $this->convertEncoding;
}
/**
* Convert a string from defined character encoding to the defined convert encoding
*
* @param string $str
* @param bool $reverse
* @return string|false
*/
public function convert($str, $reverse = false) {
$encoding = $this
->getEncoding();
$convertEncoding = $this
->getConvertEncoding();
if ($convertEncoding === null) {
throw new Exception\LogicException('No convert encoding defined');
}
if ($encoding === $convertEncoding) {
return $str;
}
$from = $reverse ? $convertEncoding : $encoding;
$to = $reverse ? $encoding : $convertEncoding;
throw new Exception\RuntimeException(sprintf('Converting from "%s" to "%s" isn\'t supported by this string wrapper', $from, $to));
}
/**
* Wraps a string to a given number of characters
*
* @param string $string
* @param int $width
* @param string $break
* @param bool $cut
* @return string|false
*/
public function wordWrap($string, $width = 75, $break = "\n", $cut = false) {
$string = (string) $string;
if ($string === '') {
return '';
}
$break = (string) $break;
if ($break === '') {
throw new Exception\InvalidArgumentException('Break string cannot be empty');
}
$width = (int) $width;
if ($width === 0 && $cut) {
throw new Exception\InvalidArgumentException('Cannot force cut when width is zero');
}
if (StringUtils::isSingleByteEncoding($this
->getEncoding())) {
return wordwrap($string, $width, $break, $cut);
}
$stringWidth = $this
->strlen($string);
$breakWidth = $this
->strlen($break);
$result = '';
$lastStart = $lastSpace = 0;
for ($current = 0; $current < $stringWidth; $current++) {
$char = $this
->substr($string, $current, 1);
$possibleBreak = $char;
if ($breakWidth !== 1) {
$possibleBreak = $this
->substr($string, $current, $breakWidth);
}
if ($possibleBreak === $break) {
$result .= $this
->substr($string, $lastStart, $current - $lastStart + $breakWidth);
$current += $breakWidth - 1;
$lastStart = $lastSpace = $current + 1;
continue;
}
if ($char === ' ') {
if ($current - $lastStart >= $width) {
$result .= $this
->substr($string, $lastStart, $current - $lastStart) . $break;
$lastStart = $current + 1;
}
$lastSpace = $current;
continue;
}
if ($current - $lastStart >= $width && $cut && $lastStart >= $lastSpace) {
$result .= $this
->substr($string, $lastStart, $current - $lastStart) . $break;
$lastStart = $lastSpace = $current;
continue;
}
if ($current - $lastStart >= $width && $lastStart < $lastSpace) {
$result .= $this
->substr($string, $lastStart, $lastSpace - $lastStart) . $break;
$lastStart = $lastSpace = $lastSpace + 1;
continue;
}
}
if ($lastStart !== $current) {
$result .= $this
->substr($string, $lastStart, $current - $lastStart);
}
return $result;
}
/**
* Pad a string to a certain length with another string
*
* @param string $input
* @param int $padLength
* @param string $padString
* @param int $padType
* @return string
*/
public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT) {
if (StringUtils::isSingleByteEncoding($this
->getEncoding())) {
return str_pad($input, $padLength, $padString, $padType);
}
$lengthOfPadding = $padLength - $this
->strlen($input);
if ($lengthOfPadding <= 0) {
return $input;
}
$padStringLength = $this
->strlen($padString);
if ($padStringLength === 0) {
return $input;
}
$repeatCount = floor($lengthOfPadding / $padStringLength);
if ($padType === STR_PAD_BOTH) {
$repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2;
$lastStringLength = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength;
$lastStringLeftLength = $lastStringRightLength = floor($lastStringLength / 2);
$lastStringRightLength += $lastStringLength % 2;
$lastStringLeft = $this
->substr($padString, 0, $lastStringLeftLength);
$lastStringRight = $this
->substr($padString, 0, $lastStringRightLength);
return str_repeat($padString, $repeatCountLeft) . $lastStringLeft . $input . str_repeat($padString, $repeatCountRight) . $lastStringRight;
}
$lastString = $this
->substr($padString, 0, $lengthOfPadding % $padStringLength);
if ($padType === STR_PAD_LEFT) {
return str_repeat($padString, $repeatCount) . $lastString . $input;
}
return $input . str_repeat($padString, $repeatCount) . $lastString;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AbstractStringWrapper:: |
protected | property | An optionally character encoding to convert to | |
AbstractStringWrapper:: |
protected | property | The character encoding working on | 1 |
AbstractStringWrapper:: |
public | function |
Convert a string from defined character encoding to the defined convert encoding Overrides StringWrapperInterface:: |
2 |
AbstractStringWrapper:: |
public | function |
Get the defined character encoding to convert to Overrides StringWrapperInterface:: |
|
AbstractStringWrapper:: |
public | function |
Get the defined character encoding to work with Overrides StringWrapperInterface:: |
|
AbstractStringWrapper:: |
public static | function |
Check if the given character encoding is supported by this wrapper
and the character encoding to convert to is also supported. Overrides StringWrapperInterface:: |
1 |
AbstractStringWrapper:: |
public | function |
Set character encoding working with and convert to Overrides StringWrapperInterface:: |
1 |
AbstractStringWrapper:: |
public | function |
Pad a string to a certain length with another string Overrides StringWrapperInterface:: |
|
AbstractStringWrapper:: |
public | function |
Wraps a string to a given number of characters Overrides StringWrapperInterface:: |
|
StringWrapperInterface:: |
public static | function | Get a list of supported character encodings | 4 |
StringWrapperInterface:: |
public | function | Returns the length of the given string | 4 |
StringWrapperInterface:: |
public | function | Find the position of the first occurrence of a substring in a string | 4 |
StringWrapperInterface:: |
public | function | Returns the portion of string specified by the start and length parameters | 4 |