summaryrefslogtreecommitdiff
path: root/pygments/lexer.py
diff options
context:
space:
mode:
Diffstat (limited to 'pygments/lexer.py')
-rw-r--r--pygments/lexer.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/pygments/lexer.py b/pygments/lexer.py
index 0531dcde..4a041523 100644
--- a/pygments/lexer.py
+++ b/pygments/lexer.py
@@ -20,7 +20,7 @@ from pygments.filter import apply_filters, Filter
from pygments.filters import get_filter_by_name
from pygments.token import Error, Text, Other, _TokenType
from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
- make_analysator, text_type, add_metaclass, iteritems
+ make_analysator, text_type, add_metaclass, iteritems, Future
from pygments.regexopt import regex_opt
__all__ = ['Lexer', 'RegexLexer', 'ExtendedRegexLexer', 'DelegatingLexer',
@@ -402,7 +402,7 @@ class default:
self.state = state
-class words:
+class words(Future):
"""
Indicates a list of literal words that is transformed into an optimized
regex that matches any of the words.
@@ -414,6 +414,9 @@ class words:
self.prefix = prefix
self.suffix = suffix
+ def get(self):
+ return regex_opt(self.words, prefix=self.prefix, suffix=self.suffix)
+
class RegexLexerMeta(LexerMeta):
"""
@@ -423,9 +426,8 @@ class RegexLexerMeta(LexerMeta):
def _process_regex(cls, regex, rflags, state):
"""Preprocess the regular expression component of a token definition."""
- if isinstance(regex, words):
- return re.compile(regex_opt(regex.words, prefix=regex.prefix,
- suffix=regex.suffix), rflags).match
+ if isinstance(regex, Future):
+ regex = regex.get()
return re.compile(regex, rflags).match
def _process_token(cls, token):