
    
8d#                         d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZ ddZd d	lmZ ed
             Z G d dej                  Z G d dej                  ZdS )    )QtGui)qstring_length)HtmlFormatter)
RegexLexer
_TokenTypeTextError)Python3Lexer)get_style_by_namerootc              #     K   d}| j         }t          | d          rt          | j                  }nt          |          }||d                  }	 |D ]8\  }}}	 |||          }
|
r"|Ct	          |          t
          u r|||
                                fV  n || |
          D ]}|V  |
                                }|	t          |	t                    rX|	D ]T}|dk    r|
                                 |dk    r|                    |d                    ?|                    |           UnJt          |	t                    r||	d= n/|	dk    r|                    |d                    nJ d	|	z              ||d                  } nU:	 ||         d
k    r|dz  }dg}|d         }|t          d
fV  h|t          ||         fV  |dz  }n# t          $ r Y nw xY wt          |          | _        dS )a   Split ``text`` into (tokentype, text) pairs.

        Monkeypatched to store the final stack on the object itself.

        The `text` parameter this gets passed is only the current line, so to
        highlight things like multiline strings correctly, we need to retrieve
        the state from the previous line (this is done in PygmentsHighlighter,
        below), and use it to continue processing the current line.
    r   _saved_state_stack   Nz#popz#pushFzwrong state def: %r
r   )_tokenshasattrlistr   typer   groupend
isinstancetuplepopappendintr   r	   
IndexError)selftextstackpos	tokendefs
statestackstatetokensrexmatchaction	new_statemitemstates                >lib/python3.11/site-packages/qtconsole/pygments_highlighter.pyget_tokens_unprocessedr-      s      CIt)** !$122

%[[
JrN+K*+6 )	 )	'Hfis##A %F||z11!61779944444$*F4OO ' 'D"&JJJJeegg(!)U33 H%. 9 9E$ * 0 0 0 0!&'!1!1 * 1 1*R. A A A A * 1 1% 8 8 8 89 $Is33 H&yzz22"g--"))*R.9999G&;i&GGGG"+JrN";K589$$1HC"(J"+F"3KtT/)))5$s)++++q   S*V #:..Ds   (G 6G 
GG)contextmanagerc               #      K   	 t           j        } t          t           _        d V  	 | t           _        d S # 	 | t           _        w xY wN)r   r-   )origs    r,   	_lexpatchr2   P   sO      10,B
),0
))) 	,0
)0000s	   !4 Ac                   "    e Zd ZdZdZd Zd ZdS )PygmentsBlockUserDataz: Storage for the user data associated with each line.
    r   c                     |                                 D ]\  }}t          | ||           t          j                            |            d S r0   )itemssetattrr   QTextBlockUserData__init__)r   kwdskeyvalues       r,   r9   zPygmentsBlockUserData.__init__b   sO    **,, 	& 	&JCD#u%%%% ))$/////    c                 V     dg}d                      fd|D                       }d|z  S )Nsyntax_stackz, c                 :    g | ]}|d t          |          S )=)getattr).0attrr   s     r,   
