B
    G¸
\9I  ã               @   sø  d Z ddlZddlmZ ddlmZ ddlmZ dgZej	j
ZejjZejjZej	jZejjZejZejjZejZejZejZej	jZej Z!d5d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-G d!d"„ d"e$ƒZ.G d#d$„ d$e(ƒZ/G d%d&„ d&e(ƒZ0G d'd(„ d(e$ƒZ1G d)d*„ d*e1ƒZ2G d+d,„ d,e1ƒZ3G d-d.„ d.e1ƒZ4G d/d0„ d0e1ƒZ5G d1d2„ d2e5ƒZ6G d3d4„ d4ƒZ7dS )6zÛ
    pygments.lexers.robotframework
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Lexer for Robot Framework.

    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)ÚLexer)ÚToken)Ú	text_typeÚRobotFrameworkLexerÚ c             C   s2   |   ¡ } x$|d D ]}|| kr|  |d¡} qW | S )Nú r   )ÚlowerÚreplace)ÚstringÚremoveÚchar© r   ú=lib/python3.7/site-packages/pygments/lexers/robotframework.pyÚ	normalize1   s
    r   c               @   s8   e Zd ZdZdZdgZddgZdgZdd„ Zd	d
„ Z	dS )r   z¢
    For `Robot Framework <http://robotframework.org>`_ test data.

    Supports both space and pipe separated plain text formats.

    .. versionadded:: 1.6
    ZRobotFrameworkZrobotframeworkz*.txtz*.robotztext/x-robotframeworkc             K   s"   d|d< d|d< t j| f|Ž d S )Né   ÚtabsizezUTF-8Úencoding)r   Ú__init__)ÚselfZoptionsr   r   r   r   F   s    zRobotFrameworkLexer.__init__c             c   sx   t ƒ }tƒ }d}xb| ¡ D ]V}xP| |¡D ]B\}}x8| ||¡D ](\}}|r@||t|ƒfV  |t|ƒ7 }q@W q*W qW d S )Nr   )ÚRowTokenizerÚVariableTokenizerÚ
splitlinesÚtokenizer   Úlen)r   ÚtextZrow_tokenizerZvar_tokenizerÚindexÚrowÚvalueÚtokenr   r   r   Úget_tokens_unprocessedK   s    z*RobotFrameworkLexer.get_tokens_unprocessedN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚaliasesÚ	filenamesZ	mimetypesr   r   r   r   r   r   r   9   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             c   s^   t |dd}|jdk s"|ttfkr0||fV  d S x(|  |||¡D ]\}}|r@||fV  q@W d S )Nz$@%&)Úidentifiersr   )ÚVariableSplitterÚstartÚCOMMENTÚERRORÚ	_tokenize)r   r
   r   Úvarr   r   r   r   r   Y   s    
zVariableTokenizer.tokenizec             c   sÊ   |d |j … }||fV  |jd tfV  x$|  |jt¡D ]\}}||fV  q8W dtfV  |jr˜dtfV  x$|  |jt¡D ]\}}||fV  qxW dtfV  x,|  ||jd … |¡D ]\}}||fV  q°W d S )NÚ{Ú}ú[ú])r)   Ú
identifierÚSYNTAXr   ÚbaseÚVARIABLEr   Úend)r   r-   r
   Z
orig_tokenZbeforer   r   r   r   r   r,   b   s    



 zVariableTokenizer._tokenizeN)r    r!   r"   r   r,   r   r   r   r   r   W   s   	r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c             C   sN   t ƒ | _tƒ | _tƒ }t|jƒ}tƒ }tƒ }|||||||||||dœ| _	d S )N)ÚsettingsZsettingÚmetadataÚ	variablesZvariableÚ	testcasesZtestcaseÚkeywordsÚkeywordZuserkeywordsZuserkeyword)
