diff --git a/src/epydeck/__init__.py b/src/epydeck/__init__.py index 353d307..3704e93 100644 --- a/src/epydeck/__init__.py +++ b/src/epydeck/__init__.py @@ -1,6 +1,7 @@ from ast import literal_eval from io import TextIOBase, StringIO from collections import defaultdict +import re # Specific deck keywords that use : instead of = special_keywords = ["include_species", "identify"] @@ -49,7 +50,7 @@ def _parse_block(line: str, fh: TextIOBase) -> dict: break # Handle special keywords - if any(line.lower().startswith(f"{keyword}:") for keyword in special_keywords): + if any(re.match(rf"^{re.escape(keyword)}\s*:", line.lower()) for keyword in special_keywords): separator = ":" else: separator = "=" diff --git a/test/test_read.py b/test/test_read.py index a58e128..c4c73aa 100644 --- a/test/test_read.py +++ b/test/test_read.py @@ -119,3 +119,19 @@ def test_read_file(): assert "species" in data assert "proton" in data["species"] assert "electron" in data["species"] + + +def test_include_identify_with_spaces(): + text = """ + begin:dist_fn + a = 1 + identify: Electron + identify : Proton + end:dist_fn + """ + + data = epydeck.loads(text) + + expected = {"dist_fn": {"a": 1, "identify": ["Electron", "Proton"]}} + + assert expected == data \ No newline at end of file