22 from pygments.plugin import find_plugin_lexers |
22 from pygments.plugin import find_plugin_lexers |
23 from pygments.util import ClassNotFound, bytes |
23 from pygments.util import ClassNotFound, bytes |
24 |
24 |
25 |
25 |
26 __all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class', |
26 __all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class', |
27 'guess_lexer'] + LEXERS.keys() |
27 'guess_lexer'] + list(LEXERS.keys()) |
28 |
28 |
29 _lexer_cache = {} |
29 _lexer_cache = {} |
30 |
30 |
31 |
31 |
32 def _load_lexers(module_name): |
32 def _load_lexers(module_name): |
42 def get_all_lexers(): |
42 def get_all_lexers(): |
43 """ |
43 """ |
44 Return a generator of tuples in the form ``(name, aliases, |
44 Return a generator of tuples in the form ``(name, aliases, |
45 filenames, mimetypes)`` of all know lexers. |
45 filenames, mimetypes)`` of all know lexers. |
46 """ |
46 """ |
47 for item in LEXERS.itervalues(): |
47 for item in LEXERS.values(): |
48 yield item[1:] |
48 yield item[1:] |
49 for lexer in find_plugin_lexers(): |
49 for lexer in find_plugin_lexers(): |
50 yield lexer.name, lexer.aliases, lexer.filenames, lexer.mimetypes |
50 yield lexer.name, lexer.aliases, lexer.filenames, lexer.mimetypes |
51 |
51 |
52 |
52 |
55 Lookup a lexer class by name. Return None if not found. |
55 Lookup a lexer class by name. Return None if not found. |
56 """ |
56 """ |
57 if name in _lexer_cache: |
57 if name in _lexer_cache: |
58 return _lexer_cache[name] |
58 return _lexer_cache[name] |
59 # lookup builtin lexers |
59 # lookup builtin lexers |
60 for module_name, lname, aliases, _, _ in LEXERS.itervalues(): |
60 for module_name, lname, aliases, _, _ in LEXERS.values(): |
61 if name == lname: |
61 if name == lname: |
62 _load_lexers(module_name) |
62 _load_lexers(module_name) |
63 return _lexer_cache[name] |
63 return _lexer_cache[name] |
64 # continue with lexers from setuptools entrypoints |
64 # continue with lexers from setuptools entrypoints |
65 for cls in find_plugin_lexers(): |
65 for cls in find_plugin_lexers(): |
70 def get_lexer_by_name(_alias, **options): |
70 def get_lexer_by_name(_alias, **options): |
71 """ |
71 """ |
72 Get a lexer by an alias. |
72 Get a lexer by an alias. |
73 """ |
73 """ |
74 # lookup builtin lexers |
74 # lookup builtin lexers |
75 for module_name, name, aliases, _, _ in LEXERS.itervalues(): |
75 for module_name, name, aliases, _, _ in LEXERS.values(): |
76 if _alias in aliases: |
76 if _alias in aliases: |
77 if name not in _lexer_cache: |
77 if name not in _lexer_cache: |
78 _load_lexers(module_name) |
78 _load_lexers(module_name) |
79 return _lexer_cache[name](**options) |
79 return _lexer_cache[name](**options) |
80 # continue with lexers from setuptools entrypoints |
80 # continue with lexers from setuptools entrypoints |
90 pattern, use ``analyze_text()`` to figure out which one is more |
90 pattern, use ``analyze_text()`` to figure out which one is more |
91 appropriate. |
91 appropriate. |
92 """ |
92 """ |
93 matches = [] |
93 matches = [] |
94 fn = basename(_fn) |
94 fn = basename(_fn) |
95 for modname, name, _, filenames, _ in LEXERS.itervalues(): |
95 for modname, name, _, filenames, _ in LEXERS.values(): |
96 for filename in filenames: |
96 for filename in filenames: |
97 if fnmatch.fnmatch(fn, filename): |
97 if fnmatch.fnmatch(fn, filename): |
98 if name not in _lexer_cache: |
98 if name not in _lexer_cache: |
99 _load_lexers(modname) |
99 _load_lexers(modname) |
100 matches.append(_lexer_cache[name]) |
100 matches.append(_lexer_cache[name]) |
126 |
126 |
127 def get_lexer_for_mimetype(_mime, **options): |
127 def get_lexer_for_mimetype(_mime, **options): |
128 """ |
128 """ |
129 Get a lexer for a mimetype. |
129 Get a lexer for a mimetype. |
130 """ |
130 """ |
131 for modname, name, _, _, mimetypes in LEXERS.itervalues(): |
131 for modname, name, _, _, mimetypes in LEXERS.values(): |
132 if _mime in mimetypes: |
132 if _mime in mimetypes: |
133 if name not in _lexer_cache: |
133 if name not in _lexer_cache: |
134 _load_lexers(modname) |
134 _load_lexers(modname) |
135 return _lexer_cache[name](**options) |
135 return _lexer_cache[name](**options) |
136 for cls in find_plugin_lexers(): |
136 for cls in find_plugin_lexers(): |
141 |
141 |
142 def _iter_lexerclasses(): |
142 def _iter_lexerclasses(): |
143 """ |
143 """ |
144 Return an iterator over all lexer classes. |
144 Return an iterator over all lexer classes. |
145 """ |
145 """ |
146 for module_name, name, _, _, _ in LEXERS.itervalues(): |
146 for module_name, name, _, _, _ in LEXERS.values(): |
147 if name not in _lexer_cache: |
147 if name not in _lexer_cache: |
148 _load_lexers(module_name) |
148 _load_lexers(module_name) |
149 yield _lexer_cache[name] |
149 yield _lexer_cache[name] |
150 for lexer in find_plugin_lexers(): |
150 for lexer in find_plugin_lexers(): |
151 yield lexer |
151 yield lexer |