B
    G
\Ip                 @   s  d Z ddlZddl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 ddlmZ ddd	d
dddddddddddgZG dd deZG dd deZG dd	 d	eZdd ZG dd
 d
eZG dd deZG dd deZG dd deZ G dd deZ!G d d deZ"G d!d deZ#G d"d deZ$G d#d deZ%G d$d deZ&G d%d deZ'G d&d deZ(dS )'z
    pygments.lexers.configs
    ~~~~~~~~~~~~~~~~~~~~~~~

    Lexers for configuration file formats.

    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)
RegexLexerdefaultwordsbygroupsincludeusing)
TextCommentOperatorKeywordNameStringNumberPunctuation
WhitespaceLiteral)	BashLexer)	JsonLexerIniLexerRegeditLexerPropertiesLexerKconfigLexerCfengine3LexerApacheConfLexerSquidConfLexerNginxConfLexerLighttpdConfLexerDockerLexerTerraformLexerTermcapLexerTerminfoLexerPkgConfigLexerPacmanConfLexerc               @   sp   e Zd ZdZdZdddgZdddgZd	d
gZddefde	j
fdefdeejeeeefdejfgiZdd ZdS )r   z5
    Lexer for configuration files in INI style.
    ZINIZiniZcfgZdosiniz*.iniz*.cfgz*.infz
text/x-iniztext/infrootz\s+z[;#].*z\[.*?\]$z*(.*?)([ \t]*)(=)([ \t]*)(.*(?:\n[ \t].+)*)z(.+?)$c             C   s2   |  d}|dk rdS | d dko0| |d  dkS )N
   Fr   [   ])find)textZnpos r+   6lib/python3.7/site-packages/pygments/lexers/configs.pyanalyse_text1   s    
zIniLexer.analyse_textN)__name__
__module____qualname____doc__namealiases	filenames	mimetypesr   r	   Singler   r   r   	Attributer
   r   tokensr-   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defdefde	j
fd	eeeejefd
eejeeedfdeejeeedfgdedfdeejeedfdedfedgdZdd ZdS )r   z
    Lexer for `Windows Registry
    <http://en.wikipedia.org/wiki/Windows_Registry#.REG_files>`_ files produced
    by regedit.

    .. versionadded:: 1.6
    Zregregistryz*.regztext/x-windows-registryzWindows Registry Editor.*z\s+z[;#].*z(\[)(-?)(HKEY_[A-Z_]+)(.*?\])$z)("(?:\\"|\\\\|[^"])+")([ \t]*)(=)([ \t]*)valuez(.*?)([ \t]*)(=)([ \t]*)-z#popz1(dword|hex(?:\([0-9a-fA-F]\))?)(:)([0-9a-fA-F,]+)z.+)r#   r:   c             C   s
   |  dS )NzWindows Registry Editor)
