o
    @j                      @   s  d dl mZmZ ddlmZ dedefddZdeejejf de	fd	d
Z
deejejf de	fddZdejde	fddZG dd dZd;deejejejf dedefddZdejdefddZdejdefddZdejdefddZd ejdefd!d"Zdejdefd#d$Zd%ejdefd&d'Zd(ejdefd)d*Zd+eejejf defd,d-Z d.ej!defd/d0Z"d1ej#defd2d3Z$d4ej%defd5d6Z&d7eej'ej(f defd8d9Z)d:S )<    )ListUnion   )astcontentreturnc                 C   s   d | dS )N    T)join
splitlinesr    r   g/var/www/www-root/data/www/ai-bot.pdev.uz/venv/lib/python3.10/site-packages/fluent/syntax/serializer.pyindent_except_first_line   s   r   elemc                 C   s   t | tjo
d| jv S )N
)
isinstancer   TextElementvaluer   r   r   r   includes_new_line   s   r   c                 C   s   t | tjot | jtjS N)r   r   	Placeable
expressionSelectExpressionr   r   r   r   is_select_expr   s   r   patternc                 C   s`   t dd | jD pt dd | jD }|r.| jd }t|tjr,|jd }|dv r,dS dS dS )Nc                 s       | ]}t |V  qd S r   )r   .0r   r   r   r   	<genexpr>       z+should_start_on_new_line.<locals>.<genexpr>c                 s   r   r   )r   r   r   r   r   r      r    r   )[.*FT)anyelementsr   r   r   r   )r   is_multilinefirst_element
first_charr   r   r   should_start_on_new_line   s   

r)   c                   @   sR   e Zd ZdZdZddefddZdejde	fd	d
Z
ddejdede	fddZdS )FluentSerializerzFluentSerializer converts :class:`.ast.SyntaxNode` objects to unicode strings.

    `with_junk` controls if parse errors are written back or not.
    r   F	with_junkc                 C   s
   || _ d S r   )r+   )selfr+   r   r   r   __init__*      
zFluentSerializer.__init__resourcer   c                 C   st   t |tjstdt|d}g }|jD ]}t |tjr!| jr4|	| 
|| || j@ s4|| jO }qd|S )z/Serialize a :class:`.ast.Resource` to a string.zUnknown resource type: {}r    )r   r   Resource	ExceptionformattypebodyJunkr+   appendserialize_entryHAS_ENTRIESr	   )r,   r/   statepartsentryr   r   r   	serialize-   s   



zFluentSerializer.serializer   r<   r:   c                 C   s   t |tjr
t|S t |tjrt|S t |tjr/|| j@ r'dt	|dS dt	|dS t |tj
rJ|| j@ rBdt	|dS dt	|dS t |tjre|| j@ r]dt	|dS dt	|dS t |tjrot|S tdt|)z-Serialize an :class:`.ast.Entry` to a string.z
{}
#z{}
z##z###zUnknown entry type: {})r   r   Messageserialize_messageTermserialize_termCommentr9   r3   serialize_commentGroupCommentResourceCommentr6   serialize_junkr2   r4   )r,   r<   r:   r   r   r   r8   =   s&   


z FluentSerializer.serialize_entryN)F)r   )__name__
__module____qualname____doc__r9   boolr-   r   r1   strr=   	EntryTypeintr8   r   r   r   r   r*   #   s    r*   r>   commentprefixc                    s:   | j s  dS d fdd| j dD }| dS )Nr   c                    s*   g | ]}t |d kr n  d| qS )r    )len)r   linerQ   r   r   
<listcomp>X   s    z%serialize_comment.<locals>.<listcomp>)r   r	   split)rP   rQ   prefixedr   rU   r   rD   T   s   


rD   junkc                 C   s
   | j pdS )Nr0   r   )rY   r   r   r   rG   `   r.   rG   messagec                 C   sx   g }| j r|t| j  || jj d | jr"|t| j | jr2| jD ]	}|t| q(|d d	|S )N =r   r0   )
rP   r7   rD   idnamer   serialize_pattern
attributesserialize_attributer	   )rZ   r;   	attributer   r   r   r@   d   s   


r@   termc                 C   st   g }| j r|t| j  |d| jj d |t| j | jr0| jD ]	}|t| q&|d d	|S )N-r[   r   r0   )
rP   r7   rD   r\   r]   r^   r   r_   r`   r	   )rb   r;   ra   r   r   r   rB   w   s   


rB   ra   c                 C   s   d | jjtt| jS )Nz
    .{} ={})r3   r\   r]   r   r^   r   )ra   r   r   r   r`      s   r`   c                 C   s:   d dd | jD }t|}t| rd| S d| S )Nr0   c                 s   r   r   )serialize_elementr   r   r   r   r      r    z$serialize_pattern.<locals>.<genexpr>z
    rR   )r	   r%   r   r)   )r   r   r   r   r   r^      s
   

r^   elementc                 C   s8   t | tjr	| jS t | tjrt| S tdt| )NzUnknown element type: {})	r   r   r   r   r   serialize_placeabler2   r3   r4   )re   r   r   r   rd      s
   rd   	placeablec                 C   sf   | j }t|tjrdt|S t|tjrdt|S t|tjr*dt|S t	dt
|)Nz{{{}}}z{{ {}}}z{{ {} }}Unknown expression type: {})r   r   r   r   r3   rf   r   serialize_expression
Expressionr2   r4   )rg   exprr   r   r   rf      s   rf   r   c                 C   sV  t | tjrd| j dS t | tjr| jS t | tjr#d| jj S t | tjrLd| jj }| j	d ur>|d| j	j 7 }| j
d urJ|t| j
7 }|S t | tjrf| jj}| j	d urd|d| j	j 7 }|S t | tjryt| j
}| jj | S t | tjrdt| j}| jD ]}|t|7 }q| dS t | tjrt| S tdt| )N"$rc   r"   z{} ->r   rh   )r   r   StringLiteralr   NumberLiteralVariableReferencer\   r]   TermReferencera   	argumentsserialize_call_argumentsMessageReferenceFunctionReferencer   r3   ri   selectorvariantsserialize_variantr   rf   r2   r4   )r   outargsvariantr   r   r   ri      s>   





ri   r{   c                 C   s(   d | jrdndt| jtt| jS )Nz	
{}[{}]{}z   *r   )r3   defaultserialize_variant_keykeyr   r^   r   )r{   r   r   r   rx      s
   rx   rk   c                 C   sh   d dd | jD }d dd | jD }t| jdkr-t| jdkr-d| d| dS d|p2|S )	Nz, c                 s   r   r   )ri   r   argr   r   r   r          
z+serialize_call_arguments.<locals>.<genexpr>c                 s   r   r   )serialize_named_argumentr   r   r   r   r      r   r   ()z({}))r	   
positionalnamedrS   r3   )rk   r   r   r   r   r   rs      s   

rs   r   c                 C   s   d | jjt| jS )Nz{}: {})r3   r]   ri   r   )r   r   r   r   r      s   r   r~   c                 C   s6   t | tjr	| jS t | tjr| jS tdt| )NzUnknown variant key type: {})	r   r   
Identifierr]   ro   r   r2   r3   r4   )r~   r   r   r   r}      s
   r}   N)r>   )*typingr   r   r0   r   rM   r   r   r   rL   r   r   Patternr)   r*   rC   rE   rF   rD   r6   rG   r?   r@   rA   rB   	Attributer`   r^   PatternElementrd   rf   rj   ri   Variantrx   CallArgumentsrs   NamedArgumentr   r   ro   r}   r   r   r   r   <module>   s(    (1
!
"