B
    ©rŠfE  ã               @   s&   d dl Z d dlmZ G dd„ dƒZdS )é    N)Úcrc32c               @   sn   e Zd Ze d¡Zdd„ Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú_NameManglerz ([A-Z]?[a-z]+)|([A-Z]+(?![a-z]))c             c   s    dd„ | j  |¡D ƒE dH  dS )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             s   s   | ]}|  d ¡V  qdS )r   N)Úgroup)Ú.0Úm© r   úX/home/ankuromar296_gmail_com/.local/lib/python3.7/site-packages/strenum/_name_mangler.pyú	<genexpr>   s    z%_NameMangler.words.<locals>.<genexpr>N)Ú_regexÚfinditer)ÚselfÚnamer   r   r   Úwords	   s    z_NameMangler.wordsc             C   s   dd„ }d  ||  |¡ƒ¡S )z-
        Convert a name to camelCase
        c             s   s(   t | dƒ ¡ V  dd„ | D ƒE d H  d S )NÚ c             s   s   | ]}|  ¡ V  qd S )N)Útitle)r   Úwr   r   r   r	   !   s    z:_NameMangler.camel.<locals>.cased_words.<locals>.<genexpr>)ÚnextÚlower)Ú	word_iterr   r   r   Úcased_words   s    z'_NameMangler.camel.<locals>.cased_wordsr   )Újoinr   )r   r   r   r   r   r   Úcamel   s    z_NameMangler.camelc             C   s   d  dd„ |  |¡D ƒ¡S )z.
        Convert a name to PascalCase
        r   c             s   s   | ]}|  ¡ V  qd S )N)r   )r   r   r   r   r   r	   *   s    z&_NameMangler.pascal.<locals>.<genexpr>)r   r   )r   r   r   r   r   Úpascal%   s    z_NameMangler.pascalc             C   s   d  dd„ |  |¡D ƒ¡S )z.
        Convert a name to kebab-case
        ú-c             s   s   | ]}|  ¡ V  qd S )N)r   )r   r   r   r   r   r	   1   s    z%_NameMangler.kebab.<locals>.<genexpr>)r   r   )r   r   r   r   r   Úkebab,   s    z_NameMangler.kebabc             C   s   d  dd„ |  |¡D ƒ¡S )z.
        Convert a name to snake_case
        Ú_c             s   s   | ]}|  ¡ V  qd S )N)r   )r   r   r   r   r   r	   8   s    z%_NameMangler.snake.<locals>.<genexpr>)r   r   )r   r   r   r   r   Úsnake3   s    z_NameMangler.snakec             C   s   d  dd„ |  |¡D ƒ¡S )z.
        Convert a name to MACRO_CASE
        r   c             s   s   | ]}|  ¡ V  qd S )N)Úupper)r   r   r   r   r   r	   ?   s    z%_NameMangler.macro.<locals>.<genexpr>)r   r   )r   r   r   r   r   Úmacro:   s    z_NameMangler.macroc             C   s   dd„ }d  ||  |¡ƒ¡S )z4
        Convert a name to camel_Snake_Case
        c             s   s(   t | dƒ ¡ V  dd„ | D ƒE d H  d S )Nr   c             s   s   | ]}|  ¡ V  qd S )N)r   )r   r   r   r   r   r	   L   s    z@_NameMangler.camel_snake.<locals>.cased_words.<locals>.<genexpr>)r   r   )r   r   r   r   r   J   s    z-_NameMangler.camel_snake.<locals>.cased_wordsr   )r   r   )r   r   r   r   r   r   Úcamel_snakeE   s    z_NameMangler.camel_snakec             C   s   d  dd„ |  |¡D ƒ¡S )z5
        Convert a name to Pascal_Snake_Case
        r   c             s   s   | ]}|  ¡ V  qd S )N)r   )r   r   r   r   r   r	   U   s    z,_NameMangler.pascal_snake.<locals>.<genexpr>)r   r   )r   r   r   r   r   Úpascal_snakeP   s    z_NameMangler.pascal_snakec                s2   dd„ ‰ ‡ fdd„‰d  ‡fdd„|  |¡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             s   sd   dt |  d¡ƒB dB }dd„ }xtdƒD ]}||ƒ\}}q(W x"||ƒ\}}|rTtjntjV  q>W d S )Nl        zutf-8é   c             S   s0   | d? | d@ | d@ d? A d> B } | d@ }|| fS )Nr!   é   é   r   )ÚstateÚbitr   r   r   Ústepc   s     z2_NameMangler.spongebob.<locals>.prng.<locals>.stepéd   )r   ÚencodeÚrangeÚstrr   r   )Z	seed_wordr$   r&   r   r%   r   r   r   Úprng`   s    z$_NameMangler.spongebob.<locals>.prngc                s   d  dd„ t| ˆ | ƒƒD ƒ¡S )Nr   c             s   s   | ]\}}||ƒV  qd S )Nr   )r   ÚchÚfr   r   r   r	   o   s    z;_NameMangler.spongebob.<locals>.scramble.<locals>.<genexpr>)r   Úzip)Úword)r+   r   r   Úscramblen   s    z(_NameMangler.spongebob.<locals>.scrambler   c             3   s   | ]}ˆ |ƒV  qd S )Nr   )r   r   )r0   r   r   r	   q   s    z)_NameMangler.spongebob.<locals>.<genexpr>)r   r   )r   r   r   )r+   r0   r   Ú	spongebobW   s    	z_NameMangler.spongebobc             C   s   d  dd„ |  |¡D ƒ¡S )z.
        Convert a name to COBOL-CASE
        r   c             s   s   | ]}|  ¡ V  qd S )N)r   )r   r   r   r   r   r	   x   s    z%_NameMangler.cobol.<locals>.<genexpr>)r   r   )r   r   r   r   r   Úcobols   s    z_NameMangler.cobolc             C   s   d  dd„ |  |¡D ƒ¡S )z4
        Convert a name to Http-Header-Case
        r   c             s   s   | ]}|  ¡ V  qd S )N)r   )r   r   r   r   r   r	      s    z+_NameMangler.http_header.<locals>.<genexpr>)r   r   )r   r   r   r   r   Úhttp_headerz   s    z_NameMangler.http_headerN)Ú__name__Ú
__module__Ú__qualname__ÚreÚcompiler
   r   r   r   r   r   r   r   r    r1   r2   r3   r   r   r   r   r      s   
r   )r7   Úzlibr   r   r   r   r   r   Ú<module>   s   