ladybird/Userland/Libraries/LibPDF/Reader.cpp
Julian Offenhäuser fca9da4191 LibPDF: Don't consume anything other than EOL in Reader::consume_eol()
This was previously a slightly confusing API. Even when there was no EOL
marker at the current location, we would still consume one byte.
It will now consume either EOL or nothing at all.
2023-03-22 09:04:00 +01:00

83 lines
1.4 KiB
C++

/*
* Copyright (c) 2021, Matthew Olsson <mattco@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibPDF/Reader.h>
#include <ctype.h>
namespace PDF {
bool Reader::matches_eol() const
{
return matches_any(0xa, 0xd);
}
bool Reader::matches_whitespace() const
{
return matches_eol() || matches_any(0, 0x9, 0xc, ' ');
}
bool Reader::matches_number() const
{
if (done())
return false;
auto ch = peek();
return isdigit(ch) || ch == '-' || ch == '+' || ch == '.';
}
bool Reader::matches_delimiter() const
{
return matches_any('(', ')', '<', '>', '[', ']', '{', '}', '/', '%');
}
bool Reader::matches_regular_character() const
{
return !done() && !matches_delimiter() && !matches_whitespace();
}
bool Reader::consume_eol()
{
if (done()) {
return false;
}
if (matches("\r\n")) {
consume(2);
return true;
}
if (matches_eol()) {
consume();
return true;
}
return false;
}
bool Reader::consume_whitespace()
{
bool consumed = false;
while (matches_whitespace()) {
consumed = true;
consume();
}
return consumed;
}
char Reader::consume()
{
return read();
}
void Reader::consume(int amount)
{
for (size_t i = 0; i < static_cast<size_t>(amount); i++)
consume();
}
bool Reader::consume(char ch)
{
return consume() == ch;
}
}