mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 06:39:13 +00:00
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:
@@ -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 == "}":
|
||||||
|
|||||||
Reference in New Issue
Block a user