modm_data.html.stmicro.helper

 1# Copyright 2022, Niklas Hauser
 2# SPDX-License-Identifier: MPL-2.0
 3
 4import re
 5
 6
 7def split_package(package):
 8    pattern = r"(LFBGA|TFBGA|UFBGA|LQFP|SO|TSSOP|UFQFPN|VFQFPN|E?WLCSP)(\d+)"
 9    if match := re.search(pattern, package):
10        return (match.group(0), match.group(1), int(match.group(2)))
11    return None
12
13
14def split_device_filter(device_filter: str) -> list[str]:
15    devices = []
16    if len(parts := device_filter.split("/")) >= 2:
17        base = parts[0]
18        devices.append(base)
19        base = base[:-len(parts[1])]
20        for part in parts[1:]:
21            devices.append(base + part)
22    else:
23        devices.append(device_filter)
24    return devices
25
26
27def device_filter_from(caption: str) -> list[str]:
28    if devices := re.findall(r"(STM32[\w/]+)", caption):
29        devices = [d for device in devices for d in split_device_filter(device)]
30        return "|".join(d.replace("x", ".") for d in sorted(devices)).lower()
31    return ""
32
33
34def find_device_filter(did, device_filters):
35    for dfilter in list(sorted(device_filters, key=lambda d: -len(d))):
36        if re.match(dfilter, did.string) or dfilter == "":
37            return dfilter
38    return None
def split_package(package):
 8def split_package(package):
 9    pattern = r"(LFBGA|TFBGA|UFBGA|LQFP|SO|TSSOP|UFQFPN|VFQFPN|E?WLCSP)(\d+)"
10    if match := re.search(pattern, package):
11        return (match.group(0), match.group(1), int(match.group(2)))
12    return None
def split_device_filter(device_filter: str) -> list[str]:
15def split_device_filter(device_filter: str) -> list[str]:
16    devices = []
17    if len(parts := device_filter.split("/")) >= 2:
18        base = parts[0]
19        devices.append(base)
20        base = base[:-len(parts[1])]
21        for part in parts[1:]:
22            devices.append(base + part)
23    else:
24        devices.append(device_filter)
25    return devices
def device_filter_from(caption: str) -> list[str]:
28def device_filter_from(caption: str) -> list[str]:
29    if devices := re.findall(r"(STM32[\w/]+)", caption):
30        devices = [d for device in devices for d in split_device_filter(device)]
31        return "|".join(d.replace("x", ".") for d in sorted(devices)).lower()
32    return ""
def find_device_filter(did, device_filters):
35def find_device_filter(did, device_filters):
36    for dfilter in list(sorted(device_filters, key=lambda d: -len(d))):
37        if re.match(dfilter, did.string) or dfilter == "":
38            return dfilter
39    return None