
    (                         d Z 	 ddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ dZd	 Zdd
Z G d de      Zy# e$ r	 ddlmZ Y @w xY w)z
Tool for creating styles from a dictionary.

This is very similar to the Pygments style dictionary, with some additions:
- Support for reverse and blink.
- Support for ANSI color names. (These will map directly to the 16 terminal
  colors.)
    )Mapping   )StyleDEFAULT_ATTRSANSI_COLOR_NAMES)DEFAULT_STYLE_EXTENSIONS)merge_attrssplit_token_in_parts)range)style_from_dictc                     | dd dk(  rG| dd }|t         v r|S t        |      dk(  r|S t        |      dk(  r!|d   dz  |d   dz  z   |d   dz  z   S | dk(  r| S t        d	| z        )
z
    Parse/validate color format.

    Like in Pygments, but also support the ANSI color names.
    (These will map to the colors of the 16 color palette.)
    r   r   #N          zWrong color format %r)r   len
ValueError)textcols     2lib/third_party/prompt_toolkit/styles/from_dict.py_colorformatr      s     AayC12h""JX]JX]q6!8c!fQh&Q11	
,t3
44    c           	      N   t        | t              sJ |r*i }|j                  t               |j                  |        |} i }t	        | j                               D ]  \  }}t        }d|vr(t        dt        |      dz         D ]  }	 ||d|     } n |j                         D ]]  }|dk(  r
|dk(  r|j                  d      }"|dk(  r|j                  d      }:|d	k(  r|j                  d
      }R|dk(  r|j                  d
      }j|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dv r|j                  d      r|j                  d      r |j                  t        |dd             }C|j                  t        |            }` |||<    t        |      S # t        $ r Y w xY w)a  
    Create a ``Style`` instance from a dictionary or other mapping.

    The dictionary is equivalent to the ``Style.styles`` dictionary from
    pygments, with a few additions: it supports 'reverse' and 'blink'.

    Usage::

        style_from_dict({
            Token: '#ff0000 bold underline',
            Token.Title: 'blink',
            Token.SomethingElse: 'reverse',
        })

    :param include_defaults: Include the defaults (built-in) styling for
        selected text, etc...)
    	noinheritr   NboldT)r   noboldFitalic)r   noitalic	underline)r    nounderlineblink)r"   noblinkreverse)r$   	noreverse)romansansmonozborder:zbg:r   )bgcolor)color)
isinstancer   updater   sorteditemsr   r   r   KeyErrorsplit_replace
startswithr   _StyleFromDict)	
style_dictinclude_defaultss2token_to_attrsttypestyledefattrsiparts	            r   r   r   -   s<   $ j'***
		*+
		*
 N "*"2"2"45xh&1c%j1n-*51":6E  . NN$D{"D1!E2!d3#e4$6&7 T2"U3"t4$u5 22+ '|DH/EF\$-?@K %N !&uk 6n .))_   s   	H	H$#H$c                   "    e Zd ZdZd Zd Zd Zy)r3   z
    Turn a dictionary that maps `Token` to `Attrs` into a style class.

    :param token_to_attrs: Dictionary that maps `Token` to `Attrs`.
    c                     || _         y N)r7   )selfr7   s     r   __init__z_StyleFromDict.__init__   s
    ,r   c                     g }t        |      D ]1  }|j                  | j                  j                  |t                     3 t        |      S r?   )r
   appendr7   getr   r	   )r@   tokenlist_of_attrss      r   get_attrs_for_tokenz"_StyleFromDict.get_attrs_for_token   sB    )%0E  !4!4!8!8!NO 1=))r   c                 ,    t        | j                        S r?   )idr7   )r@   s    r   invalidation_hashz _StyleFromDict.invalidation_hash   s    $%%&&r   N)__name__
__module____qualname____doc__rA   rG   rJ    r   r   r3   r3      s    
-*'r   r3   N)T)rN   collections.abcr   ImportErrorcollectionsbaser   r   r   defaultsr   utilsr	   r
   	six.movesr   __all__r   r   r3   rO   r   r   <module>rX      sW   $' 9 8 . 4 
5*V*r'U 'w  $#$s   = A
A