diff --git a/py/apigen/source/html.py b/py/apigen/source/html.py index 6fd39b16f..dbcd7cbc6 100644 --- a/py/apigen/source/html.py +++ b/py/apigen/source/html.py @@ -261,8 +261,15 @@ def get_module_encoding(path): if path[-1] in ['c', 'o']: path = path[:-1] fpath = py.path.local(path) - code = fpath.read() - match = _reg_enc.search(code) + fp = fpath.open() + lines = [] + try: + # encoding is only allowed in the first two lines + for i in range(2): + lines.append(fp.readline()) + finally: + fp.close() + match = _reg_enc.search('\n'.join(lines)) if match: return match.group(1) return 'ISO-8859-1' diff --git a/py/apigen/source/testing/test_html.py b/py/apigen/source/testing/test_html.py index 1e62ef8fe..526cdcb07 100644 --- a/py/apigen/source/testing/test_html.py +++ b/py/apigen/source/testing/test_html.py @@ -177,3 +177,14 @@ def test_get_encoding_for_real(): """))) assert get_module_encoding(fpath.strpath) == 'UTF-8' +def test_get_encoding_matching_pattern_elsewhere(): + temp = py.test.ensuretemp('test_get_encoding') + fpath = temp.join('matching_pattern.py') + fpath.write(str(py.code.Source("""\ + #!/usr/bin/env python + + def foo(coding=None): + pass + """))) + assert get_module_encoding(fpath.strpath) == 'ISO-8859-1' +