o
    Ëý°jÁ|  ã                   @   sÀ  d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZmZmZmZmZmZ ddlmZ g d¢Zg d	¢Zed
d„ ƒZG dd„ deƒZG dd„ ded�ZG dd„ deƒZG dd„ deƒZ G dd„ dƒZ!e!ƒ Z"G dd„ de#ƒZ$G dd„ dƒZ%dd„ Z&G dd„ dƒZ'e'ƒ 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e,d�Z-G d)d*„ d*ƒZ.G d+d,„ d,e-ƒZ/d-d.„ Z0G d/d0„ d0e,ƒZ1G d1d2„ d2e-e1d�Z2dS )3z´
    pygments.lexer
    ~~~~~~~~~~~~~~

    Base lexer classes.

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Úapply_filtersÚFilter)Úget_filter_by_name)ÚErrorÚTextÚOtherÚ
_TokenType)Úget_bool_optÚget_int_optÚget_list_optÚmake_analysatorÚFutureÚguess_decode)Ú	regex_opt)ÚLexerÚ
RegexLexerÚExtendedRegexLexerÚDelegatingLexerÚLexerContextÚincludeÚinheritÚbygroupsÚusingÚthisÚdefaultÚwords))s   ï»¿úutf-8)s   ÿþ  zutf-32)s     þÿzutf-32be)s   ÿþzutf-16)s   þÿzutf-16bec                 C   ó   dS )Nç        © ©Úxr   r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/pygments/lexer.pyÚ<lambda>!   ó    r#   c                   @   ó   e Zd ZdZdd„ ZdS )Ú	LexerMetaz‚
    This metaclass automagically converts ``analyse_text`` methods into
    static methods which always return float values.
    c                 C   s(   d|v rt |d ƒ|d< t | |||¡S )NÚanalyse_text)r   ÚtypeÚ__new__)ÚmcsÚnameÚbasesÚdr   r   r"   r)   *   s   zLexerMeta.__new__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r   r   r   r"   r&   $   s    r&   c                   @   sZ   e Zd ZdZdZg Zg Zg Zg ZdZ	dd„ Z
dd„ Zdd	„ Zd
d„ Zddd„Zdd„ ZdS )r   aÈ  
    Lexer for a specific language.

    Basic options recognized:
    ``stripnl``
        Strip leading and trailing newlines from the input (default: True).
    ``stripall``
        Strip all leading and trailing whitespace from the input
        (default: False).
    ``ensurenl``
        Make sure that the input ends with a newline (default: True).  This
        is required for some lexers that consume input linewise.

        .. versionadded:: 1.3

    ``tabsize``
        If given and greater than 0, expand tabs in the input (default: 0).
    ``encoding``
        If given, must be an encoding name. This encoding will be used to
        convert the input string to Unicode, if it is not already a Unicode
        string (default: ``'guess'``, which uses a simple UTF-8 / Locale /
        Latin1 detection.  Can also be ``'chardet'`` to use the chardet
        library, if it is installed.
    ``inencoding``
        Overrides the ``encoding`` if given.
    Nr   c                 K   s„   || _ t|ddƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _| dd	¡| _| d
¡p-| j| _g | _	t
|ddƒD ]}|  |¡ q8d S )NÚstripnlTÚstripallFÚensurenlÚtabsizer   ÚencodingÚguessÚ
inencodingÚfiltersr   )Úoptionsr	   r2   r3   r4   r
   r5   Úgetr6   r9   r   Ú
add_filter)Úselfr:   Úfilter_r   r   r"   Ú__init__^   s   ÿzLexer.__init__c                 C   s$   | j rd| jj| j f S d| jj S )Nz<pygments.lexers.%s with %r>z<pygments.lexers.%s>)r:   Ú	__class__r.   ©r=   r   r   r"   Ú__repr__j   s
   ÿzLexer.__repr__c                 K   s*   t |tƒst|fi |¤Ž}| j |¡ dS )z8
        Add a new stream filter to this lexer.
        N)Ú
