mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-13 22:35:16 +03:00
feat(meta-compile): прощающий ввод ссылок на формы по умолчанию (v1.19)
Default*Form/Auxiliary*Form нормализуются как fillValue-ссылки: русский корень (Справочник→Catalog), сегмент Форма→Form, и короткая запись без него (Справочник.X.ФормаЭлемента ≡ Справочник.X.Форма.ФормаЭлемента ≡ канон). Канон англ. — идемпотентно (снэпшоты не меняются). Декомпилятор эмитит канон, роундтрип не затронут. Кейс catalog-object-props переведён на русскую форму (лочит нормализацию), spec §7.1. Регресс 40/40 ps1+py, ps1↔py идентичны. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# meta-compile v1.18 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.19 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -302,10 +302,24 @@ function Get-BoolProp {
|
||||
return ("$val" -match '^(true|1|да|истина)$')
|
||||
}
|
||||
|
||||
# Прощающая нормализация ссылки на форму: рус корень (Справочник→Catalog), сегмент Форма→Form,
|
||||
# короткая запись "Тип.Объект.ИмяФормы" (без Form) → вставка Form. Уже канон англ. → без изменений.
|
||||
function Normalize-FormRef {
|
||||
param([string]$s)
|
||||
if (-not $s) { return $s }
|
||||
$parts = $s -split '\.'
|
||||
if ($parts.Count -lt 3) { return $s }
|
||||
$root = $script:fillRefRoots[$parts[0].ToLower()]
|
||||
if ($root) { $parts[0] = $root }
|
||||
for ($k = 1; $k -lt $parts.Count; $k++) { if ($parts[$k] -ieq 'Форма') { $parts[$k] = 'Form' } }
|
||||
if (($parts -notcontains 'Form') -and $parts.Count -eq 3) { $parts = @($parts[0], $parts[1], 'Form', $parts[2]) }
|
||||
return ($parts -join '.')
|
||||
}
|
||||
|
||||
# Ссылка на форму по умолчанию: непустая → <Tag>значение</Tag>, иначе <Tag/>.
|
||||
function Emit-FormRef {
|
||||
param([string]$i, [string]$tag, $val)
|
||||
if ($val) { X "$i<$tag>$(Esc-Xml "$val")</$tag>" } else { X "$i<$tag/>" }
|
||||
if ($val) { X "$i<$tag>$(Esc-Xml (Normalize-FormRef "$val"))</$tag>" } else { X "$i<$tag/>" }
|
||||
}
|
||||
|
||||
if (-not $def.type) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-compile v1.18 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.19 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -412,10 +412,27 @@ def get_bool_prop(field_name, default):
|
||||
return val
|
||||
return str(val).lower() in ('true', '1', 'да', 'истина')
|
||||
|
||||
def normalize_form_ref(s):
|
||||
"""Прощающая нормализация ссылки на форму: рус корень, Форма→Form, короткая запись → вставка Form."""
|
||||
if not s:
|
||||
return s
|
||||
parts = s.split('.')
|
||||
if len(parts) < 3:
|
||||
return s
|
||||
root = fill_ref_roots.get(parts[0].lower())
|
||||
if root:
|
||||
parts[0] = root
|
||||
for k in range(1, len(parts)):
|
||||
if parts[k].lower() == 'форма':
|
||||
parts[k] = 'Form'
|
||||
if 'Form' not in parts and len(parts) == 3:
|
||||
parts = [parts[0], parts[1], 'Form', parts[2]]
|
||||
return '.'.join(parts)
|
||||
|
||||
def emit_form_ref(i, tag, val):
|
||||
"""Ссылка на форму по умолчанию: непустая → <Tag>значение</Tag>, иначе <Tag/>."""
|
||||
if val:
|
||||
X(f'{i}<{tag}>{esc_xml(str(val))}</{tag}>')
|
||||
X(f'{i}<{tag}>{esc_xml(normalize_form_ref(str(val)))}</{tag}>')
|
||||
else:
|
||||
X(f'{i}<{tag}/>')
|
||||
|
||||
|
||||
@@ -305,8 +305,12 @@ JSON DSL для описания объектов метаданных конф
|
||||
| `includeHelpInContents` | `false` | IncludeHelpInContents (bool) |
|
||||
| `dataLockControlMode` | `Automatic` | DataLockControlMode |
|
||||
| `fullTextSearch` | `Use` | FullTextSearch |
|
||||
| `defaultObjectForm` / `defaultFolderForm` / `defaultListForm` / `defaultChoiceForm` / `defaultFolderChoiceForm` | пусто | Default*Form (ссылка на форму, напр. `Catalog.X.Form.ФормаY`) |
|
||||
| `defaultObjectForm` / `defaultFolderForm` / `defaultListForm` / `defaultChoiceForm` / `defaultFolderChoiceForm` | пусто | Default*Form (ссылка на форму) |
|
||||
| `auxiliaryObjectForm` / `auxiliaryFolderForm` / `auxiliaryListForm` / `auxiliaryChoiceForm` / `auxiliaryFolderChoiceForm` | пусто | Auxiliary*Form (ссылка на форму) |
|
||||
|
||||
Ссылка на форму — `Тип.Объект.Form.ИмяФормы` (напр. `Catalog.НастройкиОбмена.Form.ФормаЭлемента`). Прощающий ввод:
|
||||
русский корень (`Справочник`→`Catalog`), сегмент `Форма`→`Form`, и короткая запись без него —
|
||||
`Справочник.НастройкиОбмена.ФормаЭлемента` ≡ `Справочник.НастройкиОбмена.Форма.ФормаЭлемента` ≡ канон.
|
||||
| `owners` | `[]` | Owners |
|
||||
| `objectPresentation` | пусто | ObjectPresentation (ML) |
|
||||
| `extendedObjectPresentation` | пусто | ExtendedObjectPresentation (ML) |
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
"predefinedDataUpdate": "DontAutoUpdate",
|
||||
"searchStringModeOnInputByString": "AnyPart",
|
||||
"defaultObjectForm": "Catalog.НастройкиОбмена.Form.ФормаЭлемента",
|
||||
"defaultListForm": "Catalog.НастройкиОбмена.Form.ФормаСписка",
|
||||
"defaultChoiceForm": "Catalog.НастройкиОбмена.Form.ФормаВыбора",
|
||||
"defaultListForm": "Справочник.НастройкиОбмена.Форма.ФормаСписка",
|
||||
"defaultChoiceForm": "Справочник.НастройкиОбмена.ФормаВыбора",
|
||||
"attributes": [
|
||||
"Код: String(9)"
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user