Source code for ebu_tt_live.documents.ebutt3_splicer


from datetime import timedelta
import logging
import copy
from pyxb.binding.basis import NonElementContent, ElementContent
from ebu_tt_live.bindings import tt


log = logging.getLogger(__name__)


[docs]class EBUTT3Splicer(object): _document_segments = None _sequence_identifier = None _sequence_number = None _spliced_document = None _dataset = None def __init__(self, document_segments, sequence_identifier, sequence_number): if not document_segments: raise Exception() self._document_segments = list(reversed(list(document_segments))) self._sequence_identifier = sequence_identifier self._sequence_number = sequence_number self._dataset = { 'ids': set() } self._do_splice() @property def spliced_document(self): return self._spliced_document
[docs] def _do_splice(self): first_doc = self._document_segments.pop() first_tt = first_doc.binding merged_tt = first_tt merged_head = first_tt.head merged_styling = first_tt.head.styling merged_layout = first_tt.head.layout merged_body = first_tt.body while self._document_segments: current_doc = self._document_segments.pop() current_tt = current_doc.binding merged_tt = merged_tt.merge(current_tt, self._dataset) if merged_head: merged_head = merged_head.merge(current_tt.head, self._dataset) if merged_styling: merged_styling = merged_styling.merge(current_tt.head.styling, self._dataset) else: merged_styling = current_tt.head.styling if merged_layout: merged_layout = merged_layout.merge(current_tt.head.layout, self._dataset) else: merged_layout = current_tt.head.layout else: merged_head = current_tt.head if merged_body: merged_body = merged_body.merge(current_tt.body, self._dataset) else: merged_body = current_tt.body merged_head.layout = merged_layout merged_head.styling = merged_styling merged_tt.head = merged_head merged_tt.body = merged_body merged_tt.sequenceIdentifier = self._sequence_identifier merged_tt.sequenceNumber = self._sequence_number merged_tt._setElement(tt) self._spliced_document = merged_tt