diff --git a/.claude/skills/skd-edit/scripts/skd-edit.ps1 b/.claude/skills/skd-edit/scripts/skd-edit.ps1 index 16200b8e..412d8158 100644 --- a/.claude/skills/skd-edit/scripts/skd-edit.ps1 +++ b/.claude/skills/skd-edit/scripts/skd-edit.ps1 @@ -1,4 +1,4 @@ -# skd-edit v1.30 — Atomic 1C DCS editor +# skd-edit v1.31 — Atomic 1C DCS editor # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: парный .py собирает выражения автодат вне f-string ради совместимости с python 3.9 (PEP 701). param( @@ -4045,9 +4045,10 @@ if ($script:RawRootOpening) { $content = [regex]::Replace($content, ']*>', { param($m) $script:RawRootOpening }) } -# (2) normalize self-closing tags: `.NET XmlDocument` adds a space before `/>` -# (``) but 1C-Designer writes ``. Strip the space. -$content = [regex]::Replace($content, '(?<=\S) />', '/>') +# (2) Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Гард на +# CDATA/комментарии: только там `>` не экранируется, и ` />` может быть +# содержимым, а не концом тега. +if ($content -notmatch '', '/>') } # (3) normalize line endings to match source — operations may mix LF (from new # fragments) with whatever the source used (CRLF on Windows, LF on Linux/git). diff --git a/.claude/skills/skd-edit/scripts/skd-edit.py b/.claude/skills/skd-edit/scripts/skd-edit.py index a230210d..875df26b 100644 --- a/.claude/skills/skd-edit/scripts/skd-edit.py +++ b/.claude/skills/skd-edit/scripts/skd-edit.py @@ -1,4 +1,4 @@ -# skd-edit v1.30 — Atomic 1C DCS editor (Python port) +# skd-edit v1.31 — Atomic 1C DCS editor (Python port) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -3440,9 +3440,12 @@ xml_bytes = xml_bytes.replace( xml_text = xml_bytes.decode("utf-8") if raw_root_opening: xml_text = re.sub(r"]*>", lambda m: raw_root_opening, xml_text, count=1, flags=re.DOTALL) -# Normalize self-closing tags: lxml writes `` already (no space), but be -# defensive — strip any space before `/>` so PS and PY ports stay byte-equivalent. -xml_text = re.sub(r"(?<=\S) />", "/>", xml_text) +# Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет `` (lxml и так +# пишет плотно — правка защитная, чтобы порты оставались байт-эквивалентны). Гард на +# CDATA/комментарии: только там `>` не экранируется, и ` />` может быть содержимым, +# а не концом тега. +if "", "/>", xml_text) # Канонизировать переносы к LF (убирает возможный ), затем к стилю источника. xml_text = xml_text.replace(" \n", "\n").replace(" ", "").replace("\r\n", "\n").replace("\r", "\n")