next method
Reads the next token.
At the end of the data it returns a PdfContentTokenKind.endOfData token; calling again keeps returning the same one.
Implementation
PdfContentToken next() {
skipWhitespace();
if (position >= end) {
return PdfContentToken(PdfContentTokenKind.endOfData, position, position);
}
final start = position;
final byte = data[position];
switch (byte) {
case 0x25: // %
return _readComment(start);
case 0x2F: // /
return _readName(start);
case 0x28: // (
return _readLiteralString(start);
case 0x3C: // <
if (position + 1 < end && data[position + 1] == 0x3C) {
position += 2;
return PdfContentToken(
PdfContentTokenKind.dictStart, start, position,
text: '<<');
}
return _readHexString(start);
case 0x3E: // >
if (position + 1 < end && data[position + 1] == 0x3E) {
position += 2;
return PdfContentToken(PdfContentTokenKind.dictEnd, start, position,
text: '>>');
}
// Stray `>`: garbage, consumed as a one-byte keyword.
position++;
return PdfContentToken(PdfContentTokenKind.keyword, start, position,
text: '>');
case 0x5B: // [
position++;
return PdfContentToken(PdfContentTokenKind.arrayStart, start, position,
text: '[');
case 0x5D: // ]
position++;
return PdfContentToken(PdfContentTokenKind.arrayEnd, start, position,
text: ']');
case 0x7B: // {
case 0x7D: // }
position++;
return PdfContentToken(PdfContentTokenKind.keyword, start, position,
text: String.fromCharCode(byte));
case 0x29: // stray )
position++;
return PdfContentToken(PdfContentTokenKind.keyword, start, position,
text: ')');
}
if (_startsNumber(byte)) {
return _readNumber(start);
}
return _readKeyword(start);
}