blob: a9ca6766591aa52d40cfc0a48f65a51b7dd03b37 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import re
from pathlib import Path
def preprocess_includes(filepath: Path):
"""
Reads the file at 'filepath', processing any "include" directives,
and returns a single string containing the preprocessed file content.
This does not report circular includes, so that would become a infinite loop
"""
INCLUDE_RE = re.compile(r"^\s*include\s+([^\n]+)\s*$", re.IGNORECASE)
def read_file(file_path):
with open(file_path, "r") as file:
return file.readlines()
lines = read_file(filepath)
i = 0
while i < len(lines):
match = INCLUDE_RE.match(lines[i])
if match:
included_file_path = match.group(1)
included_lines = read_file(included_file_path)
lines[i : i + 1] = included_lines
else:
i += 1
return "".join(lines)
|