startswith)r*   r+   r+   r,   r-   `   s    zRegeditLexer.analyse_textN)r.   r/   r0   r1   r2   r3   r4   r5   r   r	   r6   r   r   r
   r   Builtinr7   Variabler   r   r   r   r8   r-   r+   r+   r+   r,   r   8   s,   c               @   sz   e Zd ZdZdZddgZdgZdgZddee	j
eefd	e	j
fd
eeefdeeefdee	j
eeeefdefgiZdS )r   z
    Lexer for configuration files in Java's properties format.

    Note: trailing whitespace counts as part of the value as per spec

    .. versionadded:: 1.4
    Z
PropertiesZ
propertiesZjpropertiesz*.propertiesztext/x-java-propertiesr#   z^(\w+)([ \t])(\w+\s*)$z^\w+(\\[ \t]\w*)*$z(^ *)([#!].*)z(^ *)((?:;|//).*)z/(.*?)([ \t]*)([=:])([ \t]*)(.*(?:(?<=\\)\n.*)*)z\sN)r.   r/   r0   r1   r2   r3   r4   r5   r   r   r7   r   r   r	   r
   r8   r+   r+   r+   r,   r   d   s   c             C   sB   d}|dkrd}nd|d  }| dkr,d}nd|  }d|||f S )	N      +z{1,%d}r'    z{%s}z(?:\t| %s\t| {%s})%s.*\nr+   )levelZ	tab_widthZspace_repeatZlevel_repeatr+   r+   r,   
_rx_indent   s    rD   c               @   s  e Zd ZdZdZddddgZdddd	gZd
gZdZdd Z	dd Z
defdejfedddefdedfdejfdefdefdejfdejfdejfdefgdefe	de	d e	d!e	d"e	d#e	d$e	d%ed&g	e
de
d e
d!e
d"e
d#e
d$e
d%d'	Zd(S ))r   zC
    For Linux-style Kconfig files.

    .. versionadded:: 1.6
    ZKconfigZkconfig
menuconfigzlinux-configzkernel-configz*Config.in*zexternal.in*zstandard-modules.inztext/x-kconfigr   c             C   s   t | tjd|  fS )Nzindent%s)rD   r   Doc)rC   r+   r+   r,   call_indent   s    zKconfigLexer.call_indentc             C   s   t | tjfdtftdgS )Nz\s*\nz#pop:2)rD   r   rF   r   r   )rC   r+   r+   r,   	do_indent   s    zKconfigLexer.do_indentz\s+z#.*?\n)ZmainmenuZconfigrE   ZchoiceZ	endchoicecommentZmenuZendmenuz
visible ififZendifsourcepromptZselectz
depends onr   rangeZoptionz\b)suffixz(---help---|help)[\t ]*\nhelpz;(bool|tristate|string|hex|int|defconfig_list|modules|env)\bz[!=&|]z[()]z[0-9]+z'(''|[^'])*'z"(""|[^"])*"z\S+z\s*\n            r%   r@   r'   z#pop)	r#   rO   Zindent7Zindent6Zindent5Zindent4Zindent3Zindent2Zindent1N)r.   r/   r0   r1   r2   r3   r4   r5   flagsrG   rH   r   r	   r6   r   r   r   r=   r
   r   r   Integerr   Doubler   r8   r+   r+   r+   r,   r      sP   c               @   sn  e Zd ZdZdZddgZdgZg Zdefde	e
ee
ee
fde	e
ee
eejed	fd
e	e
ee
eejfde	eejeee
jeeefde	e
jeeefdedfde	ejefde	ejefde	e
jefdejfdefdefdefdejfdejfdejfdefgdejdfdejfdedfdefdefgdejd fd!ejdfd"ejfgd#edfd$efdejfdefgd%Zd&S )'r   z_
    Lexer for `CFEngine3 <http://cfengine.org>`_ policy files.

    .. versionadded:: 1.5
    Z	CFEngine3Z	cfengine3Zcf3z*.cfz#.*?\nz(body)(\s+)(\S+)(\s+)(control)z%(body|bundle)(\s+)(\S+)(\s+)(\w+)(\()arglistz!(body|bundle)(\s+)(\S+)(\s+)(\w+)z7(")([^"]+)(")(\s+)(string|slist|int|real)(\s*)(=>)(\s*)z(\S+)(\s*)(=>)(\s*)"stringz	(\w+)(\()z([\w.!&|()]+)(::)z(\w+)(:)z@[{(][^)}]+[})]z[(){},;]z=>z->z\d+\.\d+z\d+z\w+z\s+z\$[{(]interpolz\\.z#popz\n.z#pushz[})]z	[^${()}]+z\),)r#   rY   rZ   rW   N)r.   r/   r0   r1   r2   r3   r4   r5   r	   r   r   r   r   ZFunctionr   r>   Typer
   Reservedr   ClassDeclarationr   FloatrU   InterpolEscaper8   r+   r+   r+   r,   r      sT   




c               @   s   e Zd ZdZdZdddgZdddgZd	gZej	ej
B Zd
efdefdeejeeejfdeejedfdefgdefdedfdefdefdefdefdejfdefdejfdefg
dZdS )r   zo
    Lexer for configuration files following the Apache config file
    format.

    .. versionadded:: 0.6
    Z
