xref: /plugin/totext/vendor/prinsfrank/pdfparser/src/Stream/Stream.php (revision b4ecfc82b02c9a76205381a28b47006474ccf569)
1<?php declare(strict_types=1);
2
3namespace PrinsFrank\PdfParser\Stream;
4
5use PrinsFrank\PdfParser\Document\CMap\ToUnicode\ToUnicodeCMapOperator;
6use PrinsFrank\PdfParser\Document\Generic\Character\DelimiterCharacter;
7use PrinsFrank\PdfParser\Document\Generic\Character\WhitespaceCharacter;
8use PrinsFrank\PdfParser\Document\Generic\Marker;
9
10interface Stream {
11    public function getSizeInBytes(): int;
12
13    /** @phpstan-assert int<1, max> $nrOfBytes */
14    public function read(int $from, int $nrOfBytes): string;
15
16    public function toString(): string;
17
18    /**
19     * @phpstan-assert int<0, max> $startByteOffset
20     * @phpstan-assert int<0, max> $endByteOffset
21     */
22    public function slice(int $startByteOffset, int $endByteOffset): string;
23
24    /**
25     * @phpstan-assert int<0, max> $from
26     * @phpstan-assert int<1, max> $nrOfBytes
27     *
28     * @return iterable<int, string>
29     */
30    public function chars(int $from, int $nrOfBytes): iterable;
31
32    public function firstPos(WhitespaceCharacter|Marker|DelimiterCharacter|ToUnicodeCMapOperator $needle, int $offsetFromStart, int $before): ?int;
33
34    public function lastPos(WhitespaceCharacter|Marker|DelimiterCharacter|ToUnicodeCMapOperator $needle, int $offsetFromEnd): ?int;
35
36    public function getStartNextLineAfter(WhitespaceCharacter|Marker|DelimiterCharacter|ToUnicodeCMapOperator $needle, int $offsetFromStart, int $before): ?int;
37
38    public function getStartOfNextLine(int $byteOffset, int $before): ?int;
39
40    public function getEndOfCurrentLine(int $byteOffset, int $before): ?int;
41}
42