From 7c4a294323e49767649857337820456cab980c5b Mon Sep 17 00:00:00 2001 From: Aurantium-47 <280805072+Aurantium-47@users.noreply.github.com> Date: Mon, 12 Oct 2026 23:03:20 +0800 Subject: [PATCH] Fix tab-separated PO locations with enclosed filenames Assisted-by: OpenAI GPT-6 --- babel/messages/pofile.py | 2 +- tests/messages/test_pofile.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index 27f113ddf..aa1cf89f3 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -116,7 +116,7 @@ def _extract_locations(line: str) -> list[str]: ) in_filename = False continue - elif c == " ": + elif c in " \t": if in_filename: location += c elif location: diff --git a/tests/messages/test_pofile.py b/tests/messages/test_pofile.py index 0f4b483cf..30dc4d57d 100644 --- a/tests/messages/test_pofile.py +++ b/tests/messages/test_pofile.py @@ -32,6 +32,26 @@ def test_enclosed_filenames_in_location_comment(): assert True is catalog.is_identical(catalog2) +@pytest.mark.parametrize("separator", ["\t", " \t "]) +def test_read_po_with_tab_separated_locations(separator): + locations = separator.join( + [ + "plain.py:1", + "\u2068with space.py\u2069:2", + "\u2068with\ttab.py\u2069:3", + "last.py:4", + ], + ) + catalog = pofile.read_po(StringIO(f'#: {locations}\nmsgid "foo"\nmsgstr "bar"\n')) + + assert catalog["foo"].locations == [ + ("plain.py", 1), + ("with space.py", 2), + ("with\ttab.py", 3), + ("last.py", 4), + ] + + def test_unescape(): escaped = '"Say:\\n \\"hello, world!\\"\\n"' unescaped = 'Say:\n "hello, world!"\n'