|
""" |
|
pygments.modeline |
|
~~~~~~~~~~~~~~~~~ |
|
|
|
A simple modeline parser (based on pymodeline). |
|
|
|
:copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. |
|
:license: BSD, see LICENSE for details. |
|
""" |
|
|
|
import re |
|
|
|
__all__ = ['get_filetype_from_buffer'] |
|
|
|
|
|
modeline_re = re.compile(r''' |
|
(?: vi | vim | ex ) (?: [<=>]? \d* )? : |
|
.* (?: ft | filetype | syn | syntax ) = ( [^:\s]+ ) |
|
''', re.VERBOSE) |
|
|
|
|
|
def get_filetype_from_line(l): |
|
m = modeline_re.search(l) |
|
if m: |
|
return m.group(1) |
|
|
|
|
|
def get_filetype_from_buffer(buf, max_lines=5): |
|
""" |
|
Scan the buffer for modelines and return filetype if one is found. |
|
""" |
|
lines = buf.splitlines() |
|
for l in lines[-1:-max_lines-1:-1]: |
|
ret = get_filetype_from_line(l) |
|
if ret: |
|
return ret |
|
for i in range(max_lines, -1, -1): |
|
if i < len(lines): |
|
ret = get_filetype_from_line(lines[i]) |
|
if ret: |
|
return ret |
|
|
|
return None |
|
|