
    jjc!                    Z   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ej                  rdd	lmZ dd
lmZ ddj%                  d  edd      D              z   ZdZdZ G d de      Z G d de      Z eee      Zej7                         \  ZZZZZ Z!dddZ"ddZ#ddZ$y)z"
HTML PRE-based UI implementation
    )annotationsN)str_util)ExitMainLoop)get_encoding   )AttrSpec
BaseScreen)Literal)Canvasz ???????????????????????????????? c              #  2   K   | ]  }t        |        y wN)chr).0xs     d/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/urwid/display/html_fragment.py	<genexpr>r   *   s     !AQ#a&!As          blackz
light grayc                      e Zd Zy)HtmlGeneratorSimulationErrorN)__name__
__module____qualname__     r   r   r   0   s    r   r   c                       e Zd ZU g Zded<   g Zded<   g Zded<   dZd fdZ	 	 	 d	 	 	 	 	 	 	 dd	Z	dd
Z
ddZddZd Zej                  dd       Zej                  dd       ZdddZ xZS )HtmlGeneratorztyping.ClassVar[list[str]]	fragmentsz&typing.ClassVar[list[tuple[int, int]]]sizesz typing.ClassVar[list[list[str]]]keysTc                    t         |           d| _        d| _        d| _        | j                  d t        t               y )N   FT)super__init__colorsbright_is_boldhas_underlineregister_palette_entry_default_foreground_default_background)self	__class__s    r   r&   zHtmlGenerator.__init__;   s9    #!##D*=?RSr   c                    || j                   }|| j                  }|| j                  }|| _         || _        || _        y r   )r'   r(   r)   )r-   r'   r(   r)   s       r   set_terminal_propertiesz%HtmlGenerator.set_terminal_propertiesB   sK     >[[F!!00N  ..M,*r   c                     y r   r   r-   argss     r   set_input_timeoutsz HtmlGenerator.set_input_timeoutsS       r   c                     y r   r   r2   s     r   reset_default_terminal_palettez,HtmlGenerator.reset_default_terminal_paletteV   r5   r   c           
     N   g }|\  }}|j                         |k7  rt        |      |j                  |j                  \  }}ndx}}t        |j	                               D ]  \  }}	d}
|	D ]  \  }}}|j                  t                     j                  t              }t        |t              r|}n$| j                  |   ddddd| j                        }||k(  rn|
|k  rit        j                  |dt        |            }|
|z   |kD  r |j!                  t#        ||||
z
               n|j!                  t#        ||             |
|z  }
|j!                  t#        ||              |j!                  d        | j$                  j!                  dd	j'                  |       d
       y)zkCreate an html fragment from the render object.
        Append it to HtmlGenerator.fragments list.
        Nr   r         )r   r$   X   r   
z<pre>r   z</pre>)rows
ValueErrorcursor	enumeratecontentdecoder   	translate_trans_table
isinstancer   _paletter'   r   
calc_widthlenappend	html_spanr    join)r-   sizecanvaslines_colsr=   cxcyyrowcola_csrunt_runaspec	run_widths                    r   draw_screenzHtmlGenerator.draw_screenY   s   
 t;;=D T""==$]]FBNB 01 	FAsC" :3

<>2<<\Ja*E MM!,qq-I$++-VWE7sby ( 3 3E1c%j IIY+YueR#X%FGYue%<=9$CLL5%!89:" LL)	. 	bggen%5V<=r   c                f    | j                   st        d      | j                   j                  d      S )z3Return the next screen size in HtmlGenerator.sizes.z"Ran out of screen sizes to return!r   )r!   r   pop)r-   s    r   get_cols_rowszHtmlGenerator.get_cols_rows   s(    zz./STTzz~~a  r   c                     y r   r   r-   raw_keyss     r   	get_inputzHtmlGenerator.get_input   s    @Cr   c                     y r   r   r`   s     r   rb   zHtmlGenerator.get_input   s    QTr   c                    | j                   s
t               |r| j                   j                  d      g fS | j                   j                  d      S )z9Return the next list of keypresses in HtmlGenerator.keys.r   )r"   r   r]   r`   s     r   rb   zHtmlGenerator.get_input   s?    yy. IIMM!$b))yy}}Qr   )returnNone)NNN)r'   z
int | Noner(   bool | Noner)   rg   re   rf   )r3   z
typing.Anyre   rf   )rL   ztuple[int, int]rM   r   re   rf   )ra   zLiteral[False]re   	list[str])ra   zLiteral[True]re   ztuple[list[str], list[int]])F)ra   boolre   z'list[str] | tuple[list[str], list[int]])r   r   r   r    __annotations__r!   r"   startedr&   r0   r4   r7   r[   r^   typingoverloadrb   __classcell__)r.   s   @r   r   r   4   s    ,.I).46E16-/D
*/GT "&*%)	++ $+ #	+
 
