ThirdParty/Pygments/pygments/lexers/__init__.py

changeset 1705
b0fbc9300f2b
parent 808
8f85926125ef
child 2426
da76c71624de
child 2592
0b5d3a8bc68b
equal deleted inserted replaced
1704:02ae6c55b35b 1705:b0fbc9300f2b
3 pygments.lexers 3 pygments.lexers
4 ~~~~~~~~~~~~~~~ 4 ~~~~~~~~~~~~~~~
5 5
6 Pygments lexers. 6 Pygments lexers.
7 7
8 :copyright: Copyright 2006-2010 by the Pygments team, see AUTHORS. 8 :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
9 :license: BSD, see LICENSE for details. 9 :license: BSD, see LICENSE for details.
10 """ 10 """
11 11
12 import sys 12 import sys
13 import types 13 import types
91 for modname, name, _, filenames, _ in LEXERS.values(): 91 for modname, name, _, filenames, _ in LEXERS.values():
92 for filename in filenames: 92 for filename in filenames:
93 if fnmatch.fnmatch(fn, filename): 93 if fnmatch.fnmatch(fn, filename):
94 if name not in _lexer_cache: 94 if name not in _lexer_cache:
95 _load_lexers(modname) 95 _load_lexers(modname)
96 matches.append(_lexer_cache[name]) 96 matches.append((_lexer_cache[name], filename))
97 for cls in find_plugin_lexers(): 97 for cls in find_plugin_lexers():
98 for filename in cls.filenames: 98 for filename in cls.filenames:
99 if fnmatch.fnmatch(fn, filename): 99 if fnmatch.fnmatch(fn, filename):
100 matches.append(cls) 100 matches.append((cls, filename))
101 101
102 if sys.version_info > (3,) and isinstance(code, bytes): 102 if sys.version_info > (3,) and isinstance(code, bytes):
103 # decode it, since all analyse_text functions expect unicode 103 # decode it, since all analyse_text functions expect unicode
104 code = code.decode('latin1') 104 code = code.decode('latin1')
105 105
106 def get_rating(cls): 106 def get_rating(info):
107 cls, filename = info
108 # explicit patterns get a bonus
109 bonus = '*' not in filename and 0.5 or 0
107 # The class _always_ defines analyse_text because it's included in 110 # The class _always_ defines analyse_text because it's included in
108 # the Lexer class. The default implementation returns None which 111 # the Lexer class. The default implementation returns None which
109 # gets turned into 0.0. Run scripts/detect_missing_analyse_text.py 112 # gets turned into 0.0. Run scripts/detect_missing_analyse_text.py
110 # to find lexers which need it overridden. 113 # to find lexers which need it overridden.
111 d = cls.analyse_text(code) 114 if code:
112 #print "Got %r from %r" % (d, cls) 115 return cls.analyse_text(code) + bonus
113 return d 116 return bonus
114 117
115 if code: 118 if matches:
116 matches.sort(key=get_rating) 119 matches.sort(key=get_rating)
117 if matches:
118 #print "Possible lexers, after sort:", matches 120 #print "Possible lexers, after sort:", matches
119 return matches[-1](**options) 121 return matches[-1][0](**options)
120 raise ClassNotFound('no lexer for filename %r found' % _fn) 122 raise ClassNotFound('no lexer for filename %r found' % _fn)
121 123
122 124
123 def get_lexer_for_mimetype(_mime, **options): 125 def get_lexer_for_mimetype(_mime, **options):
124 """ 126 """
137 139
138 def _iter_lexerclasses(): 140 def _iter_lexerclasses():
139 """ 141 """
140 Return an iterator over all lexer classes. 142 Return an iterator over all lexer classes.
141 """ 143 """
142 for module_name, name, _, _, _ in LEXERS.values(): 144 for key in sorted(LEXERS):
145 module_name, name = LEXERS[key][:2]
143 if name not in _lexer_cache: 146 if name not in _lexer_cache:
144 _load_lexers(module_name) 147 _load_lexers(module_name)
145 yield _lexer_cache[name] 148 yield _lexer_cache[name]
146 for lexer in find_plugin_lexers(): 149 for lexer in find_plugin_lexers():
147 yield lexer 150 yield lexer

eric ide

mercurial