isinstancer   r   r9   Úappend)r=   r>   r:   r   r   r"   r<   q   s   
zLexer.add_filterc                 C   r   )a~  
        Has to return a float between ``0`` and ``1`` that indicates
        if a lexer wants to highlight this text. Used by ``guess_lexer``.
        If this method returns ``0`` it won't highlight it in any case, if
        it returns ``1`` highlighting with this lexer is guaranteed.

        The `LexerMeta` metaclass automatically wraps this function so
        that it works like a static method (no ``self`` or ``cls``
        parameter) and the return value is automatically converted to
        `float`. If the return value is an object that is boolean `False`
        it's the same as if the return values was ``0.0``.
        Nr   )Útextr   r   r"   r'   y   r$   zLexer.analyse_textFc              
      s   t ˆtƒs{ˆ jdkrtˆƒ\‰}nwˆ jdkrgzddlm} W n ty/ } ztdƒ|‚d}~ww d}tD ]\}}ˆ |¡rKˆt	|ƒd…  
|d¡} nq4|du rd| ˆdd… ¡}	ˆ 
|	 d	¡pad
d¡}|‰n!ˆ 
ˆ j¡‰ˆ d¡rzˆt	dƒd… ‰nˆ d¡rˆˆt	dƒd… ‰ˆ dd¡‰ˆ dd¡‰ˆ jrœˆ ¡ ‰nˆ jr¤ˆ d¡‰ˆ jdkr¯ˆ ˆ j¡‰ˆ jr»ˆ d¡s»ˆd7 ‰‡ ‡fdd„}
|
ƒ }|sÎt|ˆ jˆ ƒ}|S )a=  
        Return an iterable of (tokentype, value) pairs generated from
        `text`. If `unfiltered` is set to `True`, the filtering mechanism
        is bypassed even if filters are defined.

        Also preprocess the text, i.e. expand tabs and strip it if
        wanted and applies registered filters.
        r7   Úchardetr   )rF   zkTo enable chardet encoding guessing, please install the chardet library from http://chardet.feedparser.org/NÚreplacei   r6   r   u   ï»¿z
Ú
úc                  3   s&   � ˆ   ˆ¡D ]
\} }}||fV  qd S ©N)Úget_tokens_unprocessed)Ú_ÚtÚv©r=   rE   r   r"   Ústreamerº   s   €ÿz"Lexer.get_tokens.<locals>.streamer)rC   Ústrr6   r   Úpip._vendorrF   ÚImportErrorÚ_encoding_mapÚ
startswithÚlenÚdecodeÚdetectr;   rG   r3   Ústripr2   r5   Ú
expandtabsr4   Úendswithr   r9   )r=   rE   Ú
unfilteredrL   rF   ÚeÚdecodedÚbomr6   ÚencrP   Ústreamr   rO   r"   Ú
get_tokens‡   sZ   
	

þ€ÿ
þÿ
€



zLexer.get_tokensc                 C   s   t ‚)zú
        Return an iterable of (index, tokentype, value) pairs where "index"
        is the starting position of the token within the input text.

        In subclasses, implement this method as a generator to
        maximize effectiveness.
        )ÚNotImplementedErrorrO   r   r   r"   rK   Â   s   zLexer.get_tokens_unprocessed)F)r.   r/   r0   r1   r+   ÚaliasesÚ	filenamesÚalias_filenamesÚ	mimetypesÚpriorityr?   rB   r<   r'   rb   rK   r   r   r   r"   r   0   s    
;r   )Ú	metaclassc                   @   s$   e Zd ZdZefdd„Zdd„ ZdS )r   a   
    This lexer takes two lexer as arguments. A root lexer and
    a language lexer. First everything is scanned using the language
    lexer, afterwards all ``Other`` tokens are lexed using the root
    lexer.

    The lexers from the ``template`` lexer package use this base lexer.
    c                 K   s<   |di |¤Ž| _ |di |¤Ž| _|| _tj| fi |¤Ž d S ©Nr   )Ú
