Module: Pdfrb::Source

Defined in:
lib/pdfrb/source.rb,
lib/pdfrb/source/token.rb,
lib/pdfrb/source/parser.rb,
lib/pdfrb/source/helpers.rb,
lib/pdfrb/source/recovery.rb,
lib/pdfrb/source/tokenizer.rb,
lib/pdfrb/source/header_reader.rb,
lib/pdfrb/source/object_reader.rb,
lib/pdfrb/source/trailer_reader.rb,
lib/pdfrb/source/xref_table_reader.rb,
lib/pdfrb/source/xref_stream_reader.rb,
lib/pdfrb/source/object_stream_reader.rb,
lib/pdfrb/source/linearization_detection.rb

Overview

Reading layer: PDF bytes -> Tokenizer -> Parser -> COS object graph -> ObjectReader resolves References via xref -> Document.

Same layering concept as postscript/source/: a byte-level state-machine Tokenizer feeds a recursive-descent Parser that emits Model values. References are stored as Model::Reference values and resolved lazily via the owning Document's ObjectReader.

Defined Under Namespace

Modules: HeaderReader, LinearizationDetection, ObjectStreamReader, Recovery, TrailerReader, XrefStreamReader, XrefTableReader Classes: ObjectReader, Parser, Token, Tokenizer

Class Method Summary collapse

Class Method Details

.parse_string(source, document: nil) ⇒ Object



10
11
12
13
# File 'lib/pdfrb/source/helpers.rb', line 10

def parse_string(source, document: nil)
  io = source.is_a?(::String) ? StringIO.new(source.b) : source
  Parser.new(Tokenizer.new(io), document: document).parse_value
end

.tokenize_string(source) ⇒ Object



15
16
17
18
19
20
21
22
23
# File 'lib/pdfrb/source/helpers.rb', line 15

def tokenize_string(source)
  io = source.is_a?(::String) ? StringIO.new(source.b) : source
  tokens = []
  tokenizer = Tokenizer.new(io)
  while (t = tokenizer.next_token)
    tokens << t
  end
  tokens
end