
    Ae                     ~    d dl mZ ddlmZmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZ  G d de      Zd Z G d d	e      Zy
)    )absolute_import   )
AltSeqRepRep1OptAnyAnyButBolEolChar)	PlexErrorc                       e Zd Zy)RegexpSyntaxErrorN)__name__
__module____qualname__     7lib/python3.12/site-packages/Cython/Plex/Traditional.pyr   r      s    r   r   c                 4    t        |       j                         S )zk
    Convert traditional string representation of regular expression |s|
    into Plex representation.
    )REParserparse_re)ss    r   rer      s    
 A;!!r   c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)r   c                 N    || _         d| _        d| _        | j                          y )Nr   )r   iendnext)selfr   s     r   __init__zREParser.__init__   s     		r   c                     | j                         }| j                  s'| j                  dt        | j                        z         |S )NzUnexpected %s)	parse_altr!   errorreprcr#   r   s     r   r   zREParser.parse_re"   s3    ^^xxJJdff56	r   c                     | j                         }| j                  dk(  rY|g}| j                  dk(  r?| j                          |j                  | j                                | j                  dk(  r?t	        | }|S )z#Parse a set of alternative regexps.|)	parse_seqr)   r"   appendr   )r#   r   re_lists      r   r&   zREParser.parse_alt(   sd    ^^66S=dG&&C-		t~~/0 &&C- gB	r   c                     g }| j                   sH| j                  dvr:|j                  | j                                | j                   s| j                  dvr:t	        | S )zParse a sequence of regexps.z|))r!   r)   r.   	parse_modr   )r#   r/   s     r   r-   zREParser.parse_seq3   sH    ((466T>NN4>>+, ((466T>G}r   c                 2   | j                         }| j                  sz| j                  dv rl| j                  dk(  rt        |      }n&| j                  dk(  rt	        |      }nt        |      }| j                          | j                  s| j                  dv rl|S )z7Parse a primitive regexp followed by *, +, ? modifiers.z*+?*+)
parse_primr!   r)   r   r   r	   r"   r*   s     r   r1   zREParser.parse_mod:   ss    __((tvvvv}W3"XWIIK ((tvv 	r   c                 ^   | j                         }|dk(  rt        d      }|S |dk(  rt        }|S |dk(  rt        }|S |dk(  r#| j	                         }| j                  d       |S |dk(  r#| j                         }| j                  d       |S |d	k(  r| j                         }t        |      }|S )
zParse a primitive regexp..
^$()[]\)getr   r   r   r&   expectparse_charsetr   )r#   r)   r   s      r   r5   zREParser.parse_primG   s    HHJ8B 	 #XB 	 #XB 	 #X!BKK 	 #X##%BKK
 	 DyHHJaB	r   c                    g }d}| j                   dk(  rd}| j                          | j                   dk(  r!|j                  d       | j                          | j                  s| j                   dk7  r| j	                         }| j                   dk(  ru| j                  d      dk7  ra| j                          | j	                         }t        t        |      t        |      dz         D ]  }|j                  t        |              n|j                  |       | j                  s| j                   dk7  rdj                  |      }|rt        |      S t        |      S )z5Parse a charset. Does not include the surrounding [].r   r9   r   r>   - )r)   r"   r.   r!   r@   	lookaheadrangeordchrjoinr   r
   )r#   	char_listinvertc1c2acharss          r   rB   zREParser.parse_charset\   s   	66S=FIIK66S=S!IIK((tvv}Bvv}!2c!9		XXZs2wB!4 -A$$SV,-   $ ((tvv} 	"%= u:r   c                     | j                   }| j                  dz   x}| _        |t        |      k  r||   | _        yd| _        d| _        y)zAdvance to the next char.r   rE   N)r   r    lenr)   r!   )r#   r   r    s      r   r"   zREParser.nextu   sC    FFVVaZDFs1v:qTDFDFDHr   c                 x    | j                   r| j                  d       | j                  }| j                          |S )NzPremature end of string)r!   r'   r)   r"   r#   r)   s     r   r@   zREParser.get   s-    88JJ01FF		r   c                 p    | j                   |z   }|t        | j                        k  r| j                  |   S y)zLook ahead n chars.rE   )r    rR   r   )r#   njs      r   rF   zREParser.lookahead   s/    FFQJs466{?66!9r   c                 ~    | j                   |k(  r| j                          y| j                  dt        |      z         y)zj
        Expect to find character |c| at current position.
        Raises an exception otherwise.
        z
Missing %sN)r)   r"   r'   r(   rT   s     r   rA   zREParser.expect   s-    
 66Q;IIKJJ|d1g-.r   c                 ^    t        dt        | j                        | j                  |fz        )z1Raise exception to signal syntax error in regexp.z,Syntax error in regexp %s at position %d: %s)r   r(   r   r    )r#   messs     r   r'   zREParser.error   s0     NL$&&$R( !( ) 	)r   N)r   r   r   r$   r   r&   r-   r1   r5   rB   r"   r@   rF   rA   r'   r   r   r   r   r      s>    	*2/)r   r   N)
__future__r   Regexpsr   r   r   r   r	   r
   r   r   r   r   Errorsr   r   r   objectr   r   r   r   <module>r_      s5    ' J J J 		 	"@)v @)r   