ÚUnknownTableÚ_tableÚRowSplitterÚ	_splitterÚTestCaseTableÚSettingTableÚset_default_templateÚVariableTableÚKeywordTableÚ_tables)r   r:   r7   r9   r;   r   r   r   r   t   s    
zRowTokenizer.__init__c             c   s¢   d}d}xŠt | j |¡ƒD ]v\}}t|d dƒ\}}| d¡rDd}n"|dkrf| d¡rf|  |¡| _d}x(|  |||||¡D ]\}}||fV  qzW qW | j ¡  d S )NFé   r   ú#Tr   Ú*)	Ú	enumerater@   ÚsplitÚdivmodÚ
startswithÚ_start_tabler>   r,   Úend_row)r   r   Ú	commentedÚheadingr   r   Ú	separatorr   r   r   r   r   ‚   s    
zRowTokenizer.tokenizec             C   s   t |dd}| j |tƒ ¡S )NrI   )r   )r   rF   Úgetr=   )r   Úheaderr$   r   r   r   rN   ’   s    zRowTokenizer._start_tablec             c   sZ   |r|t fV  nF|r |tfV  n6|r0|tfV  n&x$| j ||¡D ]\}}||fV  q@W d S )N)r*   Ú	SEPARATORÚHEADINGr>   r   )r   r   r   rP   rR   rQ   r   r   r   r   r,   –   s    zRowTokenizer._tokenizeN)r    r!   r"   r   r   rN   r,   r   r   r   r   r   r   s   r   c               @   s8   e Zd Ze d¡Ze d¡Zdd„ Zdd„ Zdd„ Z	d	S )
r?   z( {2,})z((?:^| +)\|(?: +|$))c             c   s8   |  d¡r| jp| j}x||ƒD ]
}|V  q W dV  d S )Nz| Ú
)rM   Ú_split_from_pipesÚ_split_from_spaces)r   r   Zsplitterr   r   r   r   rK   ¦   s
    
zRowSplitter.splitc             c   s&   dV  x| j  |¡D ]
}|V  qW d S )Nr   )Ú_space_splitterrK   )r   r   r   r   r   r   rY   ­   s    zRowSplitter._split_from_spacesc             c   sV   | j  |d¡\}}}|V  x0| j  |¡rJ| j  |d¡\}}}|V  |V  qW |V  d S )NrG   )Ú_pipe_splitterrK   Úsearch)r   r   Ú_rR   ÚrestZcellr   r   r   rX   ²   s    
zRowSplitter._split_from_pipesN)
r    r!   r"   ÚreÚcompilerZ   r[   rK   rY   rX   r   r   r   r   r?   ¢   s
   

r?   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ ZdS )
Ú	TokenizerNc             C   s
   d| _ d S )Nr   )Ú_index)r   r   r   r   r   ¿   s    zTokenizer.__init__c             C   s8   |   || j¡}|  jd7  _t|ttƒƒr4||fg}|S )NrG   )r,   rb   Ú
isinstanceÚtyper   )r   r   Zvalues_and_tokensr   r   r   r   Â   s
    
zTokenizer.tokenizec             C   s   t |t| jƒd ƒ}| j| S )NrG   )Úminr   Ú_tokens)r   r   r   r   r   r   r,   É   s    zTokenizer._tokenizec             C   s>   |  d¡r|d d…  ¡ }t|dd}|jdko<|jt|ƒkS )Nú=éÿÿÿÿz$@&)r'   r   )ÚendswithÚstripr(   r)   r6   r   )r   r   r-   r   r   r   Ú
_is_assignÍ   s    
zTokenizer._is_assign)r    r!   r"   rf   r   r   r,   rk   r   r   r   r   ra   ¼   s
   ra   c               @   s   e Zd ZefZdS )ÚCommentN)r    r!   r"   r*   rf   r   r   r   r   rl   Ô   s   rl   c               @   s6   e Zd ZeefZdZdZdZdZ	d	dd„Z
dd„ ZdS )
ÚSetting)	Z
suitesetupZsuitepreconditionZsuiteteardownZsuitepostconditionZ	testsetupZtestpreconditionZtestteardownZtestpostconditionÚtesttemplate)ZlibraryÚresourcer9   )Údocumentationr8   Z	forcetagsZdefaulttagsZtesttimeoutNc             C   s   t  | ¡ || _d S )N)ra   r   Ú_template_setter)r   Útemplate_setterr   r   r   r   â   s    
zSetting.__init__c             C   s„   |dkr| j r|   |¡ |dkrdt|ƒ}|| jkr@tdd| _qv|| jkrTtƒ | _qv|| jkrvtS n| jrv| j 	|¡S t
 | ||¡S )NrG   r   F)Úsupport_assign)rq   r   Ú_keyword_settingsÚKeywordCallÚ_custom_tokenizerÚ_import_settingsÚImportSettingÚ_other_settingsr+   r   ra   r,   )r   r   r   Z
normalizedr   r   r   r,   æ   s    




