modm_data.header2svd.header

 1# Copyright 2022, Niklas Hauser
 2# SPDX-License-Identifier: MPL-2.0
 3
 4import re
 5from ..utils import root_path
 6from collections import defaultdict
 7
 8
 9class Header:
10    CMSIS_PATH =  root_path("ext/cmsis/header/CMSIS/Core/Include")
11    CACHE_HEADER = defaultdict(dict)
12
13    def __init__(self, filename, substitutions=None):
14        self.filename = filename
15        self.substitutions = {r"__(IO|IM|I|O)": ""}
16        if substitutions is not None:
17            self.substitutions.update(substitutions)
18
19    @property
20    def _cache(self):
21        return Header.CACHE_HEADER[self.filename]
22
23    @property
24    def header(self):
25        from CppHeaderParser import CppHeader
26        if "header" not in self._cache:
27            content = self.filename.read_text(encoding="utf-8-sig", errors="replace")
28            for pattern, subs in self.substitutions.items():
29                content = re.sub(pattern, subs, content, flags=(re.DOTALL | re.MULTILINE))
30            self._cache["header"] = CppHeader(content, "string")
31        return self._cache["header"]