diff options
-rw-r--r-- | pygments/lexers/postgres.py | 8 | ||||
-rw-r--r-- | tests/examplefiles/postgresql_test.txt | 10 |
2 files changed, 16 insertions, 2 deletions
diff --git a/pygments/lexers/postgres.py b/pygments/lexers/postgres.py index fe9a8a22..36717d4f 100644 --- a/pygments/lexers/postgres.py +++ b/pygments/lexers/postgres.py @@ -67,10 +67,14 @@ def language_callback(lexer, match): rules deepcopy fails in this case. """ l = None - # TODO: the language can also be before the string - m = language_re.match(lexer.text[match.end():]) + m = language_re.match(lexer.text[match.end():match.end()+100]) if m is not None: l = lexer._get_lexer(m.group(1)) + else: + m = list(language_re.finditer( + lexer.text[max(0, match.start()-100):match.start()])) + if m: + l = lexer._get_lexer(m[-1].group(1)) if l: yield (match.start(1), String, match.group(1)) diff --git a/tests/examplefiles/postgresql_test.txt b/tests/examplefiles/postgresql_test.txt index 23bb6d03..fa0914e3 100644 --- a/tests/examplefiles/postgresql_test.txt +++ b/tests/examplefiles/postgresql_test.txt @@ -32,3 +32,13 @@ END; $$ LANGUAGE plpgsql; +-- As returned by pg_dump +CREATE FUNCTION test_function() RETURNS integer + LANGUAGE plpgsql STABLE STRICT + AS $$ +begin + return 42; +end +$$; + + |