X-Git-Url: https://jfr.im/git/yt-dlp.git/blobdiff_plain/2fa669f759eae6d5c7e608e3ee628f9d60d03e83..d4b52ce3fcb8d9578ed12365648eaba8718c603e:/yt_dlp/webvtt.py diff --git a/yt_dlp/webvtt.py b/yt_dlp/webvtt.py index 1138865ba..9f1a5086b 100644 --- a/yt_dlp/webvtt.py +++ b/yt_dlp/webvtt.py @@ -77,9 +77,8 @@ def commit(self): class ParseError(Exception): def __init__(self, parser): - super().__init__("Parse error at position %u (near %r)" % ( - parser._pos, parser._data[parser._pos:parser._pos + 20] - )) + data = parser._data[parser._pos:parser._pos + 100] + super().__init__(f'Parse error at position {parser._pos} (near {data!r})') # While the specification @@ -93,8 +92,9 @@ def __init__(self, parser): ([0-9]{3})? ''') _REGEX_EOF = re.compile(r'\Z') -_REGEX_NL = re.compile(r'(?:\r\n|[\r\n])') +_REGEX_NL = re.compile(r'(?:\r\n|[\r\n]|$)') _REGEX_BLANK = re.compile(r'(?:\r\n|[\r\n])+') +_REGEX_OPTIONAL_WHITESPACE = re.compile(r'[ \t]*') def _parse_ts(ts): @@ -148,7 +148,7 @@ class Magic(HeaderBlock): # XXX: The X-TIMESTAMP-MAP extension is described in RFC 8216 §3.5 # , but the RFC - # doesn’t specify the exact grammar nor where in the WebVTT + # doesn't specify the exact grammar nor where in the WebVTT # syntax it should be placed; the below has been devised based # on usage in the wild # @@ -272,10 +272,10 @@ class CueBlock(Block): def parse(cls, parser): parser = parser.child() - id = None + id_ = None m = parser.consume(cls._REGEX_ID) if m: - id = m.group(1) + id_ = m.group(1) m0 = parser.consume(_REGEX_TS) if not m0: @@ -286,6 +286,7 @@ def parse(cls, parser): if not m1: return None m2 = parser.consume(cls._REGEX_SETTINGS) + parser.consume(_REGEX_OPTIONAL_WHITESPACE) if not parser.consume(_REGEX_NL): return None @@ -302,9 +303,9 @@ def parse(cls, parser): parser.commit() return cls( - id=id, + id=id_, start=start, end=end, settings=settings, - text=text.getvalue() + text=text.getvalue(), ) def write_into(self, stream): @@ -341,7 +342,7 @@ def from_json(cls, json): start=json['start'], end=json['end'], text=json['text'], - settings=json['settings'] + settings=json['settings'], ) def hinges(self, other):