
    \
j3                     :   d Z ddlZddlmZ ddlmZ ddlZddlmZ d Z	i d e	d          d e	d	          d
 e	d          d e	d          d e	d          d e	d          d e	d          d e	d          d e	d          d e	d          d e	d          d e	d          d e	d          d e	d           d! e	d"          d# e	d$          Z
d% Z ej        d&ej                  Zd'd(gZg d)Zg d*Z G d+ d,eej                  ZdS )-a  Decode HTML into attributed text.

A subset of HTML 4.01 Transitional is implemented.  The following elements are
supported fully::

    B BLOCKQUOTE BR CENTER CODE DD DIR DL EM FONT H1 H2 H3 H4 H5 H6 I IMG KBD
    LI MENU OL P PRE Q SAMP STRONG SUB SUP TT U UL VAR 

The mark (bullet or number) of a list item is separated from the body of the
list item with a tab, as the pyglet document model does not allow
out-of-stream text.  This means lists display as expected, but behave a little
oddly if edited.

No CSS styling is supported.
    N)
HTMLParser)entities)
structuredc                 ,    | dz	  dz  | dz	  dz  | dz  dgS )N          )vals    R/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/text/formats/html.py
_hex_colorr   =   s'    BY$T 13:sCC    blacksilveri grayi whitei marooni   redi   purplei  fucsiai   greeni   limei  olivei  yellownavy   bluer   teali  aquai  c                     |                      d          r%t          t          | dd          d                    S 	 t          |                                          S # t
          $ r t                      w xY w)N#   r   )
startswithr   int_color_nameslowerKeyError
ValueError)values    r   _parse_colorr*   U   su     #eABBi,,---	.. 	 	 	,,	s   A A4u   [ 	​
]+headtitle)ph1h2h3h4h5h6uloldirmenupredldivcenternoscriptnoframes
blockquoteformisindexhrtablefieldsetaddresslidddt)
_top_blockbodyr:   r;   objectappletr>   insdelrF   rE   r?   rC   buttonthtdiframer<   r=   r4   r5   r6   r7   r9   c                   f    e Zd ZdZddddddZdddd	d
dddZd Zd Zd Zd Z	d Z
d Zd Zd ZdS )HTMLDecoderz Decoder for HTML documents.
    zTimes New Roman   12ptF)	font_name	font_sizemargin_bottombolditalicr	   
            0   )r"                     c                 Z   || _         dg| _        | j                            t	          j        i                      d| _        d| _        d| _        dg| _	        d| _
        d| _        |                     d| j                   |                     |           |                                  d S )Nra   TFrH   _default)location_font_size_stack
list_stackappendr   UnorderedListBuilderstrip_leading_spaceblock_beginneed_block_beginelement_stackin_metadatain_pre
push_styledefault_stylefeedclose)selftextrh   s      r   decode_structuredzHTMLDecoder.decode_structured   s     !"z>rBBCCC#'  %*^ 
D$6777		$

