|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
3 | | -from collections import ChainMap |
4 | 3 | from dataclasses import dataclass, field |
5 | 4 | from functools import lru_cache, partial |
6 | 5 | from operator import attrgetter |
@@ -1103,9 +1102,6 @@ def __init__(self, node: DOMNode, base: Styles, inline_styles: Styles) -> None: |
1103 | 1102 | self._updates: int = 0 |
1104 | 1103 | self._rich_style: tuple[int, Style] | None = None |
1105 | 1104 | self._gutter: tuple[int, Spacing] | None = None |
1106 | | - self._render_rules = ChainMap(inline_styles._rules, base._rules) |
1107 | | - self.get_rule = self._render_rules.get # type: ignore[assignment] |
1108 | | - self.has_rule = self._render_rules.__contains__ # type: ignore[assignment] |
1109 | 1105 |
|
1110 | 1106 | def __eq__(self, other: object) -> bool: |
1111 | 1107 | if isinstance(other, RenderStyles): |
@@ -1226,10 +1222,19 @@ def reset(self) -> None: |
1226 | 1222 | self._inline_styles.reset() |
1227 | 1223 | self._updates += 1 |
1228 | 1224 |
|
| 1225 | + def has_rule(self, rule: str) -> bool: |
| 1226 | + """Check if a rule has been set.""" |
| 1227 | + return self._inline_styles.has_rule(rule) or self._base_styles.has_rule(rule) |
| 1228 | + |
1229 | 1229 | def set_rule(self, rule: str, value: object | None) -> bool: |
1230 | 1230 | self._updates += 1 |
1231 | 1231 | return self._inline_styles.set_rule(rule, value) |
1232 | 1232 |
|
| 1233 | + def get_rule(self, rule: str, default: object = None) -> object: |
| 1234 | + if self._inline_styles.has_rule(rule): |
| 1235 | + return self._inline_styles.get_rule(rule, default) |
| 1236 | + return self._base_styles.get_rule(rule, default) |
| 1237 | + |
1233 | 1238 | def clear_rule(self, rule_name: str) -> bool: |
1234 | 1239 | """Clear a rule (from inline).""" |
1235 | 1240 | self._updates += 1 |
|
0 commit comments