
    khT(                     >    d dl mZ d dlmZ d dlmZ  G d de      Zy)    )StringIO)Token)CommonTokenStreamc                   ,    e Zd ZdZdZdZdZ fdZd Zd Z	efdZ
efd	Zefd
Zd ZefdZd Zd Zd Zd ZefdZd Zd Zd Zd ZefdZd Zd Zd ZdedefdZd Z G d de      Z  G d  d!e       Z! G d" d#e!      Z" G d$ d%e       Z# xZ$S )&TokenStreamRewriter)tokensprogramslastRewriteTokenIndexesdefaultd   r   c                 l    t         t        |           || _        | j                  g i| _        i | _        y)zw
        :type  tokens: antlr4.BufferedTokenStream.BufferedTokenStream
        :param tokens:
        :return:
        N)superr   __init__r   DEFAULT_PROGRAM_NAMEr	   r
   )selfr   	__class__s     V/var/www/teggl/fontify/venv/lib/python3.12/site-packages/antlr4/TokenStreamRewriter.pyr   zTokenStreamRewriter.__init__   s4     	!41322B7')$    c                     | j                   S N)r   r   s    r   getTokenStreamz"TokenStreamRewriter.getTokenStream   s    {{r   c                 z    | j                   j                  |d       }|r|| j                  | | j                   |<   y y r   )r	   getMIN_TOKEN_INDEX)r   instruction_indexprogram_nameinss       r   rollbackzTokenStreamRewriter.rollback"   s<    mmd3*-d.B.BDU*VDMM,' r   c                 <    | j                  | j                  |       y r   )r   r   r   r   s     r   deleteProgramz!TokenStreamRewriter.deleteProgram'   s    d**L9r   c                 >    | j                  |j                  ||       y r   )insertAfter
tokenIndexr   tokentextr   s       r   insertAfterTokenz$TokenStreamRewriter.insertAfterToken*   s    ))4>r   c                     | j                  | j                  |dz   |      }| j                  |      }t        |      |_        |j                  |       y N   )InsertAfterOpr   
getProgramleninstructionIndexappend)r   indexr(   r   oprewritess         r   r$   zTokenStreamRewriter.insertAfter-   sD    UQY=??<0!(mr   c                 >    | j                  | j                  ||       y r   )insertBeforer   r   r2   r(   s      r   insertBeforeIndexz%TokenStreamRewriter.insertBeforeIndex3   s    $33UDAr   c                 >    | j                  ||j                  |       y r   )r6   r%   r&   s       r   insertBeforeTokenz%TokenStreamRewriter.insertBeforeToken6   s    ,(8(8$?r   c                     | j                  | j                  ||      }| j                  |      }t        |      |_        |j                  |       y r   )InsertBeforeOpr   r.   r/   r0   r1   )r   r   r2   r(   r3   r4   s         r   r6   z TokenStreamRewriter.insertBefore9   s@      eT:??<0!(mr   c                 @    | j                  | j                  |||       y r   replacer   r7   s      r   replaceIndexz TokenStreamRewriter.replaceIndex?   s    T..udCr   c                 @    | j                  | j                  |||       y r   r>   )r   from_idxto_idxr(   s       r   replaceRangez TokenStreamRewriter.replaceRangeB   s    T..&$Gr   c                 h    | j                  | j                  |j                  |j                  |       y r   )r?   r   r%   )r   r'   r(   s      r   replaceSingleTokenz&TokenStreamRewriter.replaceSingleTokenE   s'    T..0@0@%BRBRTXYr   c                 T    | j                  ||j                  |j                  |       y r   )r?   r%   )r   
from_tokento_tokenr(   r   s        r   replaceRangeTokensz&TokenStreamRewriter.replaceRangeTokensH   s     \:#8#8(:M:MtTr   c           	         t        ||kD  |dk  |dk  |t        | j                  j                        k\  f      r9t        dj	                  ||t        | j                  j                                    | j                  ||| j                  |      }| j                  |      }t        |      |_        |j                  |       y )Nr   z'replace: range invalid: {}..{}(size={}))	anyr/   r   
ValueErrorformat	ReplaceOpr.   r0   r1   )r   r   rB   rC   r(   r3   r4   s          r   r?   zTokenStreamRewriter.replaceK   s    6!8a<!Vs4;;K]K]G^=^_`9@@6SVW[WbWbWiWiSjkm m^^Hfdkk4@??<0!(mr   c                 >    | j                  | j                  ||       y r   deleter   )r   r'   s     r   deleteTokenzTokenStreamRewriter.deleteTokenT       D--ue<r   c                 >    | j                  | j                  ||       y r   rQ   )r   r2   s     r   deleteIndexzTokenStreamRewriter.deleteIndexW   rT   r   c                     t        |t              r)| j                  ||j                  |j                  d       y | j                  |||d       y )N )
isinstancer   r?   r%   )r   r   rB   rC   s       r   rR   zTokenStreamRewriter.deleteZ   s<    h&LLx':':F<M<MrRLLx<r   c                 :    | j                   j                  |d      S )N)r
   r   r!   s     r   lastRewriteTokenIndexz)TokenStreamRewriter.lastRewriteTokenIndex`   s    ++//bAAr   c                 "    || j                   |<   y r   )r
   )r   r   is      r   setLastRewriteTokenIndexz,TokenStreamRewriter.setLastRewriteTokenIndexc   s    56$$\2r   c                 :    | j                   j                  |g       S r   )r	   
