U
    g                  	   @   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BLUEZPURPLECYANWHITE)NORMALZBOLDZ
UNDERLINEDc                 C   s  |  }|  }d}d|kr|d dkr:td||d tkr^t|d  d|ddt|   }|d dkrd	|d
d  }|  |d dkrtd|dd
d
 d|d| d}|  |sd}n|d tkrt|d  d|dndt|   }|rH|d dkrHd|d
d  }|  |rd|d tkrd| nd}dt|  d| d}|rtdd|d||s|r| t	d | | } | | |  t	d  S | S d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   Z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tokensZbg_colorZfg_colorZfg_style r/   5/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/minicurses.pyformat_text!   s@      r1   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)selfr3   linesr/   r/   r0   __init__O   s    
zMultilinePrinterBase.__init__c                 C   s   | S Nr/   r6   r/   r/   r0   	__enter__T   s    zMultilinePrinterBase.__enter__c                 G   s   |    d S r9   )end)r6   argsr/   r/   r0   __exit__W   s    zMultilinePrinterBase.__exit__c                 C   s   d S r9   r/   r6   r,   posr/   r/   r0   print_at_lineZ   s    z"MultilinePrinterBase.print_at_linec                 C   s   d S r9   r/   r:   r/   r/   r0   r<   ]   s    zMultilinePrinterBase.endc                 C   s   | j r|d  d| S |S )Nr   z: )r4   )r6   r,   liner/   r/   r0   _add_line_number`   s    z%MultilinePrinterBase._add_line_numberc                 G   s   t d|| j d S Nr   )r   r)   r3   r6   r,   r/   r/   r0   writee   s    zMultilinePrinterBase.write)Nr   )
__name__
__module____qualname__r8   r;   r>   rA   r<   rC   rF   r/   r/   r/   r0   r2   N   s   
r2   c                   @   s   e Zd ZdS )QuietMultilinePrinterN)rG   rH   rI   r/   r/   r/   r0   rJ   i   s   rJ   c                   @   s   e Zd Zdd Zdd ZdS )MultilineLoggerc                 G   s   | j d| d S rD   )r3   debugr)   rE   r/   r/   r0   rF   n   s    zMultilineLogger.writec                 C   s   |  | || d S r9   rF   rC   r?   r/   r/   r0   rA   q   s    zMultilineLogger.print_at_lineN)rG   rH   rI   rF   rA   r/   r/   r/   r0   rK   m   s   rK   c                   @   s   e Zd Zdd ZdS )BreaklineStatusPrinterc                 C   s   |  | ||d d S )Nr   rM   r?   r/   r/   r0   rA   w   s    z$BreaklineStatusPrinter.print_at_lineN)rG   rH   rI   rA   r/   r/   r/   r0   rN   v   s   rN   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   )superr8   preserve_output	_lastline_lastlengthr   	_movelock)r6   r3   r7   rQ   	__class__r/   r0   r8   |   s    zMultilinePrinter.__init__c                    s   t   fdd}|S )Nc              
      s.   | j   | f||W  5 Q R  S Q R X d S r9   )rT   )r6   r=   kwargsfuncr/   r0   wrapper   s    z&MultilinePrinter.lock.<locals>.wrapper)	functoolswraps)rY   rZ   r/   rX   r0   lock   s    zMultilinePrinter.lockc                 c   sV   t | j| j}dV  || }|dk r6td |  V  n|dkrLtd | V  || _d S )Nr   r   r   )minrR   r4   r+   )r6   destcurrentZdistancer/   r/   r0   _move_cursor   s    zMultilinePrinter._move_cursorc                 C   s   | j r&| j| |td |f  d S | ||}t|}| j|krld}| j|krd|d| j|  7 }|| _n
d}|| _| || || _d S )Nr	   r^   r!   r   )r5   rF   rb   r+   rC   lenrR   rS   )r6   r,   r@   Ztextlenprefixr/   r/   r0   rA      s    

zMultilinePrinter.print_at_linec                 C   sz   | j r| | jng }| jr.| j|d  d S | j rb| j|td td  td  | j f  n| dd| j d d S )Nr   r	   r   r^   r!   )r   )r5   rb   r4   rQ   rF   r+   rS   rE   r/   r/   r0   r<      s     
zMultilinePrinter.end)Nr   T)	rG   rH   rI   r8   r]   rb   rA   r<   __classcell__r/   r/   rU   r0   rO   {   s   

rO   )r[   	threadingr   utilsr   r   r+   r&   r(   r1   r2   rJ   rK   rN   rO   r/   r/   r/   r0   <module>   s4   	-	