r   c                 t    t           j                            || j                            |                    S )N)file)pygletimageloadrh   open)rw   filenames     r   	get_imagezHTMLDecoder.get_image   s-    |  0B0B80L0L MMMr   c                 ^    | j         r%|                     d           d| _        d| _         d S d S )N
TF)ro   add_textrn   )rw   s    r   prepare_for_datazHTMLDecoder.prepare_for_data   s?      	*MM$#D$)D!!!	* 	*r   c                    | j         rd S | j        r|                     |           d S t                              d|          }|                                rR|                                  | j        s| j        r|	                                }d| _        |                     |           |
                    d          | _        d S )N F)rq   rr   r   _whitespace_resubstripr   rn   rm   lstripendswith)rw   datas     r   handle_datazHTMLDecoder.handle_data   s     	F; 
	:MM$!%%c400Dzz|| $%%'''# -t'? -;;==D',D$d###'+}}S'9'9D$$$r   c                    | j         rd S |                                }i }|D ]\  }}|||                                <   |t          v rd| _         n{|t          v rr| j        d         t
          vr4|                     | j        d                    | j        d         t
          v4| j        s#|                     d           d| _        d| _	        | j        
                    |           i }|dv rd|d<   n|dv rd|d<   n|d	v rd
|d<   n|dk    r'| j                            d          }|g d}||d<   nx|dk    r`d|v r|d                             d          |d<   d|v r|d         }		 |	                    d          r&| j        d         t!          |	dd                    z   }	nJ|	                    d          r&| j        d         t!          |	dd                    z
  }	nt!          |	          }	n# t"          $ r d}	Y nw xY w| j        
                    |	           |	| j        v r| j                            |	d          |d<   n%| j        
                    | j        d                    d|v r,	 t'          |d                   |d<   n$# t"          $ r Y nw xY wn|dk    r5| j        d         dz
  }	| j                            |	d          |d<   d|d<   n|dk    r5| j        d         dz
  }	| j                            |	d          |d<   d|d<   n|dk    rd|d<   d|d<   d |d!<   n|d"k    rd#|d<   d|d<   nr|d$k    rd%|d<   d|d<   n`|d&k    rd'|d<   d|d<   nN|d(k    rd)|d<   d|d<   n<|d*k    rd)|d<   d|d<   n*|d+k    r|                     d,           d| _        n|d-k    r$|                    d!          d.v r|d!         |d!<   n|d k    rd |d!<   n|d/k    rd
|d<   d0|d1<   d| _        n|d2k    rJ| j                            d3          pd0}
| j                            d4          pd0}|
d5z   |d3<   |d5z   |d4<   nf|d6k    r|                     d7           nI|d8k    r	 t!          |                    d9d                    }n# t"          $ r d}Y nw xY w|                    d:d;          d<z   }t/          j        ||          }|                    | |           | j        
                    |           n|d=v r|                    d:d>                                          }|d?k    rd@}n|dAk    rdB}ndC}t/          j        |          }|                    | |           | j        
                    |           n&|dDk    r)| j        d                             | |           d| _        n|dEk    rd0|d1<   n|dFk    r%| j                            d3          pd0}
|
dGz   |d3<   n|dHk    r|                     |                    dI                    }|r|                    dJ          }|rt!          |          }|                    dK          }|rt!          |          }|                                  |                     t/          j         |||                     d| _        | !                    ||           d S )LNTr   F)bstrongrY   )iemvarrZ   )ttcodesampkbdzCourier NewrV   ucolor)r   r   r   r   	underlinefontface,size+r"   -ra   rW   sup3ptbaseliner   z-3ptr.   r^   r;   alignr/   r]   r0   r   r1   r\   r2   rT   r3   bru    r-   )leftr;   rightr8   r   rX   r>   margin_leftmargin_right<   qu   “r5   starttype1.)r4   r6   r7   disccircleu   ○squareu   □u   ●rE   r9   rF      imgsrcwidthheight)"rq   r&   _metadata_elements_block_elementsrp   _block_containershandle_endtagrn   r   ro   rk   current_stylegetsplitr#   ri   r$   r(   
font_sizesr*   rm   rr   r   r   OrderedListBuilderbeginrj   rl   itemr   r   add_elementImageElementrs   )rw   tag
case_attrselementattrskeyr)   styler   r   left_marginright_marginr   formatbuilderr   markr}   r   r   s                       r   handle_starttagzHTMLDecoder.handle_starttag   s    	F))++$ 	' 	'JC!&E#))++(((#D''$R(0AAA""4#5b#9::: $R(0AAA# .d####' (-%!!'***o%% E&MM***"E(OO555!.E+^^&**733E}&!&E+%*6]%8%8%=%=k"V}s++ )#4R83tABBx==H-- )#4R83tABBx==H"4yy!   DDD%,,T2224?**)-)<)<T1)E)EE+&%,,T-B2-FGGG%%1%.%A%AE'NN!   D  
 (,q0D!%!4!4T1!=!=E+ %E*(,q0D!%!4!4T1!=!=E+ &E*__!#E+ E&M%E'NN__!#E+ E&MM__!#E+ E&MM__!#E+ E&MM__!#E+ E&MM__!#E+"E(OO__MM)$$$'+D$$^^yy!!%@@@!&wg  %E'NN!.E+%&E/"DKK$$,00??D1K-11.AAFQL#.#3E- $02$5E.!!^^Y''''__EIIgq1122   YYvs++c1F 3E6BBGMM$&&&O""7++++---99VV,,2244Dx !!   5d;;GMM$&&&O""7++++__OB$$T5111'+D$$__%&E/""__,00??D1K#.#3E-  NN599U#3#344E 	1		'** 'JJE8,, ) [[F%%'''  !8v!N!NOOO+0('''''s7   +BG1 1H ?H /J	 	
JJ+#R RRc                 p   |                                 }|| j        vrd S |                     |           | j                                        |k    r	 | j                                        |k    |t          v rd| _        n|t          v rd| _        d| _        |dk    r3t          | j
                  dk    r| j
                                         d S |dk    r	d| _        d S |dk    r|                     d           d S |dv r3t          | j                  dk    r| j                                         d S d S d S )	NFTr   r"   r8   r   u   ”)r4   r5   )r&   rp   	pop_stylepopr   rq   r   rn   ro   lenri   rr   r   rj   )rw   r   r   s      r   r   zHTMLDecoder.handle_endtagJ  s]   ))++$,,,Fw $$&&'11  $$&&'11 ((($D''$D$(D!fT%:!;!;a!?!?!%%'''''DKKK^^Y'''''$$4?##a''##%%%%% %$''r   c                     |t           j        v r4|                     t          t           j        |                              d S d S )N)r   name2codepointr   chrrw   names     r   handle_entityrefzHTMLDecoder.handle_entityrefc  sB    8***S!8!>??@@@@@ +*r   c           	      N   |                                 }	 |                    d          r:|                     t          t	          |dd          d                               d S |                     t          t	          |                               d S # t
          $ r Y d S w xY w)Nxr"   r   )r&   r#   r   r   r$   r(   r   s     r   handle_charrefzHTMLDecoder.handle_charrefg  s    zz||	s## 1  Sabb2%6%6!7!788888  SYY00000 	 	 	DD	s   AB %/B 
B$#B$N)__name__
__module____qualname____doc__rt   r   ry   r   r   r   r   r   r   r   r
   r   r   rS   rS   t   s          ' M  J   N N N* * *: : : P( P( P(d& & &2A A A    r   rS   )r   rehtml.parserr   htmlr   r|   pyglet.text.formatsr   r   r%   r*   compileDOTALLr   r   r   r   StructuredTextDecoderrS   r
   r   r   <module>r      sg  H   
			 " " " " " "        * * * * * *D D DZZ!!jj"" JJx   ZZ!!	
 jj"" 
::h jj"" jj"" ZZ!! JJx   ZZ!! jj"" JJx   JJx   JJx    JJx  !(   >	JJg& ' ' '6 6 6 { { { { {*j> { { { { {r   