setdefaultr!   s     r   r.   zTokenStreamRewriter.getProgramf   s    }}''b99r   c                 |    | j                  | j                  dt        | j                  j                        dz
        S )Nr   r,   )getTextr   r/   r   r   s    r   getDefaultTextz"TokenStreamRewriter.getDefaultTexti   s0    ||D55q#dkk>P>P:QTU:UVVr   startstopc                 2   | j                   j                  |      }|t        | j                  j                        dz
  kD  r"t        | j                  j                        dz
  }|dk  rd}|s| j                  j	                  ||      S t               }| j                  |      }|}t        ||k  |t        | j                  j                        k  f      r|j                  |d      }| j                  j                  |      }	|>|	j                  t        j                  k7  r|j                  |	j                         |dz  }n|j                  |      }t        ||k  |t        | j                  j                        k  f      r|t        | j                  j                        dz
  k(  r`|j                         D ]M  }|j                   t        | j                  j                        dz
  k\  s3|j                  |j                         O |j#                         S )zK
        :return: the text in tokens[start, stop](closed interval)
        r,   r   N)r	   r   r/   r   rc   r    _reduceToSingleOperationPerIndexallpoptyper   EOFwriter(   executevaluesr2   getvalue)
r   r   re   rf   r4   buf	indexToOpr^   r3   r'   s
             r   rc   zTokenStreamRewriter.getTextl   s    ==$$\2 #dkk(()A--t{{))*Q.D19E  3 3E4 @@j99(C	19a#dkk&8&8"99:;q$'BKKOOA&Ez::*CIIejj,AQJJsO 19a#dkk&8&8"99:; 3t{{))*1,,&&( M88s4;;#5#56q88#))BGG:LM ||~r   c                 	   t        |      D ]w  \  }}t        |d u t        |t        j                         f      r0|d | D cg c]  }t        |t        j
                        s|! }}|D ]  }|j                  |j                  k(  r;d ||j                  <   dj                  |j                  |j                        |_	        Wt        |j                  |j                  kD  |j                  |j                  k  f      sd ||j                  <    |d | D cg c]  }t        |t        j                        s|! }}|D ]B  }t        |j                  |j                  k\  |j                  |j                  k  f      rd ||j                  <   Ot        |j                  |j                  k  |j                  |j                  kD  f      }	t        |j                  d u |j                  d u |	 f      rud ||j                  <   t        |j                  |j                        |_        t        |j                  |j                        |_        t        dj                  |             &|	r*t        dj                  ||             z t        |      D ]  \  }}t        |d u t        |t        j
                         f      r0|d | D cg c]  }t        |t        j
                        s|! }
}t        |
      D ]  \  }}|j                  |j                  k(  r@t        |      t        j
                  u r%|xj                  |j                  z  c_	        d ||<   _|j                  |j                  k(  syt        |      t        j                   u s|j                  |j                  z   |_	        d ||<    |d | D cg c]  }t        |t        j                        s|! }}|D ]  }|j                  |j                  k(  r$|j                  |j                  z   |_	        d ||<   @t        |j                  |j                  k\  |j                  |j                  k  f      s|t        dj                  ||              i }t        |      D ]=  \  }}|	|j#                  |j                        rt        d      |||j                  <   ? |S c c}w c c}w c c}w c c}w )Nz{}{}z
New rop {}z4replace op boundaries of {} overlap with previous {}z-insert op {} within boundaries of previous {}zshould be only one op per index)	enumeraterL   rY   r   rO   r<   r2   r0   rN   r(   ri   
last_indexminprintrM   rk   r-   r   )r   r4   r^   ropr3   insertsiopprevReplacesprevRop
isDisjointprevInserts
prev_indexprevIopreduceds                 r   rh   z4TokenStreamRewriter._reduceToSingleOperationPerIndex   s=   ) 	rFAsC4KZ5H5R5R%S!STU$,RaLgbJrCVCeCe4frgGg :99		)59HS112%}}SXXsxx@CH#))cii/cnn1LMN59HS112: *2"1g2BH[HeHe9fBgLg' r2G4F4F#..4XYZ9=HW556 '"4"4SYY">cnn@\!]^
,chh$.>JOP9=HW556 #GMM399 =CI%(););S^^%LCN,--c23$$%[%b%bcfho%pqqr	r8  ) 	gFAsC4KZ5H5W5W%X!XYZ(0!k"
2GZGiGi8j2kKk'0'= 0#
G==CII-$w-CVCeCe2eHH,H+/HZ(]]cii/DMEXEfEf4f&||chh6CH+/HZ(0 *2"1g2BH[HeHe9fBgLg# g99		)"xx#((2CH"&HQK		SYY.		S^^0KLM$%T%[%[\_ad%effg	g* x( 	#EArz8{{288$J7X,Y&Y "GBHH	#
 g h h$ l hs0   S#SS6S	S)S;SSc                   $    e Zd ZdZddZd Zd Zy)$TokenStreamRewriter.RewriteOperationr   r2   r(   r0   c                 <    || _         || _        || _        d| _        y)z
            :type tokens: CommonTokenStream
            :param tokens:
            :param index:
            :param text:
            :return:
            r   Nr   )r   r   r2   r(   s       r   r   z-TokenStreamRewriter.RewriteOperation.__init__   s!     !DKDJDI$%D!r   c                     | j                   S )zc
            :type buf: StringIO.StringIO
            :param buf:
            :return:
            )r2   r   rq   s     r   rn   z,TokenStreamRewriter.RewriteOperation.execute   s     ::r   c                     dj                  | j                  j                  | j                  j	                  | j
                        | j                        S )Nz<{}@{}:"{}">)rN   r   __name__r   r   r2   r(   r   s    r   __str__z,TokenStreamRewriter.RewriteOperation.__str__   s<    !(()@)@$++//RVR\R\B]_c_h_hiir   NrX   )r   
__module____qualname__	__slots__r   rn   r    r   r   RewriteOperationr      s    C		&		jr   r   c                   &     e Zd Zd fd	Zd Z xZS )"TokenStreamRewriter.InsertBeforeOpc                 D    t         t        j                  |   |||       y r   )r   r   r<   r   )r   r   r2   r(   r   s       r   r   z+TokenStreamRewriter.InsertBeforeOp.__init__   s    %44dDVUTXYr   c                 R   |j                  | j                         | j                  j                  | j                        j
                  t        j                  k7  r>|j                  | j                  j                  | j                        j                         | j                  dz   S r+   )rm   r(   r   r   r2   rk   r   rl   r   s     r   rn   z*TokenStreamRewriter.InsertBeforeOp.execute   sf    IIdii {{tzz*//599<		$++//$**5::;::>!r   r   )r   r   r   r   rn   __classcell__r   s   @r   r<   r      s    	Z	"r   r<   c                       e Zd Zy)!TokenStreamRewriter.InsertAfterOpN)r   r   r   r   r   r   r-   r      s    r   r-   c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenStreamRewriter.ReplaceOpru   c                 R    t         t        j                  |   |||       || _        y r   )r   r   rO   r   ru   )r   rB   rC   r   r(   r   s        r   r   z&TokenStreamRewriter.ReplaceOp.__init__   s%    %//?RVW$DOr   c                 n    | j                   r|j                  | j                          | j                  dz   S r+   )r(   rm   ru   r   s     r   rn   z%TokenStreamRewriter.ReplaceOp.execute   s(    yy		$))$??Q&&r   c                     | j                   rcdj                  | j                  j                  | j                        | j                  j                  | j
                        | j                         S y )Nz<ReplaceOp@{}..{}:"{}">)r(   rN   r   r   r2   ru   r   s    r   r   z%TokenStreamRewriter.ReplaceOp.__str__   sX    yy077

8SUYU`U`UdUdeietetUu8<		C C r   )r   r   r   r   r   rn   r   r   r   s   @r   rO   r      s     		%	'
	Cr   rO   )%r   r   r   r   r   PROGRAM_INIT_SIZEr   r   r   r   r"   r)   r$   r8   r:   r6   r@   rD   rF   rJ   r?   rS   rV   rR   r\   r_   r.   rd   intrc   rh   objectr   r<   r-   rO   r   r   s   @r   r   r      s   AI$O	*W
 *> : :N ? 5I B ;O @DHZ K_ U=== 2F B7:W# C @9vj6 j6	") 	" C$ C Cr   r   N)ior   antlr4.Tokenr   antlr4.CommonTokenStreamr   r   r   r   r   r   <module>r      s       6rC& rCr   