diff options
author | Tim Hatch <tim@timhatch.com> | 2014-04-23 16:48:10 -0400 |
---|---|---|
committer | Tim Hatch <tim@timhatch.com> | 2014-04-23 16:48:10 -0400 |
commit | 690a2bdfa924f76fd374e25bd9772c2090cf6414 (patch) | |
tree | 576991298817f1055da24857df6982dc2bd37d5a /pygments/modeline.py | |
parent | 1d9f7f4f19c49a22ecd119f58580f9bc5ccd5080 (diff) | |
parent | b69477dc22e228cde4c1d39bf11b292b88d95fe1 (diff) | |
download | pygments-690a2bdfa924f76fd374e25bd9772c2090cf6414.tar.gz |
Merged in lefticus/pygments-main (pull request #24)
Conflicts:
pygments/lexers/_mapping.py
pygments/lexers/agile.py
Diffstat (limited to 'pygments/modeline.py')
-rw-r--r-- | pygments/modeline.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/pygments/modeline.py b/pygments/modeline.py new file mode 100644 index 00000000..e81afec0 --- /dev/null +++ b/pygments/modeline.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +""" + pygments.modeline + ~~~~~~~~~~~~~~~~~ + + A simple modeline parser (based on pymodeline). + + :copyright: Copyright 2006-2014 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 l in lines[max_lines:0:-1]: + ret = get_filetype_from_line(l) + if ret: + return ret + + return None |