lib/edl/parser.rb in edl-0.1.5 vs lib/edl/parser.rb in edl-0.1.6
- old
+ new
@@ -1,48 +1,53 @@
+# frozen_string_literal: true
+
module EDL
-
# Is used to parse an EDL
+ # Parsing errors are collected in +errors+
class Parser
-
attr_reader :fps
-
- # Initialize an EDL parser. Pass the FPS to it, as the usual EDL does not contain any kind of reference
+ attr_accessor :errors
+
+ # Initialize an EDL parser. Pass the FPS to it, as the usual EDL does not contain any kind of reference
# to it's framerate
def initialize(with_fps = DEFAULT_FPS)
@fps = with_fps
end
-
+
def get_matchers #:nodoc:
- [ EventMatcher.new(@fps), EffectMatcher.new, NameMatcher.new, TimewarpMatcher.new(@fps), CommentMatcher.new ]
+ [EventMatcher.new(@fps), EffectMatcher.new, NameMatcher.new, TimewarpMatcher.new(@fps), CommentMatcher.new]
end
-
+
# Parse a passed File or IO object line by line, or the whole string
def parse(input_string_or_io)
return parse(StringIO.new(input_string_or_io)) unless input_string_or_io.respond_to?(:read)
-
- magic = ::EDL::LinebreakMagician.new(input_string_or_io)
-
+ self.errors = []
+
+ magic = EDL::LinebreakMagician.new(input_string_or_io)
+
# Normalize line breaks
- stack, matchers = List.new, get_matchers
-
+ stack = List.new
+ matchers = get_matchers
+
while current_line = magic.gets
-
- m = matchers.find{|m| m.matches?(current_line) }
-
+ m = matchers.find { |m| m.matches?(current_line) }
+
next unless m
begin
m.apply(stack, current_line)
stack[-1].line_number = magic.lineno if m.is_a?(EventMatcher)
rescue Matcher::ApplyError => e
- STDERR.puts "Cannot parse #{current_line} - #{e}"
+ error = "Cannot parse #{current_line} - #{e}"
+ errors << error
+ STDERR.puts error
end
end
stack
end
-
+
# Init a Timecode object from the passed elements with the passed framerate
def self.timecode_from_line_elements(elements, fps) #:nodoc:
- args = (0..3).map{|_| elements.shift.to_i} + [fps.to_f]
+ args = (0..3).map { |_| elements.shift.to_i } + [fps.to_f]
Timecode.at(*args)
end
end
-end
\ No newline at end of file
+end