summaryrefslogtreecommitdiff
path: root/pygments/lexers
diff options
context:
space:
mode:
authorblackbird <devnull@localhost>2006-10-22 12:54:00 +0200
committerblackbird <devnull@localhost>2006-10-22 12:54:00 +0200
commitf2db9aedba7959d57d43903e4eff78db101e6234 (patch)
treef84bda4581de9a456c47b2ee8aeb61482ff385d7 /pygments/lexers
parent7fd6f0d8a3903a6538ffeec2d64102cfe8ce23b1 (diff)
downloadpygments-f2db9aedba7959d57d43903e4eff78db101e6234.tar.gz
[svn] added experimental (untested) plugin support. i'll try writing some plugins tomorrow when i've more time ;)
Diffstat (limited to 'pygments/lexers')
-rw-r--r--pygments/lexers/__init__.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/pygments/lexers/__init__.py b/pygments/lexers/__init__.py
index 0ef200db..99ec4a79 100644
--- a/pygments/lexers/__init__.py
+++ b/pygments/lexers/__init__.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
"""
pygments.lexers
- ~~~~~~~~~~~~~~
+ ~~~~~~~~~~~~~~~
Pygments lexers.
@@ -13,6 +13,7 @@ import types
from os.path import basename
from pygments.lexers._mapping import LEXERS
+from pygments.plugin import find_plugin_lexers
__all__ = ['get_lexer_by_name', 'get_lexer_for_filename'] + LEXERS.keys()
@@ -34,11 +35,16 @@ def get_lexer_by_name(alias, **options):
"""
Get a lexer by an alias
"""
+ # lookup builtin lexers
for module_name, name, aliases, _ in LEXERS.itervalues():
if alias in aliases:
if name not in _lexer_cache:
_load_lexers(module_name)
return _lexer_cache[name](**options)
+ # continue with lexers from setuptools entrypoints
+ for cls in find_plugin_lexers():
+ if alias in cls.aliases:
+ return cls(**options)
raise ValueError('no lexer for alias %r found' % alias)
@@ -47,12 +53,18 @@ def get_lexer_for_filename(fn, **options):
Guess a lexer by a filename
"""
fn = basename(fn)
+ # lookup builtin lexers
for module_name, name, _, filenames in LEXERS.itervalues():
for filename in filenames:
if fnmatch.fnmatch(fn, filename):
if name not in _lexer_cache:
_load_lexers(module_name)
return _lexer_cache[name](**options)
+ # continue with lexers from setuptools entrypoints
+ for cls in find_plugin_lexers():
+ for filename in cls.filenames:
+ if fnmatch.fnmatch(fn, filename):
+ return cls(**options)
raise ValueError('no lexer for filename %r found' % fn)