Ë
    š„j»,  ã                   óÆ  — d Z ddlZddlZddlmZmZ  G d„ d«      Z G d„ de«      Z G d	„ d
e«      Z	 ej                  d«      Z ej                  d«      Z ej                  d«      Z ej                  d«      Z ej                  d«      Zd„ Zd„ Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zd „ Zy)!u´  
A partial parser for WebVTT segments. Interprets enough of the WebVTT stream
to be able to assemble a single stand-alone subtitle file, suitably adjusting
timestamps on the way, while everything else is passed through unmodified.

Regular expressions based on the W3C WebVTT specification
<https://www.w3.org/TR/webvtt1/>. The X-TIMESTAMP-MAP extension is described
in RFC 8216 Â§3.5 <https://tools.ietf.org/html/rfc8216#section-3.5>.
é    Né   )Úint_or_noneÚtimetuple_from_msecc                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú_MatchParserz”
    An object that maintains the current parsing position and allows
    conveniently advancing it as syntax elements are successfully parsed.
    c                 ó    — || _         d| _        y ©Nr   )Ú_dataÚ_pos)ÚselfÚstrings     úD/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/webvtt.pyÚ__init__z_MatchParser.__init__   s   € ØˆŒ
Øˆ�	ó    c                 ó  — t        |t        j                  «      r&|j                  | j                  | j
                  «      S t        |t        «      r2| j                  j                  || j
                  «      rt        |«      S y t        |«      ‚©N)
Ú
isinstanceÚreÚPatternÚmatchr
   r   ÚstrÚ
startswithÚlenÚ
ValueError©r   Úrs     r   r   z_MatchParser.match   sa   € Ü�aœŸ™Ô$Ø—7‘7˜4Ÿ:™: t§y¡yÓ1Ð1Ü�aœÔØ�z‰z×$Ñ$ Q¨¯	©	Ô2Ü˜1“v�ØÜ˜‹mÐr   c                 ó  — |€d}not        |t        j                  «      rt        |j	                  d«      «      }n:t        |t
        «      rt        |«      }nt        |t        «      r|}nt        |«      ‚| xj                  |z  c_        |S r	   )	r   r   ÚMatchr   Úgroupr   Úintr   r   )r   ÚbyÚamts      r   Úadvancez_MatchParser.advance$   sk   € Øˆ:Ø‰CÜ˜œBŸH™HÔ%Ü�b—h‘h˜q“kÓ"‰CÜ˜œCÔ Ü�b“'‰CÜ˜œCÔ Ø‰Cä˜R“.Ð Ø�	Š	�SÑ�	Øˆ	r   c                 óB   — | j                  | j                  |«      «      S r   )r#   r   r   s     r   Úconsumez_MatchParser.consume2   s   € Ø�|‰|˜DŸJ™J q›MÓ*Ð*r   c                 ó   — t        | «      S r   )Ú_MatchChildParser©r   s    r   Úchildz_MatchParser.child5   s   € Ü  Ó&Ð&r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r%   r)   © r   r   r   r      s    „ ñò
òòò+ó'r   r   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )r'   zÝ
    A child parser state, which advances through the same data as
    its parent, but has an independent position. This is useful when
    advancing through syntax elements we might later want to backtrack
    from.
    c                 óh   •— t         ‰| �  |j                  «       || _        |j                  | _        y r   )Úsuperr   r
   Ú_MatchChildParser__parentr   )r   ÚparentÚ	__class__s     €r   r   z_MatchChildParser.__init__A   s&   ø€ Ü‰Ñ˜Ÿ™Ô&ØˆŒØ—K‘Kˆ�	r   c                 óP   — | j                   | j                  _         | j                  S )zW
        Advance the parent state to the current position of this child state.
        )r   r2   r(   s    r   Úcommitz_MatchChildParser.commitF   s   € ð "ŸY™Yˆ�‰ÔØ�}‰}Ðr   )r*   r+   r,   r-   r   r6   Ú__classcell__©r4   s   @r   r'   r'   9   s   ø„ ñô ö
r   r'   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú
ParseErrorc                 ó’   •— |j                   |j                  |j                  dz    }t        ‰| �  d|j                  › d|›d�«       y )Néd   zParse error at position z (near ú))r
   r   r1   r   )r   ÚparserÚdatar4   s      €r   r   zParseError.__init__O   sA   ø€ Ø�|‰|˜FŸK™K¨¯©°cÑ(9Ð:ˆÜ‰ÑÐ3°F·K±K°=ÀÈÀxÈqÐQÕRr   )r*   r+   r,   r   r7   r8   s   @r   r:   r:   N   s   ø„ ÷Sð Sr   r:   zL(?x)
    (?:([0-9]{1,}):)?
    ([0-9]{2}):
    ([0-9]{2})\.
    ([0-9]{3})?
