From d9572239a895d87523c8959b7cd47c6ff1e4e9d0 Mon Sep 17 00:00:00 2001 From: guido Date: Thu, 1 Feb 2007 15:57:34 +0100 Subject: [PATCH] [svn r37739] Made that only the first two lines of a source file are examined for the encoding. --HG-- branch : trunk --- py/apigen/source/html.py | 11 +++++++++-- py/apigen/source/testing/test_html.py | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) 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' +