U
    G
\$r                     @   s  d Z ddlZddl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m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 d	d
ddddddgZe dZ!e dej"Z#e dej"Z$dd Z%G dd de&Z'G dd	 d	e'eZ(G dd
 d
e'eZ)G dd de'eZ*e dZ+e dZ,e dZ-e dZ,e d Z.e d!Z/G d"d# d#e&Z0G d$d deZ1G d%d deZ2G d&d deZ3G d'd deZ4G d(d deZ5G d)d deZ6dS )*a  
    pygments.lexers.sql
    ~~~~~~~~~~~~~~~~~~~

    Lexers for various SQL dialects and related interactive sessions.

    Postgres specific lexers:

    `PostgresLexer`
        A SQL lexer for the PostgreSQL dialect. Differences w.r.t. the SQL
        lexer are:

        - keywords and data types list parsed from the PG docs (run the
          `_postgres_builtins` module to update them);
        - Content of $-strings parsed using a specific lexer, e.g. the content
          of a PL/Python function is parsed using the Python lexer;
        - parse PG specific constructs: E-strings, $-strings, U&-strings,
          different operators and punctuation.

    `PlPgsqlLexer`
        A lexer for the PL/pgSQL language. Adds a few specific construct on
        top of the PG SQL lexer (such as <<label>>).

    `PostgresConsoleLexer`
        A lexer to highlight an interactive psql session:

        - identifies the prompt and does its best to detect the end of command
          in multiline statement where not all the lines are prefixed by a
          prompt, telling them apart from the output;
        - highlights errors in the output and notification levels;
        - handles psql backslash commands.

    The ``tests/examplefiles`` contains a few test files with data to be
    parsed by these lexers.

    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)Lexer
RegexLexerdo_insertionsbygroupswords)Punctuation
WhitespaceErrorTextCommentOperatorKeywordNameStringNumberGeneric)get_lexer_by_nameClassNotFound)	iteritems)KEYWORDS	DATATYPESPSEUDO_TYPESPLPGSQL_KEYWORDS)_tsql_builtinsPostgresLexerPlPgsqlLexerPostgresConsoleLexerSqlLexerTransactSqlLexer
MySqlLexerSqliteConsoleLexerRqlLexerz.*?
z\s+LANGUAGE\s+'?(\w+)'?z\bDO\bc                 c   s  d}t | j| | d  }|dk	r>| |d}n|tt | jtd|	 d |	  }|r| |d d}n8tt
| jtd|	 d |	  }|r| d}|	dt|dfV  |	dtj|dfV  |	d	t|d	fV  |r*||d
D ]}|V  qn|	d
t|d
fV  |	dt|dfV  |	dtj|dfV  |	dt|dfV  dS )zParse the content of a $-string using a lexer

    The lexer is chosen looking for a nearby LANGUAGE or assumed as
    plpgsql if inside a DO statement and no LANGUAGE has been found.
    Nd      r      plpgsql                  )language_rematchtextend
_get_lexergrouplistfinditermaxstartdo_rer   Z	Delimiterget_tokens_unprocessed)lexerr.   lmx r=   5/usr/lib/python3/dist-packages/pygments/lexers/sql.pylanguage_callbackA   s0     
r?   c                       s(   e Zd ZdZ fddZdd Z  ZS )PostgresBasea  Base class for Postgres-related lexers.

    This is implemented as a mixin to avoid the Lexer metaclass kicking in.
    this way the different lexer don't have a common Lexer ancestor. If they
    had, _tokens could be created on this ancestor and not updated for the
    other classes, resulting e.g. in PL/pgSQL parsed as SQL. This shortcoming
    seem to suggest that regexp lexers are not really subclassable.
    c                 '   s,   || _ tt| j|f| D ]
}|V  qd S N)r/   superr@   r8   )selfr/   argsr<   	__class__r=   r>   r8   o   s    

