a
    d@                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZmZmZ dZdZG dd deZG dd deZ G dd de!Z"dS )    )CommonTokenStream)InputStream)ParserRuleContext)Lexer)ListTokenSource)Token)BailErrorStrategy)RecognitionExceptionParseCancellationException)TagChunk	TextChunk)RuleTagToken)TokenTagToken)	ParseTreeTerminalNodeRuleNodeNc                       s"   e Zd Zed fddZ  ZS )CannotInvokeStartRule)ec                    s   t  | d S N)super__init__)selfr   	__class__ l/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/antlr4/tree/ParseTreePatternMatcher.pyr   S   s    zCannotInvokeStartRule.__init__)__name__
__module____qualname__	Exceptionr   __classcell__r   r   r   r   r   Q   s   r   c                   @   s   e Zd ZdS )"StartRuleDoesNotConsumeFullPatternN)r   r   r   r   r   r   r   r!   V   s   r!   c                   @   s   e Zd ZdZeedddZeeedddZe	ee
dd	d
Ze	edddZe	ee
dddZe	edddZee
dddZe	e	edddZdd Ze	dddZedddZedd d!Zd"S )#ParseTreePatternMatcherlexerparserstartstopescape)r$   r%   c                 C   s"   || _ || _d| _d| _d| _d S )N<>\r#   )r   r$   r%   r   r   r   r   b   s
    z ParseTreePatternMatcher.__init__)r&   r'   
escapeLeftc                 C   sN   |d u st |dkrtd|d u s0t |dkr8td|| _|| _|| _d S )Nr   zstart cannot be null or emptyzstop cannot be null or empty)lenr   r&   r'   r(   )r   r&   r'   r,   r   r   r   setDelimiterss   s    z%ParseTreePatternMatcher.setDelimiters)treepatternpatternRuleIndexc                 C   s   |  ||}| ||S r   )compileTreePatternmatchesr   r/   r0   r1   pr   r   r   matchesRuleIndex}   s    z(ParseTreePatternMatcher.matchesRuleIndex)r/   r0   c                 C   s   |  ||jt }|d u S r   )	matchImplpatternTreedict)r   r/   r0   mismatchedNoder   r   r   matchesPattern   s    z&ParseTreePatternMatcher.matchesPatternc                 C   s   |  ||}| ||S r   )r2   matchPatternr4   r   r   r   matchRuleIndex   s    z&ParseTreePatternMatcher.matchRuleIndexc                 C   s0   t  }| ||j|}ddlm} |||||S )Nr   )ParseTreeMatch)r9   r7   r8   Zantlr4.tree.ParseTreeMatchr>   )r   r/   r0   labelsr:   r>   r   r   r   r<      s    z$ParseTreePatternMatcher.matchPattern)r0   r1   c              
   C   s  |  |}t|}t|}ddlm} || jj| jj| jj| j	 |}d }z|
t  ||}W nz ty }	 z|	jW Y d }	~	nZd }	~	0  ty }	 z|	W Y d }	~	n4d }	~	0  ty }	 zt|	W Y d }	~	n
d }	~	0 0 |dtjkrt ddlm}
 |
| |||S )Nr   )ParserInterpreter   )ParseTreePattern)tokenizer   r   Zantlr4.ParserInterpreterr@   r%   ZgrammarFileNameZ
tokenNamesZ	ruleNamesgetATNWithBypassAltssetErrorHandlerr   parser
   causer	   r   r   ZLAr   EOFr!   Zantlr4.tree.ParseTreePatternrB   )r   r0   r1   Z	tokenListZtokenSrctokensr@   ZparserInterpr/   r   rB   r   r   r   r2      s*    
