@@ -53,6 +53,7 @@ class _TextCueParser:
5353
5454 def __init__ (self , paragraph : model .P , line_number : int ) -> None :
5555 self .line_num : int = line_number
56+ self .paragraph : model .P = paragraph
5657 self .parent : model .ContentElement = paragraph
5758
5859 # handle the special case of ruby elements where children cannot be added one by one
@@ -73,23 +74,25 @@ def handle_token(self, token: Token) -> None:
7374
7475 def _handle_ts (self , token : TimestampTagToken ):
7576
76- span = self ._make_span (self .parent )
77- self .parent .push_child (span )
78- self .parent = span
79-
8077 ts = vtt_timestamp_to_secs (token .timestamp )
81- parent_begin = None
82- parent = self .parent
83- while parent is not None :
84- parent_begin = parent .get_begin ()
85- if parent_begin is not None :
86- break
87- parent = parent .parent ()
88- if ts is not None and parent_begin is not None and parent_begin <= ts :
89- span .set_begin (ts - parent_begin )
90- else :
78+ if ts is None :
79+ LOGGER .warning ("Invalid timestamp tag %s at line %s" , token .timestamp , self .line_num )
80+ return
81+
82+ # we handle only top-level timestamp tags
83+ if self .parent .get_begin () is None :
84+ LOGGER .warning ("Nested timestamp tag %s at line %s" , token .timestamp , self .line_num )
85+ return
86+
87+ p_begin = self .paragraph .get_begin ()
88+ if p_begin is None or p_begin >= ts :
9189 LOGGER .warning ("Invalid timestamp tag %s" , token .timestamp )
9290
91+ span = self ._make_span (self .paragraph )
92+ span .set_begin (ts - p_begin )
93+ self .paragraph .push_child (span )
94+ self .parent = span
95+
9396 def _handle_starttag (self , token : StartTagToken ):
9497
9598 tag = token .tag .lower ()
0 commit comments