nds/registers/parse.py
2024-08-30 02:39:53 -05:00

47 lines
1.1 KiB
Python

from dataclasses import dataclass
@dataclass
class Register:
offset: int
size: int
name: str
page: int
description: str
def parse_fields(line):
fields = line.split(' ', maxsplit=3)
assert len(fields) in {1, 4}, fields
if len(fields) == 1:
offset, = fields
return [int(offset, 16)]
else:
offset, name, page, description = fields
return [int(offset, 16), name, int(page, 10), description]
def register_descriptions(lines):
last_offset = -2
result = []
for line in lines:
if not line.strip():
continue
fields = parse_fields(line)
if len(fields) == 1:
offset, = fields
assert last_offset + 2 == offset, (last_offset, line)
result[len(result) - 1].size += 2
last_offset = offset
else:
offset, name, page, description = fields
result.append(Register(
offset,
2, # size
name.upper(),
page,
description,
))
last_offset = offset
return result