subtool 0.1.0 → 0.1.1

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.
data/.gitignore CHANGED
@@ -18,3 +18,4 @@ tmp
18
18
  .yardoc
19
19
  _yardoc
20
20
  doc/
21
+ Gemfile.lock
@@ -7,3 +7,6 @@ rvm:
7
7
  - ruby-head
8
8
  - 1.8.7
9
9
  - ree
10
+ - jruby-head
11
+ - jruby-18mode
12
+ - jruby-19mode
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- [![Build Status](https://travis-ci.org/0livier/subtool.png)](https://travis-ci.org/0livier/subtool) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/0livier/subtool) [![Gem Version](https://badge.fury.io/rb/subtool.png)](http://badge.fury.io/rb/subtool)
1
+ # Subtool
2
+
3
+ [![Build Status](https://travis-ci.org/0livier/subtool.png)](https://travis-ci.org/0livier/subtool) [![Code Climate](https://codeclimate.com/github/0livier/subtool.png)](https://codeclimate.com/github/0livier/subtool) [![Gem Version](https://badge.fury.io/rb/subtool.png)](http://badge.fury.io/rb/subtool)
2
4
 
3
5
  subtool is a commandline tool that help fix the timing of subtitles files.
4
6
 
@@ -10,10 +12,13 @@ Install it using the gem command:
10
12
 
11
13
  ## Usage
12
14
 
15
+ subtool -i subtitle.srt add > output.srt
16
+ subtool < subtitle.srt remove 3.5 -o output.srt
17
+ subtool --help
13
18
 
14
19
  ## Want another tool ?
15
20
 
16
- There are several other tool to manipulate SRT files. Among them,
21
+ There are several other tools to manipulate SRT files. Among them,
17
22
 
18
23
  * https://github.com/remram44/srt-shift
19
24
  * http://www.aegisub.org/
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ spec = eval(File.read('subtool.gemspec'))
10
10
  Gem::PackageTask.new(spec) do |pkg|
11
11
  end
12
12
 
13
- Dir.mkdir 'tmp' unless File.exists?("tmp")
13
+ Dir.mkdir 'tmp' unless File.exists?('tmp')
14
14
 
15
15
  CUKE_RESULTS = 'tmp/results.html'
16
16
 
@@ -24,7 +24,7 @@ option_parser = OptionParser.new do |opts|
24
24
  end
25
25
 
26
26
  opts.on('-o', '--output FILENAME',
27
- 'Ouput SRT filename. STDOUT by default or if - is given.') do |filename|
27
+ 'Output SRT filename. STDOUT by default or if - is given.') do |filename|
28
28
  options.output = filename unless filename == '-'
29
29
  end
30
30
 
@@ -54,10 +54,15 @@ if ARGV.count == 0
54
54
  exit
55
55
  end
56
56
 
57
- commands = ARGV.dup
57
+ # as jruby does not support ARGV/ARGF well (see code history)
58
+ # we have to import
59
+ if options.input
60
+ subtitles = Subtool::Import::Srt.file(options.input)
61
+ else
62
+ subtitles = Subtool::Import::Srt.filehandler($stdin)
63
+ end
58
64
 
59
- ARGV.replace([options.input]) if options.input
60
- subtitles = Subtool::Import::Srt.filehandler(ARGF)
65
+ commands = ARGV.dup
61
66
 
62
67
  # @Todo more filters otherwise the loop won't make any sense
63
68
  while commands.count > 0
@@ -0,0 +1,12 @@
1
+ 1
2
+ 00:00:01,000 --> 00:00:04,074
3
+ My wonderful SRT
4
+
5
+ 2
6
+ 00:00:52,341 --> 00:00:58,341
7
+ SHOULD BE NICE
8
+ And clean
9
+
10
+ 3
11
+ 00:01:03,091 --> 00:01:05,881
12
+ Nah?
@@ -53,3 +53,14 @@ Feature: Modifying Parser Import / Export should get and write content properly
53
53
  | 1 | 22100 | 26500 | Altocumulus clouds occur between six thousand |
54
54
  | 2 | 26700 | 29900 | and twenty thousand feet above ground level. |
55
55
  | 3 | 3663200 | 7324300 | QUACK\n\\_o< |
56
+
57
+ Scenario: Srt Loading #2
58
+ When I parse a Srt file named "features/files/simple2.srt"
59
+ And I add a delay of 2 seconds
60
+ And I export the subtitles to a file named "tmp/output_simple2.srt"
61
+ And I parse a Srt file named "tmp/output_simple2.srt"
62
+ Then I should have the following subtitles:
63
+ | id | start | end | body |
64
+ | 1 | 3000 | 6074 | My wonderful SRT |
65
+ | 2 | 54341 | 60341 | SHOULD BE NICE\nAnd clean |
66
+ | 3 | 65091 | 67881 | Nah? |
@@ -4,7 +4,7 @@ Feature: Parser Import / Export should get and write content properly
4
4
  As a developer of subtool
5
5
  I want it to load and write them correctly
6
6
 
7
- Scenario: Srt Loading
7
+ Scenario: Srt Loading #1
8
8
  When I parse a Srt file named "features/files/simple.srt"
9
9
  Then I should have the following subtitles:
10
10
  | id | start | end | body |
@@ -12,6 +12,15 @@ Feature: Parser Import / Export should get and write content properly
12
12
  | 2 | 24600 | 27800 | and twenty thousand feet above ground level. |
13
13
  | 3 | 3661100 | 7322200 | QUACK\n\\_o< |
14
14
 
15
+ Scenario: Srt Loading #2
16
+ When I parse a Srt file named "features/files/simple2.srt"
17
+ And I export the subtitles to a file named "tmp/output_simple2.srt"
18
+ And I parse a Srt file named "tmp/output_simple2.srt"
19
+ Then I should have the following subtitles:
20
+ | id | start | end | body |
21
+ | 1 | 1000 | 4074 | My wonderful SRT |
22
+ | 2 | 52341 | 58341 | SHOULD BE NICE\nAnd clean |
23
+ | 3 | 63091 | 65881 | Nah? |
15
24
 
16
25
  Scenario: Writing file
17
26
  When I parse a Srt file named "features/files/simple.srt"
@@ -23,7 +32,7 @@ Feature: Parser Import / Export should get and write content properly
23
32
  | 2 | 24600 | 27800 | and twenty thousand feet above ground level. |
24
33
  | 3 | 3661100 | 7322200 | QUACK\n\\_o< |
25
34
 
26
- # need to call the binary since it does not capture the output of current process
35
+ # need to call the binary since we do not capture the output of current process
27
36
  Scenario: Writing file on STDOUT
28
37
  When I call "subtool" with the argument "-i ../../features/files/simple.srt add 0"
29
38
  Then the output should contain "1\n00:00:20,000 --> 00:00:24,400\nAltocumulus clouds occur between six thousand"
@@ -14,6 +14,15 @@ Before do
14
14
  @puts = true
15
15
  @original_rubylib = ENV['RUBYLIB']
16
16
  ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
17
+
18
+ # Spawning processes in tests with jruby is slow, so we wait longer and we try to make it start faster
19
+ @aruba_timeout_seconds = RUBY_PLATFORM == 'java' ? 60 : 3
20
+ Aruba.configure do |config|
21
+ config.before_cmd do |cmd|
22
+ set_env('JRUBY_OPTS', "-X-C #{ENV['JRUBY_OPTS']}") # disable JIT since these processes are so short lived
23
+ set_env('JAVA_OPTS', "#{ENV['JAVA_OPTS']}")
24
+ end
25
+ end if RUBY_PLATFORM == 'java'
17
26
  end
18
27
 
19
28
  After do
@@ -2,16 +2,22 @@ module Subtool
2
2
  module Import
3
3
  class Srt
4
4
 
5
+ HOUR = 60 * 60 * 1000
6
+ MIN = 60 * 1000
7
+ SEC = 1000
8
+
5
9
  def self.filehandler(fh)
6
10
  subtitles = []
7
-
8
11
  until fh.eof? do
9
12
 
10
13
  number = Integer(fh.readline.strip)
11
14
  position = self.parse_position(fh.readline.strip)
12
- body = fh.readline("\n\n").strip
15
+ body = ""
16
+ while (! fh.eof?) && ("" != (content = fh.readline.strip))
17
+ body = body + content + "\n"
18
+ end
13
19
 
14
- subtitles.push(Subtool::Subtitle.new(number, position[:start], position[:end], body))
20
+ subtitles.push(Subtool::Subtitle.new(number, position[:start], position[:end], body.strip))
15
21
  end
16
22
 
17
23
  subtitles
@@ -28,13 +34,20 @@ module Subtool
28
34
  def self.parse_position(position)
29
35
  matches = position.match(/^(\d\d):(\d\d):(\d\d),(\d\d\d) --> (\d\d):(\d\d):(\d\d),(\d\d\d)$/)
30
36
  throw Exception.new("Can't parse #{position} as a valid time range") unless matches
31
- matches = matches[1..8].map { |s| Integer(s) }
37
+
38
+ matches = matches[1..8].map { |s| s.to_i }
32
39
  {
33
- :start => matches[0]*60*60*1000 + matches[1]*60*1000 + matches[2]*1000 + matches[3],
34
- :end => matches[4]*60*60*1000 + matches[5]*60*1000 + matches[6]*1000 + matches[7]
40
+ :start => self.to_millisecs(matches[0], matches[1], matches[2], matches[3]),
41
+ :end => self.to_millisecs(matches[4], matches[5], matches[6], matches[7]),
35
42
  }
36
43
  end
37
44
 
45
+ private
46
+
47
+ def self.to_millisecs(hour, min, sec, millisec)
48
+ return hour * HOUR + min * MIN + sec * SEC + millisec
49
+ end
50
+
38
51
  end
39
52
  end
40
53
  end
@@ -1,3 +1,3 @@
1
1
  module Subtool
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subtool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-19 00:00:00.000000000 Z
12
+ date: 2013-03-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &17361740 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *17361740
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: aruba
27
- requirement: &17361220 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *17361220
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: simplecov
38
- requirement: &17360700 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *17360700
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  description: subtool is a library and CLI program to add (or remove) delay in subtitles
48
63
  files
49
64
  email: olivier@lol.cat
@@ -55,13 +70,13 @@ files:
55
70
  - .gitignore
56
71
  - .travis.yml
57
72
  - Gemfile
58
- - Gemfile.lock
59
73
  - LICENSE
60
74
  - README.md
61
75
  - Rakefile
62
76
  - bin/subtool
63
77
  - features/files/malformed.srt
64
78
  - features/files/simple.srt
79
+ - features/files/simple2.srt
65
80
  - features/filter.feature
66
81
  - features/help.feature
67
82
  - features/import_export.feature
@@ -87,15 +102,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
102
  - - ! '>='
88
103
  - !ruby/object:Gem::Version
89
104
  version: '0'
105
+ segments:
106
+ - 0
107
+ hash: 4316214694996564458
90
108
  required_rubygems_version: !ruby/object:Gem::Requirement
91
109
  none: false
92
110
  requirements:
93
111
  - - ! '>='
94
112
  - !ruby/object:Gem::Version
95
113
  version: '0'
114
+ segments:
115
+ - 0
116
+ hash: 4316214694996564458
96
117
  requirements: []
97
118
  rubyforge_project:
98
- rubygems_version: 1.8.10
119
+ rubygems_version: 1.8.25
99
120
  signing_key:
100
121
  specification_version: 3
101
122
  summary: CLI tool for manipulating subtitles files
@@ -1,42 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- subtool (0.0.1)
5
-
6
- GEM
7
- remote: http://rubygems.org/
8
- specs:
9
- aruba (0.5.1)
10
- childprocess (~> 0.3.6)
11
- cucumber (>= 1.1.1)
12
- rspec-expectations (>= 2.7.0)
13
- builder (3.1.4)
14
- childprocess (0.3.6)
15
- ffi (~> 1.0, >= 1.0.6)
16
- cucumber (1.2.1)
17
- builder (>= 2.1.2)
18
- diff-lcs (>= 1.1.3)
19
- gherkin (~> 2.11.0)
20
- json (>= 1.4.6)
21
- diff-lcs (1.1.3)
22
- ffi (1.2.0)
23
- gherkin (2.11.5)
24
- json (>= 1.4.6)
25
- json (1.7.5)
26
- multi_json (1.1.0)
27
- rake (10.0.2)
28
- rspec-expectations (2.12.0)
29
- diff-lcs (~> 1.1.3)
30
- simplecov (0.6.1)
31
- multi_json (~> 1.0)
32
- simplecov-html (~> 0.5.3)
33
- simplecov-html (0.5.3)
34
-
35
- PLATFORMS
36
- ruby
37
-
38
- DEPENDENCIES
39
- aruba
40
- rake
41
- simplecov
42
- subtool!