1# -*- coding: utf-8 -*- 2""" 3 pygments.modeline 4 ~~~~~~~~~~~~~~~~~ 5 6 A simple modeline parser (based on pymodeline). 7 8 :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS. 9 :license: BSD, see LICENSE for details. 10""" 11 12import re 13 14__all__ = ['get_filetype_from_buffer'] 15 16 17modeline_re = re.compile(r''' 18 (?: vi | vim | ex ) (?: [<=>]? \d* )? : 19 .* (?: ft | filetype | syn | syntax ) = ( [^:\s]+ ) 20''', re.VERBOSE) 21 22 23def get_filetype_from_line(l): 24 m = modeline_re.search(l) 25 if m: 26 return m.group(1) 27 28 29def get_filetype_from_buffer(buf, max_lines=5): 30 """ 31 Scan the buffer for modelines and return filetype if one is found. 32 """ 33 lines = buf.splitlines() 34 for l in lines[-1:-max_lines-1:-1]: 35 ret = get_filetype_from_line(l) 36 if ret: 37 return ret 38 for i in range(max_lines, -1, -1): 39 if i < len(lines): 40 ret = get_filetype_from_line(lines[i]) 41 if ret: 42 return ret 43 44 return None 45