(_fn, code=None, **options)
Get a lexer for a filename.  If multiple lexers match the filename
    pattern, use ``analyze_text()`` to figure out which one is more
    appropriate.
Get a lexer for a filename.  If multiple lexers match the filename
    pattern, use ``analyze_text()`` to figure out which one is more
    appropriate.
Get a lexer for a filename . If multiple lexers match the filename pattern use analyze_text () to figure out which one is more appropriate .
def get_lexer_for_filename(_fn, code=None, **options):
    """
    Get a lexer for a filename.  If multiple lexers match the filename
    pattern, use ``analyze_text()`` to figure out which one is more
    appropriate.
    """
    matches = []
    fn = basename(_fn)
    for modname, name, _, filenames, _ in LEXERS.itervalues():
        for filename in filenames:
            if fnmatch.fnmatch(fn, filename):
                if name not in _lexer_cache:
                    _load_lexers(modname)
                matches.append((_lexer_cache[name], filename))
    for cls in find_plugin_lexers():
        for filename in cls.filenames:
            if fnmatch.fnmatch(fn, filename):
                matches.append((cls, filename))

    if sys.version_info > (3,) and isinstance(code, bytes):
        # decode it, since all analyse_text functions expect unicode
        code = code.decode('latin1')

    def get_rating(info):
        cls, filename = info
        # explicit patterns get a bonus
        bonus = '*' not in filename and 0.5 or 0
        # The class _always_ defines analyse_text because it's included in
        # the Lexer class.  The default implementation returns None which
        # gets turned into 0.0.  Run scripts/detect_missing_analyse_text.py
        # to find lexers which need it overridden.
        if code:
            return cls.analyse_text(code) + bonus
        return bonus

    if matches:
        matches.sort(key=get_rating)
        #print "Possible lexers, after sort:", matches
        return matches[-1][0](**options)
    raise ClassNotFound('no lexer for filename %r found' % _fn)
def get_lexer_for_filename ( _fn , code = None , * * options ) : matches = [ ] fn = basename ( _fn ) for modname , name , _ , filenames , _ in LEXERS . itervalues ( ) : for filename in filenames : if fnmatch . fnmatch ( fn , filename ) : if name not in _lexer_cache : _load_lexers ( modname ) matches . append ( ( _lexer_cache [ name ] , filename ) ) for cls in find_plugin_lexers ( ) : for filename in cls . filenames : if fnmatch . fnmatch ( fn , filename ) : matches . append ( ( cls , filename ) ) if sys . version_info > ( 3 , ) and isinstance ( code , bytes ) : # decode it, since all analyse_text functions expect unicode code = code . decode ( 'latin1' ) def get_rating ( info ) : cls , filename = info # explicit patterns get a bonus bonus = '*' not in filename and 0.5 or 0 # The class _always_ defines analyse_text because it's included in # the Lexer class.  The default implementation returns None which # gets turned into 0.0.  Run scripts/detect_missing_analyse_text.py # to find lexers which need it overridden. if code : return cls . analyse_text ( code ) + bonus return bonus if matches : matches . sort ( key = get_rating ) #print "Possible lexers, after sort:", matches return matches [ - 1 ] [ 0 ] ( * * options ) raise ClassNotFound ( 'no lexer for filename %r found' % _fn )