edl 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,7 @@
1
+ === 0.1.2 / 2010-10-23
2
+
3
+ * Fix parsing of files with Windows and \r linebreaks properly
4
+
1
5
  === 0.1.1 / 2010-10-21
2
6
 
3
7
  * Fix parsing of files with Windows linebreaks. In an ugly manner.
@@ -11,6 +11,7 @@ lib/edl/cutter.rb
11
11
  lib/edl/event.rb
12
12
  lib/edl/grabber.rb
13
13
  lib/edl/parser.rb
14
+ lib/edl/linebreak_magician.rb
14
15
  lib/edl/timewarp.rb
15
16
  lib/edl/transition.rb
16
17
  test/.DS_Store
data/lib/edl.rb CHANGED
@@ -1,15 +1,16 @@
1
1
  require "rubygems"
2
2
  require "timecode"
3
- require 'stringio'
3
+ require "stringio"
4
4
 
5
5
  require File.dirname(__FILE__) + '/edl/event'
6
6
  require File.dirname(__FILE__) + '/edl/transition'
7
7
  require File.dirname(__FILE__) + '/edl/timewarp'
8
8
  require File.dirname(__FILE__) + '/edl/parser'
9
+ require File.dirname(__FILE__) + '/edl/linebreak_magician'
9
10
 
10
11
  # A simplistic EDL parser
11
12
  module EDL
12
- VERSION = "0.1.1"
13
+ VERSION = "0.1.2"
13
14
  DEFAULT_FPS = 25.0
14
15
 
15
16
  # Represents an EDL, is returned from the parser. Traditional operation is functional style, i.e.
@@ -0,0 +1,24 @@
1
+ require "delegate"
2
+
3
+ # EDLs sometimes come with \r line breaks, and this is something that fails
4
+ # with Ruby standard line separator detection. We need something to help us
5
+ # with that
6
+ class EDL::LinebreakMagician < DelegateClass(IO)
7
+
8
+ def initialize(with_file)
9
+ sample = with_file.read(2048)
10
+ @linebreak = ["\r\n", "\r", "\n"].find{|separator| sample.include?(separator) }
11
+ with_file.rewind
12
+ __setobj__(with_file)
13
+ end
14
+
15
+ def each(sep_string = $/, &blk)
16
+ super(@linebreak || sep_string, &blk)
17
+ end
18
+ alias_method :each_line, :each
19
+
20
+ def gets(sep_string = $/)
21
+ super(@linebreak || sep_string)
22
+ end
23
+
24
+ end
@@ -17,24 +17,21 @@ module EDL
17
17
 
18
18
  # Parse a passed File or IO object line by line, or the whole string
19
19
  def parse(input_string_or_io)
20
- return parse(input_string_or_io.read) if input_string_or_io.respond_to?(:read)
20
+ return parse(StringIO.new(input_string_or_io)) unless input_string_or_io.respond_to?(:read)
21
21
 
22
- # TODO properly normalize line breaks in a stream interface
23
- input_string_or_io.gsub!(/(\r\n|\r)/, "\n")
24
- input_in_io = StringIO.new(input_string_or_io)
22
+ magic = ::EDL::LinebreakMagician.new(input_string_or_io)
25
23
 
26
24
  # Normalize line breaks
27
25
  stack, matchers = List.new, get_matchers
28
26
 
29
- until input_in_io.eof?
27
+ while current_line = magic.gets
30
28
 
31
- current_line = input_in_io.gets.strip
32
29
  m = matchers.find{|m| m.matches?(current_line) }
33
30
 
34
31
  next unless m
35
32
  begin
36
33
  m.apply(stack, current_line)
37
- stack[-1].line_number = input_in_io.lineno if m.is_a?(EventMatcher)
34
+ stack[-1].line_number = magic.lineno if m.is_a?(EventMatcher)
38
35
  rescue Matcher::ApplyError => e
39
36
  STDERR.puts "Cannot parse #{current_line} - #{e}"
40
37
  end
@@ -605,7 +605,7 @@ context "A complex EDL passed via Parser should" do
605
605
  assert_nothing_raised { EDL::Parser.new.parse(File.open(FORTY_FIVER)) }
606
606
  end
607
607
 
608
- specify "parse the plates EDL with many events" do
608
+ specify "parse the EDL with \\r line breaks properly" do
609
609
  evts = EDL::Parser.new.parse(File.read(PLATES))
610
610
  assert_equal 3, evts.length
611
611
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Julik Tarkhanov
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-21 00:00:00 +02:00
18
+ date: 2010-10-23 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -122,6 +122,7 @@ files:
122
122
  - lib/edl/event.rb
123
123
  - lib/edl/grabber.rb
124
124
  - lib/edl/parser.rb
125
+ - lib/edl/linebreak_magician.rb
125
126
  - lib/edl/timewarp.rb
126
127
  - lib/edl/transition.rb
127
128
  - test/.DS_Store