ApacheConfZ
apacheconfZaconfZapachez	.htaccesszapache.confzapache2.confztext/x-apacheconfz\s+z(#.*?)$z(<[^\s>]+)(?:(\s+)(.*?))?(>)z([a-z]\w*)(\s+)r:   z\.+z\\\n$z#popz\\z[^\S\n]+z\d+\.\d+\.\d+\.\d+(?:/\d+)?z\d+z/([a-z0-9][\w./-]+)z(on|off|none|any|all|double|email|dns|min|minimal|os|productonly|full|emerg|alert|crit|error|warn|notice|info|debug|registry|script|inetd|standalone|user|group)\bz"([^"\\]*(?:\\.[^"\\]*)*)"z	[^\s"\\]+)r#   r:   N)r.   r/   r0   r1   r2   r3   r4   r5   re	MULTILINE
IGNORECASErT   r   r	   r   r   Tagr   r=   r   ZOtherr   rV   r8   r+   r+   r+   r,   r     s0   

c               @   s   e Zd ZdZdZdddgZdgZdgZej	Z
dZdZd	Zd
ZdZdZdZdefdedfeedddefeedddejfeedddefeedddefeedddefeedddefed e d ejfdefdefgdejdfdedfedgdZdS )r   zj
    Lexer for `squid <http://www.squid-cache.org/>`_ configuration files.

    .. versionadded:: 0.9
    Z	SquidConfZ	squidconfz
