- def each_file_spec(speclist)
- return to_enum(__method__, speclist) unless block_given?
- speclist.each do |filespec|
- start_pos, filesize, filename = filespec.split(':', 3)
- yield [start_pos.to_i, filesize.to_i, filename]
+ def split_file_token token
+ start_pos, filesize, filename = token.split(':', 3)
+ if filename.nil?
+ raise ArgumentError.new "Invalid file token '#{token}'"
+ end
+ [start_pos.to_i, filesize.to_i, unescape(filename)]
+ end
+
+ def each_file_spec
+ return to_enum(__method__) unless block_given?
+ @text.each_line do |line|
+ stream_name = nil
+ in_file_tokens = false
+ line.scan /\S+/ do |token|
+ if stream_name.nil?
+ stream_name = unescape token
+ elsif in_file_tokens or not Locator.valid? token
+ in_file_tokens = true
+ yield [stream_name] + split_file_token(token)
+ end
+ end