o
    e7y                     @   sv  d dl mZmZmZ ddlmZ 	 d dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZ d dlmZmZ d dlmZ d dl
mZmZ zd dlZd d	lT d d	lT d d
lmZ W n eyd   edw dd ZeZdZdZdZdZ dZ!dZ"d Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ$dZ*dZ+dZ,e-dZ.dZ/G dd de0Z1G dd de0Z2G dd de0Z3G dd  d e4Z5G d!d" d"e0Z6G d#d$ d$e0Z7G d%d& d&e0Z8G d'd( d(e0Z9G d)d* d*e0Z:G d+d, d,e0Z;G d-d. d.e4Z<G d/d0 d0e0Z=G d1d2 d2e0Z>g d3Z?e*de+de,dd4diZ@dKd6d7ZAG d8d9 d9eBZCe?D ]ZDeEeCeDeFeGjHeD qejGjHjIZJeKeJ_LeKeKeMgeJ_NeOZPeOZQeOZReSeTZUeVeCjW_Lg eCjW_NeXeCjY_LeTeTeOeTePgeCjY_NeVeCjZ_LeXe[eTe\eUgeCjZ_NeVeCj]_LeXe^eTe\eUgeCj]_NeVeCj__Lg eCj__NeVeCj`_LeXeOgeCj`_NeVeCja_LeXeUgeCja_NeVeCjb_LeXeOgeCjb_NeTeCjc_LedeTgeCjc_NeReCje_LefeKgeCje_NeXeCjg_LeTgeCjg_NeVeCjh_LeXeOeTeUgeCjh_NeVeCji_LeXeOeTeUgeCji_NeVeCjj_LeXeOeOe\eOgeCjj_NeVeCjk_LeXgeCjk_NeVeCjl_LeXeOgeCjl_NeVeCjm_LeXe\geCjm_NeVeCjn_LeXeTgeCjn_NeVeCjo_LeXe\geCjo_NeVeCjp_LeXe[geCjp_NeVeCjq_LedgeCjq_NeVeCjr_LeXeVeOgeCjr_NeVeCjs_LeXeOeTeUePgeCjs_NeVeCjt_LeXedeTe\eUgeCjt_NeVeCju_LeXeQeTeUeOgeCju_NeGjvjwZxG d:d; d;eZdLd<d=ZyezeKeOeOeKZ{da|da}d>d? Z~d@dA ZedBkrd dlZd dlZdCdD ZeCd Zee_ee_e  eedEedF edGdH edI edJ edHD ]Ze Zee q[dS dS )M    )absolute_importprint_functionunicode_literals   )EventN)	AnsiState
AnsiWriter)KeyPressmake_KeyPress)log)
ensure_strensure_unicode)*)call_functionz You need ctypes to run this codec                 C      d S N )stringr   r   KD:\Projects\ConvertPro\env\Lib\site-packages\pyreadline3/console/console.pynolog*      r   ii                     l        i   @c                   @   s   e Zd ZdefdefgZdS )COORDXYN__name__
__module____qualname__c_short_fields_r   r   r   r   r   I       r   c                   @   s(   e Zd ZdefdefdefdefgZdS )
SMALL_RECTLeftTopRightBottomNr!   r   r   r   r   r(   N       r(   c                   @   s.   e Zd ZdefdefdefdefdefgZdS )CONSOLE_SCREEN_BUFFER_INFOdwSizedwCursorPositionwAttributessrWindowdwMaximumWindowSizeN)r"   r#   r$   r   r%   r(   r&   r   r   r   r   r.   U       r.   c                   @      e Zd ZdefdefgZdS )
CHAR_UNIONUnicodeChar	AsciiCharN)r"   r#   r$   c_wcharc_charr&   r   r   r   r   r6   ]   r'   r6   c                   @   r5   )	CHAR_INFOChar
AttributesN)r"   r#   r$   r6   r%   r&   r   r   r   r   r;   b   r'   r;   c                	   @   s@   e Zd ZdefdefdefdefdefdefdefdefgZd	S )
KEY_EVENT_RECORDbKeyDownZpad2Zpad1ZwRepeatCountwVirtualKeyCodeZwVirtualScanCodeuChardwControlKeyStateN)r"   r#   r$   c_byter%   r6   c_intr&   r   r   r   r   r>   g   s    r>   c                   @   s(   e Zd ZdefdefdefdefgZdS )MOUSE_EVENT_RECORDdwMousePositiondwButtonStaterB   dwEventFlagsN)r"   r#   r$   r   rD   r&   r   r   r   r   rE   r   r-   rE   c                   @      e Zd ZdefgZdS )WINDOW_BUFFER_SIZE_RECORDr/   N)r"   r#   r$   r   r&   r   r   r   r   rJ   y       rJ   c                   @   rI   )MENU_EVENT_RECORDdwCommandIdN)r"   r#   r$   c_uintr&   r   r   r   r   rL   }   rK   rL   c                   @   rI   )FOCUS_EVENT_RECORD	bSetFocusN)r"   r#   r$   rC   r&   r   r   r   r   rO      rK   rO   c                   @   s.   e Zd ZdefdefdefdefdefgZdS )INPUT_UNIONKeyEvent
MouseEventWindowBufferSizeEvent	MenuEvent
FocusEventN)	r"   r#   r$   r>   rE   rJ   rL   rO   r&   r   r   r   r   rQ      r4   rQ   c                   @   r5   )INPUT_RECORD	EventTyper   N)r"   r#   r$   r%   rQ   r&   r   r   r   r   rW      r'   rW   c                   @   r5   )CONSOLE_CURSOR_INFOr/   bVisibleN)r"   r#   r$   rD   rC   r&   r   r   r   r   rY      r'   rY   )AllocConsoleCreateConsoleScreenBufferFillConsoleOutputAttributeFillConsoleOutputCharacterWFreeConsoleGetConsoleCursorInfoGetConsoleModeGetConsoleScreenBufferInfoGetConsoleTitleWGetProcAddressGetStdHandlePeekConsoleInputWReadConsoleInputWScrollConsoleScreenBufferWSetConsoleActiveScreenBufferSetConsoleCursorInfoSetConsoleCursorPositionSetConsoleModeSetConsoleScreenBufferSizeSetConsoleTextAttributeSetConsoleTitleWSetConsoleWindowInfoWriteConsoleWWriteConsoleOutputCharacterW	WriteFile[     c                    s     fddt dt D S )Nc                    s   g | ]
}||   qS r   r   ).0startsizetextr   r   
<listcomp>   s    zsplit_block.<locals>.<listcomp>r   )rangelen)rz   ry   r   rx   r   split_block   s    r~   c                   @   s  e Zd ZdZd^ddZdd Zdd Zd	d
 Zd_ddZdd Z	e