zSetting._tokenize)N)r    r!   r"   ÚSETTINGÚARGUMENTrf   rt   rw   ry   rv   r   r,   r   r   r   r   rm   Ø   s   
rm   c               @   s   e Zd ZeefZdS )rx   N)r    r!   r"   ÚIMPORTr{   rf   r   r   r   r   rx   ö   s   rx   c               @   s    e Zd ZdZdZdZdd„ ZdS )ÚTestCaseSetting)ZsetupZpreconditionÚteardownZpostconditionÚtemplater   )rp   ÚtagsÚtimeoutc             C   sJ   |dkr<t  | |dd… |¡}dtf|dd… |fdtfgS t  | ||¡S )Nr   rG   rh   r0   r1   )rm   r,   r3   )r   r   r   rd   r   r   r   r,      s    zTestCaseSetting._tokenizeN)r    r!   r"   rt   rw   ry   r,   r   r   r   r   r}   ú   s   r}   c               @   s   e Zd ZdZdZdS )ÚKeywordSetting)r~   )rp   Z	argumentsÚreturnr   r€   N)r    r!   r"   rt   ry   r   r   r   r   r‚     s   r‚   c               @   s   e Zd ZeefZdd„ ZdS )ÚVariablec             C   s$   |dkr|   |¡stS t | ||¡S )Nr   )rk   r+   ra   r,   )r   r   r   r   r   r   r,     s    zVariable._tokenizeN)r    r!   r"   r3   r{   rf   r,   r   r   r   r   r„     s   r„   c               @   s&   e Zd ZeefZddd„Zdd„ ZdS )ru   Tc             C   s   t  | ¡ | | _d| _d S )Nr   )ra   r   Ú_keyword_foundÚ_assigns)r   rs   r   r   r   r     s    
zKeywordCall.__init__c             C   sP   | j s"|  |¡r"|  jd7  _tS | j r<t | ||| j ¡S d| _ tƒ  |t¡S )NrG   T)	r…   rk   r†   r3   ra   r,   ÚGherkinTokenizerr   ÚKEYWORD)r   r   r   r   r   r   r,     s    zKeywordCall._tokenizeN)T)r    r!   r"   rˆ   r{   rf   r   r,   r   r   r   r   ru     s   
ru   c               @   s"   e Zd Ze dej¡Zdd„ ZdS )r‡   z^(Given|When|Then|And) c             C   sB   | j  |¡}|s||fgS | ¡ }|d |… tf||d … |fgS )N)Ú_gherkin_prefixÚmatchr6   ÚGHERKIN)r   r   r   rŠ   r6   r   r   r   r   *  s
    
zGherkinTokenizer.tokenizeN)r    r!   r"   r_   r`   Ú
IGNORECASEr‰   r   r   r   r   r   r‡   '  s   r‡   c               @   s   e Zd ZefZdS )ÚTemplatedKeywordCallN)r    r!   r"   r{   rf   r   r   r   r   r   2  s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚForLoopc             C   s   t  | ¡ d| _d S )NF)ra   r   Ú_in_arguments)r   r   r   r   r   8  s    
zForLoop.__init__c             C   s$   | j r
tpt}| ¡ dkr d| _ |S )N)ÚINzIN RANGET)r   r{   r3   Úupper)r   r   r   r   r   r   r   r,   <  s    zForLoop._tokenizeN)r    r!   r"   r   r,   r   r   r   r   rŽ   6  s   rŽ   c               @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )Ú_TableNc             C   s   |   ¡ | _|| _g | _d S )N)Ú_tokenizer_classÚ
_tokenizerÚ_prev_tokenizerÚ_prev_values_on_row)r   Úprev_tokenizerr   r   r   r   F  s    
z_Table.__init__c             c   sL   |   ||¡r | j| _|tfV  nx|  ||¡D ]
}|V  q.W | j |¡ d S )N)Ú
_continuesr•   r”   r3   r,   r–   Úappend)r   r   r   Zvalue_and_tokenr   r   r   r   K  s    
z_Table.tokenizec                s    |dkot ‡ fdd„ˆ jD ƒƒS )Nz...c             3   s   | ]}ˆ   |¡V  qd S )N)Ú	_is_empty)Ú.0Út)r   r   r   ú	<genexpr>U  s   z$_Table._continues.<locals>.<genexpr>)Úallr–   )r   r   r   r   )r   r   r˜   T  s    z_Table._continuesc             C   s   |dkS )N)r   ú\r   )r   r   r   r   r   rš   X  s    z_Table._is_emptyc             C   s   | j  |¡S )N)r”   r   )r   r   r   r   r   r   r,   [  s    z_Table._tokenizec             C   s   | j | jd d S )N)r—   )r   r”   )r   r   r   r   rO   ^  s    z_Table.end_row)N)
r    r!   r"   r“   r   r   r˜   rš   r,   rO   r   r   r   r   r’   C  s   
	r’   c               @   s   e Zd ZeZdd„ ZdS )r=   c             C   s   dS )NFr   )r   r   r   r   r   r   r˜   e  s    zUnknownTable._continuesN)r    r!   r"   rl   r“   r˜   r   r   r   r   r=   b  s   r=   c               @   s   e Zd ZeZdS )rD   N)r    r!   r"   r„   r“   r   r   r   r   rD   i  s   rD   c               @   s*   e Zd ZeZddd„Zdd„ Zdd„ ZdS )	rB   Nc             C   s   t  | |¡ || _d S )N)r’   r   rq   )r   rr   r—   r   r   r   r   p  s    zSettingTable.__init__c             C   s.   |dkr t |ƒdkr t| jƒ| _t | ||¡S )Nr   rn   )r   rm   rq   r”   r’   r,   )r   r   r   r   r   r   r,   t  s    zSettingTable._tokenizec             C   s   | j | j| jd d S )N)r—   )r   rq   r”   )r   r   r   r   rO   y  s    zSettingTable.end_row)N)r    r!   r"   rm   r“   r   r,   rO   r   r   r   r   rB   m  s   
