U
    祡c0                     @   s   d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZ ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZ dddgZed	ZG d
d deZG dd deZG dd deZ dS )z
    pygments.lexers.php
    ~~~~~~~~~~~~~~~~~~~

    Lexers for PHP and related languages.

    :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)	Lexer
RegexLexerincludebygroupsdefaultusingthiswordsdo_insertions)
TextCommentOperatorKeywordNameStringNumberPunctuationOtherGeneric)get_bool_optget_list_optshebang_matchesZephirLexerPsyshConsoleLexerPhpLexerz.*?
c                   @   s  e Zd ZdZdZdZdgZdgZdddd	gZd
ddgZ	e
je
jB Zdefdejfdejfgeddejdfdedfedgdedfgdedfeddedfdedfdefdedfdejdfdejfdejfdejfdejfd ej fd!ej!fd"ej"fd#ej#fd$ejfgd%Z$d&S )'r   z
    For Zephir language source code.

    Zephir is a compiled high level language aimed
    to the creation of C-extensions for PHP.

    .. versionadded:: 2.0
    ZZephirzhttp://zephir-lang.com/Zzephirz*.zepfetchZechoZissetemptybitbitsstring\s+//.*?\n	/\*.*?\*/commentsandwhitespacez3/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)#pop/z\nz	^(?=\s|/)slashstartsregexzC\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|(<<|>>>?|==?|!=?|->|[-<>+*%&|^/])=?z[{(\[;,]z[})\].]z(for|in|while|do|break|return|continue|switch|case|default|if|else|loop|require|inline|throw|try|catch|finally|new|delete|typeof|instanceof|void|namespace|use|extends|this|fetch|isset|unset|echo|fetch|likely|unlikely|empty)\bz(var|let|with|function)\bz(abstract|boolean|bool|char|class|const|double|enum|export|extends|final|native|goto|implements|import|int|string|interface|long|ulong|char|uchar|float|unsigned|private|protected|public|short|static|self|throws|reverse|transient|volatile|readonly)\bz(true|false|null|undefined)\bzm(Array|Boolean|Date|_REQUEST|_COOKIE|_SESSION|_GET|_POST|_SERVER|this|stdClass|range|count|iterator|window)\bz[$a-zA-Z_][\w\\]*z%[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?z0x[0-9a-fA-F]+z[0-9]+z"(\\\\|\\[^\\]|[^"\\])*"z'(\\\\|\\[^\\]|[^'\\])*')r#   r&   ZbadregexrootN)%__name__
__module____qualname____doc__nameurlaliases	filenamesZzephir_keywordsZzephir_typereDOTALL	MULTILINEflagsr   r   Single	Multiliner   r   Regexr   r   r   r   ZDeclarationZReservedConstantr   Builtinr   r   FloatHexIntegerDoubletokens r>   r>   7/tmp/pip-unpacked-wheel-6wad6tea/pygments/lexers/php.pyr      sd   	
   
c                   @   s.   e Zd ZdZdZdZdgZdd Zdd Zd	S )
r   u5  
    For PsySH console output, such as:

    .. sourcecode:: psysh

        >>> $greeting = function($name): string {
        ...     return "Hello, {$name}";
        ... };
        => Closure($name): string {#2371 …3}
        >>> $greeting('World')
        => "Hello, World"

    .. versionadded:: 2.7
    zPsySH console session for PHPzhttps://psysh.org/Zpsyshc                 K   s   d|d< t j| f| d S )NTstartinline)r   __init__)selfoptionsr>   r>   r?   rA   m   s    zPsyshConsoleLexer.__init__c              	   c   s  t f | j}d}g }t|D ]}| }|ds>|drt|t|dtj	|d d fgf ||dd  7 }q|
 dkr|t|dtj	dfgf ||dd  7 }q|rt|||E d H  d}g }| tj|fV  q|rt|||E d H  d S )N z>>> z... r      z...   )r   rC   line_refinditergroup
startswithappendlenr   ZPromptrstripr
   get_tokens_unprocessedstartZOutput)rB   textZphplexerZcurcodeZ
insertionsmatchliner>   r>   r?   rN   q   s6    

 
z(PsyshConsoleLexer.get_tokens_unprocessedN)	r(   r)   r*   r+   r,   r-   r.   rA   rN   r>   r>   r>   r?   r   Z   s   c                "   @   s  e Zd ZdZdZdZddddgZdd	d
gZdgZdZ	dZ
ejejB ejB Zdejdfdefdefgdejdfde
 d eeeejeejeefdefdejfdejfdejfdejfdejfde
 d eeeejfdefdefdefd eeed!fd"eeefd#eeeeed$fd%e	 d eeeejfd&efd'ejfe d(d)e	 d* ej!fd+e	 ej!fe	ejfd,e"j#fd-e"j#fd.e"j$fd/e"j%fd0e"j&fd1e"j'fd2ejfd3ej(fd4ej)d5fge*d6d7d8ej+j,fge*d9d7d8ejfge	ej-dfge d:e	ej+dfe.dgd4ej)dfd;ej)fd<ej/fd=e
 d> e
 d? ej0fd@eej0e1e2dAdBej0fdCeej0e1e2dAdBej0fdDeej0ej!ej0fdEej)fgdFZ3dGdH Z4dIdJ Z5dKdL Z6dMS )Nr   a;  
    For PHP source code.
    For PHP embedded in HTML, use the `HtmlPhpLexer`.

    Additional options accepted:

    `startinline`
        If given and ``True`` the lexer starts highlighting with
        php code (i.e.: no starting ``<?php`` required).  The default
        is ``False``.
    `funcnamehighlighting`
        If given and ``True``, highlight builtin function names
        (default: ``True``).
    `disabledmodules`
        If given, must be a list of module names whose function names
        should not be highlighted. By default all modules are highlighted
        except the special ``'unknown'`` module that includes functions
        that are known to php but are undocumented.

        To get a list of allowed modules have a look into the
        `_php_builtins` module:

        .. sourcecode:: pycon

            >>> from pygments.lexers._php_builtins import MODULES
            >>> MODULES.keys()
            ['PHP Options/Info', 'Zip', 'dba', ...]

        In fact the names of those modules match the module names from
        the php documentation.
    ZPHPzhttps://www.php.net/phpZphp3Zphp4Zphp5z*.phpz