dZe
dZi ddddddddddddddddd dd!d"d#d$d%d&d'd(d)d*d+d,d-d.d/dZe
d0Zd`d1d2Zd`d3d4Zd`d5d6Zd7ejv rd`d8d4ZeZd9d: Zd;d< Zd=d> Zdad@dAZd`dBdCZdDdE ZdadFdGZdadHdIZdJdK ZdLdM ZdNdO ZdPdQ Z dRdS Z!d`dTdUZ"d_dVdWZ#d_dXdYZ$dZd[ Z%d\d] Z&dS )bConsolez!Console driver for Windows.

    r   c                 C   sL  |r|  ttB dddd| _| | j n| t| _| t| _t	d| _
| | jt| j
 | | jd t }| | jt| |j| _|j| _t | _|j| j_t| j| _| jd@ }| jD ]}| j| durt| j|  |O  < qbtd| j  d| _d| _tj| _t t!| jj"j#| _$t%| jj&_'t%g| jj&_(t)t*d| jj& dS )zInitialize the Console object.

        newbuffer=1 will allocate a new buffer so the old content will be restored
        on exit.
        r   Nr         zinitial attr=%xPyMem_Malloc)+r\   GENERIC_READGENERIC_WRITEhoutri   re   STD_OUTPUT_HANDLESTD_INPUT_HANDLEhinDWORDinmodera   byrefrl   r.   rb   r1   attrsaveattrr   Zdefaultstatewinattrr   
ansiwriterescape_to_colorr   Z	softspaceserialctypes	pythonapiZ	pythondllc_void_pfrom_address	addressofZPyOS_InputHookvalueinputHookPtrc_size_tZPyMem_RawMallocrestypeargtypessetattrr   )selfZ	newbufferinfo
backgroundescaper   r   r   __init__   sF   