rB   c               @   sd   e Zd ZeZdZdZedd„ ƒZdd„ Z	dd„ Z
dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )rA   Nc             C   s   | j s| jr| j dk	rtS tS )NF)Ú_test_templateÚ_default_templater   ru   )r   r   r   r   r“   ‚  s    
zTestCaseTable._tokenizer_classc             C   s   |dkot  | ||¡S )Nr   )r’   r˜   )r   r   r   r   r   r   r˜   ‰  s    zTestCaseTable._continuesc             C   s    |dkr |rd | _ tƒ  |t¡S |dkr\|  |¡r\|  |¡rRd| _ |  | j¡| _n
|  ¡ | _|dkrv|  	|¡rvt
ƒ | _|dkr’|  |¡r’|tfgS t | ||¡S )Nr   rG   F)r    r‡   r   Ú
TC_KW_NAMEÚ_is_settingÚ_is_templateÚ_setting_classÚset_test_templater”   Ú_is_for_looprŽ   rš   r3   r’   r,   )r   r   r   r   r   r   r,   Œ  s    


zTestCaseTable._tokenizec             C   s   |  d¡o| d¡S )Nr0   r1   )rM   ri   )r   r   r   r   r   r£     s    zTestCaseTable._is_settingc             C   s   t |ƒdkS )Nz
[template])r   )r   r   r   r   r   r¤      s    zTestCaseTable._is_templatec             C   s   |  d¡ot|dddkS )Nú:)r   Úfor)rM   r   )r   r   r   r   r   r§   £  s    zTestCaseTable._is_for_loopc             C   s   |   |¡| _d S )N)Ú_is_template_setr    )r   r   r   r   r   r¦   ¦  s    zTestCaseTable.set_test_templatec             C   s   |   |¡| _d S )N)rª   r¡   )r   r   r   r   r   rC   ©  s    z"TestCaseTable.set_default_templatec             C   s   t |ƒdkS )N)r   rŸ   Znonez${empty})r   )r   r   r   r   r   rª   ¬  s    zTestCaseTable._is_template_set)r    r!   r"   r}   r¥   r    r¡   Úpropertyr“   r˜   r,   r£   r¤   r§   r¦   rC   rª   r   r   r   r   rA   }  s   rA   c               @   s   e Zd ZeZeZdd„ ZdS )rE   c             C   s   dS )NFr   )r   r   r   r   r   r¤   ´  s    zKeywordTable._is_templateN)r    r!   r"   ru   r“   r‚   r¥   r¤   r   r   r   r   rE   °  s   rE   c               @   s„   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) r(   c             C   sZ   d | _ d | _d | _d| _d| _|| _d| _y|  |¡ W n tk
rL   Y n
X |  	¡  d S )Nrh   F)
r2   r4   r   r)   r6   Ú_identifiersÚ_may_have_internal_variablesÚ_splitÚ
ValueErrorÚ	_finalize)r   r
   r'   r   r   r   r   ¼  s    zVariableSplitter.__init__c             C   s   | j r| | j¡S | jS )N)r­   Zreplace_stringr4   )r   r9   r   r   r   Úget_replaced_baseË  s    z"VariableSplitter.get_replaced_basec             C   sj   | j d | _d | j dd… ¡| _| jt| j ƒ | _|  ¡ rfd | jdd… ¡| _	|  jt| jƒ7  _d S )Nr   r   r   rh   rG   )
