
    gE                     ,    d dl Z d dlmZ  G d d      Zy)    N)crc32c                   r    e Zd Z ej                  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)_NameManglerz ([A-Z]?[a-z]+)|([A-Z]+(?![a-z]))c              #   d   K   d | j                   j                  |      D        E d{    y7 w)ah  
        Split a string into words. Should correctly handle splitting:
            camelCase
            PascalCase
            kebab-case
            snake_case
            MACRO_CASE
            camel_Snake_Case
            Pascal_Snake_Case
            COBOL-CASE
            Http-Header-Case

        It _does not_ handle splitting spongebob case.
        c              3   >   K   | ]  }|j                  d         yw)r   N)group).0ms     J/var/www/openai/venv/lib/python3.12/site-packages/strenum/_name_mangler.py	<genexpr>z%_NameMangler.words.<locals>.<genexpr>   s     C(B1AGGAJ(Bs   N)_regexfinditerselfnames     r   wordsz_NameMangler.words	   s&      D(<(<T(BCCCs   &0.0c                 T    d }dj                   || j                  |                  S )z-
        Convert a name to camelCase
        c              3   j   K   t        | d      j                          d | D        E d {    y 7 w)N c              3   <   K   | ]  }|j                           y wNtitler	   ws     r   r   z:_NameMangler.camel.<locals>.cased_words.<locals>.<genexpr>!        59a	9   nextlower	word_iters    r   cased_wordsz'_NameMangler.camel.<locals>.cased_words   *     y"%++--59555   )313r   joinr   r   r   r#   s      r   camelz_NameMangler.camel   s&    
	6 ww{4::d#3455    c                 P    dj                  d | j                  |      D              S )z.
        Convert a name to PascalCase
        r   c              3   <   K   | ]  }|j                           y wr   r   r   s     r   r   z&_NameMangler.pascal.<locals>.<genexpr>*   s     ;*:Qqwwy*:r   r&   r   s     r   pascalz_NameMangler.pascal%   s"    
 ww;$**T*:;;;r*   c                 P    dj                  d | j                  |      D              S )z.
        Convert a name to kebab-case
        -c              3   <   K   | ]  }|j                           y wr   r    r   s     r   r   z%_NameMangler.kebab.<locals>.<genexpr>1        <+;a	+;r   r&   r   s     r   kebabz_NameMangler.kebab,   "    
 xx<4::d+;<<<r*   c                 P    dj                  d | j                  |      D              S )z.
        Convert a name to snake_case
        _c              3   <   K   | ]  }|j                           y wr   r1   r   s     r   r   z%_NameMangler.snake.<locals>.<genexpr>8   r2   r   r&   r   s     r   snakez_NameMangler.snake3   r4   r*   c                 P    dj                  d | j                  |      D              S )z.
        Convert a name to MACRO_CASE
        r6   c              3   <   K   | ]  }|j                           y wr   upperr   s     r   r   z%_NameMangler.macro.<locals>.<genexpr>?   r2   r   r&   r   s     r   macroz_NameMangler.macro:   r4   r*   c                 T    d }dj                   || j                  |                  S )z4
        Convert a name to camel_Snake_Case
        c              3   j   K   t        | d      j                          d | D        E d {    y 7 w)Nr   c              3   <   K   | ]  }|j                           y wr   r   r   s     r   r   z@_NameMangler.camel_snake.<locals>.cased_words.<locals>.<genexpr>L   r   r   r   r!   s    r   r#   z-_NameMangler.camel_snake.<locals>.cased_wordsJ   r$   r%   r6   r&   r(   s      r   camel_snakez_NameMangler.camel_snakeE   s&    
	6 xxDJJt$4566r*   c                 P    dj                  d | j                  |      D              S )z5
        Convert a name to Pascal_Snake_Case
        r6   c              3   <   K   | ]  }|j                           y wr   r   r   s     r   r   z,_NameMangler.pascal_snake.<locals>.<genexpr>U   r2   r   r&   r   s     r   pascal_snakez_NameMangler.pascal_snakeP   r4   r*   c                 h    d fddj                  fd| j                  |      D              S )a  
        Convert a name to SpOngEBOb_CASe

        The PRNG we use is seeded with the word to be scrambled. This produces
        stable output so the same input will always produce in the same output.
        It's not `truly` random, but your tests will thank me.
        c              3      K   dt        | j                  d            z  dz  }d }t        d      D ]  } ||      \  }} 	  ||      \  }}|rt        j                  nt        j
                   0w)Nl        zutf-8   c                 B    | dz	  | dz  | dz  dz	  z  dz  z  } | dz  }|| fS )NrG          )statebits     r   stepz2_NameMangler.spongebob.<locals>.prng.<locals>.stepc   s:    
edlut|6I&Jr%QQckEz!r*   d   )r   encoderangestrr<   r    )	seed_wordrL   rN   r6   rM   s        r   prngz$_NameMangler.spongebob.<locals>.prng`   sn     eI$4$4W$=>>BE"
 3Z;5  !%[
U#&ciiCII5 s   A0A2c           	      T    dj                  d t        |  |             D              S )Nr   c              3   2   K   | ]  \  }} ||        y wr   rK   )r	   chfs      r   r   z;_NameMangler.spongebob.<locals>.scramble.<locals>.<genexpr>o   s     D.CUR1R5.Cs   )r'   zip)wordrT   s    r   scramblez(_NameMangler.spongebob.<locals>.scramblen   s#    77Dc$T
.CDDDr*   r6   c              3   .   K   | ]  } |        y wr   rK   )r	   r   r[   s     r   r   z)_NameMangler.spongebob.<locals>.<genexpr>q   s     >-=-=s   r&   )r   r   rT   r[   s     @@r   	spongebobz_NameMangler.spongebobW   s.    	6	E xx>TZZ-=>>>r*   c                 P    dj                  d | j                  |      D              S )z.
        Convert a name to COBOL-CASE
        r/   c              3   <   K   | ]  }|j                           y wr   r;   r   s     r   r   z%_NameMangler.cobol.<locals>.<genexpr>x   r2   r   r&   r   s     r   cobolz_NameMangler.cobols   r4   r*   c                 P    dj                  d | j                  |      D              S )z4
        Convert a name to Http-Header-Case
        r/   c              3   <   K   | ]  }|j                           y wr   r   r   s     r   r   z+_NameMangler.http_header.<locals>.<genexpr>   r2   r   r&   r   s     r   http_headerz_NameMangler.http_headerz   r4   r*   N)__name__
__module____qualname__recompiler   r   r)   r-   r3   r8   r=   rA   rD   r]   r`   rc   rK   r*   r   r   r      sK    RZZ;<FD"	6<===	7=?8==r*   r   )rg   zlibr   r   rK   r*   r   <module>rj      s    	 y= y=r*   