ó
T_Tc           @   s”  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l	 m
 Z
 d d l m Z d d l m Z m Z m Z d d	 d
 d g e e ƒ Z i  Z i  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z e d „ Z d „  Z  d „  Z! d e j" f d „  ƒ  YZ# e j$ e% Z& e# e% ƒ Z' e' j( j) e& j( ƒ e' e j$ e% <e' `' e' `& e' ` e' ` d S(   s³   
    pygments.lexers
    ~~~~~~~~~~~~~~~

    Pygments lexers.

    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t   basename(   t   LEXERS(   t   get_filetype_from_buffer(   t   find_plugin_lexers(   t   ClassNotFoundt
   itervaluest   guess_decodet   get_lexer_by_namet   get_lexer_for_filenamet   find_lexer_classt   guess_lexerc         C   sJ   | t  k r9 t j t j | ƒ ƒ } t  | <| j |  ƒ St  | j |  ƒ S(   sB   Return whether the supplied file name fn matches pattern filename.(   t   _pattern_cachet   ret   compilet   fnmatcht	   translatet   match(   t   fnt   globt   pattern(    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   _fn_matches   s     c         C   sL   t  |  d d d g ƒ } x- | j D]" } t | | ƒ } | t | j <q" Wd S(   s0   Load a lexer (and all others in the module too).t   __all__N(   t
   __import__t   NoneR   t   getattrt   _lexer_cachet   name(   t   module_namet   modt
   lexer_namet   cls(    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   _load_lexers'   s    c          c   sU   x t  t ƒ D] }  |  d Vq Wx. t ƒ  D]# } | j | j | j | j f Vq* Wd S(   so   Return a generator of tuples in the form ``(name, aliases,
    filenames, mimetypes)`` of all know lexers.
    i   N(   R   R   R   R   t   aliasest	   filenamest	   mimetypes(   t   itemt   lexer(    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   get_all_lexers/   s    c         C   sƒ   |  t  k r t  |  SxA t t ƒ D]3 \ } } } } } |  | k r! t | ƒ t  |  Sq! Wx$ t ƒ  D] } | j |  k rb | Sqb Wd S(   sA   Lookup a lexer class by name.

    Return None if not found.
    N(   R   R   R   R   R   R   (   R   R   t   lnameR    t   _R   (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyR	   9   s    "
c         K   s¹   |  s t  d |  ƒ ‚ n  x\ t t ƒ D]N \ } } } } } |  j ƒ  | k r& | t k rf t | ƒ n  t | |   Sq& Wx* t ƒ  D] } |  | j k r‚ | |   Sq‚ Wt  d |  ƒ ‚ d S(   sE   Get a lexer by an alias.

    Raises ClassNotFound if not found.
    s   no lexer for alias %r foundN(   R   R   R   t   lowerR   R   R   R    (   t   _aliast   optionsR   R   R    R'   R   (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyR   K   s    "c            s:  g  } t  |  ƒ } xv t t ƒ D]h \ } } } } } xP | D]H } t | | ƒ r; | t k ri t | ƒ n  | j t | | f ƒ q; q; Wq WxJ t ƒ  D]? }	 x6 |	 j D]+ } t | | ƒ r¥ | j |	 | f ƒ q¥ q¥ Wq• Wt	 j
 d k rt ˆ  t ƒ rt ˆ  ƒ ‰  n  ‡  f d †  }
 | r6| j d |
 ƒ | d d Sd S(   s¼   Get a lexer for a filename.

    If multiple lexers match the filename pattern, use ``analyse_text()`` to
    figure out which one is more appropriate.

    Returns None if not found.
    i   c            sF   |  \ } } d | k r d p! d } ˆ  r; | j  ˆ  ƒ | S| j | S(   Nt   *g      à?i    (   t   analyse_textt   priority(   t   infoR   t   filenamet   bonus(   t   code(    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt
   get_ratingy   s
    t   keyiÿÿÿÿi    N(   i   (   R    R   R   R   R   R   t   appendR   R!   t   syst   version_infot
   isinstancet   bytesR   t   sort(   t   _fnR1   t   matchesR   t   modnameR   R'   R!   R/   R   R2   (    (   R1   s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   find_lexer_class_for_filename`   s$    ""c         K   s2   t  |  | ƒ } | s( t d |  ƒ ‚ n  | |   S(   sÄ   Get a lexer for a filename.

    If multiple lexers match the filename pattern, use ``analyse_text()`` to
    figure out which one is more appropriate.

    Raises ClassNotFound if not found.
    s   no lexer for filename %r found(   R=   R   (   R:   R1   R*   t   res(    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyR   ‹   s    c         K   sš   xV t  t ƒ D]H \ } } } } } |  | k r | t k rG t | ƒ n  t | |   Sq Wx* t ƒ  D] } |  | j k rc | |   Sqc Wt d |  ƒ ‚ d S(   sH   Get a lexer for a mimetype.

    Raises ClassNotFound if not found.
    s   no lexer for mimetype %r foundN(   R   R   R   R   R   R"   R   (   t   _mimeR*   R<   R   R'   R"   R   (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   get_lexer_for_mimetype™   s    "c         c   ss   xJ t  t ƒ D]< } t | d  \ } } | t k r@ t | ƒ n  t | Vq W|  ro x t ƒ  D] } | Vq] Wn  d S(   s*   Return an iterator over all lexer classes.i   N(   t   sortedR   R   R   R   (   t   pluginsR3   R   R   R$   (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   _iter_lexerclasses©   s    c   
         sd  t  |  ƒ } i  ‰  t ƒ  } x‹ t ƒ  D]€ } x: | j D]/ } t | | ƒ r5 | j | ƒ t ˆ  | <q5 q5 Wx: | j D]/ } t | | ƒ rr | j | ƒ t ˆ  | <qr qr Wq% W| sÂ t	 d | ƒ ‚ n  t
 | ƒ d k rä | j ƒ  |   Sg  } xF | D]> } | j | ƒ } | d k r| |   S| j | | f ƒ qñ W‡  f d †  }	 | j d |	 ƒ | d d |   S(   sÀ  
    Lookup all lexers that handle those filenames primary (``filenames``)
    or secondary (``alias_filenames``). Then run a text analysis for those
    lexers and choose the best result.

    usage::

        >>> from pygments.lexers import guess_lexer_for_filename
        >>> guess_lexer_for_filename('hello.html', '<%= @foo %>')
        <pygments.lexers.templates.RhtmlLexer object at 0xb7d2f32c>
        >>> guess_lexer_for_filename('hello.html', '<h1>{{ title|e }}</h1>')
        <pygments.lexers.templates.HtmlDjangoLexer object at 0xb7d2f2ac>
        >>> guess_lexer_for_filename('style.css', 'a { color: <?= $link ?> }')
        <pygments.lexers.templates.CssPhpLexer object at 0xb7ba518c>
    s   no lexer for filename %r foundi   g      ð?c            s*   |  d ˆ  |  d |  d j  |  d j f S(   Ni    i   (   R-   t   __name__(   t   t(   t   primary(    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt	   type_sortÜ   s    R3   iÿÿÿÿ(   R    t   setRC   R!   R   t   addt   Truet   alias_filenamest   FalseR   t   lent   popR,   R4   R9   (
   R:   t   _textR*   R   t   matching_lexersR$   R/   t   resultt   rvRG   (    (   RF   s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   guess_lexer_for_filenameµ   s2    	
c         K   sÝ   t  |  ƒ } | d k	 r@ y t | |  SWq@ t k
 r< q@ Xn  d d g } xV t ƒ  D]K } | j |  ƒ } | d k r | |   S| | d k rV | | f | (qV qV W| d sÀ | d d k rÏ t d ƒ ‚ n  | d |   S(   s?   Guess a lexer by strong distinctions in the text (eg, shebang).g        g      ð?i    i   s    no lexer matching the text foundN(   R   R   R   R   RC   R,   (   RO   R*   t   ftt
   best_lexerR$   RR   (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyR
   è   s     
t   _automodulec           B   s   e  Z d  Z d „  Z RS(   s   Automatically import lexers.c         C   sU   t  j | ƒ } | rE t | d ƒ t | d } t |  | | ƒ | St | ƒ ‚ d  S(   Ni    i   (   R   t   getR   R   t   setattrt   AttributeError(   t   selfR   R.   R   (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   __getattr__  s    (   RD   t
   __module__t   __doc__R[   (    (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyRV      s   (*   R]   R   R5   t   typesR   t   os.pathR    t   pygments.lexers._mappingR   t   pygments.modelineR   t   pygments.pluginR   t   pygments.utilR   R   R   t   listR   R   R   R   R   R%   R	   R   R   R=   R   R@   RJ   RC   RS   R
   t
   ModuleTypeRV   t   modulesRD   t   oldmodt   newmodt   __dict__t   update(    (    (    s<   /usr/lib/python2.7/dist-packages/pygments/lexers/__init__.pyt   <module>
   s<   				
		+		3	