# File lib/rmail/parser/multipart.rb, line 68 def read_chunk_low(chunk_size) if @pushback return standard_read_chunk(chunk_size) end input_gave_nil = false loop { return nil if @eof || @delimiter unless @chunks.empty? chunk, @delimiter, @delimiter_is_last = @chunks.shift return chunk end chunk = standard_read_chunk(chunk_size) if chunk.nil? input_gave_nil = true end if @caryover if chunk @caryover << chunk end chunk = @caryover @caryover = nil end if chunk.nil? @eof = true return nil elsif @in_epilogue return chunk end start = 0 found_last_delimiter = false while !found_last_delimiter and (start < chunk.length) and (found = chunk.index(@delimiter_re, start)) if $~[2] == '' and !input_gave_nil break end delimiter = $~[0] # check if delimiter had the trailing -- if $~.begin(1) found_last_delimiter = true end temp = if found == start nil else chunk[start, found - start] end @chunks << [ temp, delimiter, found_last_delimiter ] start = $~.end(0) end chunk = chunk[start..-1] if start > 0 # If something that looks like a delimiter exists at the end # of this chunk, refrain from returning it. unless found_last_delimiter or input_gave_nil start = chunk.rindex(/\n/) || 0 if chunk.index(@might_be_delimiter_re, start) @caryover = chunk[start..-1] chunk[start..-1] = '' chunk = nil if chunk.length == 0 end end unless chunk.nil? @chunks << [ chunk, nil, false ] end chunk, @delimiter, @delimiter_is_last = @chunks.shift if chunk return chunk end } end