def _parse(self, lines): c = None for index, line in enumerate(lines): if self._should_skip_line(line, index, c): # allow child classes to skip lines based on the content continue if self._is_timeframe_line(line): try: start, end = self._parse_timeframe_line(line) except MalformedCaptionError as e: raise MalformedCaptionError('{} in line! {}'.format(e, index + 1)) c = Caption(start, end) elif line: if c is None: raise MalformedCaptionError('Caption missing timeframe in line {}.'.format(index + 1)) else: c.add_line(line) else: if c is None: continue if not c.lines: raise MalformedCaptionError('Caption missing text in line {}.'.format(index + 1)) self.captions.append(c) c = None if c is not None and c.lines: self.captions.append(c)
def _parse_cue_block(self, block): caption = Caption() cue_timings = None for line_number, line in enumerate(block.lines): if self._is_cue_timings_line(line): if cue_timings is None: try: cue_timings = self._parse_timeframe_line(line) except MalformedCaptionError as e: raise MalformedCaptionError('{} in line {}'.format( e, block.line_number + line_number)) else: raise MalformedCaptionError( '--> found in line {}'.format(block.line_number + line_number)) elif line_number == 0: caption.identifier = line else: caption.add_line(line) caption.start = cue_timings[0] caption.end = cue_timings[1] return caption