def content_stream (instructions)
@buffer = Buffer.new(StringIO.new(instructions))
@parser = Parser.new(@buffer, @xref)
@params = [] if @params.nil?
while (token = @parser.parse_token(OPERATORS))
if token.kind_of?(Token) and OPERATORS.has_key?(token)
@current_font = @params.first if OPERATORS[token] == :set_text_font_and_size
if OPERATORS[token].to_s.include?("show_text") && @fonts[@current_font]
@params = @fonts[@current_font].to_utf8(@params)
elsif token == "ID"
map = {}
@params.each_slice(2) do |a|
map[a.first] = a.last
end
@params = [map]
@params << @buffer.read_until("EI")
end
callback(OPERATORS[token], @params)
if OPERATORS[token] == :invoke_xobject
xobject_label = @params.first
@params.clear
walk_xobject_form(xobject_label)
else
@params.clear
end
else
@params << token
end
end
rescue EOFError => e
raise MalformedPDFError, "End Of File while processing a content stream"
end