classCursor
final class Cursor
Restricted visibility: declared "@visibility root". Code outside that scope must not name this declaration.
A position in the text being scanned, with the line and column it is at.
Properties§
public string $sourceMethods§
public function __construct(public string $source)Parameters
$source | string | The text |
public function eof(): boolReports whether the end has been reached.
Returns
bool True at the endTest cases 5
Called from 4
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:34
- method-call LemonParser\Scanner\CodeReader::literal() packages/lemon-parser/src/Scanner/CodeReader.php:85
- method-call LemonParser\Scanner\Scanner::scan() packages/lemon-parser/src/Scanner/Scanner.php:41
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:57
Calls 1
- function-call
strlenline 36
public function peek(int $ahead = 0): stringLooks at a byte without moving.
Parameters
$ahead | int | How many bytes past the current one |
Returns
string The byte, or an empty string past the endTest cases 1
CursorTest::testPeekcalls
Called from 5
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:35
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:47
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:65
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:64
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:83
public function offset(): intAnswers the byte offset.
Returns
int The offset from the start of the textTest cases 3
CursorTest::testMatchcallsCursorTest::testOffsetcallsCursorTest::testTakecalls
public function location(): LocationAnswers the position.
Returns
Location Line and column of the current byteTest cases 2
Called from 3
public function startsWith(string $prefix): boolReports whether the text continues with a prefix.
Parameters
$prefix | string | What to look for |
Returns
bool True when it followsTest cases 1
Called from 1
public function take(int $length): stringMoves past a number of bytes.
Parameters
$length | int | How many bytes, cut short at the end |
Returns
string The bytes moved pastTest cases 11
CodeReaderTest::testCommentcallsCodeReaderTest::testLiteralcallsCodeReaderTest::testReadcallsCursorTest::testEofcallsCursorTest::testLocationcallsCursorTest::testMatchcallsCursorTest::testOffsetcallsCursorTest::testStartsWithcallsCursorTest::testTakecallsCursorTest::testTakeUntilcallsScannerTest::testSkipTriviacalls
Called from 14
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:31
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:38
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:52
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:70
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:72
- method-call LemonParser\Scanner\CodeReader::literal() packages/lemon-parser/src/Scanner/CodeReader.php:83
- method-call LemonParser\Scanner\CodeReader::literal() packages/lemon-parser/src/Scanner/CodeReader.php:86
- method-call LemonParser\Scanner\Cursor::match() packages/lemon-parser/src/Scanner/Cursor.php:118
- method-call LemonParser\Scanner\Cursor::takeUntil() packages/lemon-parser/src/Scanner/Cursor.php:134
- method-call LemonParser\Scanner\Cursor::takeUntil() packages/lemon-parser/src/Scanner/Cursor.php:135
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:64
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:66
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:85
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:109
public function match(string $pattern): string|nullMoves past a pattern when it matches here.
Parameters
$pattern | string | A regular expression body without delimiters |
Returns
string|null The match, or null when it does not match hereTest cases 1
CursorTest::testMatchcalls
Called from 5
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:66
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:58
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:98
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:102
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:105
Calls 4
- function-call
preg_matchline 114 - function-call
str_replaceline 114 - method-call Cursor::take() line 118
- function-call
strlenline 118
public function takeUntil(string $needle): string|nullMoves past everything up to and including a needle.
Parameters
$needle | string | What to look for |
Returns
string|null The text before the needle, or null when it is absentTest cases 1
Called from 3
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:71
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:65
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:86
Calls 3
- function-call
strposline 130 - method-call Cursor::take() line 134
- function-call
strlenline 135
Private surface 3§
Implementation details, listed for orientation only.
private int $offset = 0private int $line = 1private int $column = 1Test cases 23§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 8
CursorTest::testEofcallsCursorTest::testLocationcallsCursorTest::testMatchcallsCursorTest::testOffsetcallsCursorTest::testPeekcallsCursorTest::testStartsWithcallsCursorTest::testTakecallsCursorTest::testTakeUntilcalls
Other tests reaching this symbol 15
LemonGrammarCompilerTestcallsLemonGrammarReaderTestcallsParserTestcallsCodeReaderTest::testCommentcallsCodeReaderTest::testLiteralcallsCodeReaderTest::testReadcallsCodeReaderTest::testReadRejectsAnUnterminatedBlockcallsScannerTest::testNextcallsScannerTest::testNextRejectsAnUnterminatedStringcallsScannerTest::testSkipTriviacallsScannerTest::testSkipTriviaRunsAnOpenCommentToTheEndcallsDeclarationReaderTestcallsGrammarReaderTestcallsRuleReaderTestcallsSymbolListReaderTestcalls
Relations§
Instantiated in 1
Method calls 34
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:30
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:31
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:32
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:34
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:35
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:37
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:38
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:47
- method-call LemonParser\Scanner\CodeReader::read() packages/lemon-parser/src/Scanner/CodeReader.php:52
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:65
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:66
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:70
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:71
- method-call LemonParser\Scanner\CodeReader::comment() packages/lemon-parser/src/Scanner/CodeReader.php:72
- method-call LemonParser\Scanner\CodeReader::literal() packages/lemon-parser/src/Scanner/CodeReader.php:83
- method-call LemonParser\Scanner\CodeReader::literal() packages/lemon-parser/src/Scanner/CodeReader.php:85
- method-call LemonParser\Scanner\CodeReader::literal() packages/lemon-parser/src/Scanner/CodeReader.php:86
- method-call LemonParser\Scanner\Scanner::scan() packages/lemon-parser/src/Scanner/Scanner.php:41
- method-call LemonParser\Scanner\Scanner::scan() packages/lemon-parser/src/Scanner/Scanner.php:42
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:57
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:58
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:61
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:64
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:64
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:65
- method-call LemonParser\Scanner\Scanner::skipTrivia() packages/lemon-parser/src/Scanner/Scanner.php:66
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:82
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:83
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:85
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:86
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:98
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:102
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:105
- method-call LemonParser\Scanner\Scanner::next() packages/lemon-parser/src/Scanner/Scanner.php:109
Type declarations 5
- type LemonParser\Scanner\CodeReader packages/lemon-parser/src/Scanner/CodeReader.php:28
- type LemonParser\Scanner\CodeReader packages/lemon-parser/src/Scanner/CodeReader.php:63
- type LemonParser\Scanner\CodeReader packages/lemon-parser/src/Scanner/CodeReader.php:81
- type LemonParser\Scanner\Scanner packages/lemon-parser/src/Scanner/Scanner.php:55
- type LemonParser\Scanner\Scanner packages/lemon-parser/src/Scanner/Scanner.php:80