mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-30 16:36:56 +03:00
feat(form-decompile,form-compile): InputField MultiLine факт. значение + Shortcut как generic-скаляр
Две находки из корпусного хвоста (свериться помог category-forms.py против rt-24): - **MultiLine факт. значение** (190 LOST в выборке rt-24): компилятор эмитил и декомпилятор ловил только `true`, терялся явный `<MultiLine>false>` (425 в корпусе 8.3.24; absent 204694, true 5183). Теперь захват/эмиссия true/false при наличии, отсутствие = дефолт (как PasswordMode). Эвристика autoMaxWidth (multiLineDefault) не затронута — продолжает срабатывать только на true. - **Shortcut → generic-скаляр** (94 LOST на 86 формах): эмитился/ловился только у PictureField (инлайн), терялся на InputField (169), UsualGroup (41), RadioButtonField (39), Page (22), Table (3), CheckBoxField (1). Перенёс в GENERIC_SCALARS (любой элемент через Emit-Layout/Add-GenericScalars), убрал инлайн PictureField. Команда — отдельный путь (§7), не трогаю. Заодно подтверждено покрытие (category-forms против rt-24 = 0): ControlRepresentation (1464), ShapeRepresentation (877), PasswordMode (689) — уже generic/факт. значение. AllowedLength (625) — это cascade типов полей дин-списка (отдельный кластер, не трогаем). Зеркало py (байт-в-байт). Выборка 73 формы (MultiLine=false + Shortcut на 6 типах элементов): 0 потерь. Кейсы input-fields (+multiLine:false +shortcut на input), groups (+shortcut на group), picture-field (shortcut через generic) сертифицированы в 1С. Регресс 43/43 (ps1+py). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
c4f600a36b
commit
b2eaa9e129
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.89 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.90 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1304,6 +1304,8 @@ $GENERIC_SCALARS = @(
|
||||
@{ Tag='ChoiceListHeight'; Key='choiceListHeight'; Kind='value' }
|
||||
@{ Tag='ThreeState'; Key='threeState'; Kind='bool' }
|
||||
@{ Tag='ScrollOnCompress'; Key='scrollOnCompress'; Kind='bool' }
|
||||
# Сочетание клавиш — общее свойство элемента (команда — отдельный путь)
|
||||
@{ Tag='Shortcut'; Key='shortcut'; Kind='value' }
|
||||
)
|
||||
|
||||
# Захват generic-скаляров. Специфичная обработка (если ключ уже задан) — побеждает.
|
||||
@@ -1561,7 +1563,8 @@ function Decompile-Element {
|
||||
$obj[$key] = $name
|
||||
$dp = Get-Child $node 'DataPath'; if ($dp) { $obj['path'] = $dp }
|
||||
Add-CommonProps $obj $node $name
|
||||
if ((Get-Child $node 'MultiLine') -eq 'true') { $obj['multiLine'] = $true }
|
||||
# MultiLine: факт. значение (платформа эмитит и явный false — 425 в корпусе; ≠ «if true»)
|
||||
$mlIn = Get-Child $node 'MultiLine'; if ($null -ne $mlIn) { $obj['multiLine'] = ($mlIn -eq 'true') }
|
||||
# PasswordMode: факт. значение (платформа эмитит и false — 349/504 в корпусе; ≠ «if true»)
|
||||
$pmIn = Get-Child $node 'PasswordMode'; if ($null -ne $pmIn) { $obj['passwordMode'] = ($pmIn -eq 'true') }
|
||||
$mi = Get-Child $node 'AutoMarkIncomplete'; if ($null -ne $mi) { $obj['markIncomplete'] = ($mi -eq 'true') }
|
||||
@@ -1669,7 +1672,6 @@ function Decompile-Element {
|
||||
$em = Get-Child $node 'EditMode'; if ($em) { $obj['editMode'] = $em }
|
||||
$tl = Get-Child $node 'TitleLocation'; if ($tl) { $obj['titleLocation'] = $tl.ToLower() }
|
||||
if ((Get-Child $node 'Hyperlink') -eq 'true') { $obj['hyperlink'] = $true }
|
||||
$sct = Get-Child $node 'Shortcut'; if ($sct) { $obj['shortcut'] = $sct }
|
||||
$vp = Get-PictureRef $node 'ValuesPicture'; if ($null -ne $vp) { $obj['valuesPicture'] = $vp }
|
||||
$npt = $node.SelectSingleNode("lf:NonselectedPictureText", $ns); if ($npt) { $t = Get-LangText $npt; if ($null -ne $t) { $obj['nonselectedPictureText'] = $t } }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user