pub struct Parser<'a> { /* private fields */ }Expand description
Recursive-descent parser over a Lexer.
Implementations§
Source§impl<'a> Parser<'a>
impl<'a> Parser<'a>
pub fn new(input: &'a [u8]) -> Self
Sourcepub fn from_lexer(lex: Lexer<'a>) -> Self
pub fn from_lexer(lex: Lexer<'a>) -> Self
Construct from an existing Lexer — used by the xref /
trailer scanner so the same cursor state is shared.
Sourcepub fn lexer_mut(&mut self) -> &mut Lexer<'a>
pub fn lexer_mut(&mut self) -> &mut Lexer<'a>
Borrow the underlying lexer (for seek / slice / position).
Sourcepub fn position(&self) -> usize
pub fn position(&self) -> usize
Current byte position. Returns the start of the peeked token when one is buffered (so the position reflects “the next token’s start”, not “wherever the lexer happens to be”).
Sourcepub fn parse_object(&mut self) -> Result<Option<Object>, PdfError>
pub fn parse_object(&mut self) -> Result<Option<Object>, PdfError>
Parse one Object. Returns None if the input is exhausted.
Streams encountered with an indirect /Length (a Reference
value rather than a direct integer) are rejected — call
Self::parse_object_with_length_resolver from a context that
can resolve the reference (typically the top-level
crate::reader::document::DocumentReader::resolve).
Sourcepub fn parse_object_with_length_resolver(
&mut self,
resolver: &mut dyn LengthResolver,
) -> Result<Option<Object>, PdfError>
pub fn parse_object_with_length_resolver( &mut self, resolver: &mut dyn LengthResolver, ) -> Result<Option<Object>, PdfError>
Variant of Self::parse_object that accepts a
LengthResolver to resolve indirect /Length references on
stream-object dictionaries per ISO 32000-1 §7.3.10 Example 3.
Sourcepub fn parse_indirect(&mut self) -> Result<(ObjectId, Object), PdfError>
pub fn parse_indirect(&mut self) -> Result<(ObjectId, Object), PdfError>
Parse one indirect object (<n> <gen> obj … endobj). Returns
(ObjectId, Object). The caller is responsible for positioning
the parser at the first byte of the indirect object header.
Streams with an indirect /Length are rejected — use
Self::parse_indirect_with_length_resolver from a context
that has a built xref table.
Sourcepub fn parse_indirect_with_length_resolver(
&mut self,
resolver: &mut dyn LengthResolver,
) -> Result<(ObjectId, Object), PdfError>
pub fn parse_indirect_with_length_resolver( &mut self, resolver: &mut dyn LengthResolver, ) -> Result<(ObjectId, Object), PdfError>
Variant of Self::parse_indirect that accepts a
LengthResolver to resolve indirect /Length references on
stream-object dictionaries (ISO 32000-1 §7.3.10 Example 3).