z\Zz(?:\r\n|[\r\n]|$)z(?:\r\n|[\r\n])+z[ \t]*c           	      ó`   — dt        d„ t        | j                  «       dd¬«      D «       «      z  S )z•
    Convert a parsed WebVTT timestamp (a re.Match obtained from _REGEX_TS)
    into an MPEG PES timestamp: a tick counter at 90 kHz resolution.
    éZ   c              3   óF   K  — | ]  \  }}t        |xs d «      |z  –— Œ y­w)r   N)r    )Ú.0ÚpartÚmults      r   ú	<genexpr>z_parse_ts.<locals>.<genexpr>i   s(   è ø€ ò lÙ", $¨ŒˆDŠI�A‹˜Õñlùs   ‚!)i€î6 i`ê  iè  r   T)Ústrict)ÚsumÚzipÚgroups©Útss    r   Ú	_parse_tsrM   d   s;   € ð
 ”ñ lÜ03°B·I±I³KÐA\ÐeiÔ0jôló lñ lð lr   c                 ó<   — dt        t        | dz   dz  «      «      z  S )zn
    Convert an MPEG PES timestamp into a WebVTT timestamp.
    This will lose sub-millisecond precision.
    z%02u:%02u:%02u.%03ué-   rA   )r   r    rK   s    r   Ú
_format_tsrP   m   s"   € ð
 !Ô#6´s¸BÀ¹GÈ¹?Ó7KÓ#LÑLÐLr   c                   ó,   — e Zd ZdZd„ Zed„ «       Zd„ Zy)ÚBlockz#
    An abstract WebVTT block.
    c                 óN   — |j                  «       D ]  \  }}t        | ||«       Œ y r   )ÚitemsÚsetattr)r   ÚkwargsÚkeyÚvals       r   r   zBlock.__init__z   s'   € ØŸ™›ò 	$‰HˆC�Ü�D˜#˜sÕ#ñ	$r   c                 ó�   — |j                  | j                  «      }|sy |j                  |«        | |j                  d«      ¬«      S )Nr   )Úraw)r   Ú_REGEXr#   r   )Úclsr>   Úms      r   ÚparsezBlock.parse~   s9   € à�L‰L˜Ÿ™Ó$ˆÙØØ�‰�qÔÙ�q—w‘w˜q“zÔ"Ð"r   c                 ó:   — |j                  | j                  «       y r   )ÚwriterZ   ©r   Ústreams     r   Ú
write_intozBlock.write_into†   s   € Ø�‰�T—X‘XÕr   N)r*   r+   r,   r-   r   Úclassmethodr^   rc   r.   r   r   rR   rR   u   s%   „ ñò$ð ñ#ó ð#ór   rR   c                   ó   — e Zd ZdZy)ÚHeaderBlockzm
    A WebVTT block that may only appear in the header part of the file,
    i.e. before any cue blocks.
    N)r*   r+   r,   r-   r.   r   r   rf   rf   Š   s   „ ñð 	r   rf   c                   ó
  — e Zd Z ej                  d«      Z ej                  d«      Z ej                  d«      Z ej                  d«      Z ej                  d«      Z	 ej                  d«      Z