root_lexerÚlanguage_lexerÚneedler   r?   )r=   Ú_root_lexerÚ_language_lexerÚ_needler:   r   r   r"   r?   ×   s   zDelegatingLexer.__init__c                 C   sŠ   d}g }g }| j  |¡D ]$\}}}|| ju r(|r#| t|ƒ|f¡ g }||7 }q| |||f¡ q|r<| t|ƒ|f¡ t|| j |¡ƒS )NÚ )rl   rK   rm   rD   rV   Údo_insertionsrk   )r=   rE   ÚbufferedÚ
insertionsÚ
lng_bufferÚirM   rN   r   r   r"   rK   Ý   s   


ÿz&DelegatingLexer.get_tokens_unprocessedN)r.   r/   r0   r1   r   r?   rK   r   r   r   r"   r   Í   s    	r   c                   @   ó   e Zd ZdZdS )r   zI
    Indicates that a state should include rules from another state.
    N©r.   r/   r0   r1   r   r   r   r"   r   ô   s    r   c                   @   r%   )Ú_inheritzC
    Indicates the a state should inherit from its superclass.
    c                 C   r   )Nr   r   rA   r   r   r"   rB   ÿ   ó   z_inherit.__repr__N)r.   r/   r0   r1   rB   r   r   r   r"   ry   û   s    ry   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Úcombinedz:
    Indicates a state combined from multiple states.
    c                 G   s   t  | |¡S rJ   )Útupler)   )ÚclsÚargsr   r   r"   r)   
  s   zcombined.__new__c                 G   s   d S rJ   r   )r=   r~   r   r   r"   r?     s   zcombined.__init__N)r.   r/   r0   r1   r)   r?   r   r   r   r"   r{     s    r{   c                   @   sF   e Zd ZdZdd„ Zddd„Zddd„Zdd	d
„Zdd„ Zdd„ Z	dS )Ú_PseudoMatchz:
    A pseudo match object constructed from a string.
    c                 C   s   || _ || _d S rJ   )Ú_textÚ_start)r=   ÚstartrE   r   r   r"   r?     s   
z_PseudoMatch.__init__Nc                 C   s   | j S rJ   )r�   ©r=   Úargr   r   r"   r‚     s   z_PseudoMatch.startc                 C   s   | j t| jƒ S rJ   )r�   rV   r€   rƒ   r   r   r"   Úend  s   z_PseudoMatch.endc                 C   s   |rt dƒ‚| jS )NzNo such group)Ú
IndexErrorr€   rƒ   r   r   r"   Úgroup!  s   z_PseudoMatch.groupc                 C   s   | j fS rJ   )r€   rA   r   r   r"   Úgroups&  s   z_PseudoMatch.groupsc                 C   s   i S rJ   r   rA   r   r   r"   Ú	groupdict)  rz   z_PseudoMatch.groupdictrJ   )
r.   r/   r0   r1   r?   r‚   r…   r‡   rˆ   r‰   r   r   r   r"   r     s    


r   c                     s   d‡ fdd„	}|S )zL
    Callback that yields multiple actions for each group in the match.
    Nc                 3   sÀ   � t ˆ ƒD ]O\}}|d u rqt|ƒtu r)| |d ¡}|r(| |d ¡||fV  q| |d ¡}|d urT|r>| |d ¡|_|| t| |d ¡|ƒ|ƒD ]}|rS|V  qLq|r^| ¡ |_d S d S )Né   )Ú	enumerater(   r   r‡   r‚   Úposr   r…   )ÚlexerÚmatchÚctxrv   ÚactionÚdataÚitem©r~   r   r"   Úcallback1  s,   €€ÿ€ÿzbygroups.<locals>.callbackrJ   r   )r~   r”   r   r“   r"   r   -  s   r   c                   @   rw   )Ú_ThiszX
    Special singleton used for indicating the caller class.
    Used by ``using``.
    Nrx   r   r   r   r"   r•   G  s    r•   c                    sl   i ‰dˆv rˆ  d¡}t|ttfƒr|ˆd< nd|fˆd< ˆ tu r+d‡‡fdd„	}|S d‡ ‡‡fdd„	}|S )	aÂ  
    Callback that processes the match with a different lexer.

    The keyword arguments are forwarded to the lexer, except `state` which
    is handled separately.

    `state` specifies the state that the new lexer will start in, and can
    be an enumerable such as ('root', 'inline', 'string') or a simple
    string which is assumed to be on top of the root state.

    Note: For that to work, `_other` must not be an `ExtendedRegexLexer`.
    ÚstateÚstackÚrootNc                 3   sx   � ˆrˆ  | j¡ | jdi ˆ¤Ž}n| }| ¡ }|j| ¡ fi ˆ ¤ŽD ]\}}}|| ||fV  q#|r:| ¡ |_d S d S rj   )Úupdater:   r@   r‚   rK   r‡   r…   rŒ   ©r�   rŽ   r�   ÚlxÚsrv   rM   rN   )Ú	gt_kwargsÚkwargsr   r"   r”   f  s   € ÿzusing.<locals>.callbackc                 3   sl   � ˆ  | j¡ ˆ di ˆ¤Ž}| ¡ }|j| ¡ fi ˆ¤ŽD ]\}}}|| ||fV  q|r4| ¡ |_d S d S rj   )r™   r:   r‚   rK   r‡   r…   rŒ   rš   ©Ú_otherr�   rž   r   r"   r”   u  s   € ÿrJ   )ÚpoprC   Úlistr|   r   )r    rž   rœ   r”   r   rŸ   r"   r   P  s   