zConsole.__init__c                 C   s,   |  | j| j | | j| j |   dS )z"Cleanup the console when finished.N)rn   r   r   rl   r   r   r_   r   r   r   r   __del__   s   zConsole.__del__c                 C   s2   t  }| | jt| |j}|j}|j}||fS r   )r.   rb   r   r   r2   r*   r,   )r   r   recttopbotr   r   r   _get_top_bot   s   zConsole._get_top_botc                 C   sX   |dk s|dk r$t  }| | jt| |dk r$|jj| }|jj| }t|d> |B S )zOReturn a long with x and y packed inside,
        also handle negative x and y.r   r   )r.   rb   r   r   r2   r+   r,   rD   r   xyr   r   r   r   fixcoord  s   zConsole.fixcoordNc                 C   sF   |du rt  }| | jt| |jj|jjfS | | j| ||S )z Move or query the window cursor.N)	r.   rb   r   r   r0   r   r    rk   r   r   r   r   r   pos  s   
zConsole.posc                 C   s   |  dd dS )zMove to home.r   N)r   r   r   r   r   home  s   zConsole.homez(?\[[0-9;]+m?)z?\[([0-9;]+)m?z0;30z0;31r   z0;32r   z0;33   z0;34r   z0;35   z0;36z0;37r   z1;30z1;31   z1;32
   z1;33   z1;34	   z1;35   z1;36   z1;37r   0z	([
	])c                 C   sj  t |}|  \}}|  \}}d}| j|}|D ]}	| |	|}
t|	dkr|	d dkr5d}|d7 }nD|	d dkr>d}n;|	d dkr[dt|d d  }||krZ||8 }|d7 }n|	d dkrbn|	d dkru|d8 }|dk rt|d8 }n|d7 }||krd}|d7 }||kr|d7 }|d }q||
7 }t|| }|| }||7 }||kr||| d 7 }|d }q|S )	ah  write text at current cursor position while watching for scrolling.

        If the window scrolls because you are at the bottom of the screen
        buffer, all positions that you are storing will be shifted by the
        scroll amount. For example, I remember the cursor position of the
        prompt so that I can redraw the line but if the window scrolls,
        the remembered position is off.

        This variant of write tries to keep track of the cursor position
        so that it will know when the screen buffer is scrolled. It
        returns the number of lines that the buffer scrolled.

        r   r   
	r   )r   r   ry   motion_char_resplitwrite_colorr}   int)r   rz   r   r   r   whscrollchunkschunknlr   r   r   write_scrolling<  sV   
zConsole.write_scrollingc              	   C   s   t |}| j||\}}td}|D ]-\}}td|  td|  | | j|j t|D ]}| 	| j|t
|t|d  q/q|S )Nr   zconsole.attr:%szconsole.chunk:%s)r   r   r   r   r   rn   r   r   r~   rq   r}   r   )r   rz   r   r   resjunkr   short_chunkr   r   r   r   u  s   
zConsole.write_colorc                 C   sr   t |}td||f  |du r| j}td}| | j| ttD ]}| | jt |t	|t
|d q"t	|S )z&write text at current cursor position.zwrite("%s", %s)Nr   )r   r   r   r   rn   r   r~   r   rq   r}   r   )r   rz   r   r   r   r   r   r   write_plain  s   zConsole.write_plainZEMACSc                 C   s4   t |}td}| | j|t|t|d  t|S )Nr   )r   r   rs   r   r}   r   )r   rz   r   r   r   r   r   r     s   c                 C   s   t |}td|  | |S )Nzwrite("%s"))r   r   r   )r   rz   r   r   r   write  s   
zConsole.writec                 C   s   dS )NTr   r   r   r   r   isatty  r   zConsole.isattyc                 C   r   r   r   r   r   r   r   flush  r   zConsole.flush c              
   C   s   |du r| j }t|dkrtt }| | jt| |jjdks'|jj	dkr2| 
| j| dd |jj}td}t|jj	D ]&}| | j||| d|t| | | jt|d || d|t| q@|| _ dS )zFill the entire screen.Nr   r   )r   r}   
ValueErrorr.   rb   r   r   r0   r   r    rk   r   r/   r   r|   r]   r^   ord)r   r   fillr   r   r   r   r   r   r   page  s$   

