Example #1
0
    def load(data, encoding=None):
        """ Load subtitle """

        result = []
        lines = data.splitlines()

        pattern = r"(?P<start>\d+:\d+:\d+,\d*) --> (?P<stop>\d+:\d+:\d+,\d*)"
        pattern = re.compile(pattern)

        state, text = 0, []
        for line in lines:
            line = to_unicode(line, encoding)
            if state == 0:
                state = 1
            
            elif state == 1:
                m = pattern.match(line)
                #if m is None:
                #    raise SubtitlesFormatError
                d = m.groupdict()
                start = Time.parse(d['start'])
                stop = Time.parse(d['stop'])
                state = 2
            
            elif state == 2:
                if line.strip() == "":
                    result.append(Verse(start, stop, '\n'.join(text)))
                    text = []
                    state = 0
                else:
                    text.append(line.strip())
        
        return result, False
Example #2
0
    def load(data, encoding=None):
        """ Load subtitle """
        
        pattern = re.compile(r"\{(?P<start>\d*)\}\{(?P<stop>\d*)\}(?P<text>.*)")
        result = []
        lines = data.splitlines()

        for line in lines:
            line =  line.strip()
            if line == '' or  line.startswith('#'):
                continue
            m = pattern.match(to_unicode(line, encoding))
            
            if m is None:
                raise SubtitlesFormatError
                #print 'invalid line %r', line
                #continue
            d = m.groupdict()
            
            start = Time.from_seconds(int(d['start']))
            try:
                stop = Time.from_seconds(int(d['stop']))
            except:
                stop = None
            text = d['text'].replace('|', '\n')

            result.append(Verse(start, stop, text))

        return result, True
Example #3
0
    def load(data, encoding=None):
        """ Load subtitle """

        pattern = re.compile(r"\[(?P<start>\d+)\]\[(?P<stop>\d*)\](?P<text>.*)")
        result = []
        lines = data.splitlines()

        for line in lines:
            m = pattern.match(to_unicode(line, encoding))
            #if m is None:
            #    raise SubtitlesFormatError
            g = m.groupdict()

            start = Time.from_seconds(int(g['start']), 1)
            try:
                stop = Time.from_seconds(int(g['stop']), 1)
            except ValueError:
                stop = None
            text = g['text'].replace('|', '\n')

            result.append(Verse(start, stop, text))

        return result, False
Example #4
0
 def goto_dlg(self):
     time = self.gui.do_input_dlg('Run command', 'Enter command', str(self.player.position))
     try:
         self.player.position = Time.parse(time)
     except ValueError:
         pass
Example #5
0
    def testParse(self):
        self.assertEquals(Time(h=1, m=2, s=3, ms=456), Time.parse('1:2:3.456'))

        self.assertEquals(Time(h=0, m=2, s=3, ms=456), Time.parse(':2:3.456'))
        self.assertEquals(Time(h=0, m=2, s=3, ms=456), Time.parse('2:3.456'))

        self.assertEquals(Time(h=1, m=0, s=3, ms=456), Time.parse('1::3.456'))
        self.assertEquals(Time(h=0, m=0, s=3, ms=456), Time.parse(':3.456'))
        self.assertEquals(Time(h=0, m=0, s=3, ms=456), Time.parse('3.456'))

        self.assertEquals(Time(h=1, m=2, s=0, ms=456), Time.parse('1:2:.456'))
        self.assertEquals(Time(h=1, m=0, s=0, ms=456), Time.parse('1::.456'))
        self.assertEquals(Time(h=0, m=0, s=0, ms=456), Time.parse('0:0:.456'))
        self.assertEquals(Time(h=0, m=0, s=0, ms=456), Time.parse(':0:.456'))
        self.assertEquals(Time(h=0, m=0, s=0, ms=456), Time.parse('0::.456'))

        self.assertEquals(Time(h=0, m=0, s=0, ms=456), Time.parse('.456'))
        self.assertEquals(Time(h=0, m=0, s=0, ms=456), Time.parse(',456'))

        self.assertEquals(Time(h=0, m=0, s=1234, ms=456), Time.parse('1234,456'))

        self.assertEquals(Time(h=0, m=0, s=0, ms=0), Time.parse(''))

        self.assertEquals(Time(h=1, m=2, s=3), Time.parse('1:2:3,'))
        self.assertEquals(Time(h=1, m=2, s=3), Time.parse('1:2:3'))
        self.assertEquals(Time(h=1, m=2, s=3), Time.parse('3723'))
        self.assertEquals(Time(h=0, m=2, s=3), Time.parse('2:3'))
        self.assertEquals(Time(h=1, m=0, s=3), Time.parse('1::3'))
        self.assertEquals(Time(h=0, m=0, s=3), Time.parse('::3'))
        self.assertEquals(Time(h=0, m=0, s=3), Time.parse(':3'))
        self.assertEquals(Time(h=0, m=0, s=3), Time.parse('3'))

        self.assertRaises(ValueError, Time.parse, 'ala has a cat')
        self.assertRaises(ValueError, Time.parse, '1.3:2')
        self.assertRaises(ValueError, Time.parse, None)
Example #6
0
    def testFormat(self):
        # ToDo: more asserts
        time0 = Time()
        time1 = Time(h=1, m=2, s=3, ms=456)

        self.assertEquals(time1.format("foobar"), "foobar")
        self.assertEquals(time1.format("foo%%bar"), "foo%bar")
        self.assertEquals(time1.format("%%"), "%")

        self.assertEquals(time1.format("%h"), "1")
        self.assertEquals(time1.format("%0h"), "1")
        self.assertEquals(time1.format("%1h"), "1")
        self.assertEquals(time1.format("%2h"), "01")
        self.assertEquals(time1.format("%3h"), "001")

        self.assertEquals(time0.format("%0h"), "")
        self.assertEquals(time0.format("%1h"), "0")
        self.assertEquals(time0.format("%2h"), "00")
        self.assertEquals(time0.format("%3h"), "000")

        self.assertEquals(time1.format("%m"), "2")
        self.assertEquals(time1.format("%2m"), "02")

        self.assertEquals(time1.format("%s"), "3")
        self.assertEquals(time1.format("%2s"), "03")