3
ˆdF	  ã               @   s4   d Z ddlZddlZG dd„ dƒZeƒ Zdd„ ZdS )z> Defines utility functions for operating on camel case names.
é    Nc               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚCamelCaseToPythonzî Simple functor class to convert names from camel case to idiomatic
    Python variable names.

    For example::
        >>> camel2python = CamelCaseToPython
        >>> camel2python('XMLActor2DToSGML')
        'xml_actor2d_to_sgml'
    c             C   s   t jdƒ| _t jdƒ| _d S )Nz([A-Z0-9]+)([a-z0-9]*)z(\D[123])_D)ÚreÚcompileÚpatnÚnd_patn)Úself© r   ú8/tmp/pip-build-7vycvbft/traits/traits/util/camel_case.pyÚ__init__!   s    zCamelCaseToPython.__init__c             C   s>   | j j| j|ƒ}| jjd|ƒ}|d dkr6|dd … }|jƒ S )Nz\1dr   Ú_é   )r   ÚsubÚ_replr   Úlower)r   ÚnameÚretr   r   r	   Ú__call__%   s
    zCamelCaseToPython.__call__c             C   s^   |j dƒ}|j dƒ}t|ƒdkrN|rDd|d d…  d |d  | S d| S nd| | S d S )Nr   é   r   éÿÿÿÿr   )ÚgroupÚlen)r   ÚmZg1Zg2r   r   r	   r   ,   s    

 
zCamelCaseToPython._replN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r   r   r	   r      s   r   c             C   s   dd„ }t j|| dƒS )z– Convert a camel case string into words separated by spaces.

    For example::
        >>> camel_case_to_words('CamelCase')
        'Camel Case'
    c             S   s4   t | ƒdkr,| d jƒ r,|jƒ r,| d | S | | S )Nr   r   ú r   )r   ÚislowerÚisupper)ÚsÚcr   r   r	   Úadd_space_between_wordsH   s     z4camel_case_to_words.<locals>.add_space_between_wordsÚ )Ú	functoolsÚreduce)r   r!   r   r   r	   Úcamel_case_to_words@   s    r%   )r   r#   r   r   Zcamel_case_to_pythonr%   r   r   r   r	   Ú<module>   s
   &