Method: HexaPDF::Content::Parser#parse
- Defined in:
- lib/hexapdf/content/parser.rb
#parse(contents, processor = nil, &block) ⇒ Object
Parses the contents and calls the processor object or the given block for each parsed operator.
If a full-blown Processor is not needed (e.g. because the graphics state doesn’t need to be maintained), one can use the block form to handle the parsed objects and their parameters.
Note: The parameters array is reused for each processed operator, so duplicate it if necessary.
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/hexapdf/content/parser.rb', line 176 def parse(contents, processor = nil, &block) #:yields: object, params raise ArgumentError, "Argument processor or block is needed" if processor.nil? && block.nil? if processor.nil? block.singleton_class.send(:alias_method, :process, :call) processor = block end tokenizer = Tokenizer.new(contents, raise_on_eos: true) params = [] loop do obj = tokenizer.next_object(allow_keyword: true) if obj.kind_of?(Tokenizer::Token) if obj == 'BI' params = parse_inline_image(tokenizer) end processor.process(obj.to_sym, params) params.clear else params << obj end end end |