o
    i                  	   @   s   d dl Z d dlmZ ddlmZmZ ddddd	Zd
ddddddddZd
dddZdd Z	G dd dZ
G dd de
ZG dd de
ZG dd de
ZG dd de
ZdS )     N)Lock   )supports_terminal_sequenceswrite_string
z[Az[Kz[0m)DOWNUP
ERASE_LINERESET01234567)BLACKREDGREENYELLOWBLUEPURPLECYANWHITE)NORMALBOLD
UNDERLINEDc                 C   s  |  }|  }d}d|v rk|d dkrtd||d tvr/t|d  d|ddt|   }|d dkrKd	|d
d  }|  |d dkratd|dd
d
 d|d| d}|  |spd}nX|d tvrt|d  d|ddt|   }|r|d dkrd|d
d  }|  |r|d tv r| nd}dt|  d| d}|rtdd|d||s|r| t	d | | } | | |  t	d  S | S )z
    @param f    String representation of formatting to apply in the form:
                [style] [light] font_color [on [light] bg_color]
                E.g. "red", "bold green on light blue"
     ONz%Empty background format specified in z in z must be a colorr   LIGHTz0;10r   NzInvalid format z ON z[mr   9r   ; r
   )
upperstripsplitSyntaxError_COLORSpop_TEXT_STYLESjoinreplaceCONTROL_SEQUENCES)textftokensbg_colorfg_colorfg_style r6   E/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/minicurses.pyformat_text!   s@    r8   c                   @   sF   e Zd ZdddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dS )MultilinePrinterBaseNr   c                 C   s   || _ |d | _t|| _d S Nr   )streammaximumr   _HAVE_FULLCAP)selfr;   linesr6   r6   r7   __init__O   s   
zMultilinePrinterBase.__init__c                 C   s   | S Nr6   r>   r6   r6   r7   	__enter__T      zMultilinePrinterBase.__enter__c                 G   s   |    d S rA   )end)r>   argsr6   r6   r7   __exit__W   s   zMultilinePrinterBase.__exit__c                 C      d S rA   r6   r>   r0   posr6   r6   r7   print_at_lineZ   rD   z"MultilinePrinterBase.print_at_linec                 C   rH   rA   r6   rB   r6   r6   r7   rE   ]   rD   zMultilinePrinterBase.endc                 C   s   | j r|d  d| S |S )Nr   z: )r<   )r>   r0   liner6   r6   r7   _add_line_number`   s   z%MultilinePrinterBase._add_line_numberc                 G   s   t d|| j d S Nr   )r   r-   r;   r>   r0   r6   r6   r7   writee      zMultilinePrinterBase.writer:   )
__name__
__module____qualname__r@   rC   rG   rK   rE   rM   rP   r6   r6   r6   r7   r9   N   s    
r9   c                   @   s   e Zd ZdS )QuietMultilinePrinterN)rR   rS   rT   r6   r6   r6   r7   rU   i   s    rU   c                   @   s   e Zd Zdd Zdd ZdS )MultilineLoggerc                 G   s   | j d| d S rN   )r;   debugr-   rO   r6   r6   r7   rP   n   rQ   zMultilineLogger.writec                 C   s   |  | || d S rA   rP   rM   rI   r6   r6   r7   rK   q   s   zMultilineLogger.print_at_lineN)rR   rS   rT   rP   rK   r6   r6   r6   r7   rV   m   s    rV   c                   @   s   e Zd Zdd ZdS )BreaklineStatusPrinterc                 C   s   |  | ||d d S )Nr   rX   rI   r6   r6   r7   rK   w   s   z$BreaklineStatusPrinter.print_at_lineN)rR   rS   rT   rK   r6   r6   r6   r7   rY   v   s    rY   c                       sF   e Zd Zd fdd	Zdd Zdd	 Zed
d Zedd Z  ZS )MultilinePrinterNr   Tc                    s,   t  || || _d | _| _t | _d S )Nr   )superr@   preserve_output	_lastline_lastlengthr   	_movelock)r>   r;   r?   r\   	__class__r6   r7   r@   |   s   zMultilinePrinter.__init__c                    s   t   fdd}|S )Nc                    s@   | j   | g|R i |W  d    S 1 sw   Y  d S rA   )r_   )r>   rF   kwargsfuncr6   r7   wrapper   s   $z&MultilinePrinter.lock.<locals>.wrapper)	functoolswraps)rd   re   r6   rc   r7   lock   s   zMultilinePrinter.lockc                 c   sX    t | j| j}dV  || }|dk rtd |  V  n|dkr'td | V  || _d S )Nr   r   r   )minr]   r<   r/   )r>   destcurrentdistancer6   r6   r7   _move_cursor   s   
zMultilinePrinter._move_cursorc                 C   s   | j r| jg | |td |R   d S | ||}t|}| j|kr9d}| j|kr5|d| j|  7 }|| _nd}|| _| || || _d S )Nr	   ri   r%   r   )r=   rP   rn   r/   rM   lenr]   r^   )r>   r0   rJ   textlenprefixr6   r6   r7   rK      s   "


zMultilinePrinter.print_at_linec                 C   s   | j r	| | jng }| jr| jg |dR   d S | j r8| jg |td td  td  | j R   d S | dd| j d d S )Nr   r	   r   ri   r%   )r=   rn   r<   r\   rP   r/   r^   rO   r6   r6   r7   rE      s   zMultilinePrinter.end)Nr   T)	rR   rS   rT   r@   rh   rn   rK   rE   __classcell__r6   r6   r`   r7   rZ   {   s    

rZ   )rf   	threadingr   utilsr   r   r/   r*   r,   r8   r9   rU   rV   rY   rZ   r6   r6   r6   r7   <module>   s6    	-	