mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-14 18:04:58 +03:00
feat(form-decompile,form-compile): батч скаляров — форм. ChildItemsWidth/VerticalAlign/HorizontalSpacing + check/radio EqualItemsWidth/ItemTitleHeight
Раундтрип терял несколько pass-through скаляров: - форм-уровень <ChildItemsWidth> (36 форм), <VerticalAlign> (26), <HorizontalSpacing> (25) — обрабатывались только как элементные генерики, не на форм-уровне; - <EqualItemsWidth> (check/radio, 28: false 23/true 5) и <ItemTitleHeight> (radio) — чистый двусторонний пробел (не ловились вовсе). decompile: форм-уровневые → KNOWN_FORM_PROPS; элементные → GENERIC_SCALARS (зеркало компилятора). compile (ps1+py): форм-уровневые через generic Emit-Properties (авто-PascalCase); элементные — в genericScalars (Emit-Layout→Emit-GenericScalars, покрывает check/radio). Верификация: таргет-раундтрип 129 форм с этими тегами → 5 категорий закрыты (0 LOST; остаток — др. категории Button>Parameter/valueType/content). Регресс form-compile 43/43 (ps1+py); 1С-cert groups (форм-уровень) + radio-auto-enum (element). spec. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.136 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.137 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -3053,6 +3053,9 @@ $script:genericScalars = @(
|
||||
@{ Tag='Zoomable'; Key='zoomable'; Kind='bool' }
|
||||
@{ Tag='Shape'; Key='shape'; Kind='value' }
|
||||
@{ Tag='PictureLocation'; Key='pictureLocation'; Kind='value' }
|
||||
# Равная ширина элементов (check/radio) / высота заголовка пункта (radio)
|
||||
@{ Tag='EqualItemsWidth'; Key='equalItemsWidth'; Kind='bool' }
|
||||
@{ Tag='ItemTitleHeight'; Key='itemTitleHeight'; Kind='value' }
|
||||
)
|
||||
|
||||
function Emit-GenericScalars {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.136 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.137 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import copy
|
||||
@@ -3166,6 +3166,9 @@ GENERIC_SCALARS = [
|
||||
('Zoomable', 'zoomable', 'bool'),
|
||||
('Shape', 'shape', 'value'),
|
||||
('PictureLocation', 'pictureLocation', 'value'),
|
||||
# Равная ширина элементов (check/radio) / высота заголовка пункта (radio)
|
||||
('EqualItemsWidth', 'equalItemsWidth', 'bool'),
|
||||
('ItemTitleHeight', 'itemTitleHeight', 'value'),
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.109 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.110 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1413,6 +1413,9 @@ $GENERIC_SCALARS = @(
|
||||
@{ Tag='Zoomable'; Key='zoomable'; Kind='bool' }
|
||||
@{ Tag='Shape'; Key='shape'; Kind='value' }
|
||||
@{ Tag='PictureLocation'; Key='pictureLocation'; Kind='value' }
|
||||
# Равная ширина элементов (check/radio) / высота заголовка пункта (radio)
|
||||
@{ Tag='EqualItemsWidth'; Key='equalItemsWidth'; Kind='bool' }
|
||||
@{ Tag='ItemTitleHeight'; Key='itemTitleHeight'; Kind='value' }
|
||||
)
|
||||
|
||||
# Захват generic-скаляров. Специфичная обработка (если ключ уже задан) — побеждает.
|
||||
@@ -2259,7 +2262,7 @@ $titleNode = $root.SelectSingleNode("lf:Title", $ns)
|
||||
if ($titleNode) { $t = Get-LangText $titleNode; if ($null -ne $t) { $dsl['title'] = $t } }
|
||||
|
||||
# properties (прямые скаляры под <Form>, PascalCase → camelCase)
|
||||
$KNOWN_FORM_PROPS = @('AutoTitle','ReportResult','DetailsData','ReportFormType','AutoShowState','ReportResultViewMode','ViewModeApplicationOnSetReportResult','WindowOpeningMode','CommandBarLocation','SaveDataInSettings','AutoSaveDataInSettings','AutoTime','UsePostingMode','RepostOnWrite','AutoURL','AutoFillCheck','Customizable','EnterKeyBehavior','VerticalScroll','Width','Height','Group','UseForFoldersAndItems','SaveWindowSettings','ScalingMode','VerticalSpacing','VariantAppearance','ShowCloseButton','HorizontalAlign','ChildrenAlign','ShowTitle','ConversationsRepresentation','CollapseItemsByImportanceVariant','GroupList')
|
||||
$KNOWN_FORM_PROPS = @('AutoTitle','ReportResult','DetailsData','ReportFormType','AutoShowState','ReportResultViewMode','ViewModeApplicationOnSetReportResult','WindowOpeningMode','CommandBarLocation','SaveDataInSettings','AutoSaveDataInSettings','AutoTime','UsePostingMode','RepostOnWrite','AutoURL','AutoFillCheck','Customizable','EnterKeyBehavior','VerticalScroll','Width','Height','Group','UseForFoldersAndItems','SaveWindowSettings','ScalingMode','VerticalSpacing','VariantAppearance','ShowCloseButton','HorizontalAlign','ChildrenAlign','ShowTitle','ConversationsRepresentation','CollapseItemsByImportanceVariant','GroupList','ChildItemsWidth','VerticalAlign','HorizontalSpacing')
|
||||
$props = [ordered]@{}
|
||||
foreach ($pn in $KNOWN_FORM_PROPS) {
|
||||
$v = Get-Child $root $pn
|
||||
|
||||
@@ -77,6 +77,9 @@
|
||||
| `showCloseButton` | `<ShowCloseButton>` | `true` / `false` — показывать кнопку закрытия |
|
||||
| `horizontalAlign` | `<HorizontalAlign>` | `Left`, `Center`, `Right` — горизонтальное выравнивание формы |
|
||||
| `childrenAlign` | `<ChildrenAlign>` | Выравнивание элементов/заголовков (`ItemsLeftTitlesLeft`, `ItemsRightTitlesLeft`, `None`, …) |
|
||||
| `childItemsWidth` | `<ChildItemsWidth>` | Ширина дочерних элементов формы (`Equal`, `LeftWide`, `LeftNarrow`, …) |
|
||||
| `verticalAlign` | `<VerticalAlign>` | Вертикальное выравнивание (`Top`/`Center`/`Bottom`) |
|
||||
| `horizontalSpacing` | `<HorizontalSpacing>` | Горизонтальный интервал между элементами (`Single`/`Double`/`None`/…) |
|
||||
| `showTitle` | `<ShowTitle>` | `true` / `false` — показывать заголовок формы |
|
||||
| `conversationsRepresentation` | `<ConversationsRepresentation>` | `Auto`, `Show`, `DontShow` — отображение панели обсуждений; pass-through (редкое) |
|
||||
| `collapseItemsByImportanceVariant` | `<CollapseItemsByImportanceVariant>` | `DontUse`, `Use` — сворачивание элементов по важности; pass-through (редкое) |
|
||||
@@ -491,6 +494,8 @@ companion-панели с собственным контентом. Оба не
|
||||
| `path` | string | DataPath |
|
||||
| `radioButtonType` | string | `Auto` (по умолчанию), `RadioButtons`, `Tumbler` |
|
||||
| `columnsCount` | int | Число колонок раскладки |
|
||||
| `itemTitleHeight` | int | Высота заголовка пункта (`<ItemTitleHeight>`) |
|
||||
| `equalItemsWidth` | bool | Равная ширина пунктов (`<EqualItemsWidth>`); общий с `check` |
|
||||
| `titleLocation` | string | Расположение заголовка. **Нет ключа** → умный дефолт `None`. **`""`** → не выводить тег (платформа применит своё умолчание). Значение → как указано |
|
||||
| `choiceList` | array | Варианты выбора: массив `{ value, presentation }` |
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"validatePath": "DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml",
|
||||
"input": {
|
||||
"title": "Группы",
|
||||
"properties": { "showCloseButton": false, "horizontalAlign": "Left", "childrenAlign": "ItemsLeftTitlesLeft" },
|
||||
"properties": { "showCloseButton": false, "horizontalAlign": "Left", "childrenAlign": "ItemsLeftTitlesLeft", "childItemsWidth": "Equal", "verticalAlign": "Top", "horizontalSpacing": "Double" },
|
||||
"elements": [
|
||||
{ "cmdBar": "КоманднаяПанель", "autofill": true },
|
||||
{ "group": "horizontal", "name": "ГруппаШапка", "behavior": "usual", "showTitle": true, "title": "Шапка", "shortcut": "Ctrl+G", "childrenAlign": "ItemsRightTitlesLeft", "horizontalStretch": true, "groupHorizontalAlign": "Right", "throughAlign": "Use", "verticalAlign": "Top", "childItemsWidth": "Equal", "horizontalSpacing": "None", "children": [
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
"title": "Способ курса",
|
||||
"radioButtonType": "Auto",
|
||||
"columnsCount": 1,
|
||||
"itemTitleHeight": 1,
|
||||
"equalItemsWidth": false,
|
||||
"choiceList": [
|
||||
{ "value": "Enum.СпособыКурса.EnumValue.Авто", "presentation": { "ru": "Автоматически", "en": "Automatic" } },
|
||||
{ "value": "Enum.СпособыКурса.EnumValue.Ручной", "presentation": "вручную" },
|
||||
|
||||
+3
@@ -10,6 +10,9 @@
|
||||
<ShowCloseButton>false</ShowCloseButton>
|
||||
<HorizontalAlign>Left</HorizontalAlign>
|
||||
<ChildrenAlign>ItemsLeftTitlesLeft</ChildrenAlign>
|
||||
<ChildItemsWidth>Equal</ChildItemsWidth>
|
||||
<VerticalAlign>Top</VerticalAlign>
|
||||
<HorizontalSpacing>Double</HorizontalSpacing>
|
||||
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
|
||||
<Autofill>false</Autofill>
|
||||
</AutoCommandBar>
|
||||
|
||||
+2
@@ -65,6 +65,8 @@
|
||||
</xr:Value>
|
||||
</xr:Item>
|
||||
</ChoiceList>
|
||||
<EqualItemsWidth>false</EqualItemsWidth>
|
||||
<ItemTitleHeight>1</ItemTitleHeight>
|
||||
<ContextMenu name="СпособКурсаКонтекстноеМеню" id="2"/>
|
||||
<ExtendedTooltip name="СпособКурсаРасширеннаяПодсказка" id="3"/>
|
||||
</RadioButtonField>
|
||||
|
||||
Reference in New Issue
Block a user