| Conditions | 3 |
| Paths | 3 |
| Total Lines | 19 |
| Code Lines | 10 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
| 1 | <?php |
||
| 18 | public static function findFromFirstCharacterOffset(string $text, int $offsetFromFirstCharacter, string $encoding = TextEncoding::UTF8): array |
||
| 19 | { |
||
| 20 | // positive offset |
||
| 21 | Assert::greaterThanEq($offsetFromFirstCharacter, 0, 'Offset must be positive'); |
||
| 22 | |||
| 23 | $textLength = mb_strlen($text); |
||
| 24 | if ($textLength < $offsetFromFirstCharacter) { |
||
| 25 | throw new InvalidArgumentException( |
||
| 26 | \Safe\sprintf('Offset given "%d" is higher than the string length "%d"', $offsetFromFirstCharacter, $textLength) |
||
| 27 | ); |
||
| 28 | } |
||
| 29 | |||
| 30 | $textBeforeOffset = mb_substr($text, 0, $offsetFromFirstCharacter, $encoding); |
||
| 31 | $line = mb_substr_count($textBeforeOffset, PHP_EOL) + 1; |
||
| 32 | $offsetOfPreviousLinebreak = mb_strrpos($textBeforeOffset, PHP_EOL, 0, $encoding); |
||
| 33 | |||
| 34 | $offset = $offsetFromFirstCharacter - ($offsetOfPreviousLinebreak !== false ? $offsetOfPreviousLinebreak + 1 : 0); |
||
| 35 | |||
| 36 | return [$line, $offset]; |
||
| 37 | } |
||
| 39 |