squid.confZsquidztext/x-squidconf)Z
access_logZaclZalways_directZannounce_hostZannounce_periodZannounce_portZannounce_toZanonymize_headersZappend_domainZas_whois_serverZauth_param_basicZauthenticate_childrenZauthenticate_programZauthenticate_ttlZbroken_postsZbuffered_logsZcache_access_logZcache_announceZ	cache_dirZcache_dns_programZcache_effective_groupZcache_effective_userZ
cache_hostZcache_host_aclZcache_host_domainZ	cache_logZ	cache_memZcache_mem_highZcache_mem_lowZ	cache_mgrZcachemgr_passwdZ
cache_peerZcache_peer_accessZcahce_replacement_policyZcache_stoplistZcache_stoplist_patternZcache_store_logZ
cache_swapZcache_swap_highZcache_swap_logZcache_swap_lowZ	client_dbZclient_lifetimeZclient_netmaskZconnect_timeoutZcoredump_dirZdead_peer_timeoutZdebug_optionsZdelay_accessZdelay_classZdelay_initial_bucket_levelZdelay_parametersZdelay_poolsZ	deny_infoZdns_childrenZdns_defnamesZdns_nameserversZdns_testnamesZemulate_httpd_logZerr_html_textZfake_user_agentZfirewall_ipZforwarded_forZforward_snmpd_portZfqdncache_sizeZftpget_optionsZftpget_programZftp_list_widthZftp_passiveZftp_userZhalf_closed_clientsZheader_accessZheader_replaceZhierarchy_stoplistZhigh_response_time_warningZhigh_page_fault_warningZ
hosts_fileZ	htcp_portZhttp_accessZhttp_anonymizerZhttpd_accelZhttpd_accel_hostZhttpd_accel_portZhttpd_accel_uses_host_headerZhttpd_accel_with_proxyZ	http_portZhttp_reply_accessZ
icp_accessZicp_hit_staleZicp_portZicp_query_timeoutZident_lookupZident_lookup_accessZident_timeoutZincoming_http_averageZincoming_icp_averageZinside_firewallZipcache_highZipcache_lowZipcache_sizeZlocal_domainZlocal_ipZlogfile_rotateZlog_fqdnZlog_icp_queriesZlog_mime_hdrsZmaximum_object_sizeZmaximum_single_addr_triesZmcast_groupsZmcast_icp_query_timeoutZmcast_miss_addrZmcast_miss_encode_keyZmcast_miss_portZmemory_poolsZmemory_pools_limitZmemory_replacement_policyZ
mime_tableZmin_http_poll_cntZmin_icp_poll_cntZminimum_direct_hopsZminimum_object_sizeZminimum_retry_timeoutZmiss_accessZnegative_dns_ttlZnegative_ttlZneighbor_timeoutZneighbor_type_domainZ
netdb_highZ	netdb_lowZnetdb_ping_periodZnetdb_ping_rateZnever_directZno_cacheZpassthrough_proxyZpconn_timeoutZpid_filenameZpinger_programZpositive_dns_ttlZprefer_directZ
proxy_authZproxy_auth_realmZ
query_icmpZquick_abortZquick_abort_maxZquick_abort_minZquick_abort_pctZrange_offset_limitZread_timeoutZredirect_childrenZredirect_programZredirect_rewrites_host_headerZreference_ageZrefresh_patternZreload_into_imsZrequest_body_max_sizeZrequest_sizeZrequest_timeoutZshutdown_lifetimeZsingle_parent_bypassZsiteselect_timeoutZsnmp_accessZsnmp_incoming_addressZ	snmp_portZsource_pingZ	ssl_proxyZstore_avg_object_sizeZstore_objects_per_bucketZstrip_query_termsZswap_level1_dirsZswap_level2_dirsZtcp_incoming_addressZtcp_outgoing_addressZtcp_recv_bufsizeZtest_reachabilityZudp_hit_objZudp_hit_obj_sizeZudp_incoming_addressZudp_outgoing_addressZunique_hostnameZunlinkd_programZuri_whitespaceZuseragent_logZvisible_hostnameZ
wais_relayZwais_relay_hostZwais_relay_port)z
proxy-onlyZweightZttlzno-queryr   zround-robinzmulticast-responderZonZoffallZdenyZallowZviaparentz	no-digestheapZlruZrealmZchildrenZq1Zq2ZcredentialsttlZnonedisableZoffline_toggleZdiskd)ZshutdowninfoZ	parameterZserver_listZclient_listz
squid.conf)ZobjectsZ
vm_objectsZutilizationZipcacheZ	fqdncacheZdnsZ
redirectorioZreply_headersZfiledescriptorsZnetdb)Zstatusenablerl   clear)Z	url_regexZurlpath_regexZreferer_regexZportprotoZreq_mime_typeZrep_mime_typemethodZbrowserusersrcdstZtimeZ	dstdomainZidentZsnmp_communitya  (?:(?:(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|0x0*[0-9a-f]{1,2}|0+[1-3]?[0-7]{0,2})(?:\.(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|0x0*[0-9a-f]{1,2}|0+[1-3]?[0-7]{0,2})){3})|(?!.*::.*::)(?:(?!:)|:(?=:))(?:[0-9a-f]{0,4}(?:(?<=::)|(?<!::):)){6}(?:[0-9a-f]{0,4}(?:(?<=::)|(?<!::):)[0-9a-f]{0,4}(?:(?<=::)|(?<!:)|(?<=:)(?<!::):)|(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))z\s+#rI   z\b)prefixrN   zstats/zlog/=z(?:/(?:z|\b\d+\b))?z(?:\b\d+\b(?:-\b\d+|%)?)z\S+z	\s*TAG:.*z#popz.+)r#   rI   N)r.   r/   r0   r1   r2   r3   r4   r5   re   rg   rT   keywordsZoptsZactionsZactions_statsZactions_logZaclsZip_rer   r	   r   r   r   Constantr   r   ra   r   rc   r   r8   r+   r+   r+   r,   r   H  s6   
;
c               @   s   e Zd ZdZdZdgZdgZdgZdee	e
efde	dfed	gd
edfde	jdfed	gdedfdedfed	gdejfdejfdejfdeeeejfdefdejfdeee
ejfdefdefdefde
fde
fgdZdS )r   za
    Lexer for `Nginx <http://nginx.net/>`_ configuration files.

    .. versionadded:: 0.11
    zNginx configuration fileZnginxz