<listcomp>z2PygmentsBlockUserData.__repr__.<locals>.<listcomp>i   s?     / / /# '+ddGD$,?,?,?@ / / /r=   zPygmentsBlockUserData(%s))join)r   attrsr:   s   `  r,   __repr__zPygmentsBlockUserData.__repr__g   sO     yy / / / /',/ / / 0 0*T11r=   N)__name__
__module____qualname____doc__r?   r9   rH    r=   r,   r4   r4   \   sC          L0 0 0
2 2 2 2 2r=   r4   c                   Z     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Z xZS )PygmentsHighlighterz4 Syntax highlighter that uses Pygments for parsing. Nc                    t                                          |           |                                 | _        t	          d          | _        |                     d           |	|| _        d S t                      | _        d S )NT)nowrapdefault)	superr9   document	_documentr   
_formatter	set_style_lexerr
   )r   parentlexer	__class__s      r,   r9   zPygmentsHighlighter.__init__u   sn       't444y!!!DKKK&..DKKKr=   c           	         |                                                                                                  }t                      5  ||j        | j        _        nt          | j        d          r| j        `d}| j                            |          D ]C\  }}t          |          }| 
                    |||                     |                     ||z  }Dt          | j        d          rHt          | j        j                  }|                                                      |           | j        `ddd           dS # 1 swxY w Y   dS )z$ Highlight a block of text.
        Nr   r   )r?   )currentBlockprevioususerDatar2   r?   rX   r   r   
get_tokensr   	setFormat_get_formatr4   setUserData)r   string	prev_dataindextokenr    lengthdatas           r,   highlightBlockz"PygmentsHighlighter.highlightBlock   s    %%''0022;;==	[[ 	3 	3$1:1G..&:;; 3K2 E#{55f==    t'--ufd.>.>u.E.EFFFt{$899 3,!%!?   !!##//555K2'	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   C.EE	Ec                     t          |t                    rt          |          }|| _        |                                  dS )z9 Sets the style to the specified Pygments style.
        N)r   strr   _style_clear_caches)r   styles     r,   rW   zPygmentsHighlighter.set_style   sB     eS!! 	-%e,,Er=   c                 p    | j                             |           d| _        |                                  dS )a    Sets a CSS stylesheet. The classes in the stylesheet should
        correspond to those generated by:

            pygmentize -S <style> -f html

        Note that 'set_style' and 'set_style_sheet' completely override each
        other, i.e. they cannot be used in conjunction.
        N)rU   setDefaultStyleSheetrm   rn   )r   
stylesheets     r,   set_style_sheetz#PygmentsHighlighter.set_style_sheet   s9     	++J777r=   c                 "    i | _         i | _        dS )z/ Clear caches for brushes and formats.
        N)_brushes_formats)r   s    r,   rn   z!PygmentsHighlighter._clear_caches   s     r=   c                     || j         v r| j         |         S | j        |                     || j                  }n|                     || j                  }|| j         |<   |S )z6 Returns a QTextCharFormat for token or None.
        )rv   rm   _get_format_from_documentrU   _get_format_from_style)r   rg   results      r,   rb   zPygmentsHighlighter._get_format   sg     DM!!='';33E4>JJFF00DDF%er=   c                     t          | j                            |dfg                    \  }}| j                            |           t          j        | j                                                  S )z0 Returns a QTextCharFormat for token by
        dummy)nextrV   _format_linesrU   setHtmlr   QTextCursor
charFormat)r   rg   rT   codehtmls        r,   rx   z-PygmentsHighlighter._get_format_from_document   sb     $/77%9I8JKKLL
dt$$$ 00;;===r=   c                 4   t          j                    }|                    |                                          D ][\  }}|rR|dk    r)|                    |                     |                     8|dk    r)|                    |                     |                     g|dk    r%|                    t           j        j	                   |dk    r|
                    d           |dk    r%|                    t           j        j                   |dk    r&|                    t           j        j                   |dk    r&|                    t           j        j                   1|d	k    r$|                    t           j        j                   ]|S )
zJ Returns a QTextCharFormat for token by reading a Pygments style.
        colorbgcolorbolditalicT	underlinesansromanmono)r   QTextCharFormatstyle_for_tokenr6   setForeground
_get_brushsetBackgroundsetFontWeightQFontBoldsetFontItalicsetUnderlineStyleSingleUnderlinesetFontStyleHint	SansSerifTimes
TypeWriter)r   rg   ro   rz   r;   r<   s         r,   ry   z*PygmentsHighlighter._get_format_from_style   s    &((//66<<>> 	D 	DJC D'>>(()?)?@@@@I%%(()?)?@@@@F]](()9::::H__((....K'',,-=? ? ? ?F]]++EK,ABBBBG^^++EK,=>>>>F]]++EK,BCCCr=   c                     | j                             |          }|3|                     |          }t          j        |          }|| j         |<   |S )z( Returns a brush for the color.
        )ru   get
_get_colorr   QBrush)r   r   rz   qcolors       r,   r   zPygmentsHighlighter._get_brush   sO     ""5))>__U++F\&))F#)DM% r=   c           	          t          j                    }|                    t          |dd         d          t          |dd         d          t          |dd         d                     |S )z> Returns a QColor built from a Pygments color string.
        N      )base      )r   QColorsetRgbr   )r   r   r   s      r,   r   zPygmentsHighlighter._get_color   ss     c%)"---%!*2...%!*2...	0 	0 	0 r=   r0   )rI   rJ   rK   rL   r9   rj   rW   rs   rn   rb   rx   ry   r   r   __classcell__)r[   s   @r,   rO   rO   n   s        >>	) 	) 	) 	) 	) 	)3 3 3:    "    > > >  2        r=   rO   N)r   )qtpyr   qtconsole.qstringhelpersr   pygments.formatters.htmlr   pygments.lexerr   r   r   r	   pygments.lexersr
   pygments.stylesr   r-   
contextlibr.   r2   r8   r4   QSyntaxHighlighterrO   rM   r=   r,   <module>r      s7         3 3 3 3 3 3 2 2 2 2 2 2 > > > > > > > > > > > > ( ( ( ( ( ( - - - - - -</ </ </ </@ & % % % % % 1 1 12 2 2 2 2E4 2 2 2$M M M M M%2 M M M M Mr=   