ed„ «       Zed„ «       Zd	„ Zy
)ÚMagicz,\ufeff?WEBVTT([ \t][^\r\n]*)?(?:\r\n|[\r\n])zX-TIMESTAMP-MAP=zLOCAL:zMPEGTS:([0-9]+)z[ \t]*,[ \t]*z6(?:(?!-->)[^\r\n])+:(?:(?!-->)[^\r\n])+(?:\r\n|[\r\n])c                 ó  — |j                  «       }	 |j                  | j                  «      }|r:|j                  t        «      }|€t	        |«      ‚t        |«      }|€Zt	        |«      ‚|j                  | j                  «      }|r't        |j                  d«      «      }|€t	        |«      ‚t	        |«      ‚|j                  | j                  «      rŒÃ|j                  t        «      rnt	        |«      ‚|j                  «        fS )Nr   )r)   r%   Ú_REGEX_TSMAP_LOCALÚ	_REGEX_TSr:   rM   Ú_REGEX_TSMAP_MPEGTSr   r   Ú_REGEX_TSMAP_SEPÚ	_REGEX_NLr6   )r\   r>   r]   ÚlocalÚmpegtss        r   Ú__parse_tsmapzMagic.__parse_tsmap©   sä   € à—‘“ˆàØ—‘˜s×5Ñ5Ó6ˆAÙØ—N‘N¤9Ó-�Ø�9Ü$ VÓ,Ð,Ü! !›�Ø�=Ü$ VÓ,Ð,à—N‘N 3×#:Ñ#:Ó;�ÙÜ(¨¯©°«Ó4�FØ�~Ü(¨Ó0Ð0ä$ VÓ,Ð,Ø�~‰~˜c×2Ñ2Ô3ØØ�~‰~œiÔ(ØÜ˜VÓ$Ð$à�‰ŒØ�fˆ}Ðr   c                 óÜ  — |j                  «       }|j                  | j                  «      }|st        |«      ‚|j	                  d«      }d\  }}}|j                  t
        «      sm|j                  | j                  «      r| j                  |«      \  }}ŒE|j                  | j                  «      }|r||j	                  d«      z  }Œwt        |«      ‚|j                  «         | ||||¬«      S )Nr   )NNÚ r   )Úextrarp   ro   Úmeta)
