File tree Expand file tree Collapse file tree 2 files changed +41
-0
lines changed
Expand file tree Collapse file tree 2 files changed +41
-0
lines changed Original file line number Diff line number Diff line change 99use DirectoryTree \ImapEngine \Connection \Tokens \ListClose ;
1010use DirectoryTree \ImapEngine \Connection \Tokens \ListOpen ;
1111use DirectoryTree \ImapEngine \Connection \Tokens \Literal ;
12+ use DirectoryTree \ImapEngine \Connection \Tokens \Number ;
1213use DirectoryTree \ImapEngine \Connection \Tokens \QuotedString ;
1314use DirectoryTree \ImapEngine \Connection \Tokens \ResponseCodeClose ;
1415use DirectoryTree \ImapEngine \Connection \Tokens \ResponseCodeOpen ;
@@ -120,6 +121,11 @@ public function nextToken(): ?Token
120121 return $ this ->readLiteral ();
121122 }
122123
124+ // Check for number.
125+ if (ctype_digit ($ char )) {
126+ return $ this ->readNumber ();
127+ }
128+
123129 // Otherwise, parse an atom.
124130 return $ this ->readAtom ();
125131 }
@@ -300,6 +306,36 @@ protected function readLiteral(): Literal
300306 return new Literal ($ literal );
301307 }
302308
309+ /**
310+ * Reads a number token.
311+ *
312+ * Numbers are sequences of digits.
313+ */
314+ protected function readNumber (): Number
315+ {
316+ $ value = '' ;
317+
318+ while (true ) {
319+ $ this ->ensureBuffer (1 );
320+
321+ $ char = $ this ->currentChar ();
322+
323+ if ($ char === null ) {
324+ break ;
325+ }
326+
327+ if (! ctype_digit ($ char )) {
328+ break ;
329+ }
330+
331+ $ value .= $ char ;
332+
333+ $ this ->advance ();
334+ }
335+
336+ return new Number ($ value );
337+ }
338+
303339 /**
304340 * Reads an atom token.
305341 *
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace DirectoryTree \ImapEngine \Connection \Tokens ;
4+
5+ class Number extends Token {}
You can’t perform that action at this time.
0 commit comments