zConsole.pagec                 C   sZ   |du r| j }| ||}td}| | j|t||t| | | j|||t| dS )z!Write text at the given position.Nr   )r   r   r   rr   r   r}   r   r]   )r   r   r   rz   r   r   r   r   r   r   rz     s   
zConsole.textc                 C   st   |   \}}|  }|  \}}| |d |d ||d d f |d |k r8| d|d d ||d f d S d S )Nr   r   )r   r   ry   	rectangle)r   r   r   r   r   r   r   r   r   clear_to_end_of_window  s   ""zConsole.clear_to_end_of_windowc              	   C   s   |\}}}}t d}|du r| j}t||D ](}	| ||	}
| | j||| |
t| | | jt|d || |
t| qdS )zFill Rectangle.r   N)	r   r   r|   r   r]   r   r   r^   r   )r   r   r   r   x0y0x1y1r   r   r   r   r   r   r     s   zConsole.rectanglec                 C   s   |du r| j }|\}}}}	t|||d |	d }
| || || }t }t|d |j_||_| | j	t
|
t
|
|t
|S )zScroll a rectangle.Nr   r   )r   r(   r   r;   r   r<   r8   r=   rh   r   r   )r   r   ZdxZdyr   r   r   r   r   r   sourcedeststyler   r   r   r     s   zConsole.scrollc           
      C   s   t  }| | jt| |j}td|j|jf  |j| }|j| }|| }|jj	d }|dk r5d}|}||kr?|}|| }t
 }||_||_|j|_|j|_td||f  | | jdt|}	td|	  dS )z3Scroll the window by the indicated number of lines.zsw: rtop=%d rbot=%dr   r   zsn: top=%d bot=%dTzr=%dN)r.   rb   r   r   r2   r   r*   r,   r/   r    r(   r)   r+   rp   )
r   linesr   r   r   r   r   ZmaxbotZnrectrr   r   r   scroll_window  s,   

zConsole.scroll_windowc                 C   sd   t | jj}t }td}	 |rt|d | | jt	|dt	|}|r1|jdkr1t
| |}|S q)zGet next event from queue.r   Tr   r   )r   r   r   r   rW   r   r   rg   r   r   event)r   ZinputHookFuncCeventcountstatuser   r   r   get  s   

zConsole.getc                 C   s   	 |   }|jdkr/|jtvr/td|  |jjdkr!| d n,|jjdkr-| d n |S |jdkrM|jtd	d
dd
d	krMtd|j|j|jf  |S q)z<Return next key press event from the queue, ignoring others.Tr	   zconsole.getkeypress %snextr   Zpriori
KeyReleaseSFzgetKeypress:%s,%s,%s)	r   typekeycodekey_modifiersr   keyinfoZkeynamer   r	   )r   r   r   r   r   getkeypress  s   
zConsole.getkeypressc                 C   sx   t  }td}	 | | jt|dt|}|r;|jdkr;|jdkr;|jjj	r;t
|jjj}t|dkr9|jjjj}|S q)zGet next character from queue.r   Tr   )rW   r   rg   r   r   r   rX   r   rR   r?   keysymr@   r}   rA   r8   )r   r   r   r   symr   r   r   getchar$  s    

zConsole.getcharc                 C   sF   t  }td}| | jt|dt|}|r|dkr!t| |S dS dS )zCheck event queue.r   r   N)rW   r   rf   r   r   r   )r   r   r   r   r   r   r   peek5  s   
zConsole.peekc                 C   s@   |r	|  | dS td}| |d}|dkr|jd| S dS )zSet/get title.   r   N)ro   create_unicode_bufferrc   r   )r   txtbufferr   r   r   r   title>  s   zConsole.titlec                 C   s   t  }| | jt|}|sdS |durC|durC|jj|jj d }|jj|jj d }t	||}t	||}| 
| j| || dS |jj|jjfS )zSet/get window size.Nr   )r.   rb   r   r   r2   r+   r)   r,   r*   maxrm   r   r/   r   r    )r   widthheightr   r   ZwminZhminr   r   r   ry   H  s   


