Parent

PDF::Reader::Parser

An internal PDF::Reader class that reads objects from the PDF file and converts them into useable ruby objects (hash’s, arrays, true, false, etc)

Public Class Methods

new(buffer, ohash=nil) click to toggle source

Create a new parser around a PDF::Reader::Buffer object

buffer - a PDF::Reader::Buffer object that contains PDF data ohash - a PDF::Reader::ObjectHash object that can return objects from the PDF file

# File lib/pdf/reader/parser.rb, line 36
def initialize (buffer, ohash=nil)
  @buffer = buffer
  @ohash  = ohash
end

Public Instance Methods

object(id, gen) click to toggle source

Reads an entire PDF object from the buffer and returns it as a Ruby String. If the object is a content stream, returns both the stream and the dictionary that describes it

id - the object ID to return gen - the object revision number to return

# File lib/pdf/reader/parser.rb, line 75
def object (id, gen)
  Error.assert_equal(parse_token, id)
  Error.assert_equal(parse_token, gen)
  Error.str_assert(parse_token, "obj")

  obj = parse_token
  post_obj = parse_token
  if post_obj == "stream"
    stream(obj)
  else
    obj
  end
end
parse_token(operators={}) click to toggle source

Reads the next token from the underlying buffer and convets it to an appropriate object

operators - a hash of supported operators to read from the underlying buffer.

# File lib/pdf/reader/parser.rb, line 45
def parse_token (operators={})
  token = @buffer.token

  case token
  when PDF::Reader::Reference, nil then return token
  when "/"                         then return pdf_name()
  when "<<"                        then return dictionary()
  when "["                         then return array()
  when "("                         then return string()
  when "<"                         then return hex_string()
  when "true"                      then return true
  when "false"                     then return false
  when "null"                      then return nil
  when "obj", "endobj", "stream", "endstream" then return Token.new(token)
  when "stream", "endstream"       then return Token.new(token)
  when ">>", "]", ">", ")"         then return Token.new(token)
  else
    if operators.has_key?(token)   then return Token.new(token)
    elsif token =~ /\d*\.\d/       then return token.to_f
    else                           return token.to_i
    end
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.