ö
r   c                   @   r%   )r   zÑ
    Indicates a state or state action (e.g. #pop) to apply.
    For example default('#pop') is equivalent to ('', Token, '#pop')
    Note that state tuples may be used as well.

    .. versionadded:: 2.0
    c                 C   s
   || _ d S rJ   )r–   )r=   r–   r   r   r"   r?   Š  s   
zdefault.__init__N)r.   r/   r0   r1   r?   r   r   r   r"   r   ‚  s    r   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	r   z•
    Indicates a list of literal words that is transformed into an optimized
    regex that matches any of the words.

    .. versionadded:: 2.0
    rq   c                 C   s   || _ || _|| _d S rJ   )r   ÚprefixÚsuffix)r=   r   r£   r¤   r   r   r"   r?   •  s   
zwords.__init__c                 C   s   t | j| j| jd�S )N©r£   r¤   )r   r   r£   r¤   rA   r   r   r"   r;   š  s   z	words.getN)rq   rq   )r.   r/   r0   r1   r?   r;   r   r   r   r"   r   Ž  s    
r   c                   @   sJ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zddd„Zdd„ Z	dd„ Z
d
S )ÚRegexLexerMetazw
    Metaclass for RegexLexer, creates the self._tokens attribute from
    self.tokens on the first instantiation.
    c                 C   s    t |tƒr	| ¡ }t ||¡jS )zBPreprocess the regular expression component of a token definition.)rC   r   r;   ÚreÚcompilerŽ   )r}   ÚregexÚrflagsr–   r   r   r"   Ú_process_regex¤  s   
zRegexLexerMeta._process_regexc                 C   s&   t |ƒtu st|ƒsJ d|f ƒ‚|S )z5Preprocess the token component of a token definition.z2token type must be simple type or callable, not %r)r(   r   Úcallable)r}   Útokenr   r   r"   Ú_process_tokenª  s   ÿzRegexLexerMeta._process_tokenc                 C   s  t |tƒr/|dkrdS ||v r|fS |dkr|S |dd… dkr)t|dd… ƒ S J d| ƒ‚t |tƒrbd	| j }|  jd
7  _g }|D ]}||ksPJ d| ƒ‚| |  |||¡¡ qD|||< |fS t |tƒr||D ]}||v sy|dv syJ d| ƒ‚qi|S J d| ƒ‚)z=Preprocess the state transition action of a token definition.ú#popéÿÿÿÿú#pushNé   z#pop:Fzunknown new state %rz_tmp_%drŠ   zcircular state ref %r)r¯   r±   zunknown new state zunknown new state def %r)rC   rQ   Úintr{   Ú_tmpnameÚextendÚ_process_stater|   )r}   Ú	new_stateÚunprocessedÚ	processedÚ	tmp_stateÚitokensÚistater   r   r"   Ú_process_new_state°  s<   



ÿ