r)   r%   r[   r:   r   rn   Ú_REGEX_TSMAPÚ_Magic__parse_tsmapÚ_REGEX_METAr6   )r\   r>   r]   rt   ro   rp   ru   s          r   r^   zMagic.parseÇ   sÊ   € à—‘“ˆà�N‰N˜3Ÿ:™:Ó&ˆÙÜ˜VÓ$Ð$à—‘˜“
ˆØ,Ñˆˆv�tØ—.‘.¤Ô+Ø�~‰~˜c×.Ñ.Ô/Ø #× 1Ñ 1°&Ó 9‘��vØØ—‘˜sŸ™Ó/ˆAÙØ˜Ÿ™ ›
Ñ"�ØÜ˜VÓ$Ð$Ø�‰ŒÙ˜ v°UÀÔFÐFr   c                 ód  — |j                  d«       | j                  �|j                  | j                  «       |j                  d«       | j                  s| j                  r—|j                  d«       |j                  t	        | j                  �| j                  nd«      «       |j                  d«       |j                  t        | j                  �| j                  nd«      «       |j                  d«       | j                  r|j                  | j                  «       |j                  d«       y )NÚWEBVTTú
zX-TIMESTAMP-MAP=LOCAL:r   z,MPEGTS:)r`   rt   ro   rp   rP   r   ru   ra   s     r   rc   zMagic.write_intoÝ   sÉ   € Ø�‰�XÔØ�:‰:Ð!Ø�L‰L˜Ÿ™Ô$Ø�‰�TÔØ�:Š:˜ŸšØ�L‰LÐ1Ô2Ø�L‰Lœ°$·*±*Ð2H D§J¢JÈaÓPÔQØ�L‰L˜Ô$Ø�L‰Lœ¨D¯K©KÐ,C˜TŸ[š[ÈÓKÔLØ�L‰L˜ÔØ�9Š9Ø�L‰L˜Ÿ™Ô#Ø�‰�TÕr   N)r*   r+   r,   r   Úcompiler[   rv   rj   rl   rm   rx   rd   rw   r^   rc   r.   r   r   rh   rh   ’   s›   „ ØˆR�Z‰ZÐGÓH€Fð �2—:‘:Ð1Ó2€LØ#˜Ÿ™ IÓ.ÐØ$˜"Ÿ*™*Ð%7Ó8ÐØ!�r—z‘zÐ"2Ó3Ðð �"—*‘*ÐVÓW€Kàñó ðð: ñGó ðGó*r   rh   c                   ó0   — e Zd Z ej                  d«      Zy)Ú
StyleBlockzs(?x)
        STYLE[\ \t]*(?:\r\n|[\r\n])
        ((?:(?!-->)[^\r\n])+(?:\r\n|[\r\n]))*
        (?:\r\n|[\r\n])
    N©r*   r+   r,   r   r|   r[   r.   r   r   r~   r~   í   ó   „ ØˆR�Z‰Zð ó 	�Fr   r~   c                   ó0   — e Zd Z ej                  d«      Zy)ÚRegionBlockze(?x)
        REGION[\ \t]*
        ((?:(?!-->)[^\r\n])+(?:\r\n|[\r\n]))*
        (?:\r\n|[\r\n])
    Nr   r.   r   r   r‚   r‚   õ   r€   r   r‚   c                   ó0   — e Zd Z ej                  d«      Zy)ÚCommentBlockzo(?x)
        NOTE(?:\r\n|[\ \t\r\n])
        ((?:(?!-->)[^\r\n])+(?:\r\n|[\r\n]))*
        (?:\r\n|[\r\n])
    Nr   r.   r   r   r„   r„   ý   r€   r   r„   c                   óâ   — e Zd ZdZ ej
                  d«      Z ej
                  d«      Z ej
                  d«      Z ej
                  d«      Z	e
d„ «       Zd„ Zed„ «       Zd	„ Ze
d
„ «       Zd„ Zy)ÚCueBlockz6
    A cue block. The payload is not interpreted.
    z$((?:(?!-->)[^\r\n])+)(?:\r\n|[\r\n])z[ \t]+-->[ \t]+z[ \t]+((?:(?!-->)[^\r\n])+)z[^\r\n]+(?:\r\n|[\r\n])?c                 óú  — |j                  «       }d }|j                  | j                  «      }|r|j                  d«      }|j                  t        «      }|sy |j                  | j
                  «      sy |j                  t        «      }|sy |j                  | j                  «      }|j                  t        «       |j                  t        «      sy t        |«      }t        |«      }|�|j                  d«      nd }	t        j                  «       }
	 |j                  | j                  «      }|sn!|
j                  |j                  d«      «       Œ?|j                  «         | ||||	|
j                  «       ¬«      S )Nr   r   )ÚidÚstartÚendÚsettingsÚtext)r)   r%   Ú	_REGEX_IDr   rk   Ú_REGEX_ARROWÚ_REGEX_SETTINGSÚ_REGEX_OPTIONAL_WHITESPACErn   rM   ÚioÚStringIOÚ_REGEX_PAYLOADr`   r6   Úgetvalue)r\   r>   Úid_r]   Úm0Úm1Úm2r‰   rŠ   r‹   rŒ   s              r   r^   zCueBlock.parse  s2  € à—‘“ˆàˆØ�N‰N˜3Ÿ=™=Ó)ˆÙØ—'‘'˜!“*ˆCà�^‰^œIÓ&ˆÙØØ�~‰~˜c×.Ñ.Ô/ØØ�^‰^œIÓ&ˆÙØØ�^‰^˜C×/Ñ/Ó0ˆØ�‰Ô1Ô2Ø�~‰~œiÔ(Øä˜"“ˆÜ˜‹mˆØ"$ .�2—8‘8˜A”;°dˆä�{‰{‹}ˆØØ—‘˜s×1Ñ1Ó2ˆAÙØØ�J‰J�q—w‘w˜q“zÔ"ð	 ð 	�‰ŒÙØØ˜S¨8Ø—‘“ô
ð 	
r   c                 ó  — | j                   �,|j                  | j                   «       |j                  d«       |j                  t        | j                  «      «       |j                  d«       |j                  t        | j                  «      «       | j
                  �,|j                  d«       |j                  | j
                  «       |j                  d«       |j                  | j                  «       |j                  d«       y )Nr{   z --> ú )rˆ   r`   rP   r‰   rŠ   r‹   rŒ   ra   s     r   rc   zCueBlock.write_into7  s¬   € Ø�7‰7ÐØ�L‰L˜Ÿ™Ô!Ø�L‰L˜ÔØ�‰”Z §
¡
Ó+Ô,Ø�‰�WÔØ�‰”Z §¡Ó)Ô*Ø�=‰=Ð$Ø�L‰L˜ÔØ�L‰L˜Ÿ™Ô'Ø�‰�TÔØ�‰�T—Y‘YÔØ�‰�TÕr   c                 óv   — | j                   | j                  | j                  | j                  | j                  dœS )N©rˆ   r‰   rŠ   rŒ   r‹   rœ   r(   s    r   Úas_jsonzCueBlock.as_jsonE  s1   € ð —'‘'Ø—Z‘ZØ—8‘8Ø—I‘IØŸ™ñ
ð 	
r   c                 ó4   — | j                   |j                   k(  S r   )r�   ©r   Úothers     r   Ú__eq__zCueBlock.__eq__O  s   € Ø�|‰|˜uŸ}™}Ñ,Ð,r   c                 ó:   —  | |d   |d   |d   |d   |d   ¬«      S )Nrˆ   r‰   rŠ   rŒ   r‹   rœ   r.   )r\   Újsons     r   Ú	from_jsonzCueBlock.from_jsonR  s3   € áØ�D‰zØ�w‘-Ø�U‘Ø�f‘Ø˜*Ñ%ô
ð 	
r   c                 óê   — | j                   |j                   k7  ry| j                  |j                  k7  ry| j                  | j                  cxk  xr! |j                  cxk(  xr |j                  k  S c S )NF)rŒ   r‹   r‰   rŠ   rŸ   s     r   ÚhingeszCueBlock.hinges\  sS   € Ø�9‰9˜Ÿ
™
Ò"ØØ�=‰=˜EŸN™NÒ*ØØ�z‰z˜TŸX™XÖA¨¯©ÖA¸¿	¹	ÑAÐAÑAÐAr   N)r*   r+   r,   r-   r   r|   r�   rŽ   r�   r“   rd   r^   rc   Úpropertyr�   r¡   r¤   r¦   r.   r   r   r†   r†     s˜   „ ñð �—
‘
ÐBÓC€IØ�2—:‘:Ð0Ó1€LØ �b—j‘jÐ!?Ó@€OØ�R—Z‘ZÐ ;Ó<€Nàñ%
ó ð%
òNð ñ
ó ð
ò-ð ñ
ó ð
óBr   r†   c              #   óH  K  — t        | j                  «       «      }t        j                  |«      –— |j	                  t
        «      sk|j                  t        «      rŒ+t        j                  |«      }|r|–— ŒGt        j                  |«      }|r|–— Œct        j                  |«      }|r|–— Œ	 |j	                  t
        «      sY|j                  t        «      rŒ+t        j                  |«      }|r|–— ŒGt        j                  |«      }|r|–— Œct        |«      ‚y­w)zŽ
    A generator that yields (partially) parsed WebVTT blocks when given
    a bytes object containing the raw contents of a WebVTT file.
    N)r   Údecoderh   r^   r   Ú
_REGEX_EOFr%   Ú_REGEX_BLANKr‚   r~   r„   r†   r:   )Úfrag_contentr>   Úblocks      r   Úparse_fragmentr®   d  sø   è ø€ ô ˜,×-Ñ-Ó/Ó0€Fä
�+‰+�fÓ
Òà�l‰lœ:Ô&Ø�>‰>œ,Ô'Øä×!Ñ! &Ó)ˆÙØŠKØÜ× Ñ  Ó(ˆÙØŠKØÜ×"Ñ" 6Ó*ˆÙØŠKØàà�l‰lœ:Ô&Ø�>‰>œ,Ô'Øä×"Ñ" 6Ó*ˆÙØŠKØÜ—‘˜vÓ&ˆÙØŠKØä˜Ó Ð ð 'ùs   ‚D D")r-   r‘   r   Úutilsr   r   r   r'   Ú	Exceptionr:   r|   rk   rª   rn   r«   r�   rM   rP   rR   rf   rh   r~   r‚   r„   r†   r®   r.   r   r   ú<module>r±      s  ðñó 
Û 	ç 3÷%'ñ %'ôP˜ô ô*S�ô Sð ˆB�J‰Jð ó €	ð ˆR�Z‰Z˜Ó€
ØˆB�J‰JÐ+Ó,€	Øˆr�z‰zÐ-Ó.€Ø'˜RŸZ™Z¨	Ó2Ð òlòM÷ñ ô*	�%ô 	ôXˆKô Xôv	�ô 	ô	�+ô 	ô	�5ô 	ô\Bˆuô \Bó~*!r   