o
    ‡ÎÖaøG  ã                   @   sà  d Z ddl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d4dd„Z G d	d„ deƒZ!G d
d„ dƒZ"G dd„ dƒZ#G dd„ dƒZ$G d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!ƒZ+G d"d#„ d#e%ƒZ,G d$d%„ d%e%ƒZ-G d&d'„ d'ƒZ.G d(d)„ d)e.ƒZ/G d*d+„ d+e.ƒZ0G d,d-„ d-e.ƒZ1G d.d/„ d/e.ƒZ2G d0d1„ d1e2ƒZ3G d2d3„ d3ƒZ4dS )5zÛ
    pygments.lexers.robotframework
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Lexer for Robot Framework.

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)ÚLexer)ÚTokenÚRobotFrameworkLexerÚ c                 C   s.   |   ¡ } |d D ]}|| v r|  |d¡} q| S )Nú r   )ÚlowerÚreplace)ÚstringÚremoveÚchar© r   ú@/usr/lib/python3/dist-packages/pygments/lexers/robotframework.pyÚ	normalize/   s   €r   c                   @   s6   e Zd ZdZdZdgZ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
    ÚRobotFrameworkÚrobotframeworkz*.robotztext/x-robotframeworkc                 K   s&   d|d< d|d< t j| fi |¤Ž d S )Né   ÚtabsizezUTF-8Úencoding)r   Ú__init__)ÚselfÚoptionsr   r   r   r   D   s   zRobotFrameworkLexer.__init__c                 c   sn   � t ƒ }tƒ }d}| ¡ D ]'}| |¡D ]\}}| ||¡D ]\}}|r2||t|ƒfV  |t|ƒ7 }qqqd S ©Nr   )ÚRowTokenizerÚVariableTokenizerÚ
splitlinesÚtokenizeÚstrÚlen)r   ÚtextÚrow_tokenizerÚvar_tokenizerÚindexÚrowÚvalueÚtokenr   r   r   Úget_tokens_unprocessedI   s   €€ýÿÿz*RobotFrameworkLexer.get_tokens_unprocessedN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚaliasesÚ	filenamesÚ	mimetypesr   r%   r   r   r   r   r   7   s    c                   @   ó   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v r||fV  d S |  |||¡D ]\}}|r+||fV  q d S )Nz$@%&©Úidentifiersr   )ÚVariableSplitterÚstartÚCOMMENTÚERRORÚ	_tokenize)r   r	   r$   Úvarr#   r   r   r   r   W   s   €

€þzVariableTokenizer.tokenizec                 c   sš   � |d |j … }||fV  |jd tfV  |  |jt¡E d H  dtfV  |jd ur=dtfV  |  |jt¡E d H  dtfV  |  ||jd … |¡E d H  d S )Nú{ú}ú[ú])r2   Ú
identifierÚSYNTAXr   ÚbaseÚVARIABLEr!   Úend)r   r6   r	   Ú
orig_tokenÚbeforer   r   r   r5   `   s   €




 zVariableTokenizer._tokenizeN)r&   r'   r(   r   r5   r   r   r   r   r   U   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   sR   t ƒ | _tƒ | _tƒ }t|jƒ}tƒ }tƒ }|||||||||||||dœ| _	d S )N)ÚsettingsÚsettingÚmetadataÚ	variablesÚvariableÚ	testcasesÚtestcaseÚtasksÚtaskÚkeywordsÚkeywordÚuserkeywordsÚuserkeyword)
ÚUnknownTableÚ_tableÚRowSplitterÚ	_splitterÚTestCaseTableÚSettingTableÚset_default_templateÚVariableTableÚKeywordTableÚ_tables)r   rG   rB   rE   rK   r   r   r   r   o   s   
úzRowTokenizer.__init__c                 c   sŽ   � d}d}t | j |¡ƒD ]2\}}t|d dƒ\}}| d¡r"d}n|dkr3| d¡r3|  |¡| _d}|  |||||¡E d H  q| j ¡  d S )NFé   r   ú#Tr   Ú*)	Ú	enumeraterR   ÚsplitÚdivmodÚ
startswithÚ_start_tablerP   r5   Úend_row)r   r"   Ú	commentedÚheadingr!   r#   Ú	separatorr   r   r   r   ~   s   €

ÿzRowTokenizer.tokenizec                 C   s   t |dd�}| j |tƒ ¡S )Nr[   ©r
   )r   rX   ÚgetrO   )r   Úheaderr*   r   r   r   r`   �   s   zRowTokenizer._start_tablec                 c   sP   � |r
