o
    /hE                     @   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   N/var/www/html/govbot/env/lib/python3.10/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      dd }d || |S )z-
        Convert a name to camelCase
        c                 s   *    t | d V  dd | D E d H  d S )N c                 s       | ]}|  V  qd S Ntitler   wr   r   r   r	   !       z:_NameMangler.camel.<locals>.cased_words.<locals>.<genexpr>nextlower	word_iterr   r   r   cased_words      z'_NameMangler.camel.<locals>.cased_wordsr   joinr   r   r   r   r   r   r   camel      z_NameMangler.camelc                 C      d dd | |D S )z.
        Convert a name to PascalCase
        r   c                 s   r   r   r   r   r   r   r   r	   *   r   z&_NameMangler.pascal.<locals>.<genexpr>r!   r   r   r   r   pascal%      z_NameMangler.pascalc                 C   r&   )z.
        Convert a name to kebab-case
        -c                 s   r   r   r   r   r   r   r   r	   1   r   z%_NameMangler.kebab.<locals>.<genexpr>r!   r   r   r   r   kebab,   r(   z_NameMangler.kebabc                 C   r&   )z.
        Convert a name to snake_case
        _c                 s   r   r   r*   r   r   r   r   r	   8   r   z%_NameMangler.snake.<locals>.<genexpr>r!   r   r   r   r   snake3   r(   z_NameMangler.snakec                 C   r&   )z.
        Convert a name to MACRO_CASE
        r,   c                 s   r   r   upperr   r   r   r   r	   ?   r   z%_NameMangler.macro.<locals>.<genexpr>r!   r   r   r   r   macro:   r(   z_NameMangler.macroc                 C   r   )z4
        Convert a name to camel_Snake_Case
        c                 s   r   )Nr   c                 s   r   r   r   r   r   r   r   r	   L   r   z@_NameMangler.camel_snake.<locals>.cased_words.<locals>.<genexpr>r   r   r   r   r   r   J   r    z-_NameMangler.camel_snake.<locals>.cased_wordsr,   r!   r#   r   r   r   camel_snakeE   r%   z_NameMangler.camel_snakec                 C   r&   )z5
        Convert a name to Pascal_Snake_Case
        r,   c                 s   r   r   r   r   r   r   r   r	   U   r   z,_NameMangler.pascal_snake.<locals>.<genexpr>r!   r   r   r   r   pascal_snakeP   r(   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   s\    dt | dB dB }dd }tdD ]}||\}}q	 ||\}}|r)tjntjV  q)Nl        zutf-8   c                 S   s0   | d? | d@ | d@ d? A d> B } | d@ }|| fS )Nr3         r   )statebitr   r   r   stepc   s    z2_NameMangler.spongebob.<locals>.prng.<locals>.stepd   )r   encoderangestrr/   r   )	seed_wordr6   r8   r,   r7   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 r   r   )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 r   r   r   )rC   r   r   r	   q   r   z)_NameMangler.spongebob.<locals>.<genexpr>r!   r   r   )r>   rC   r   	spongebobW   s   	z_NameMangler.spongebobc                 C   r&   )z.
        Convert a name to COBOL-CASE
        r)   c                 s   r   r   r.   r   r   r   r   r	   x   r   z%_NameMangler.cobol.<locals>.<genexpr>r!   r   r   r   r   cobols   r(   z_NameMangler.cobolc                 C   r&   )z4
        Convert a name to Http-Header-Case
        r)   c                 s   r   r   r   r   r   r   r   r	      r   z+_NameMangler.http_header.<locals>.<genexpr>r!   r   r   r   r   http_headerz   r(   z_NameMangler.http_headerN)__name__
__module____qualname__recompiler
   r   r$   r'   r+   r-   r0   r1   r2   rD   rE   rF   r   r   r   r   r      s    
r   )rJ   zlibr   r   r   r   r   r   <module>   s   