Class: WebVTT::Cue

Inherits:
Object
  • Object
show all
Defined in:
lib/parser.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cue) ⇒ Cue

Returns a new instance of Cue.



87
88
89
90
# File 'lib/parser.rb', line 87

def initialize(cue)
  @content = cue
  parse
end

Instance Attribute Details

#endObject

Returns the value of attribute end.



85
86
87
# File 'lib/parser.rb', line 85

def end
  @end
end

#identifierObject

Returns the value of attribute identifier.



85
86
87
# File 'lib/parser.rb', line 85

def identifier
  @identifier
end

#startObject

Returns the value of attribute start.



85
86
87
# File 'lib/parser.rb', line 85

def start
  @start
end

#styleObject

Returns the value of attribute style.



85
86
87
# File 'lib/parser.rb', line 85

def style
  @style
end

#textObject

Returns the value of attribute text.



85
86
87
# File 'lib/parser.rb', line 85

def text
  @text
end

Class Method Details

.timestamp_in_sec(timestamp) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/parser.rb', line 103

def self.timestamp_in_sec(timestamp)
  mres = timestamp.match(/([0-9]{2}):([0-9]{2}):([0-9]{2}\.[0-9]{3})/)
  sec = mres[3].to_f # seconds and subseconds
  sec += mres[2].to_f * 60 # minutes
  sec += mres[1].to_f * 60 * 60 # hours
  return sec
end

Instance Method Details

#end_in_secObject



115
116
117
# File 'lib/parser.rb', line 115

def end_in_sec
  @end.to_f
end

#lengthObject



119
120
121
# File 'lib/parser.rb', line 119

def length
  @end.to_f - @start.to_f
end

#offset_by(offset_secs) ⇒ Object



123
124
125
126
# File 'lib/parser.rb', line 123

def offset_by( offset_secs )
  @start += offset_secs
  @end   += offset_secs
end

#parseObject



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/parser.rb', line 128

def parse
  lines = @content.split("\n").map(&:strip)

  # it's a note, ignore
  return if lines[0] =~ /NOTE/

  if !lines[0].include?("-->")
    @identifier = lines[0]
    lines.shift
  end

  if lines[0].match(/([0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}) -+> ([0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3})(.*)/)
    @start = Timestamp.new $1
    @end = Timestamp.new $2
    @style = Hash[$3.strip.split(" ").map{|s| s.split(":").map(&:strip) }]
  end
  @text = lines[1..-1].join("\n")
end

#start_in_secObject



111
112
113
# File 'lib/parser.rb', line 111

def start_in_sec
  @start.to_f
end

#to_webvttObject



92
93
94
95
96
97
98
99
100
101
# File 'lib/parser.rb', line 92

def to_webvtt
  res = ""
  if @identifier
    res << "#{@identifier}\n"
  end
  res << "#{@start} --> #{@end} #{@style.map{|k,v| "#{k}:#{v}"}.join(" ")}".strip + "\n"
  res << @text

  res
end