|t fV  d S |r|tfV  d S |r|tfV  d S | j ||¡E d H  d S ©N)r3   Ú	SEPARATORÚHEADINGrP   r   )r   r#   r!   rb   rd   rc   r   r   r   r5   ‘   s   €zRowTokenizer._tokenizeN)r&   r'   r(   r   r   r`   r5   r   r   r   r   r   m   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 )
rQ   z( {2,})z((?:^| +)\|(?: +|$))c                 c   s0   � |  d¡r	| jp| j}||ƒE d H  dV  d S )Nz| Ú
)r_   Ú_split_from_pipesÚ_split_from_spaces)r   r"   Úsplitterr   r   r   r]       s   €ÿ
zRowSplitter.splitc                 c   s   � dV  | j  |¡E d H  d S )Nr   )Ú_space_splitterr]   )r   r"   r   r   r   rm   ¦   s   €zRowSplitter._split_from_spacesc                 c   s^   � | j  |d¡\}}}|V  | j  |¡r*| j  |d¡\}}}|V  |V  | j  |¡s|V  d S ©NrY   )Ú_pipe_splitterr]   Úsearch)r   r"   Ú_rd   ÚrestÚcellr   r   r   rl   ª   s   €ý
zRowSplitter._split_from_pipesN)
r&   r'   r(   ÚreÚcompilero   rq   r]   rm   rl   r   r   r   r   rQ   œ   s    

rQ   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 r   )Ú_index©r   r   r   r   r   ·   s   
zTokenizer.__init__c                 C   s8   |   || j¡}|  jd7  _t|ttƒƒr||fg}|S rp   )r5   ry   Ú
isinstanceÚtyper   )r   r#   Úvalues_and_tokensr   r   r   r   º   s
   
zTokenizer.tokenizec                 C   s   t |t| jƒd ƒ}| j| S rp   )Úminr   Ú_tokens©r   r#   r!   r   r   r   r5   Á   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Ústripr1   r2   r?   r   )r   r#   r6   r   r   r   Ú
_is_assignÅ   s   
zTokenizer._is_assign)r&   r'   r(   r   r   r   r5   r…   r   r   r   r   rx   ´   s    rx   c                   @   ó   e Zd ZefZdS )ÚCommentN)r&   r'   r(   r3   r   r   r   r   r   r‡   Ì   ó    
r‡   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)Ú
suitesetupÚsuitepreconditionÚsuiteteardownÚsuitepostconditionÚ	testsetupÚ	tasksetupÚtestpreconditionÚtestteardownÚtaskteardownÚtestpostconditionÚtesttemplateÚtasktemplate)ÚlibraryÚresourcerE   )ÚdocumentationrD   Ú	forcetagsÚdefaulttagsÚtesttimeoutÚtasktimeoutNc                 C   s   t  | ¡ || _d S rh   )rx   r   Ú_template_setter)r   Útemplate_setterr   r   r   r   Ú   ó   

zSetting.__init__c                 C   s„   |dkr| j r|   |¡ |dkr2t|ƒ}|| jv r tdd�| _n|| jv r*tƒ | _n|| jvr1tS n	| jr;| j 	|¡S t
 | ||¡S )NrY   r   F)Úsupport_assign)r�   r   Ú_keyword_settingsÚKeywordCallÚ_custom_tokenizerÚ_import_settingsÚImportSettingÚ_other_settingsr4   r   rx   r5   )r   r#   r!   Ú
normalizedr   r   r   r5   Þ   s   