+"(>T! __C C__T T   r   r   c                    |j                         \  }}}}}}|t        t        t        }}}|t        t
        t        }}}d|d|d|d}	d|d|d|d}
|j                  r|
|	}
}	d|j                  z  d|j                  z  z   d fd}|dk\  rmt        j                   dt               |      \  }}t        j                   |t                     } ||	|
 d |        ||
|	 ||       z    ||	|
 |d        z   S  ||	|
       S )N#02xz;text-decoration:underlinez;font-weight:boldc           	     L    syd|  d|  dt        j                  |       dS )Nr   z<span style="color:z;background:z">z</span>)htmlescape)fgbgstringextrass      r   _spanzhtml_span.<locals>._span   s3    $RDRDr$++fBUAVV]^^r   r   )ru   strrv   r{   rw   r{   re   r{   )get_rgb_values_d_fg_r_d_fg_g_d_fg_b_d_bg_r_d_bg_g_d_bg_bstandout	underlineboldr   calc_text_posrH   move_next_char)ry   rY   r?   fg_rfg_gfg_bbg_rbg_gbg_bhtml_fghtml_bgrz   c_off_ignc2_offrx   s   `              @r   rJ   rJ      sA   ).)=)=)?&D$dD$|"GWDd|"GWDd$sD:d3Z0G$sD:d3Z0G~~"G(5??:=PSXS]S]=]]E_
 {,,Q3q66Bt((E3q6:'7AfuI.GWafo67GWaj12	
 '1%%r   c                   | D ]g  \  }}t        |t              st        d|      |dk  rt        d|      t        |t              st        d|      |dk  s[t        d|       |D ]E  }t        |t              st        d|      |D ]   }t        |t
              rt        d|       G ddlm}m} t        |_
        t        |_
        | t        _        |t        _        y)a  
    Replace curses_display.Screen and raw_display.Screen class with
    HtmlGenerator.

    Call this function before executing an application that uses
    curses_display.Screen to have that code use HtmlGenerator instead.

    sizes -- list of ( columns, rows ) tuples to be returned by each call
             to HtmlGenerator.get_cols_rows()
    keys -- list of lists of keys to be returned by each call to
            HtmlGenerator.get_input()

    Lists of keys may include "window resize" to force the application to
    call get_cols_rows and read a new screen size.

    For example, the following call will prepare an application to:
     1. start in 80x25 with its first call to get_cols_rows()
     2. take a screenshot when it calls draw_screen(..)
     3. simulate 5 "down" keys from get_input()
     4. take a screenshot when it calls draw_screen(..)
     5. simulate keys "a", "b", "c" and a "window resize"
     6. resize to 20x10 on its second call to get_cols_rows()
     7. take a screenshot when it calls draw_screen(..)
     8. simulate a "Q" keypress to quit the application

    screenshot_init( [ (80,25), (20,10) ],
        [ ["down"]*5, ["a","b","c","window resize"], ["Q"] ] )
    z6sizes must be list[tuple[int, int]], with values >0 : r   zkeys must be list[list[str]]: r   )cursesrawN)rE   int	TypeErrorr>   listr{   r   r   r   r   Screenr!   r"   )r!   r"   rS   rT   linekr   r   s           r   screenshot_initr      s   :  _S#s#TUXT[\]]!8UVYU\]^^#s#TUXT[\]]!8UVYU\]^^_  H$%<THEFF 	HAa%"@ FGG	HH !FMCJMMr   c                 >    t         j                  g c} t         _        | S )z/Return screenshots as a list of HTML fragments.)r   r    )r    s    r   screenshot_collectr      s    )6)@)@"&I}&r   ))ry   r{   rY   r   r?   r   re   r{   )r!   zlist[tuple[int, int]]r"   zlist[list[str]]re   rf   )re   rh   )%__doc__
__future__r   rs   rl   urwidr   urwid.event_loopr   
urwid.utilr   commonr   r	   TYPE_CHECKINGtyping_extensionsr
   r   rK   rangerD   r+   r,   	Exceptionr   r   _default_aspecr|   r}   r~   r   r   r   r   rJ   r   r   r   r   r   <module>r      s   * #    ) # (	) "''!A%C.!AAA " 	9 	a J a H -/BC9G9V9V9X 6'7GWg&<4nr   