feat(skd-compile): useInXxx и use=false на conditionalAppearance item

Расширение DSL для бит-перфект roundtrip на условном оформлении:
- use: false — отключённое правило (эмитится в начале item)
- useInDontUse: array — список областей где правило НЕ применяется
  (\"group\", \"hierarchicalGroup\", \"overall\", \"fieldsHeader\",
   \"header\", \"parameters\", \"filter\", \"resourceFieldsHeader\",
   \"overallHeader\", \"overallResourceFieldsHeader\")
  Compile эмитит <dcsset:useInGroup>DontUse</...> и т.п. в платформенном
  порядке.

Семантика: \"useIn\" в платформе — это белый список применения правила;
DSL хранит инверсный список (что отключено) — короче для редких
ограничений.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-22 19:34:32 +03:00
co-authored by Claude Opus 4.7
parent 32e06cbc56
commit eee5aaafd3
2 changed files with 37 additions and 2 deletions
@@ -1,4 +1,4 @@
# skd-compile v1.50 — Compile 1C DCS from JSON
# skd-compile v1.51 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -2192,6 +2192,11 @@ function Emit-ConditionalAppearance {
foreach ($ca in $items) {
X "$indent`t<dcsset:item>"
# use=false — отключённое правило (эмитим до selection — XML-порядок)
if ($ca.use -eq $false) {
X "$indent`t`t<dcsset:use>false</dcsset:use>"
}
# Selection (which fields to apply to; empty = all)
if ($ca.selection -and $ca.selection.Count -gt 0) {
X "$indent`t`t<dcsset:selection>"
@@ -2234,6 +2239,22 @@ function Emit-ConditionalAppearance {
X "$indent`t`t<dcsset:userSettingID>$(Esc-Xml $uid)</dcsset:userSettingID>"
}
# useInXxx — список областей где правило НЕ применяется (DontUse).
# Порядок имитирует платформенный (group → hierarchicalGroup → overall → ...).
if ($ca.useInDontUse -and $ca.useInDontUse.Count -gt 0) {
$useInOrder = @('group','hierarchicalGroup','overall',
'fieldsHeader','header','parameters','filter',
'resourceFieldsHeader','overallHeader','overallResourceFieldsHeader')
$set = @{}
foreach ($n in $ca.useInDontUse) { $set["$n"] = $true }
foreach ($n in $useInOrder) {
if ($set.ContainsKey($n)) {
$tag = "useIn" + ($n.Substring(0,1).ToUpper()) + ($n.Substring(1))
X "$indent`t`t<dcsset:$tag>DontUse</dcsset:$tag>"
}
}
}
X "$indent`t</dcsset:item>"
}
if ($null -ne $blockViewMode) {