Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/modeline.py: 26%
19 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-01 06:54 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-01 06:54 +0000
1"""
2 pygments.modeline
3 ~~~~~~~~~~~~~~~~~
5 A simple modeline parser (based on pymodeline).
7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9"""
11import re
13__all__ = ['get_filetype_from_buffer']
16modeline_re = re.compile(r'''
17 (?: vi | vim | ex ) (?: [<=>]? \d* )? :
18 .* (?: ft | filetype | syn | syntax ) = ( [^:\s]+ )
19''', re.VERBOSE)
22def get_filetype_from_line(l):
23 m = modeline_re.search(l)
24 if m:
25 return m.group(1)
28def get_filetype_from_buffer(buf, max_lines=5):
29 """
30 Scan the buffer for modelines and return filetype if one is found.
31 """
32 lines = buf.splitlines()
33 for l in lines[-1:-max_lines-1:-1]:
34 ret = get_filetype_from_line(l)
35 if ret:
36 return ret
37 for i in range(max_lines, -1, -1):
38 if i < len(lines):
39 ret = get_filetype_from_line(lines[i])
40 if ret:
41 return ret
43 return None