B
    \cJ                 @   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 ddddg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.data
    ~~~~~~~~~~~~~~~~~~~~

    Lexers for data file format.

    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)
RegexLexerExtendedRegexLexerLexerContextincludebygroupsinherit)	TextCommentKeywordNameStringNumberPunctuationLiteralError	YamlLexer	JsonLexerJsonBareObjectLexerJsonLdLexerc                   s    e Zd ZdZ fddZ  ZS )YamlLexerContextz'Indentation context for the YAML lexer.c                s.   t t| j|| g | _d| _d| _d | _d S )Nr   )superr   __init__indent_stackindentnext_indentblock_scalar_indent)selfargskwds)	__class__ 3lib/python3.7/site-packages/pygments/lexers/data.pyr      s
    zYamlLexerContext.__init__)__name__
__module____qualname____doc__r   __classcell__r!   r!   )r    r"   r      s   r   c                   s  e Zd ZdZdZdgZddgZdgZdd Zd	d
 Z	dgddZ
dhddZdd Zdd Zdd Zdd Zdefdefdejfde	ejdfde	ejdfde	ejd fd!e
ed"d#d$fgdefdejfd%ed&fgd'eeed(fgd)eeejeejd(fgd*eed&fd+e
efd,eejfd-e
ed.fgd/eed.fd0efd1eejeed"d2fed3ed4ed5d6eejd7fgd8ejfd9ejfd:ejfd;ejfgd<eejd"d2fd=ejd>fgd?ejd@fdAejdBfdCedDfdEedFfgd0efdefdejfdGejfed3ed5dHeejdIfgedJdKejd.fgd1eejefedJdLejd.fgd%efdMeeej fdNeefdOej fgdPeejd(fdQeejd(fgdRefdSefdefd0ejfgedTdUej!fdVefdCed.fgedTdWefdXej!fdYefdZed.fgdMefdefd[eejd\fdNeed.fgd]eed.fd^ed.fdSefded_fd0e"j#j$fd`e"j#j$fgdaeed.fd^ed.fdRefdSefdefd0ejfdbejfgdcZ%di fdedf	Z&  Z'S )jr   z}
    Lexer for `YAML <http://yaml.org/>`_, a human-friendly data serialization
    language.

    .. versionadded:: 0.11
    ZYAMLZyamlz*.yamlz*.ymlztext/x-yamlc                s    fdd}|S )zDo not produce empty tokens.c             3   s.   |  }|sd S |  |fV  | |_d S )N)groupstartendpos)lexermatchcontexttext)token_classr!   r"   callback0   s
    z%YamlLexer.something.<locals>.callbackr!   )r0   r1   r!   )r0   r"   	something.   s    zYamlLexer.somethingc                s    fdd}|S )zReset the indentation levels.c             3   s>   |  }g |_d|_d|_d |_|  |fV  | |_d S )Nr   r   )r(   r   r   r   r   r)   r*   r+   )r,   r-   r.   r/   )r0   r!   r"   r1   :   s    z(YamlLexer.reset_indent.<locals>.callbackr!   )r0   r1   r!   )r0   r"   reset_indent8   s    zYamlLexer.reset_indentFc                s    fdd}|S )z"Save a possible indentation level.c             3   s   |  }d} rnt||_|j|jk rx|j|jk rB|j |_q(W |j|jkr||jd  }|d |j }n| jt|7  _|r| |fV  |r| t| j|fV  | |_	d S )N )
