U
    Pe                     @   s|   d Z dZddlZddlmZ ddlmZ G dd deZdd	 Z	d
d Z
dd Zdd Zdd Zdd Zdd ZeZeZdS )zK
Parser utilities
================

Helper functions used for CSS parsing.
)parse_color	parse_intparse_floatparse_string
parse_bool
parse_int2parse_float4parse_filename    N)Logger)resource_findc                   @   s   e Zd ZdS )ColorExceptionN)__name__
__module____qualname__ r   r   //tmp/pip-unpacked-wheel-xzebddm3/kivy/parser.pyr      s   r   c                 C   s.   t | } t| }|dkr&td|   |p,| S )zParse a filename and search for it using `resource_find()`.
    If found, the resource path is returned, otherwise return the unmodified
    filename (as specified by the caller).NzResource: unable to find <%s>)r   r   r
   error)filenameresultr   r   r   r      s
    r   c                 C   s   t |  dS )N)r	   r	   r	      )r
   warningtextr   r   r   color_error    s    
r   c                    s  ddddg}|  drtd|   rz2dd td  d D }t|dk rVtW q tk
rx   td	|   Y S  tk
r   td	|   Y S X ntd	|  S t|dkr|	d
 nt| r|  | d dkr| dd  t }|dks |dkrd
dd  D  n |dkr6|dkr6td|  S z" fddtdt dD }W n" tk
rz   td	|   Y S X |dks|dkr|	d
 |S )a!  Parse a string to a kivy color. Supported formats:

        * rgb(r, g, b)
        * rgba(r, g, b, a)
        * rgb
        * rgba
        * rrggbb
        * rrggbbaa

    For hexadecimal values, you case also use:

        * #rgb
        * #rgba
        * #rrggbb
        * #rrggbbaa
    r   Zrgbzrgba?\((.*)\)c                 S   s(   g | ] }t |d krdn
t |d  qS )     o@r   int.0xr   r   r   
<listcomp>=   s   zparse_color.<locals>.<listcomp>z, ?r	      z!ColorParser: Invalid color for %rg      ?#N    c                 S   s   g | ]}|| qS r   r   r   r   r   r   r    P   s           z(ColorParser: Invalid color format for %rc                    s&   g | ]}t  ||d   dd qS )      r   r   )r   iresr   r   r    V   s   r'   )
startswithrematchsplitgroupslen
ValueErrorr   AttributeErrorappendjoinrange)r   valueZlresr   r*   r   r   &   sJ    




r   c                 C   s0   |   dkrdS |   dkr dS td|  dS )z|Parse a string to a boolean, ignoring case. "true"/"1" is True,
    "false"/"0" is False. Anything else throws an exception.)true1T)false0FzInvalid boolean: %sN)lower	Exceptionr   r   r   r   r   _   s
    r   c                 C   s8   t | dkr0| d dkr0| d dkr0| dd } |  S )z?Parse a string to a string (removing single and double quotes).r'   r	   )"'r   )r1   stripr   r   r   r   r   i   s    $r   c                 C   s|   dd |  dD }ttt|}t|dk r<td|  n<t|dkrX|d |d gS t|dkrxtd| t|f |S )	zlParse a string to a list of exactly 2 integers.

        >>> print(parse_int2("12 54"))
        12, 54

    c                 S   s   g | ]}|  d kr|qS r$   rA   r   r   r   r   r    w   s      zparse_int2.<locals>.<listcomp> r   zInvalid int2 format: %sr	   r'   zToo many values in %s: %s)r/   listmapr   r1   r=   str)r   textsr7   r   r   r   r   p   s    r   c                    s   dd |  dD }ttt| t dk r<td|  nt dkr^ fddtdD S t dkr d	  d  d	  d gS t d
kr d	  d  d	  d gS t dkrtd|   S )zsParse a string to a list of exactly 4 floats.

        >>> parse_float4('54 87. 35 0')
        54, 87., 35, 0

    c                 S   s   g | ]}|  d kr|qS rB   rC   r   r   r   r   r       s      z parse_float4.<locals>.<listcomp>rD   r   zInvalid float4 format: %sc                    s   g | ]} d  qS )r	   r   r   r7   r   r   r       s     r#   r'   r	   r!   zToo many values in %s)r/   rE   rF   r   r1   r=   r6   )r   rH   r   rI   r   r      s    r   )__doc____all__r-   Zkivy.loggerr
   Zkivy.resourcesr   r=   r   r   r   r   r   r   r   r   r   r   floatr   r   r   r   r   <module>   s   9
