Class: Ttml::Document

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

Overview

Minimal Timed Text Markup Language parsing and extraction.

Example:

>> doc = Ttml::Document.new('test/sample.xml')
=> [Ttml::Document]
>> doc.copyright
=> '(c) 2012 loop23'
>> doc.subtitles
=> [All subtitles]
>> doc.subtitles(0.0, 100.0)
=> [Subtitles from beginning to 100 seconds]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file_or_stream) ⇒ Document

Returns a new instance of Document.



20
21
22
23
24
25
26
27
# File 'lib/ttml.rb', line 20

def initialize file_or_stream
  stream = file_or_stream.is_a?(IO) ? file_or_stream : File.open(file_or_stream)
  @doc = Nokogiri::XML(stream)
  @namespaces = @doc.collect_namespaces
  # puts "Ho namespaces? #{ @namespaces.inspect }"
  @subs_ns = @namespaces.invert["http://www.w3.org/2006/10/ttaf1"].sub(/^xmlns:/,'')
  @meta_ns = @namespaces.invert["http://www.w3.org/2006/10/ttaf1#metadata"].sub(/^xmlns:/,'')
end

Instance Attribute Details

#docObject (readonly)

Returns the value of attribute doc.



18
19
20
# File 'lib/ttml.rb', line 18

def doc
  @doc
end

#namespacesObject (readonly)

Returns the value of attribute namespaces.



18
19
20
# File 'lib/ttml.rb', line 18

def namespaces
  @namespaces
end

Instance Method Details

Returns document copyright



53
54
55
# File 'lib/ttml.rb', line 53

def copyright
  doc.xpath("//#{ @meta_ns }:copyright")[0].children[0].content
end

#descriptionObject

Returns document description



48
49
50
# File 'lib/ttml.rb', line 48

def description
  doc.xpath("//#{ @meta_ns }:description")[0].children[0].content
end

#subtitle_stream(from = 0.0, to = nil) ⇒ Object

Returns subtitles from “from” to “to” (inclusive) as an array (or all subtitles if both are missing). I tried using xpath functions, without success, as in xmlns:div/xmlns:p - any ideas?



33
34
35
36
37
38
39
40
# File 'lib/ttml.rb', line 33

def subtitle_stream from = 0.0, to = nil
  to = 99999999999.99 unless to
  @all_subs ||= doc.xpath("/#{ @subs_ns }:tt/#{ @subs_ns }:body/#{ @subs_ns }:div/#{ @subs_ns }:p")
  @all_subs.select {|n|
    # puts "Vedo se #{ n['begin'].to_f } >= #{ from } e se #{ n['end'].to_f } <= #{ to }"
    (n['begin'].to_f >= from) && (n['end'].to_f <= to)
  }
end

#titleObject

Returns document title



43
44
45
# File 'lib/ttml.rb', line 43

def title
  doc.xpath("//#{ @meta_ns }:title")[0].children[0].content
end