ÿzSetting._tokenizerh   )r&   r'   r(   ÚSETTINGÚARGUMENTr   r¡   r¤   r¦   r£   r   r5   r   r   r   r   r‰   Ð   s    
r‰   c                   @   s   e Zd ZeefZdS )r¥   N)r&   r'   r(   ÚIMPORTr©   r   r   r   r   r   r¥   î   s    r¥   c                   @   s    e Zd ZdZdZdZdd„ ZdS )ÚTestCaseSetting)ÚsetupÚpreconditionÚteardownÚpostconditionÚtemplater   )r˜   ÚtagsÚtimeoutc                 C   sJ   |dkrt  | |dd… |¡}dtf|dd… |fdtfgS t  | ||¡S )Nr   rY   r‚   r9   r:   )r‰   r5   r<   )r   r#   r!   r|   r   r   r   r5   ø   s   zTestCaseSetting._tokenizeN)r&   r'   r(   r¡   r¤   r¦   r5   r   r   r   r   r«   ò   s
    r«   c                   @   s   e Zd ZdZdZdS )ÚKeywordSetting)r®   )r˜   Ú	argumentsÚreturnr²   r±   N)r&   r'   r(   r¡   r¦   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 r   )r…   r4   rx   r5   r€   r   r   r   r5     s   zVariable._tokenizeN)r&   r'   r(   r<   r©   r   r5   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 )r¢   Tc                 C   s   t  | ¡ | | _d| _d S r   )rx   r   Ú_keyword_foundÚ_assigns)r   r    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 )NrY   T)	r·   r…   r¸   r<   rx   r5   ÚGherkinTokenizerr   ÚKEYWORDr€   r   r   r   r5     s   zKeywordCall._tokenizeN)T)r&   r'   r(   rº   r©   r   r   r5   r   r   r   r   r¢     s    
r¢   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 rh   )Ú_gherkin_prefixÚmatchr?   ÚGHERKIN)r   r#   r$   r¼   r?   r   r   r   r   "  s
   
 zGherkinTokenizer.tokenizeN)r&   r'   r(   rv   rw   Ú
IGNORECASEr»   r   r   r   r   r   r¹     s    r¹   c                   @   r†   )ÚTemplatedKeywordCallN)r&   r'   r(   r©   r   r   r   r   r   r¿   *  rˆ   r¿   c                   @   r.   )ÚForLoopc                 C   s   t  | ¡ d| _d S ©NF)rx   r   Ú_in_argumentsrz   r   r   r   r   0  rŸ   zForLoop.__init__c                 C   s$   | j rtpt}| ¡ dv rd| _ |S )N)ÚINzIN RANGET)rÂ   r©   r<   Úupper)r   r#   r!   r$   r   r   r   r5   4  s   zForLoop._tokenizeN)r&   r'   r(   r   r5   r   r   r   r   rÀ   .  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 rh   )Ú_tokenizer_classÚ
_tokenizerÚ_prev_tokenizerÚ_prev_values_on_row)r   Úprev_tokenizerr   r   r   r   >  s   

