Fix #7274: Add unique CSS class suffix to all selectors in sheet drawings

Previously, when multiple CSS selectors were comma-separated in a rule,
only the last selector received the unique drawing ID suffix. This caused
style conflicts when multiple drawings were placed on the same sheet.

Now all selectors in comma-separated lists receive the unique suffix,
ensuring proper style isolation between drawings.

Example:
Before: .cut.Status-DEMOLISH, .cut.Option-D.d2156 { ... }
After:  .cut.Status-DEMOLISH.d2156, .cut.Option-D.d2156 { ... }
This commit is contained in:
Ryan Schultz
2025-11-08 10:41:43 -06:00
parent 3d68bbc0ca
commit a2dbdbf8cc
@@ -341,17 +341,29 @@ class SheetBuilder:
assert style_data is not None assert style_data is not None
text = "" text = ""
brackets_level = 0 brackets_level = 0
selector_buffer = "" # Buffer to accumulate selectors across lines
for l in style_data: for l in style_data:
if l == "{": if l == "{":
if brackets_level == 0: if brackets_level == 0:
cur_line = text.splitlines()[-1] # Get all accumulated selector text (may span multiple lines)
text = text[: -len(cur_line)] # Find where the last rule ended (after last }) or start of text
last_close = text.rfind("}")
if last_close == -1:
selector_text = text
text = ""
else:
selector_text = text[last_close + 1 :]
text = text[: last_close + 1]
# Process all selectors (split by comma)
css_selectors = [] css_selectors = []
# making sure cases like "text, tspan" will be for css_selector in selector_text.split(","):
# converted to "text.prefix, tspan.prefix" css_selector = css_selector.strip()
for css_selector in cur_line.split(","): if css_selector: # Only process non-empty selectors
css_selector = f"{css_selector.strip()}.{prefix}" css_selector = f"{css_selector}.{prefix}"
css_selectors.append(css_selector) css_selectors.append(css_selector)
text += ", ".join(css_selectors) + " " text += ", ".join(css_selectors) + " "
brackets_level += 1 brackets_level += 1
elif l == "}": elif l == "}":