z#PostgresBase.get_tokens_unprocessedc              	   C   s   |  dkrtd| jS |g}|dr:||dd   |drV||d d  |dr||dr|||dd  |D ].}zt|f| jW   S  tk
r   Y qX qd S )Nsql
postgresqlZplr'   ur$   )rH   )lowerr   options
startswithappendendswithr   )rC   ZlangZtriesr:   r=   r=   r>   r1   v   s    

zPostgresBase._get_lexer)__name__
__module____qualname____doc__r8   r1   __classcell__r=   r=   rE   r>   r@   f   s   r@   c                   @   s:  e Zd ZdZdZddgZdgZejZ	de
fdejfdejd	fd
ddd ee D  d ejfeeddefdefdefdejfdejfdejfdeejejdfdeejejdfdefdefdejfdefgdejd	fdejdfd ejfd!ejfgd"ejfd#ejfd$ejdfgd%ejfd&ejfd'ejdfgd(Z d)S )*r   zM
    Lexer for the PostgreSQL dialect of SQL.

    .. versionadded:: 1.5
    zPostgreSQL SQL dialectrH   Zpostgresztext/x-postgresql\s+--.*\n?/\*multiline-comments(|c                 c   s   | ]}| d dV  qdS ) rT   N)replace).0sr=   r=   r>   	<genexpr>   s   zPostgresLexer.<genexpr>z)\b\bsuffixz[+*/<>=~!@#%^&|`?-]+z::z\$\d+z&([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?[0-9]+z((?:E|U&)?)(')stringz((?:U&)?)(")quoted-identz$(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)	[a-z_]\w*:(['"]?)[a-z]\w*\b\1z[;:()\[\]{},.]\*/#pop[^/*]+[/*]z[^']+z'''z[^"]+z""")rootrW   rc   rd   N)!rO   rP   rQ   rR   namealiases	mimetypesre
IGNORECASEflagsr
   r   Single	Multilinejoinr   r   r   Builtinr   r   r   r   Variabler   FloatIntegerr   r   ZAffixr?   r   tokensr=   r=   r=   r>   r      sT   




c                   @   s   e Zd ZdZdZdgZdgZejZ	e
dd eejD Zeed D ]6\ZZed ekrFeee d	d
efed e< [ qqFdstddejfdefdejfdejfged dd< dS )r   zR
    Handle the extra syntax in Pl/pgSQL language.

    .. versionadded:: 1.5
    zPL/pgSQLr&   ztext/x-plpgsqlc                 c   s"   | ]\}}||d d  fV  qd S rA   r=   r\   kr:   r=   r=   r>   r^      s     zPlPgsqlLexer.<genexpr>rm   r#   r_   r`   r   zSQL keywords not foundz\%[a-z]\w*\bz:=z\<\<[a-z]\w*\>\>z\#[a-z]\w*\bN)rO   rP   rQ   rR   rn   ro   rp   rq   rr   rs   dictr   r   r{   	enumerateipatternr   r   r   r   AssertionErrorr   rw   r   LabelPseudor=   r=   r=   r>   r      s&   c                   @   s   e Zd ZdZdZg ZejZe	dd e