ÿ€z!RegexLexerMeta._process_new_statec                 C   s€  t |ƒtu sJ d| ƒ‚|d dksJ d| ƒ‚||v r || S g  }||< | j}|| D ]�}t|tƒrK||ks>J d| ƒ‚| |  ||t|ƒ¡¡ q-t|tƒrQq-t|tƒrk|  	|j
||¡}| t d¡jd|f¡ q-t |ƒtu swJ d| ƒ‚z|  |d ||¡}W n ty› }	 ztd	|d || |	f ƒ|	‚d}	~	ww |  |d
 ¡}
t|ƒdkr¬d}n	|  	|d ||¡}| ||
|f¡ q-|S )z%Preprocess a single state definition.zwrong state name %rr   ú#zinvalid state name %rzcircular state reference %rrq   Nzwrong rule def %rz+uncompilable regex %r in state %r of %r: %srŠ   é   )r(   rQ   ÚflagsrC   r   rµ   r¶   ry   r   r½   r–   rD   r§   r¨   rŽ   r|   r«   Ú	ExceptionÚ
ValueErrorr®   rV   )r}   r¸   r¹   r–   Útokensrª   Útdefr·   ÚrexÚerrr­   r   r   r"   r¶   Ó  sL   
ÿ

ÿÿ€ÿ
ÿzRegexLexerMeta._process_stateNc                 C   s<   i  }| j |< |p| j| }t|ƒD ]	}|  |||¡ q|S )z-Preprocess a dictionary of token definitions.)Ú_all_tokensrÃ   r¢   r¶   )r}   r+   Ú	tokendefsr¹   r–   r   r   r"   Úprocess_tokendefÿ  s
   zRegexLexerMeta.process_tokendefc           
   
   C   sÒ   i }i }| j D ]_}|j di ¡}| ¡ D ]Q\}}| |¡}|du r;|||< z| t¡}W n	 ty5   Y qw |||< q| |d¡}|du rFq||||d …< z| t¡}	W n	 ty^   Y qw ||	 ||< qq|S )a  
        Merge tokens from superclasses in MRO order, returning a single tokendef
        dictionary.

        Any state that is not defined by a subclass will be inherited
        automatically.  States that *are* defined by subclasses will, by
        default, override that state in the superclass.  If a subclass wishes to
        inherit definitions from a superclass, it can use the special value
        "inherit", which will cause the superclass' state definition to be
        included at that point in the state.
        rÃ   NrŠ   )Ú__mro__Ú__dict__r;   ÚitemsÚindexr   rÂ   r¡   )
r}   rÃ   ÚinheritableÚcÚtoksr–   rÌ   ÚcuritemsÚinherit_ndxÚnew_inh_ndxr   r   r"   Úget_tokendefs  s6   

ÿÿäzRegexLexerMeta.get_tokendefsc                 O   sR   d| j vri | _d| _t| dƒr| jrn	|  d|  ¡ ¡| _tj	| g|¢R i |¤ŽS )z:Instantiate cls after preprocessing its token definitions.Ú_tokensr   Útoken_variantsrq   )
rË   rÇ   r´   ÚhasattrrÖ   rÉ   rÔ   rÕ   r(   Ú__call__)r}   r~   Úkwdsr   r   r"   rØ   8  s   
zRegexLexerMeta.__call__rJ   )r.   r/   r0   r1   r«   r®   r½   r¶   rÉ   rÔ   rØ   r   r   r   r"   r¦   ž  s    #
,1r¦   c                   @   s$   e Zd ZdZejZi Zddd„ZdS )r   z±
    Base for simple stateful regular expression-based lexers.
    Simplifies the lexing process so that you need only
    provide a list of states and regular expressions.
    ©r˜   c                 c   s¨  � d}| j }t|ƒ}||d  }	 |D ]�\}}}	|||ƒ}
|
r |dur:t|ƒtu r2|||
 ¡ fV  n|| |
ƒE dH  |
 ¡ }|	duržt|	tƒrm|	D ]"}|dkrZt|ƒdkrY| 	¡  qI|dkrf| 