z*ParseTreePatternMatcher.compileTreePattern)r/   r8   r?   c                 C   s  |d u rt d|d u r t dt|trt|trd }|jj|jjkrt|jtr|j}| ||j| |jd ur| ||j| q|	 |	 krq|d u r|}n|d u r|}|S t|t
rt|t
rd }| |}|d ur<d }|jj|jjkr*| ||j| |jd ur8| ||j| n|d u r8|}|S | | kr`|d u r\|}|S | }td|D ]2}	| ||	||	|}
|
d urr|
  S qr|S |S )Nztree cannot be nullzpatternTree cannot be nullr   )r   
isinstancer   symboltyper   mapZ	tokenNamelabelZgetTextr   getRuleTagTokenZruleContext	ruleIndexZruleNamegetChildCountranger7   getChild)r   r/   r8   r?   r:   ZtokenTagTokenZruleTagTokenmniZ
childMatchr   r   r   r7      sT    





z!ParseTreePatternMatcher.matchImplc                 C   s0   | |d }|d u r"t }|||< || d S r   )getlistappend)r   r?   rN   r/   vr   r   r   rM     s
    zParseTreePatternMatcher.map)r/   c                 C   sF   t |trB| dkrBt |dtrB|d}t |jtrB|jS d S )NrA   r   )rJ   r   rQ   rS   r   rK   r   )r   r/   cr   r   r   rO     s    

z'ParseTreePatternMatcher.getRuleTagToken)r0   c           	      C   sD  |  |}t }|D ](}t|tr|jd  r|| j|j}|tj	krdt
dt|j d | |t|j||j n|jd  r| j|j}|dkrt
dt|j d | | j j| }|t|j||j nt
dt|j d | q| jt|j | j }|jtjkr|| | j }qq|S )Nr   zUnknown token z in pattern: zUnknown rule zinvalid tag: )splitrX   rJ   r   tagisupperr%   ZgetTokenTyper   ZINVALID_TYPEr   strrY   r   rN   islowerZgetRuleIndexrD   ZruleToTokenTyper   r$   ZsetInputStreamr   textZ	nextTokenrL   rH   )	r   r0   chunksrI   chunkttyperP   ZruleImaginaryTokenTypetr   r   r   rC     s,    





z ParseTreePatternMatcher.tokenizec                 C   s  d}t |}t }t }t }||k r||| j| j |krX|t | jt | j 7 }q||| j| j |kr|t | jt | j 7 }q||| j|kr|| |t | j7 }q||| j|kr|| |t | j7 }q|d7 }qt |}|t |krtd| |t |k r(td| td|D ]$}|| || kr2td| q2|dkrp|t	| |dkr|d dkr|d|d  }	|
t	|	 td|D ]}||| t | j ||  }
|
}d }|
d}|dkr|
d| }|
|d t |
 }|t|| |d t |k r||| t | j ||d   }	|t	|	 q|dkr||d  t | j }||k r||| }	|t	|	 tdt |D ]J}|| }t|t	r|j| jd}t |t |jk rt	|||< q|S )Nr   rA   zunterminated tag in pattern: zmissing start tag in pattern: z(tag delimiters out of order in pattern: : )r-   rX   findr(   r&   r'   rY   r   rR   r   addr   rJ   rb   replace)r   r0   r5   rU   rc   ZstartsZstopsntrV   rb   r^   ZruleOrTokenrN   colonZafterLastTagr[   Z	unescapedr   r   r   r]   2  sl    





"

zParseTreePatternMatcher.splitN)r   r   r   	__slots__r   Parserr   r`   r.   r   intr6   rB   r;   r=   r<   r2   r9   r7   rM   rO   rC   r]   r   r   r   r   r"   [   s   
	

"@r"   )#Zantlr4.CommonTokenStreamr   Zantlr4.InputStreamr   Zantlr4.ParserRuleContextr   Zantlr4.Lexerr   Zantlr4.ListTokenSourcer   Zantlr4.Tokenr   Zantlr4.error.ErrorStrategyr   Zantlr4.error.Errorsr	   r
   Zantlr4.tree.Chunkr   r   Zantlr4.tree.RuleTagTokenr   Zantlr4.tree.TokenTagTokenr   Zantlr4.tree.Treer   r   r   ro   rB   r   r   r!   objectr"   r   r   r   r   <module>@   s    