mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-07 04:00:20 +03:00
feat(form-decompile,form-compile): эмиссия оформления Page/Popup + ColumnGroup HeaderPicture + whitespace Title/ToolTip
Декомпилятор ловил эти свойства (Add-CommonProps/Add-Appearance), но эмиттеры компилятора их не выводили → LOST. Четыре подфикса (по выбору пользователя из топа list-iter): 1. Page>BackColor/TitleTextColor/TitleFont (193+): Emit-Page не звал Emit-Appearance. Добавлен (profile field, после ShowTitle перед компаньоном — порядок корпуса). 2. Popup>TitleTextColor/TitleFont (133/127): Emit-Popup не звал Emit-Appearance. Добавлен. 3. ColumnGroup>HeaderPicture (144): Emit-ColumnGroup не звал Emit-ColumnPics. Добавлен (после ShowInHeader/Layout перед оформлением — порядок корпуса). 4. UsualGroup Title/ToolTip с whitespace-контентом: Add-CommonProps читал title/tooltip через Get-LangText (PreserveWhitespace=false стрипал <v8:content> </> → "" → компилятор подавлял). Новый Get-LangTextWS восстанавливает " " (как Get-MLFormattedValue). 1-пробельные tooltip'ы теперь матчатся; редкий N-пробельный → косметика числа пробелов. Зеркало py. Выборка 40 форм с этими категориями: целевые потери 0 (match 21, остаток — несвязанный хвост). Кейсы pages (+backColor/titleTextColor/titleFont), column-group (+headerPicture), button-group (popup +titleTextColor/titleFont) сертифицированы в 1С. Регресс 43/43 (ps1+py). Раскрыто (отдельно): MultipleValuesBackColor (input) — другой appearance-ключ. 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
c96bcc3566
commit
32273d2be8
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.95 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.96 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -274,6 +274,16 @@ function Get-LangText {
|
||||
return $map
|
||||
}
|
||||
|
||||
# Get-LangText с восстановлением значимого пробела: PreserveWhitespace=false стрипает
|
||||
# <v8:content> </v8:content> → "" (неотличимо от суппресса). Платформа НЕ эмитит пустой
|
||||
# Title/ToolTip, значит исходно был пробел → возвращаем " " (как Get-MLFormattedValue).
|
||||
function Get-LangTextWS {
|
||||
param($node)
|
||||
$t = Get-LangText $node
|
||||
if ($t -is [string] -and $t -eq '' -and $node.SelectSingleNode("v8:item/v8:content", $ns)) { return ' ' }
|
||||
return $t
|
||||
}
|
||||
|
||||
# Авто-вывод заголовка из имени — ТОЧНОЕ зеркало Title-FromName из form-compile.
|
||||
# Нужен, чтобы опускать ru-only заголовки, которые компилятор воспроизведёт сам.
|
||||
function Title-FromName {
|
||||
@@ -1074,12 +1084,12 @@ function Add-CommonProps {
|
||||
$uv = Decompile-XrFlag $node 'UserVisible'; if ($null -ne $uv) { $obj['userVisible'] = $uv }
|
||||
$titleNode = $node.SelectSingleNode("lf:Title", $ns)
|
||||
if ($titleNode) {
|
||||
$t = Get-LangText $titleNode
|
||||
$t = Get-LangTextWS $titleNode # восстановление значимого пробела (whitespace-заголовок)
|
||||
if ($null -ne $t) { $obj['title'] = $t }
|
||||
# formatted у LabelDecoration выводится компилятором из hyperlink — отдельный ключ не нужен (#16 хвост)
|
||||
}
|
||||
$ttNode = $node.SelectSingleNode("lf:ToolTip", $ns)
|
||||
if ($ttNode) { $tt = Get-LangText $ttNode; if ($null -ne $tt) { $obj['tooltip'] = $tt } }
|
||||
if ($ttNode) { $tt = Get-LangTextWS $ttNode; if ($null -ne $tt) { $obj['tooltip'] = $tt } }
|
||||
$ttr = Get-Child $node 'ToolTipRepresentation'; if ($ttr) { $obj['tooltipRepresentation'] = $ttr }
|
||||
# Картинки заголовка/подвала колонки (любой field-тип, эмитятся платформой как column header/footer icon)
|
||||
$hp = Get-PictureRef $node 'HeaderPicture'; if ($null -ne $hp) { $obj['headerPicture'] = $hp }
|
||||
|
||||
Reference in New Issue
Block a user