Ú_variable_charsr2   Újoinr4   r)   r   r6   Ú _has_list_or_dict_variable_indexÚ#_list_and_dict_variable_index_charsr   )r   r   r   r   r°   Ð  s    zVariableSplitter._finalizec             C   s   | j o| j d dkS )Nrh   r1   )rµ   )r   r   r   r   r´   Ø  s    z1VariableSplitter._has_list_or_dict_variable_indexc          	   C   s¨   |   |¡\}}|| _d| _| j| _|| dg| _g | _|| _|d7 }x^t||d … ƒD ]J\}}||7 }y|  ||¡ W n t	k
rŠ   d S X ||krV|  
¡ sVd S qVW d S )NrG   r.   r   )Ú_find_variabler)   Ú_open_curlyÚ_variable_stateÚ_stater²   rµ   Ú_stringrJ   ÚStopIterationÚ_scanning_list_variable_index)r   r
   Ústart_indexZ	max_indexr   r   r   r   r   r®   Ü  s     zVariableSplitter._splitc             C   s   | j | j| jgkS )N)r¹   Ú"_waiting_list_variable_index_stateÚ_list_variable_index_state)r   r   r   r   r¼   î  s    z.VariableSplitter._scanning_list_variable_indexc             C   s^   |  d¡}|dkrtdƒ‚|  ||¡r8|  |d |… ¡S |  |d|¡}|dkrVtdƒ‚||fS )Nr/   rh   zNo variable end foundrG   zNo variable start found)Úrfindr¯   Ú_is_escapedr¶   Ú_find_start_index)r   r
   Zmax_end_indexr½   r   r   r   r¶   ò  s    
zVariableSplitter._find_variablec             C   s@   |  d||¡d }|dk rdS |  ||¡r.|S |  ||d |¡S )Nr.   rG   r   rh   r   )ÚfindÚ_start_index_is_okrÂ   )r   r
   r)   r6   r   r   r   r   rÂ   ý  s    z"VariableSplitter._find_start_indexc             C   s   || | j ko|  ||¡ S )N)r¬   rÁ   )r   r
   r   r   r   r   rÄ     s    z#VariableSplitter._start_index_is_okc             C   s4   d}x*|dkr.||d  dkr.|d8 }| }qW |S )NFr   rG   rŸ   r   )r   r
   r   Zescapedr   r   r   rÁ   	  s
    
zVariableSplitter._is_escapedc             C   sf   | j  |¡ |dkrP|  | j|¡sP|  jd8  _| jdkrb|  ¡ sFt‚| j| _n|| j	krb| j
| _d S )Nr/   rG   r   )r²   r™   rÁ   rº   r·   Ú_is_list_or_dict_variabler»   r¾   r¹   r¬   Ú_internal_variable_start_state)r   r   r   r   r   r   r¸     s    


z VariableSplitter._variable_statec             C   s   | j d dkS )Nr   )ú@ú&)r²   )r   r   r   r   rÅ     s    z*VariableSplitter._is_list_or_dict_variablec             C   sB   | j | _|dkr2| j |¡ |  jd7  _d| _n|   ||¡ d S )Nr.   rG   T)r¸   r¹   r²   r™   r·   r­   )r   r   r   r   r   r   rÆ     s    z/VariableSplitter._internal_variable_start_statec             C   s$   |dkrt ‚| j |¡ | j| _d S )Nr0   )r»   rµ   r™   r¿   r¹   )r   r   r   r   r   r   r¾   '  s    z3VariableSplitter._waiting_list_variable_index_statec             C   s   | j  |¡ |dkrt‚d S )Nr1   )rµ   r™   r»   )r   r   r   r   r   r   r¿   -  s    z+VariableSplitter._list_variable_index_stateN)r    r!   r"   r   r±   r°   r´   r®   r¼   r¶   rÂ   rÄ   rÁ   r¸   rÅ   rÆ   r¾   r¿   r   r   r   r   r(   º  s   	r(   )r   )8r#   r_   Zpygments.lexerr   Zpygments.tokenr   Zpygments.utilr   Ú__all__ZGenericZHeadingrV   ZKeywordZ	Namespacerz   ÚNamer|   Z
Subheadingr¢   ZFunctionrˆ   ÚStringr{   r„   r5   rl   r*   ZPunctuationrU   r3   ZEmphr‹   ÚErrorr+   r   r   Úobjectr   r   r?   ra   rm   rx   r}   r‚   ru   r‡   r   rŽ   r’   r=   rD   rB   rA   rE   r(   r   r   r   r   Ú<module>
   sP   
0	3
