import re from pathlib import Path class CopybookPreprocessor: def __init__(self, search_paths: list[str] | None = None): self.search_paths = search_paths or ["./copybooks"] def expand(self, source_text: str) -> str: pattern = re.compile( r'^ COPY\s+(\w+(?:-\w+)?)\s*(?:\.|$.|$)', re.MULTILINE) return pattern.sub(self._replace_copy, source_text) def _replace_copy(self, match): name = match.group(1).strip() for path in self.search_paths: for ext in ["", ".cpy", ".cbl", ".copy"]: p = Path(path) / f"{name}{ext}" if p.exists(): content = p.read_text() return f" *> COPY {name}\n{content}\n *> END COPY {name}" return f" *> COPY {name} NOT FOUND"