diff --git a/k2t.py b/k2t.py index 5884b61..fbf5214 100644 --- a/k2t.py +++ b/k2t.py @@ -7,6 +7,11 @@ from dataclasses import dataclass, fields from xml.etree import ElementTree +# Used when value is `None`, except on groups where they're left unset +DEFAULT_LINESTYLE = 'I0' +DEFAULT_DITHER = 'I1' + + def k2t( kfile: str, tfile: str, @@ -101,16 +106,16 @@ def t2k(tfile: str, kfile: str) -> None: @dataclass(slots=True) class Entry: - name: str - source: str | None - frame_color: str | None - fill_color: str | None + name: str | None = None + source: str | None = None + frame_color: str | None = None + fill_color: str | None = None members: list | None = None expanded: bool = False - dither_pattern: str = 'C1' - line_style: str = 'C0' + dither_pattern: str | None = None + line_style: str | None = None frame_brightness: int = 0 fill_brightness: int = 0 width: int = 1 @@ -127,11 +132,7 @@ class Entry: assert el.tag in ('properties', 'group-members') members = [] - args: dict[str, Any] = { - 'frame_color': None, - 'fill_color': None, - 'source': None, - } + args: dict[str, Any] = {} for child in el: if not child.text: continue @@ -157,6 +158,8 @@ class Entry: if not members: members = None + args.setdefault('line_style', DEFAULT_LINESTYLE) + args.setdefault('dither_pattern', DEFAULT_DITHER) return cls(members=members, **args) @@ -165,22 +168,18 @@ class Entry: el = ElementTree.Element(main_tag) for field in fields(self): val = getattr(self, field.name) - if val is None or field.name == 'members': - continue - if (val == field.default - and (field not in ('dither-pattern', 'line-style') - or self.source is None - )): + if field.name == 'members': continue tag = field.name.replace('_', '-') - if tag in ('frame-color', 'fill-color'): - val = '#' + val - if not isinstance(val, str): - val = str(val).lower() el2 = ElementTree.Element(tag) - el2.text = val + if val is not None: + if not isinstance(val, str): + val = str(val).lower() + el2.text = val + elif tag == 'source': + el2.text = '*/*@*' el.append(el2) if self.members: @@ -195,7 +194,9 @@ class Entry: s = '[[' + '.'.join(parts) + ']]\n' for field in fields(self): val = getattr(self, field.name) - if val == field.default or val is None: + if val == field.default: + continue + if field.name == 'members': continue if isinstance(val, str): @@ -219,11 +220,7 @@ class Entry: @classmethod def from_toml(cls: Type[Self], tree: dict) -> Self: members = [] - args: dict[str, Any] = { - 'frame_color': None, - 'fill_color': None, - 'source': None, - } + args: dict[str, Any] = {} for key, val in tree.items(): if key != 'members': args[key.replace('-', '_')] = val @@ -234,6 +231,8 @@ class Entry: if not members: members = None + args.setdefault('line_style', DEFAULT_LINESTYLE) + args.setdefault('dither_pattern', DEFAULT_DITHER) return cls(members=members, **args)