r(   lenr   r   r   popr)   r   r*   r+   )r,   r-   r.   r/   Zextra)r)   r0   r!   r"   r1   F   s     
z'YamlLexer.save_indent.<locals>.callbackr!   )r0   r)   r1   r!   )r)   r0   r"   save_indentD   s    zYamlLexer.save_indentc                s    fdd}|S )z+Set the previously saved indentation level.c             3   s^   |  }|j|jk r*|j|j |j|_ s@| jt|7  _| |fV  | |_d S )N)	r(   r   r   r   appendr5   r)   r*   r+   )r,   r-   r.   r/   )implicitr0   r!   r"   r1   \   s    z&YamlLexer.set_indent.<locals>.callbackr!   )r0   r9   r1   r!   )r9   r0   r"   
set_indentZ   s    	zYamlLexer.set_indentc                s    fdd}|S )z5Set an explicit indentation level for a block scalar.c             3   sd   |  }d |_|sd S | d}|rBt|jd}t|}|| |_|r`|  |fV  | |_d S )N   r   )r(   r   maxr   intr)   r*   r+   )r,   r-   r.   r/   Z	incrementZcurrent_indent)r0   r!   r"   r1   i   s    

z3YamlLexer.set_block_scalar_indent.<locals>.callbackr!   )r0   r1   r!   )r0   r"   set_block_scalar_indentg   s    z!YamlLexer.set_block_scalar_indentc                s    fdd}|S )z(Process an empty line in a block scalar.c             3   s   |  }|jd ks t||jkr6|rx| |fV  nB|d |j }||jd  }| |fV  | |j  |fV  | |_d S )N)r(   r   r5   r)   r*   r+   )r,   r-   r.   r/   indentationZcontent)content_token_classindent_token_classr!   r"   r1   z   s    

z9YamlLexer.parse_block_scalar_empty_line.<locals>.callbackr!   )rA   r@   r1   r!   )r@   rA   r"   parse_block_scalar_empty_linex   s    z'YamlLexer.parse_block_scalar_empty_linec                s    fdd}|S )z-Process indentation spaces in a block scalar.c             3   s   |  }|jd krJt|t|jdkr>|j  |j  d S t||_n&t||jk rp|j  |j  d S |r|  |fV  | |_	d S )Nr   )
r(   r   r5   r<   r   stackr6   r)   r*   r+   )r,   r-   r.   r/   )r0   r!   r"   r1      s    




z5YamlLexer.parse_block_scalar_indent.<locals>.callbackr!   )r0   r1   r!   )r0   r"   parse_block_scalar_indent   s    z#YamlLexer.parse_block_scalar_indentc                s    fdd}|S )z-Process indentation spaces in a plain scalar.c             3   sP   |  }t||jkr.|j  |j  d S |rL|  |fV  | |_d S )N)r(   r5   r   rC   r6   r)   r*   r+   )r,   r-   r.   r/   )r0   r!   r"   r1      s    

z5YamlLexer.parse_plain_scalar_indent.<locals>.callbackr!   )r0   r1   r!   )r0   r"   parse_plain_scalar_indent   s    	z#YamlLexer.parse_plain_scalar_indentz[ ]+(?=#|$)z\n+z#[^\n]*z^%YAML(?=[ ]|$)zyaml-directivez^%TAG(?=[ ]|$)ztag-directivez^(?:---|\.\.\.)(?=[ ]|$)z
block-linez[ ]*(?!\s|$)T)r)   )z
block-liner?   z\nz#pop:2z([ ]+)([0-9]+\.[0-9]+)zignored-linez;([ ]+)(!|![\w-]*!)([ ]+)(!|!?[\w;/?:@&=+$,.!~*\'()\[\]%-]+)z[ ]*$z[ ]+(?=[?:-](?:[ ]|$))z[?:-](?=[ ]|$)z[ ]*z#popz[ ]*(?=#|$)z[ ]+z([^,:?\[\]{}\n]+)(:)(?=[ ]|$))r9   descriptorszblock-nodesz
flow-nodesz'(?=[^\s?:,\[\]{}#&*!|>\'"%@`-]|[?:-]\S)zplain-scalar-in-block-contextz!!<[\w#;/?:@&=+$,.!~*\'()\[\]%-]+>z+!(?:[\w-]+!)?[\w#;/?:@&=+$,.!~*\'()\[\]%-]*z&[\w-]+z\*[\w-]+z
:(?=[ ]|$)z[|>])zblock-scalar-contentzblock-scalar-headerz\[zflow-sequencez\{zflow-mappingz\'zsingle-quoted-scalarz\"zdouble-quoted-scalarz[?:,]z(?=[^\s?:,\[\]{}#&*!|>\'"%@`])zplain-scalar-in-flow-contextzflow-collectionz\]z\}z^[ ]+$z^[ ]*z[\S\t ]+z([1-9])?[+-]?(?=[ ]|$)z[+-]?([1-9])?(?=[ ]|$)z^[ ]+z[ ]+$zquoted-scalar-whitespacesz\'\'z[^\s\']+z\\[0abt\tn\nvfre "\\N_LP]z5\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})z	[^\s"\\]+"z^(?=---|\.\.\.)z#pop:3z[ ]*(?=:[ ]|:$)z	[ ]+(?=#)z&plain-scalar-in-block-context-new-linez(?::(?!\s)|[^\s:])+z[ ]*(?=[,:?\[\]{}])z[^\s,:?\[\]{}]+)rootzignored-linezyaml-directiveztag-directiver?   z
block-linerF   zblock-nodesz
flow-nodeszflow-collectionzflow-sequencezflow-mappingzblock-scalar-contentzblock-scalar-headerzquoted-scalar-whitespaceszsingle-quoted-scalarzdouble-quoted-scalarz&plain-scalar-in-block-context-new-linezplain-scalar-in-block-contextzplain-scalar-in-flow-contextNc                s$   |d krt |d}tt| ||S )Nr   )r   r   r   get_tokens_unprocessed)r   r/   r.   )r    r!   r"   rI     s    
z YamlLexer.get_tokens_unprocessed)F)F)NN)(r#   r$   r%   r&   namealiases	filenames	mimetypesr2   r3   r7   r:   r>   rB   rD   rE   r   r	   Singler   TagZ	Namespacer   r   r
   ZTyper   Z	Indicatorr   ZVariableZLabelr   ConstantZEscaper   ZScalarZPlaintokensrI   r'   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ZdZdZd	efgd
ejfde  ejfeejfdejfgeddefdedfdedfgeddejdfdedfgededdefdedfgededdedfdedfgedgdZdS )r   z>
    For JSON data structures.

    .. versionadded:: 1.5
    ZJSONZjsonz*.jsonzapplication/jsonz-?(0|[1-9]\d*)z\.\d+z[eE](\+|-)?\d+z\s+z(true|false|null)\bzB%(int_part)s(%(frac_part)s%(exp_part)s|%(exp_part)s|%(frac_part)s)z"(\\\\|\\"|[^"])*"value:,z#popz\}z#pop:2
whitespaceobjectattributez\]simplevaluez\{objectvaluez\[
arrayvalue)rU   rW   rV   rX   rY   rR   rH   N)r#   r$   r%   r&   rJ   rK   rL   rM   reDOTALLflagsZint_partZ	frac_partZexp_partr   r
   rP   varsr   ZFloatZIntegerr   Doubler   r   r   rO   rQ   r!   r!   r!   r"   r     s@   





c               @   sB   e Zd ZdZdZdgZg ZdgZdefe	dgdefe
gdZdS )	r   za
    For JSON data structures (with missing object curly braces).

    .. versionadded:: 2.2
    ZJSONBareObjectzjson-objectzapplication/json-objectz\}rX   )rH   rV   N)r#   r$   r%   r&   rJ   rK   rL   rM   r   r   r   rQ   r!   r!   r!   r"   r     s   c               @   s<   e Zd ZdZdZddgZdgZdgZddej	d	fe
giZd
S )r   zV
    For `JSON-LD <http://json-ld.org/>`_ linked data.

    .. versionadded:: 2.0
    zJSON-LDZjsonldzjson-ldz*.jsonldzapplication/ld+jsonrX   zU"@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"rV   N)r#   r$   r%   r&   rJ   rK   rL   rM   r   Z	Decoratorr   rQ   r!   r!   r!   r"   r     s   )r&   rZ   Zpygments.lexerr   r   r   r   r   r   Zpygments.tokenr   r	   r
   r   r   r   r   r   r   __all__r   r   r   r   r   r!   r!   r!   r"   <module>
   s    ,   O