
    Ği,                        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dS )!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                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )_MatchParserz
    An object that maintains the current parsing position and allows
    conveniently advancing it as syntax elements are successfully parsed.
    c                 "    || _         d| _        d S Nr   )_data_pos)selfstrings     RC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/webvtt.py__init__z_MatchParser.__init__   s    
			    c                     t          |t          j                  r |                    | j        | j                  S t          |t                    r1| j                            || j                  rt          |          S d S t          |          N)

isinstancerePatternmatchr
   r   str
startswithlen
ValueErrorr   rs     r   r   z_MatchParser.match   sx    a$$ 	2774:ty111a 	z$$Q	22 1vv4mmr   c                 B   |d}nt          |t          j                  r#t          |                    d                    }nLt          |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$   s    :CCBH%% 	!bhhqkk""CCC   	!b''CCC   	!CCR.. 		S			r   c                 R    |                      |                     |                    S r   )r#   r   r   s     r   consumez_MatchParser.consume2   s    ||DJJqMM***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      si         
      + + +' ' ' ' '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                 z    t                                          |j                   || _        |j        | _        d S r   )superr   r
   _MatchChildParser__parentr   )r   parent	__class__s     r   r   z_MatchChildParser.__init__A   s1    &&&K			r   c                 2    | 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}r   )r*   r+   r,   r-   r   r6   __classcell__r4   s   @r   r'   r'   9   sQ                  
      r   r'   c                        e Zd Z fdZ xZS )
ParseErrorc                     |j         |j        |j        dz            }t                                          d|j         d|d           d S )Nd   zParse error at position z (near ))r
   r   r1   r   )r   parserdatar4   s      r   r   zParseError.__init__O   sQ    |FKc(99:QFKQQQQQRRRRRr   )r*   r+   r,   r   r7   r8   s   @r   r:   r:   N   sA        S S S S S S 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          |                                 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   D   K   | ]\  }}t          |pd           |z  V  dS )r   N)r    ).0partmults      r   	<genexpr>z_parse_ts.<locals>.<genexpr>i   sN       l l",$DIAl l l l l lr   )i6 i`  i  r   T)strict)sumzipgroupstss    r   	_parse_tsrM   d   s[    
  l l03BIIKKA\ei0j0j0jl l l l l l lr   c                 L    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(    
 !#6sBG?7K7K#L#LLLr   c                   4    e Zd ZdZd Zed             Zd ZdS )Blockz#
    An abstract WebVTT block.
    c                 \    |                                 D ]\  }}t          | ||           d S r   )itemssetattr)r   kwargskeyvals       r   r   zBlock.__init__z   s<     	$ 	$HCD#s####	$ 	$r   c                     |                     | j                  }|sd S |                    |            | |                    d                    S )Nr   )raw)r   _REGEXr#   r   )clsr>   ms      r   parsezBlock.parse~   sQ    LL$$ 	4qsqwwqzz""""r   c                 :    |                     | j                   d S r   )writerZ   r   streams     r   
write_intozBlock.write_into   s    TXr   N)r*   r+   r,   r-   r   classmethodr^   rc   r.   r   r   rR   rR   u   sW         $ $ $ # # [#    r   rR   c                       e Zd ZdZdS )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          	Dr   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d
S )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                 t   |                                 }	 |                    | j                  }|rL|                    t                    }|t	          |          t          |          }|t	          |          n_|                    | j                  }|r4t          |                    d                    }|t	          |          nt	          |          |                    | j	                  r|                    t                    rnt	          |          |                                 ||fS )NTr   )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66A -NN9--9$V,,,!!=$V,,, ! NN3#:;; -(44F~(000 & %V,,,~~c233 ~~i(( V$$$f}r   c                    |                                 }|                    | j                  }|st          |          |                    d          }d\  }}}|                    t
                    sw|                    | j                  r|                     |          \  }}M|                    | j                  }|r||                    d          z  }t          |          |	                                  | ||||          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    NN3:&& 	%V$$$