nginx.confztext/x-nginx-confz(include)(\s+)([^\s;]+)z[^\s;#]+stmtbasez\}z#pop:2z\{block;z#popz#.*\nzon|offz\$[^\s;#()]+z([a-z0-9.-]+)(:)([0-9]+)z[a-z-]+/[a-z-+]+z[0-9]+[km]?\bz(~)(\s*)([^\s{]+)z[:=~]z[^\s;#{}$]+z	/[^\s;#]*z\s+z[$;])r#   r}   r{   r|   N)r.   r/   r0   r1   r2   r3   r4   r5   r   r   r   r   r   r   Z	Namespacer	   r6   rz   r>   r   rU   r   ZRegexr8   r+   r+   r+   r,   r     s6   
c               @   sp   e Zd ZdZdZddgZg ZdgZddej	fde
fd	efd
efdefdefde
jfdefdejfdefg
iZdS )r   zg
    Lexer for `Lighttpd <http://lighttpd.net/>`_ configuration files.

    .. versionadded:: 0.11
    zLighttpd configuration fileZlightyZlighttpdztext/x-lighttpd-confr#   z#.*\nz/\S*z[a-zA-Z._-]+z\d+\.\d+\.\d+\.\d+(?:/\d+)?z[0-9]+z=>|=~|\+=|==|=|\+z\$[A-Z]+z[(){}\[\],]z"([^"\\]*(?:\\.[^"\\]*)*)"z\s+N)r.   r/   r0   r1   r2   r3   r4   r5   r	   r6   r   r   r   r
   r=   r   r   rV   r   r8   r+   r+   r+   r,   r     s    c               @   s   e Zd ZdZdZddgZddgZdgZdZd	Z	d
Z
ejejB Zddefde
f eeeefde
e
f eeeefde
f eeeeeefde
e
f eeeefde eeefde	f efdeefgiZdS )r   z`
    Lexer for `Docker <http://docker.io>`_ configuration files.

    .. versionadded:: 2.0
    ZDockerZdockerZ
dockerfileZ
Dockerfilez*.dockerztext/x-dockerfile-configz2(?:FROM|MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)z-(?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY)z(?:\s*\\?\s*)r#   z#.*z(ONBUILD)(%s)z(HEALTHCHECK)((%s--\w+=\w+%s)*)z*(VOLUME|ENTRYPOINT|CMD|SHELL)(%s)(\[.*?\])z(LABEL|ENV|ARG)((%s\w+=\w+%s)*)z(%s|VOLUME)\b(.*)z(%s)z(.*\\\n)*.+N)r.   r/   r0   r1   r2   r3   r4   r5   Z	_keywordsZ_bash_keywordsZ_lbre   rg   rf   rT   r	   r   r   r   r   r   r   r8   r+   r+   r+   r,   r     s*   

c               @   st  e Zd ZdZdZddgZdgZddgZeded	ed
ededde	fge
ddddejfdejdfdejfdeejeefe
ddddejdfe
ddddejfdejdfgdeeeefed	ed
gdejdfe
ddddejfeded	defdejdfgd eejfgd!efgd"ejfdejfgd#ejfd$ejdfd%ejdfd&ejfgd'efdefd(efgd)	Zd*S )+r   zc
    Lexer for `terraformi .tf files <https://www.terraform.io/>`_.

    .. versionadded:: 2.1
    Z	TerraformZ	terraformZtfz*.tfzapplication/x-tfzapplication/x-terraformrY   punctuationcurlybasic