z_Table.__init__c                 c   sD   � |   ||¡r| j| _|tfV  n	|  ||¡E d H  | j |¡ d S rh   )Ú
_continuesrÈ   rÇ   r<   r5   rÉ   Úappendr€   r   r   r   r   C  s   €z_Table.tokenizec                    s    |dkot ‡ fdd„ˆ jD ƒƒS )Nz...c                 3   s   � | ]}ˆ   |¡V  qd S rh   )Ú	_is_empty)Ú.0Útrz   r   r   Ú	<genexpr>L  s   € ÿz$_Table._continues.<locals>.<genexpr>)ÚallrÉ   r€   r   rz   r   rË   K  s   ÿz_Table._continuesc                 C   s   |dv S )N)r   ú\r   ©r   r#   r   r   r   rÍ   O  s   z_Table._is_emptyc                 C   s   | j  |¡S rh   )rÇ   r   r€   r   r   r   r5   R  ó   z_Table._tokenizec                 C   s   | j | jd� d S ©N)rÊ   )r   rÇ   rz   r   r   r   ra   U  s   z_Table.end_rowrh   )
r&   r'   r(   rÆ   r   r   rË   rÍ   r5   ra   r   r   r   r   rÅ   ;  s    
rÅ   c                   @   s   e Zd ZeZdd„ ZdS )rO   c                 C   ó   dS rÁ   r   r€   r   r   r   rË   \  ó   zUnknownTable._continuesN)r&   r'   r(   r‡   rÆ   rË   r   r   r   r   rO   Y  s    rO   c                   @   s   e Zd ZeZdS )rV   N)r&   r'   r(   r¶   rÆ   r   r   r   r   rV   `  s    rV   c                   @   s*   e Zd ZeZddd„Zdd„ Zdd„ ZdS )	rT   Nc                 C   s   t  | |¡ || _d S rh   )rÅ   r   r�   )r   rž   rÊ   r   r   r   r   g  s   
zSettingTable.__init__c                 C   s.   |dkrt |ƒdkrt| jƒ| _t | ||¡S )Nr   r”   )r   r‰   r�   rÇ   rÅ   r5   r€   r   r   r   r5   k  s   zSettingTable._tokenizec                 C   s   | j | j| jd� d S rÕ   )r   r�   rÇ   rz   r   r   r   ra   p  ó   zSettingTable.end_rowrh   )r&   r'   r(   r‰   rÆ   r   r5   ra   r   r   r   r   rT   d  s
    
rT   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 )rS   Nc                 C   s   | j s| jr| j durtS tS rÁ   )Ú_test_templateÚ_default_templater¿   r¢   rz   r   r   r   rÆ   y  s   
zTestCaseTable._tokenizer_classc                 C   s   |dko
t  | ||¡S r   )rÅ   rË   r€   r   r   r   rË   €  rØ   zTestCaseTable._continuesc                 C   s    |dkr|r	d | _ tƒ  |t¡S |dkr.|  |¡r.|  |¡r)d| _ |  | j¡| _n|  ¡ | _|dkr;|  	|¡r;t
ƒ | _|dkrI|  |¡rI|tfgS t | ||¡S )Nr   rY   F)rÙ   r¹   r   Ú
TC_KW_NAMEÚ_is_settingÚ_is_templateÚ_setting_classÚset_test_templaterÇ   Ú_is_for_looprÀ   rÍ   r<   rÅ   r5   r€   r   r   r   r5   ƒ  s   


zTestCaseTable._tokenizec                 C   s   |  d¡o	| d¡S )Nr9   r:   )r_   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Ô   zTestCaseTable._is_templatec                 C   s   |  d¡ot|dd�dkS )Nú:re   Úfor)r_   r   rÓ   r   r   r   rà   š  s   zTestCaseTable._is_for_loopc                 C   ó   |   |¡| _d S rh   )Ú_is_template_setrÙ   ©r   r°   r   r   r   rß   �  ó   zTestCaseTable.set_test_templatec                 C   rä   rh   )rå   rÚ   ræ   r   r   r   rU      rç   z"TestCaseTable.set_default_templatec                 C   s   t |ƒdvS )N)r   rÒ   Únonez${empty}rá   ræ   r   r   r   rå   £  rÔ   zTestCaseTable._is_template_set)r&   r'   r(   r«   rÞ   rÙ   rÚ   ÚpropertyrÆ   rË   r5   rÜ   rÝ   rà   rß   rU   rå   r   r   r   r   rS   t  s    
rS   c                   @   s   e Zd ZeZeZdd„ ZdS )rW   c                 C   rÖ   rÁ   r   rÓ   r   r   r   rÝ   «  r×   zKeywordTable._is_templateN)r&   r'   r(   r¢   rÆ   r³   rÞ   rÝ   r   r   r   r   rW   §  s    rW   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 ) r1   c                 C   sZ   d | _ d | _d | _d| _d| _|| _d| _z|  |¡ W n
 ty&   Y d S w |  	¡  d S )Nr‚   F)
r;   r=   r!   r2   r?   Ú_identifiersÚ_may_have_internal_variablesÚ_splitÚ
ValueErrorÚ	_finalize)r   r	   r0   r   r   r   r   ³  s   ÿzVariableSplitter.__init__c                 C   s   | j r	| | j¡S | jS rh   )rë   Úreplace_stringr=   )r   rE   r   r   r   Úget_replaced_baseÂ  s   z"VariableSplitter.get_replaced_basec                 C   sn   | j d | _d | j dd… ¡| _| jt| j ƒ | _|  ¡ r5d | jdd… ¡| _	|  jt| jƒ7  _d S d S )Nr   r   r   r‚   rY   )
Ú_variable_charsr;   Újoinr=   r2   r   r?   Ú _has_list_or_dict_variable_indexÚ#_list_and_dict_variable_index_charsr!   rz   r   r   r   rî   Ç  s   þzVariableSplitter._finalizec                 C   s   | j o	| j d dkS )Nr‚   r:   )rô   rz   r   r   r   ró   Ï  s   ÿz1VariableSplitter._has_list_or_dict_variable_indexc              	   C   s¨   |   |¡\}}|| _d| _| j| _|| dg| _g | _|| _|d7 }t||d … ƒD ]'\}}||7 }z|  ||¡ W n t	yE   Y  d S w ||krQ|  
¡ sQ d S q*d S )NrY   r7   r   )Ú_find_variabler2   Ú_open_curlyÚ_variable_stateÚ_staterñ   rô   Ú_stringr\   ÚStopIterationÚ_scanning_list_variable_index)r   r	   Ústart_indexÚ	max_indexr!   r   r   r   r   rì   Ó  s&   ÿ€ùzVariableSplitter._splitc                 C   s   | j | j| jfv S rh   )rø   Ú"_waiting_list_variable_index_stateÚ_list_variable_index_staterz   r   r   r   rû   å  s   ÿz.VariableSplitter._scanning_list_variable_indexc                 C   s^   |  d¡}|dkrtdƒ‚|  ||¡r|  |d |… ¡S |  |d|¡}|dkr+tdƒ‚||fS )Nr8   r‚   zNo variable end foundrY   zNo variable start found)Úrfindrí   Ú_is_escapedrõ   Ú_find_start_index)r   r	   Ú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 )Nr7   rY   r   r‚   r   )ÚfindÚ_start_index_is_okr  )r   r	   r2   r?   r!   r   r   r   r  ô  s   z"VariableSplitter._find_start_indexc                 C   s   || | j v o|  ||¡ S rh   )rê   r  )r   r	   r!   r   r   r   r  ü  s   ÿz#VariableSplitter._start_index_is_okc                 C   sF   d}|dkr!||d  dkr!|d8 }| }|dkr!||d  dks|S )NFr   rY   rÒ   r   )r   r	   r!   Úescapedr   r   r   r     s   þzVariableSplitter._is_escapedc                 C   sp   | j  |¡ |dkr+|  | j|¡s+|  jd8  _| jdkr)|  ¡ s#t‚| j| _d S d S || j	v r6| j
| _d S d S )Nr8   rY   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v S )Nr   )ú@ú&)rñ   rz   r   r   r   r    s   z*VariableSplitter._is_list_or_dict_variablec                 C   sD   | j | _|dkr| j |¡ |  jd7  _d| _d S |   ||¡ d S )Nr7   rY   T)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 )Nr9   )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 )Nr:   )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   r1   ±  s     	r1   )r   )5r)   rv   Úpygments.lexerr   Úpygments.tokenr   Ú__all__ÚGenericÚHeadingrj   ÚKeywordÚ	Namespacer¨   ÚNamerª   Ú
SubheadingrÛ   ÚFunctionrº   ÚStringr©   r¶   r>   r‡   r3   ÚPunctuationri   r<   ÚEmphr½   ÚErrorr4   r   r   r   r   rQ   rx   r‰   r¥   r«   r³   r¢   r¹   r¿   rÀ   rÅ   rO   rV   rT   rS   rW   r1   r   r   r   r   Ú<module>   sP    
/	3