*.php[345]z*.incz
text/x-phpz1(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*z+(?:[_a-z]|[^\x00-\x7f])(?:\w|[^\x00-\x7f])*z	<\?(php)?z[^<]+<z\?>r$   z(<<<)([\'"]?)(z)(\2\n.*?\n\s*)(\3)(;?)(\n)r    z#.*?\nr!   z/\*\*/z/\*\*.*?\*/r"   z(->|::)(\s*)()z[~!%^&*+=|:.<>/@-]+z\?z[\[\]{}();,]+z(class)(\s+)	classnamez(function)(\s*)(?=\()z(function)(\s+)(&?)(\s*)functionnamez(const)(\s+)(a  (and|E_PARSE|old_function|E_ERROR|or|as|E_WARNING|parent|eval|PHP_OS|break|exit|case|extends|PHP_VERSION|cfunction|FALSE|print|for|require|continue|foreach|require_once|declare|return|default|static|do|switch|die|stdClass|echo|else|TRUE|elseif|var|empty|if|xor|enddeclare|include|virtual|endfor|include_once|while|endforeach|global|endif|list|endswitch|new|endwhile|not|array|E_ALL|NULL|final|php_user_filter|interface|implements|public|private|protected|abstract|clone|try|catch|throw|this|use|namespace|trait|yield|finally|match)\bz(true|false|null)\bmagicconstantsz\$\{\$+z\}z\$+z"(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?z\d+e[+-]?[0-9]+z0[0-7]+z0x[a-f0-9]+z\d+z0b[01]+z'([^'\\]*(?:\\.[^'\\]*)*)'z`([^`\\]*(?:\\.[^`\\]*)*)`"r   )Z__constructZ
__destructZ__callZ__callStaticZ__get__setZ__issetZ__unsetZ__sleepZ__wakeupZ
__toStringZ__invokeZ__set_stateZ__cloneZ__debugInfoz\b)suffix)Z__LINE__Z__FILE__Z__DIR__Z__FUNCTION__Z	__CLASS__Z	__TRAIT__Z
__METHOD__Z__NAMESPACE__
magicfuncsz	[^{$"\\]+z'\\([nrt"$\\]|[0-7]{1,3}|x[0-9a-f]{1,2})z\$z(\[\S+?\]|->z)?z(\{\$\{)(.*?)(\}\})T)_startinlinez(\{)(\$.*?)(\})z(\$\{)(\S+)(\})z[${\\])r'   rS   r\   rX   rV   rW   r   c                 K   s   t |dd| _t|ddg| _t |dd| _d|kr@|d| _t | _| jrdd	lm	} |
 D ]\}}|| jkrb| j| qbtj| f| d S )
NfuncnamehighlightingTdisabledmodulesunknownr@   Fr]   r   )MODULES)r   r^   r   r_   r@   popset
_functionsZpygments.lexers._php_builtinsra   itemsupdater   rA   )rB   rC   ra   keyvaluer>   r>   r?   rA     s(        
zPhpLexer.__init__c                 c   sd   dg}| j r|d t| ||D ]:\}}}|tjkrR|| jkrR|tj|fV  q$|||fV  q$d S )Nr'   rS   )r@   rK   r   rN   r   r   rd   r8   )rB   rP   stackindextokenrh   r>   r>   r?   rN   /  s    


zPhpLexer.get_tokens_unprocessedc                 C   s*   t | drdS d}td| r&|d7 }|S )NrS   Tg        z
<\?(?!xml)g333333?)r   r0   search)rP   rvr>   r>   r?   analyse_text;  s    
zPhpLexer.analyse_textN)7r(   r)   r*   r+   r,   r-   r.   r/   	mimetypesZ_ident_innerZ_ident_nonsr0   
IGNORECASEr1   r2   r3   r   ZPreprocr   r   r   Z	Delimiterr   r   r4   r5   ZDocr   r   	Attributer   r7   r   Variabler   r9   Octr:   r;   ZBinZBacktickr<   r	   ZFunctionZMagicZClassr   ZEscapeZInterpolr   r   r=   rA   rN   rn   r>   r>   r>   r?   r      s    



 
 


4
	


b)!r+   r0   Zpygments.lexerr   r   r   r   r   r   r   r	   r
   Zpygments.tokenr   r   r   r   r   r   r   r   r   r   Zpygments.utilr   r   r   __all__compilerG   r   r   r   r>   r>   r>   r?   <module>   s   
,0

B1