whitespacez[0-9]+)trueZfalsez\b)rw   rN   z\s*/\*rI   z\s*#.*\nz(.*?)(\s*)(=))ZvariableresourceZproviderZprovisionermodulefunction)ZingressZegressZlistenerr   Z
connectionaliasz\$\{var_builtinz(\s+)(".*")(\s+)z#push)concatfilejoinlookupelementz\s+z\}z#popz(".*")z
[\[\](),.]z\{z[^*/]z/\*z\*/z[*/]z\nz\\\n)	r#   r   r   r   rY   r   r   rI   r   N)r.   r/   r0   r1   r2   r3   r4   r5   r   r   r   r   r]   r	   Z	Multiliner6   r   r   r7   r   r
   r^   r`   r   rb   r=   rV   r   r8   r+   r+   r+   r,   r   5  sR   





c            	   @   s   e Zd ZdZdZdgZddgZg Zdefde	j
dfgded	fd
edfdefde	jfgdefdedfdeeefdedfd
efde	jfgdefd
ed	fdefdefgdZdS )r   zm
    Lexer for termcap database source.

    This is very simple and minimal.

    .. versionadded:: 2.1
    ZTermcapZtermcapztermcap.srcz^#.*$z
^[^\s#:|]+namesz\nz#pop:defsz\|z[^:|]+z
\\\n[ \t]*z\n[ \t]*z#pop:2z(#)([0-9]+)rx   dataz	[^\s:=#]+z\\072z[^:\\]+r[   )r#   r   r   r   N)r.   r/   r0   r1   r2   r3   r4   r5   r	   r   rh   r   r   r7   r   r
   r   r_   r   r8   r+   r+   r+   r,   r   }  s*   	

c            
   @   s   e Zd ZdZdZdgZddgZg Zdefde	j
dfgded	fd
eeedfdefde	jfgdefdedfdeeefdedfd
eeefde	jfgdefd
eeed	fdefdefgdZdS )r    zn
    Lexer for terminfo database source.

    This is very simple and minimal.

    .. versionadded:: 2.1
    ZTerminfoZterminfozterminfo.srcz^#.*$z
^[^\s#,|]+r   z\nz#popz(,)([ \t]*)r   z\|z[^,|]+z\n[ \t]+z#pop:2z(#)([0-9]+)rx   r   z	[^\s,=#]+z\\[,\\]z[^\\,]+r[   )r#   r   r   r   N)r.   r/   r0   r1   r2   r3   r4   r5   r	   r   rh   r   r   r   r7   r
   r   r_   r   r8   r+   r+   r+   r,   r      s*   	

c            	   @   s   e Zd ZdZdZdgZdgZg Zdej	fde
ejefde
ejedfed	d
efdefgdefdejdfgdejdfdejfged	dej	dfdedfdefdefgdZdS )r!   z
    Lexer for `pkg-config
    <http://www.freedesktop.org/wiki/Software/pkg-config/>`_
    (see also `manual page <http://linux.die.net/man/1/pkg-config>`_).

    .. versionadded:: 2.1
    Z	PkgConfigZ	pkgconfigz*.pcz#.*$z	^(\w+)(=)z^([\w.]+)(:)spvalueinterpz[^${}#=:\n.]+r[   z\$\$z\$\{r   z\}z#popz\w+z\nz
[^${}#\n]+)r#   r   r   r   N)r.   r/   r0   r1   r2   r3   r4   r5   r	   r6   r   r   r7   r
   rh   r   r   r   r   rb   r8   r+   r+   r+   r,   r!     s*   


c            	   @   sp   e Zd ZdZdZdgZdgZg Zddej	fde
fdeejeefd	eeejefed
ddejfdefgiZdS )r"   a  
    Lexer for `pacman.conf
    <https://www.archlinux.org/pacman/pacman.conf.5.html>`_.

    Actually, IniLexer works almost fine for this format,
    but it yield error token. It is because pacman.conf has
    a form without assignment like:

        UseSyslog
        Color
        TotalDownload
        CheckSpace
        VerbosePkgLists

    These are flags to switch on.

    .. versionadded:: 2.1
    Z
PacmanConfZ
pacmanconfzpacman.confr#   z#.*$z^\s*\[.*?\]\s*$z(\w+)(\s*)(=)z^(\s*)(\w+)(\s*)$)z$repoz$archz%oz%uz\b)rN   r[   N)r.   r/   r0   r1   r2   r3   r4   r5   r	   r6   r   r   r   r7   r   r
   r   r>   r8   r+   r+   r+   r,   r"     s"   ))r1   re   Zpygments.lexerr   r   r   r   r   r   Zpygments.tokenr   r	   r
   r   r   r   r   r   r   r   Zpygments.lexers.shellr   Zpygments.lexers.datar   __all__r   r   r   rD   r   r   r   r   r   r   r   r   r   r    r!   r"   r+   r+   r+   r,   <module>
   s6    0,M=* .!H..8