code: def find_lexer_class_for_filename(_fn, code=None):
      """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.
      """
      matches = []
      fn = basename(_fn)
      for modname, name, _, filenames, _ in itervalues(LEXERS):
          for filename in filenames:
              if _fn_matches(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 _fn_matches(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 = guess_decode(code)
  
      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, cls.__name__
          return cls.priority + bonus, cls.__name__
  
      if matches:
          matches.sort(key=get_rating)
          # print "Possible lexers, after sort:", matches
          return matches[-1][0]
  
imports: import re
  import sys
  import types
  import fnmatch
  from os.path import basename
  from pygments.lexers._mapping import LEXERS
  from pygments.modeline import get_filetype_from_buffer
  from pygments.plugin import find_plugin_lexers
  from pygments.util import ClassNotFound, itervalues, guess_decode
label_desc: Use image node_id 8 for calling a global function with example usage: find_lexer_class_for_filename(_fn, code) and returns: unknown,  cls, matches, unknown,  cls