zConsole.sizec                 C   sN   t  }| | jt|r%|dur||_|dur||_| | jt| dS dS )zSet cursor on or off.N)rY   r`   r   r   rZ   r/   rj   )r   visiblery   r   r   r   r   cursorZ  s   zConsole.cursorc                 C   s   |  d d S )Nr   )r   r   r   r   r   belld  s   zConsole.bellc                 C   s   |  j d7  _ | j S )zGet next event serial number.r   )r   r   r   r   r   next_serialg  s   zConsole.next_serial)r   )NNr   )Nr   )'r"   r#   r$   __doc__r   r   r   r   r   r   recompileZterminal_escapeZescape_partsr   r   r   r   r   osenvironr   r   r   r   rz   r   r   r   r   r   r   r   r   r   ry   r   r   r   r   r   r   r   r      s    
/



	



9







	



r   c                   @   s   e Zd ZdZdd ZdS )r   z"Represent events from the console.c                 C   st  d| _ | | _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _|jtkrS|jjjr1d| _ nd| _ |jjjj| _|jjj| _|jjj| _t| j| j| j| _
dS |jtkr||jjjt@ rcd| _ nd| _ |jjjj| _|jjjj| _|jjj| _dS |jtkrd	| _ |jjj j| _|jjj j| _dS |jt!kr|jj"j#rd
| _ dS d| _ dS |jt$krd| _ |jj%j&| _dS dS )z5Initialize an event from the Windows input structure.z??r    Nr	   r   ZMotionZButtonZ	ConfigureZFocusInZFocusOutZMenu)'r   r   r   r   r   r   r   charr   r   r   rX   	KEY_EVENTr   rR   r?   rA   r7   r@   rB   stater
   MOUSE_EVENTrS   rH   MOUSE_MOVEDrF   r   r    rG   WINDOW_BUFFER_SIZE_EVENTrT   r/   FOCUS_EVENTrV   rP   
MENU_EVENTrU   rM   )r   consoleinputr   r   r   r     sL   









zevent.__init__N)r"   r#   r$   r   r   r   r   r   r   r     s    r   c                 C   s   t | }|S )zGet a console handle.

    If buffer is non-zero, a new console buffer is allocated and
    installed.  Otherwise, this returns a handle to the current
    console buffer)r   )r   cr   r   r   
getconsole  s   r  c                 C   s   zt t|}|rt|tstdW n- ty   Y dS  ty)   t d}Y n ty@   tdt	j
d t  t d}Y nw t|}t|d }tt|t||d  |S )z7Wrap a Python readline so it behaves like GNU readline.zreadline must return a string.r   r  zReadline internal error)filer   r   )r   readline_hook
isinstancebytes	TypeErrorKeyboardInterruptEOFErrorBaseExceptionprintsysstderr	traceback	print_excr}   r   r   _strncpycastc_char_p)stdinstdoutpromptr   r   pr   r   r   hook_wrapper_23   s$   r$  c                 C   s@   | a tttjdd}tt	a
ttt
j}||_dS )zMSet up things for the interpreter to call
    our function like GNU readline.ZPyOS_ReadlineFunctionPointerasciiN)r  r   r   r   rd   r  	dllhandleencode
HOOKFUNC23r$  readline_refr   r   )hookZPyOS_RFPZ
func_startr   r   r   install_readline9  s   
r+  __main__c                 C   s   t tt| d@ S )N   )chr	VkKeyScanr   )r  r   r   r   r#  P  s   r#  dDr   r   zhi therezsome printed output)ru   )r   )
__future__r   r   r   r   r   r  r   r  r  Zpyreadline3.unicode_helperZunicode_helperZpyreadline3.console.ansir   r   Zpyreadline3.keysymsr	   r
   Zpyreadline3.loggerr   r   r   Zctypes.utilr   Zctypes.wintypes_ctypesr   ImportErrorr   r   r   ZENABLE_WINDOW_INPUTZENABLE_MOUSE_INPUTZENABLE_PROCESSED_INPUTZWHITEZBLACKr  r  r  r  r	  r
  ZVK_SHIFTZ
VK_CONTROLZVK_MENUr   r   r   	Structurer   r(   r.   Unionr6   r;   r>   rE   rJ   rL   rO   rQ   rW   rY   funcsr   r~   objectr   funcr   getattrwindllkernel32Z	lstrcpynAr  r  r   r   r   r   LPVOIDLPCVOIDZFARPROCPOINTERr   LPDWORDBOOLr[   HANDLEr\   r]   WORDrD   r^   c_ushortr_   r`   ra   rb   rc   	c_wchar_prd   HMODULEre   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   Zuser32Z
VkKeyScanAr/  r  	CFUNCTYPEr(  r  r)  r$  r+  r"   timer#  r  r!  r  r   r  r   r   r|   ir   qr   r   r   r   <module>   sT  	
   /






2