ejD Zed dejdf dedfd	efdejfd
ejfdejfdejfdejfged< dS )PsqlRegexLexerz
    Extend the PostgresLexer adding support specific for psql commands.

    This is not a complete psql lexer yet as it lacks prompt support
    and output rendering.
    z'PostgreSQL console - regexp based lexerc                 c   s"   | ]\}}||d d  fV  qd S rA   r=   r|   r=   r=   r>   r^      s     zPsqlRegexLexer.<genexpr>rm   z\\[^\s]+zpsql-commandz\nrT   rf   '(''|[^'])*'z	`([^`])*`z[^\s]+N)rO   rP   rQ   rR   rn   ro   rq   rr   rs   r~   r   r   r{   rM   r   r   r
   r   rx   r   rt   ZBacktickSymbolr=   r=   r=   r>   r      s    
r   z^(\S.*?)??[=\-\(\$\'\"][#>]z\s*\\z;\s*(--.*?)?$z(\s*)(\\.+?)(\s+)$z(ERROR|FATAL):zS((?:DEBUG|INFO|NOTICE|WARNING|ERROR|FATAL|HINT|DETAIL|CONTEXT|LINE [0-9]+):)(.*?\n)c                   @   s4   e Zd ZdZdd Zdd Zdd Zdd	 ZeZd
S )	lookaheadz0Wrap an iterator and allow pushing back an item.c                 C   s   t || _ d | _d S rA   )iter	_nextitem)rC   r<   r=   r=   r>   __init__  s    
zlookahead.__init__c                 C   s   | S rA   r=   )rC   r=   r=   r>   __iter__  s    zlookahead.__iter__c                 C   s
   || _ |S rA   )r   )rC   r   r=   r=   r>   send  s    zlookahead.sendc                 C   s$   | j d k	r| j }d | _ |S t| jS rA   )r   nextr   )rC   Znir=   r=   r>   __next__  s
    
zlookahead.__next__N)	rO   rP   rQ   rR   r   r   r   r   r   r=   r=   r=   r>   r   
  s   r   c                   @   s,   e Zd ZdZdZdddgZdgZdd Zd	S )
r   z=
    Lexer for psql sessions.

    .. versionadded:: 1.5
    zPostgreSQL console (psql)Zpsqlzpostgresql-consolezpostgres-consoleztext/x-postgresql-psqlc                 c   s  t f | j}tt|}d}g }|D ]}|dr^|s^td	| j}||D ]
}|V  qN qt	|}	|	d k	r|
t|dtj|	 fgf ||t|	 d  7 }n||7 }t	|st|r& qq&t|||D ]
}
|
V  qtj}|D ]}t	|}	|	d k	r||  qt	|}|d k	r|ddsP|ddrVtj}|dtj|dfV  |d||dfV  qd||fV  qd S qd S )
N $consoler   r#   ZERRORZFATALr'   )r   )r   rK   r   line_refindallrL   r   r8   	re_promptr.   rM   lenr   Promptr2   re_psql_commandre_end_commandsearchr   Outputr   
re_messager	   r6   ZStrong)rC   datarG   linescurcode
insertionsliner9   r<   ZmpromptitemZ	out_tokenZmmsgr=   r=   r>   r8   +  sR    







z+PostgresConsoleLexer.get_tokens_unprocessedN)rO   rP   rQ   rR   rn   ro   rp   r8   r=   r=   r=   r>   r      s
   
c                   @   s   e Zd ZdZdZdgZdgZdgZej	Z
defdejfdejd	fed
ddefedddejfdefdejfdejfdejfdefdefgdejd	fdejdfdejfdejfgdZdS )r   z
    Lexer for Structured Query Language. Currently, this lexer does
    not recognize any special syntax except ANSI SQL.
    SQLrG   *.sqlz
text/x-sqlrT   rU   rV   rW   (  ZABORTZABSZABSOLUTEZACCESSZADAZADDZADMINZAFTERZ	AGGREGATEZALIASZALLZALLOCATEZALTERZANALYSEZANALYZEZANDANYZAREZASZASCZ
ASENSITIVEZ	ASSERTIONZ
ASSIGNMENTZ
ASYMMETRICATZATOMICZAUTHORIZATIONZAVGZBACKWARDZBEFOREZBEGINZBETWEENZBITVARZ
BIT_LENGTHZBOTHZBREADTHZBYCZCACHECALLZCALLEDZCARDINALITYZCASCADEZCASCADEDZCASEZCASTZCATALOGZCATALOG_NAMEZCHAINZCHARACTERISTICSZCHARACTER_LENGTHZCHARACTER_SET_CATALOGZCHARACTER_SET_NAMEZCHARACTER_SET_SCHEMAZCHAR_LENGTHZCHECKZCHECKEDZ
CHECKPOINTZCLASSZCLASS_ORIGINZCLOBZCLOSEZCLUSTERZCOALSECEZCOBOLZCOLLATEZ	COLLATIONZCOLLATION_CATALOGZCOLLATION_NAMEZCOLLATION_SCHEMAZCOLUMNZCOLUMN_NAMEZCOMMAND_FUNCTIONZCOMMAND_FUNCTION_CODECOMMENTZCOMMITZ	COMMITTEDZ
COMPLETIONZCONDITION_NUMBERZCONNECTZ
CONNECTIONZCONNECTION_NAMEZ
CONSTRAINTZCONSTRAINTSZCONSTRAINT_CATALOGZCONSTRAINT_NAMEZCONSTRAINT_SCHEMAZCONSTRUCTORZCONTAINSZCONTINUEZ
CONVERSIONZCONVERTZCOPYZCORRESPONTINGZCOUNTZCREATEZCREATEDBZ
CREATEUSERZCROSSZCUBEZCURRENTZCURRENT_DATEZCURRENT_PATHZCURRENT_ROLEZCURRENT_TIMEZCURRENT_TIMESTAMPZCURRENT_USERZCURSORZCURSOR_NAMEZCYCLEZDATAZDATABASEZDATETIME_INTERVAL_CODEZDATETIME_INTERVAL_PRECISIONZDAYZ
DEALLOCATEZDECLAREZDEFAULTZDEFAULTSZ
DEFERRABLEZDEFERREDZDEFINEDZDEFINERZDELETEZ	DELIMITERZ
DELIMITERSZDEREFZDESCZDESCRIBEZ
DESCRIPTORZDESTROYZ
DESTRUCTORZDETERMINISTICZDIAGNOSTICSZ
DICTIONARYZ
DISCONNECTZDISPATCHZDISTINCTZDOZDOMAINZDROPZDYNAMICZDYNAMIC_FUNCTIONZDYNAMIC_FUNCTION_CODEZEACHELSEZELSIFENCODINGZ	ENCRYPTEDZENDzEND-EXECZEQUALSZESCAPEZEVERYZ	EXCEPTIONZEXCEPTZ	EXCLUDINGZ	EXCLUSIVEZEXECZEXECUTEZEXISTINGZEXISTSZEXPLAINZEXTERNALZEXTRACTZFALSEZFETCHZFINALZFIRSTZFORZFORCEZFOREIGNZFORTRANZFORWARDZFOUNDZFREEZFREEZEZFROMZFULLZFUNCTIONGZGENERALZ	GENERATEDZGETZGLOBALZGOZGOTOZGRANTZGRANTEDZGROUPZGROUPINGZHANDLERZHAVINGZ	HIERARCHYZHOLDZHOSTZIDENTITYZIFZIGNOREZILIKEZ	IMMEDIATEZ	IMMUTABLEZIMPLEMENTATIONZIMPLICITINZ	INCLUDINGZ	INCREMENTZINDEXZ
INDITCATORZINFIXZINHERITSZ
INITIALIZEZ	INITIALLYZINNERZINOUTZINPUTZINSENSITIVEZINSERTZINSTANTIABLEZINSTEADZ	INTERSECTZINTOZINVOKERZISZISNULLZ	ISOLATIONZITERATEZJOINZKEYZ
KEY_MEMBERZKEY_TYPEZLANCOMPILERZLANGUAGEZLARGEZLASTZLATERALZLEADINGZLEFTZLENGTHLESSZLEVELZLIKEZLIMITZLISTENZLOADZLOCALZ	LOCALTIMEZLOCALTIMESTAMPZLOCATIONZLOCATORZLOCKZLOWERZMAPZMATCHMAXZMAXVALUEZMESSAGE_LENGTHZMESSAGE_OCTET_LENGTHZMESSAGE_TEXTZMETHODZMINZMINUTEZMINVALUEZMODZMODEZMODIFIESZMODIFYZMONTHZMOREZMOVEZMUMPSZNAMESZNATIONALZNATURALZNCHARZNCLOBZNEWZNEXTZNOZ
NOCREATEDBZNOCREATEUSERZNONEZNOTZNOTHINGZNOTIFYZNOTNULLZNULLZNULLABLEZNULLIFZOBJECTZOCTET_LENGTHZOFZOFFZOFFSETZOIDSZOLDZONZONLYZOPENZ	OPERATIONZOPERATORZOPTIONZOPTIONSORZORDERZ
ORDINALITYZOUTZOUTERZOUTPUTZOVERLAPSZOVERLAYZ
OVERRIDINGZOWNERZPADZ	PARAMETERZ
PARAMETERSZPARAMETER_MODEZPARAMATER_NAMEZPARAMATER_ORDINAL_POSITIONZPARAMETER_SPECIFIC_CATALOGZPARAMETER_SPECIFIC_NAMEZPARAMATER_SPECIFIC_SCHEMAZPARTIALZPASCALZPENDANTZPLACINGZPLIZPOSITIONZPOSTFIXZ	PRECISIONZPREFIXZPREORDERZPREPAREZPRESERVEZPRIMARYZPRIORZ
PRIVILEGESZ
PROCEDURALZ	PROCEDUREZPUBLICZREADZREADSZRECHECKZ	RECURSIVEZREFZ
REFERENCESZREFERENCINGZREINDEXZRELATIVEZRENAMEZ
REPEATABLEZREPLACEZRESETZRESTARTZRESTRICTZRESULTZRETURNZRETURNED_LENGTHZRETURNED_OCTET_LENGTHZRETURNED_SQLSTATEZRETURNSZREVOKEZRIGHTZROLEZROLLBACKZROLLUPZROUTINEZROUTINE_CATALOGZROUTINE_NAMEZROUTINE_SCHEMAZROWZROWSZ	ROW_COUNTZRULEZ
SAVE_POINTZSCALEZSCHEMAZSCHEMA_NAMEZSCOPEZSCROLLZSEARCHZSECONDZSECURITYZSELECTZSELFZ	SENSITIVEZSERIALIZABLEZSERVER_NAMEZSESSIONZSESSION_USERZSETZSETOFZSETSZSHAREZSHOWZSIMILARZSIMPLEZSIZEZSOMEZSOURCEZSPACEZSPECIFICZSPECIFICTYPEZSPECIFIC_NAMEr   ZSQLCODEZSQLERRORZSQLEXCEPTIONZSQLSTATEZSQLWARNINIGZSTABLEZSTARTZSTATEZ	STATEMENTZSTATICZ
STATISTICSZSTDINZSTDOUTZSTORAGEZSTRICTZ	STRUCTUREZSTYPEZSUBCLASS_ORIGINZSUBLISTZ	SUBSTRINGZSUMZ	SYMMETRICZSYSIDZSYSTEMZSYSTEM_USERZTABLEZ
TABLE_NAMEz TEMPTEMPLATEZ	TEMPORARYZ	TERMINATEZTHANZTHEN	TIMESTAMPZTIMEZONE_HOURZTIMEZONE_MINUTEZTOZTOASTZTRAILINGZ
TRANSATIONZTRANSACTIONS_COMMITTEDZTRANSACTIONS_ROLLED_BACKZTRANSATION_ACTIVEZ	TRANSFORMZ
TRANSFORMSZ	TRANSLATEZTRANSLATIONZTREATZTRIGGERZTRIGGER_CATALOGZTRIGGER_NAMEZTRIGGER_SCHEMAZTRIMZTRUEZTRUNCATEZTRUSTEDZTYPEZUNCOMMITTEDZUNDERZUNENCRYPTEDZUNIONZUNIQUEZUNKNOWNZUNLISTENZUNNAMEDZUNNESTZUNTILZUPDATEZUPPERZUSAGEZUSERZUSER_DEFINED_TYPE_CATALOGZUSER_DEFINED_TYPE_NAMEZUSER_DEFINED_TYPE_SCHEMAZUSINGZVACUUMZVALIDZ	VALIDATORZVALUESZVARIABLEVERBOSEZVERSIONZVIEWZVOLATILEZWHENZWHENEVERZWHEREZWITHZWITHOUTZWORKZWRITEZYEARZZONEr_   r`   )ZARRAYZBIGINTZBINARYZBITZBLOBZBOOLEANZCHARZ	CHARACTERDATEZDECZDECIMALZFLOATZINTZINTEGERZINTERVALNUMBERZNUMERICZREALZSERIALZSMALLINTZVARCHARZVARYINGZINT8ZSERIAL8ZTEXT[+*/<>=~!@#%^&|`?-]rb   r   "(""|[^"])*"z[a-z_][\w$]*[;:()\[\],.]rg   rh   ri   rj   rm   rW   N)rO   rP   rQ   rR   rn   ro   	filenamesrp   rq   rr   rs   r
   r   rt   ru   r   r   r   rw   r   r   rz   r   r   r   r{   r=   r=   r=   r>   r   j  s@   
KLM_

c                   @   sV  e Zd ZdZdZddgZdgZdgZej	ej
B Zdefdejfd	ejd
feejefeejddejfeejddejfeejddejfdeeeejfeejddefdeeee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%fdej&fdej'fdeeje%fdefdej'j(fgd	ejd
fdejdfdejfdejfgd Z)d!S )"r   z
    Transact-SQL (T-SQL) is Microsoft's and Sybase's proprietary extension to
    SQL.

    The list of keywords includes ODBC and keywords reserved for future use..
    zTransact-SQLZtsqlzt-sqlr   ztext/x-tsqlrT   z(?m)--.*?$\n?rV   rW   r_   r`   z(goto)(\s+)(\w+\b)z(\[)([^]]+)(\])z0x[0-9a-f]+z[0-9]+\.[0-9]*(e[+-]?[0-9]+)?z\.[0-9]+(e[+-]?[0-9]+)?z[0-9]+e[+-]?[0-9]+rb   r   r   z[;(),.]z@@\w+z@\w+z(\w+)(:)z#?#?\w+z\?rg   rh   ri   rj   r   N)*rO   rP   rQ   rR   rn   ro   r   rp   rq   rr   UNICODErs   r   r   rt   ru   r   r   Z	OPERATORSr   ZOPERATOR_WORDSZWordZTYPESr   ZClassZ	FUNCTIONSFunctionr   r   r   r   r   ZHexry   rz   r   r   r   rw   rx   ZMagicr{   r=   r=   r=   r>   r     sH   

 

c                   @   s   e Zd ZdZdZdgZdgZejZ	de
fdej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fdeeje
efdefdejfdejfdeeje
efdefdejfdefgdejdfdejdfdejfdejfgdZdS )r   z"
    Special lexer for MySQL.
    ZMySQLZmysqlztext/x-mysqlrT   z(#|--\s+).*\n?rV   rW   rb   z[0-9]*\.[0-9]+(e[+-][0-9]+)z'(\\\\|\\'|''|[^'])*'z"(\\\\|\\"|""|[^"])*"z`(\\\\|\\`|``|[^`])*`r   a  \b(tinyint|smallint|mediumint|int|integer|bigint|date|datetime|time|bit|bool|tinytext|mediumtext|longtext|text|tinyblob|mediumblob|longblob|blob|float|double|double\s+precision|real|numeric|dec|decimal|timestamp|year|char|varchar|varbinary|varcharacter|enum|set)(\b\s*)(\()?a3  \b(add|all|alter|analyze|and|as|asc|asensitive|before|between|bigint|binary|blob|both|by|call|cascade|case|change|char|character|check|collate|column|condition|constraint|continue|convert|create|cross|current_date|current_time|current_timestamp|current_user|cursor|database|databases|day_hour|day_microsecond|day_minute|day_second|dec|decimal|declare|default|delayed|delete|desc|describe|deterministic|distinct|distinctrow|div|double|drop|dual|each|else|elseif|enclosed|escaped|exists|exit|explain|fetch|flush|float|float4|float8|for|force|foreign|from|fulltext|grant|group|having|high_priority|hour_microsecond|hour_minute|hour_second|if|ignore|in|index|infile|inner|inout|insensitive|insert|int|int1|int2|int3|int4|int8|integer|interval|into|is|iterate|join|key|keys|kill|leading|leave|left|like|limit|lines|load|localtime|localtimestamp|lock|long|loop|low_priority|match|minute_microsecond|minute_second|mod|modifies|natural|no_write_to_binlog|not|numeric|on|optimize|option|optionally|or|order|out|outer|outfile|precision|primary|procedure|purge|raid0|read|reads|real|references|regexp|release|rename|repeat|replace|require|restrict|return|revoke|right|rlike|schema|schemas|second_microsecond|select|sensitive|separator|set|show|smallint|soname|spatial|specific|sql|sql_big_result|sql_calc_found_rows|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|starting|straight_join|table|terminated|then|to|trailing|trigger|undo|union|unique|unlock|unsigned|update|usage|use|using|utc_date|utc_time|utc_timestamp|values|varying|when|where|while|with|write|x509|xor|year_month|zerofill)\bz*\b(auto_increment|engine|charset|tables)\bz(true|false|null)z([a-z_]\w*)(\s*)(\()re   z@[a-z0-9]*[._]*[a-z0-9]*r   rg   rh   ri   rj   r   N)rO   rP   rQ   rR   rn   ro   rp   rq   rr   rs   r
   r   rt   ru   r   rz   ry   r   Doubler   r   r   r   ZTyper   r   r   ZConstantr   rx   r{   r=   r=   r=   r>   r     sF   
6

c                   @   s.   e Zd ZdZdZdgZdgZdgZdd ZdS )	r    zO
    Lexer for example sessions using sqlite3.

    .. versionadded:: 0.11
    Z
sqlite3conZsqlite3z*.sqlite3-consoleztext/x-sqlite3-consolec              	   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|rt
|||D ]
}|V  qd}g }|dr| tj|fV  q| tj|fV  q|rt
|||D ]
}|V  qd S )Nr   zsqlite> z   ...> r      zSQL error: )r   rK   r   r4   r2   rL   rM   r   r   r   r   r8   r6   	Tracebackr   )rC   r   rG   r   r   r.   r   r   r=   r=   r>   r8   k  s2    

z)SqliteConsoleLexer.get_tokens_unprocessedN)	rO   rP   rQ   rR   rn   ro   r   rp   r8   r=   r=   r=   r>   r    _  s   c                   @   sr   e Zd ZdZdZdgZdgZdgZej	Z
ddefdefd	efd
ejfdejfdefdejfdejfdefg	iZdS )r!   zx
    Lexer for Relation Query Language.

    `RQL <http://www.logilab.org/project/rql>`_

    .. versionadded:: 2.0
    ZRQLZrqlz*.rqlz
text/x-rqlrm   rT   z(DELETE|SET|INSERT|UNION|DISTINCT|WITH|WHERE|BEING|OR|AND|NOT|GROUPBY|HAVING|ORDERBY|ASC|DESC|LIMIT|OFFSET|TODAY|NOW|TRUE|FALSE|NULL|EXISTS)\bz
[+*/<>=%-]z)(Any|is|instance_of|CWEType|CWRelation)\brb   z[A-Z_]\w*\??r   r   r   N)rO   rP   rQ   rR   rn   ro   r   rp   rq   rr   rs   r
   r   r   r   rw   r   rz   r   rt   r   r{   r=   r=   r=   r>   r!     s(   )7rR   rq   Zpygments.lexerr   r   r   r   r   Zpygments.tokenr   r   r	   r
   r   r   r   r   r   r   r   Zpygments.lexersr   r   Zpygments.utilr   Z"pygments.lexers._postgres_builtinsr   r   r   r   r   __all__compiler   rr   r-   r7   r?   objectr@   r   r   r   r   r   r   Zre_errorr   r   r   r   r   r   r    r!   r=   r=   r=   r>   <module>   sJ   '4   
%'8!




Jt8I(