|d ¡ qI| 
|¡ qIn+t|	tƒr†t|	ƒt|ƒkr€|dd…= n||	d…= n|	dkr’| 
|d ¡ nJ d|	 ƒ‚||d  } n3qz'|| d	kr»d
g}|d
 }|td	fV  |d7 }W q|t|| fV  |d7 }W n
 tyÒ   Y dS w q)z}
        Split ``text`` into (tokentype, text) pairs.

        ``stack`` is the inital stack (default: ``['root']``)
        r   r°   rŠ   Nr¯   r±   Fúwrong state def: %rrH   r˜   )rÕ   r¢   r(   r   r‡   r…   rC   r|   rV   r¡   rD   r³   Úabsr   r   r†   )r=   rE   r—   rŒ   rÈ   Ú
statestackÚstatetokensÚrexmatchr�   r·   Úmr–   r   r   r"   rK   i  s`   €

€ù
á#ÿÐz!RegexLexer.get_tokens_unprocessedN©rÚ   )	r.   r/   r0   r1   r§   Ú	MULTILINErÀ   rÃ   rK   r   r   r   r"   r   F  s
    r   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )r   z9
    A helper object that holds lexer position data.
    Nc                 C   s*   || _ || _|pt|ƒ| _|pdg| _d S )Nr˜   )rE   rŒ   rV   r…   r—   )r=   rE   rŒ   r—   r…   r   r   r"   r?   ¬  s   zLexerContext.__init__c                 C   s   d| j | j| jf S )NzLexerContext(%r, %r, %r))rE   rŒ   r—   rA   r   r   r"   rB   ²  s   ÿzLexerContext.__repr__©NN)r.   r/   r0   r1   r?   rB   r   r   r   r"   r   §  s    
r   c                   @   s   e Zd ZdZddd„ZdS )r   zE
    A RegexLexer that uses a context object to store its state.
    Nc                 c   s  � | j }|st|dƒ}|d }n|}||jd  }|j}	 |D ]§\}}}|||j|jƒ}	|	rÆ|durYt|ƒtu rG|j||	 ¡ fV  |	 ¡ |_n|| |	|ƒE dH  |sY||jd  }|durÄt	|t
ƒr�|D ]'}
|
dkrwt|jƒdkrv|j ¡  qd|
dkr…|j |jd ¡ qd|j |
¡ qdn0t	|tƒr©t|ƒt|jƒkr¢|jdd…= n|j|d…= n|dkr·|j |jd ¡ nJ d	| ƒ‚||jd  } nHqz;|j|jkrÑW dS ||j d
krðdg|_|d }|jtd
fV  | jd7  _W q|jt||j fV  | jd7  _W n t�y   Y dS w q)z
        Split ``text`` into (tokentype, text) pairs.
        If ``context`` is given, use this lexer context instead.
        r   r˜   r°   rŠ   Nr¯   r±   FrÛ   rH   )rÕ   r   r—   rE   rŒ   r…   r(   r   r‡   rC   r|   rV   r¡   rD   r³   rÜ   r–   r   r   r†   )r=   rE   ÚcontextrÈ   r�   rÞ   rß   r�   r·   rà   r–   r   r   r"   rK   ¼  sn   €



€ù
ß#ÿÎz)ExtendedRegexLexer.get_tokens_unprocessedrã   )r.   r/   r0   r1   rK   r   r   r   r"   r   ·  s    r   c              	   c   s¨  � t | ƒ} zt| ƒ\}}W n ty   |E dH  Y dS w d}d}|D ]{\}}}|du r.|}d}	|r†|t|ƒ |kr†||	|| … }
|
rP|||
fV  |t|
ƒ7 }|D ]\}}}|||fV  |t|ƒ7 }qR|| }	zt| ƒ\}}W n ty{   d}Y nw |r†|t|ƒ |ks:|	t|ƒk rž||||	d… fV  |t|ƒ|	 7 }q#|rÒ|p¤d}|D ]\}}}|||fV  |t|ƒ7 }q§zt| ƒ\}}W n tyÍ   d}Y dS w |s¡dS dS )ag  
    Helper for lexers which must combine the results of several
    sublexers.

    ``insertions`` is a list of ``(index, itokens)`` pairs.
    Each ``itokens`` iterable should be inserted at position
    ``index`` into the token stream given by the ``tokens``
    argument.

    The result is a combined token stream.

    TODO: clean up the code here.
    NTr   F)ÚiterÚnextÚStopIterationrV   )rt   rÃ   rÍ   r»   ÚrealposÚinsleftrv   rM   rN   ÚoldiÚtmpvalÚit_indexÚit_tokenÚit_valueÚpr   r   r"   rr   ÿ  s\   €
