68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php declare(strict_types=1);
 | |
| /**
 | |
|  * This file is part of the Phootwork package.
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  *
 | |
|  * @license MIT License
 | |
|  * @copyright Thomas Gossmann
 | |
|  */
 | |
| namespace phootwork\lang\parts;
 | |
| 
 | |
| use InvalidArgumentException;
 | |
| 
 | |
| /**
 | |
|  * Internal Text methods
 | |
|  *
 | |
|  * @author Thomas Gossmann
 | |
|  * @author Cristiano Cinotti
 | |
|  */
 | |
| trait InternalPart {
 | |
| 	abstract public function length(): int;
 | |
| 
 | |
| 	/**
 | |
| 	 * @internal
 | |
| 	 *
 | |
| 	 * @param int $offset
 | |
| 	 *
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	protected function prepareOffset(int $offset): int {
 | |
| 		$len = $this->length();
 | |
| 		if ($offset < -$len || $offset > $len) {
 | |
| 			throw new InvalidArgumentException("Offset must be in range [-$len, $len]");
 | |
| 		}
 | |
| 
 | |
| 		if ($offset < 0) {
 | |
| 			$offset += $len;
 | |
| 		}
 | |
| 
 | |
| 		return $offset;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @param int      $offset
 | |
| 	 * @param int|null $length
 | |
| 	 *
 | |
| 	 * @return int
 | |
| 	 *
 | |
| 	 * @internal
 | |
| 	 *
 | |
| 	 */
 | |
| 	protected function prepareLength(int $offset, ?int $length): int {
 | |
| 		$length = (null === $length) ? ($this->length() - $offset) : (
 | |
| 			($length < 0) ? ($length + $this->length() - $offset) : $length
 | |
| 		);
 | |
| 
 | |
| 		if ($length < 0) {
 | |
| 			throw new InvalidArgumentException('Length too small');
 | |
| 		}
 | |
| 
 | |
| 		if ($offset + $length > $this->length()) {
 | |
| 			throw new InvalidArgumentException('Length too large');
 | |
| 		}
 | |
| 
 | |
| 		return $length;
 | |
| 	}
 | |
| }
 |