,vt..++ 	%~~c.//  # 1 1& 9 9vs//A 

"V$$$svUFFFFr   c                 b   |                     d           | j        |                     | j                   |                     d           | j        s| j        r|                     d           |                     t	          | j        | j        nd                     |                     d           |                     t          | j        | j        nd                     |                     d           | j        r|                     | j                   |                     d           d S )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:!LL$$$T: 	 	LL1222LL$*2HDJJaPPQQQLL$$$LLDK,CT[[KKLLLLL9 	$LL###Tr   N)r*   r+   r,   r   compiler[   rv   rj   rl   rm   rx   rd   rw   r^   rc   r.   r   r   rh   rh      s        RZGHHF 2:122L#I..$"*%788!rz"233 "*VWWK  [: G G [G*    r   rh   c                   .    e Zd Z ej        d          ZdS )
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~      &        RZ  	 	FFFr   r~   c                   .    e Zd Z ej        d          ZdS )RegionBlockze(?x)
        REGION[\ \t]*
        ((?:(?!-->)[^\r\n])+(?:\r\n|[\r\n]))*
        (?:\r\n|[\r\n])
    Nr   r.   r   r   r   r      r   r   r   c                   .    e Zd Z ej        d          ZdS )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dS )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                 n   |                                 }d }|                    | j                  }|r|                    d          }|                    t                    }|sd S |                    | j                  sd S |                    t                    }|sd S |                    | j                  }|                    t                     |                    t                    sd S t          |          }t          |          }||                    d          nd }	t          j                    }
	 |                    | j                  }|sn)|
                    |                    d                     F|                                  | ||||	|
                                          S )Nr   Tr   )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  s   NN3=)) 	''!**C^^I&& 	4~~c.// 	4^^I&& 	4^^C/001222~~i(( 	4"mm"$.288A;;;d{}}	#s122A JJqwwqzz"""		# 	sS8
 
 
 	
r   c                 ,   | j         /|                    | j                    |                    d           |                    t          | j                             |                    d           |                    t          | j                             | j        /|                    d           |                    | j                   |                    d           |                    | j                   |                    d           d S )Nr{   z -->  )r   r`   rP   r   r   r   r   ra   s     r   rc   zCueBlock.write_into7  s    7LL!!!LLZ
++,,,WZ))***=$LLLL'''TTYTr   c                 D    | j         | j        | j        | j        | j        dS )Nr   r   r   r   r   r   r(   s    r   as_jsonzCueBlock.as_jsonE  s,     'Z8I
 
 	
r   c                 "    | 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  s?    sDzw-Uf*%
 
 
 	
r   c                     | j         |j         k    rdS | j        |j        k    rdS | j        | j        cxk    o|j        cxk    o
|j        k    nc S )NF)r   r   r   r   r   s     r   hingeszCueBlock.hinges\  sb    9
""5=EN**5zTXAAAAAAA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CI2:011L bj!?@@ORZ ;<<N%
 %
 [%
N   
 
 X
- - - 
 
 [
B B B B Br   r   c              #     K   t          |                                           }t                              |          V  |                    t
                    s|                    t                    r5t                              |          }|r|V  Vt                              |          }|r|V  wt                              |          }|r|V  	 |                    t
                    sl|                    t                    r5t                              |          }|r|V  Vt                              |          }|r|V  wt          |          dS )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  sk      ,--//00F
++f

ll:&& >>,'' 	!!&)) 	KKK  (( 	KKK""6** 	KKKll:&& !>>,'' 	""6** 	KKKv&& 	KKK   ! !r   )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 3 3 3 3 3 3 3%' %' %' %' %' %' %' %'P       *S S S S S S S S BJ   	 RZ
BJ+,,	rz-..'RZ	22 l l lM M M       *	 	 	 	 	% 	 	 	X X X X XK X X Xv	 	 	 	 	 	 	 		 	 	 	 	+ 	 	 		 	 	 	 	5 	 	 	\B \B \B \B \Bu \B \B \B~*! *! *! *! *!r   