ýþõ€þørr   c                   @   r%   )ÚProfilingRegexLexerMetaz>Metaclass for ProfilingRegexLexer, collects regex timing info.c                    sL   t |tƒrt|j|j|jd�‰n|‰t ˆ|¡‰tjf‡ ‡‡‡fdd„	}|S )Nr¥   c                    s`   ˆ j d  ˆˆfddg¡}t ¡ }ˆ | ||¡}t ¡ }|d  d7  < |d  || 7  < |S )Nr°   r   r   rŠ   )Ú
_prof_dataÚ
setdefaultÚtimerŽ   )rE   rŒ   ÚendposÚinfoÚt0ÚresÚt1©r}   ÚcompiledrÅ   r–   r   r"   Ú
match_funcJ  s   z:ProfilingRegexLexerMeta._process_regex.<locals>.match_func)	rC   r   r   r£   r¤   r§   r¨   ÚsysÚmaxsize)r}   r©   rª   r–   rû   r   rù   r"   r«   B  s   

ÿz&ProfilingRegexLexerMeta._process_regexN)r.   r/   r0   r1   r«   r   r   r   r"   rð   ?  s    rð   c                   @   s"   e Zd ZdZg ZdZddd„ZdS )ÚProfilingRegexLexerzFDrop-in replacement for RegexLexer that does profiling of its regexes.é   rÚ   c                 #   sÄ   � ˆ j j i ¡ t ˆ ||¡E d H  ˆ j j ¡ }tdd„ | ¡ D ƒ‡ fdd„dd�}tdd„ |D ƒƒ}t	ƒ  t	dˆ j j
t|ƒ|f ƒ t	d	ƒ t	d
d ƒ t	dƒ |D ]}t	d| ƒ qSt	d	ƒ d S )Nc                 s   sP   � | ]#\\}}\}}|t |ƒ d ¡ dd¡dd… |d| d| | fV  qdS )zu'z\\ú\NéA   iè  )ÚreprrY   rG   )Ú.0rœ   ÚrÚnrM   r   r   r"   Ú	<genexpr>`  s   € þÿz=ProfilingRegexLexer.get_tokens_unprocessed.<locals>.<genexpr>c                    s
   | ˆ j  S rJ   )Ú_prof_sort_indexr    rA   r   r"   r#   c  s   
 z<ProfilingRegexLexer.get_tokens_unprocessed.<locals>.<lambda>T)ÚkeyÚreversec                 s   s   � | ]}|d  V  qdS )é   Nr   )r  r!   r   r   r"   r  e  s   € z2Profiling result for %s lexing %d chars in %.3f mszn==============================================================================================================z$%-20s %-64s ncalls  tottime  percall)r–   r©   zn--------------------------------------------------------------------------------------------------------------z%-20s %-65s %5d %8.4f %8.4f)r@   rñ   rD   r   rK   r¡   ÚsortedrÌ   ÚsumÚprintr.   rV   )r=   rE   r—   Úrawdatar‘   Ú	sum_totalr-   r   rA   r"   rK   [  s*   €þ
üÿz*ProfilingRegexLexer.get_tokens_unprocessedNrá   )r.   r/   r0   r1   rñ   r  rK   r   r   r   r"   rþ   U  s
    rþ   )3r1   r§   rü   ró   Úpip._vendor.pygments.filterr   r   Úpip._vendor.pygments.filtersr   Úpip._vendor.pygments.tokenr   r   r   r   Úpip._vendor.pygments.utilr	   r
   r   r   r   r   Úpip._vendor.pygments.regexoptr   Ú__all__rT   ÚstaticmethodÚ_default_analyser(   r&   r   r   rQ   r   ry   r   r|   r{   r   r   r•   r   r   r   r   r¦   r   r   r   rr   rð   rþ   r   r   r   r"   Ú<module>   sF    
  '2 )aH@