feat(mxl-compile,mxl-decompile): параметр картинки у ячейки, прозрачность одним ключом

Ячейка получила третий параметр — pictureParameter, имя параметра, которым
подставляют картинку. Сама картинка задаётся оформлением (picIndex), а этот
тег живёт у ячейки, последним из её параметров, и уживается с текстом.
В корпусе таких ячеек 21 в 9 макетах; теперь все 21 возвращаются обратно.

Прозрачность картинки сведена к одному ключу transparent: false — фона нет,
{ x, y } — прозрачен цвет пикселя с этими координатами. Два способа записи
у платформы исключают друг друга (t принимает только false, включённую
прозрачность выражают tx/ty), так что двум ключам DSL соответствовал один
флажок диалога.

Заодно выровнен порядок ключей в проверке «объект описывает ячейку»: в
py-порте не хватало note.
This commit is contained in:
Nick Shirokov
2026-08-15 21:03:01 +03:00
parent daaa0aeaf8
commit fef55043cf
11 changed files with 167 additions and 42 deletions
@@ -1,4 +1,4 @@
# mxl-decompile v1.28 — Decompile 1C spreadsheet to JSON
# mxl-decompile v1.29 — Decompile 1C spreadsheet to JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -290,7 +290,7 @@ foreach ($picNode in $root.SelectNodes("d:picture", $ns)) {
$entry["transparent"] = ($inner.GetAttribute('t') -ceq 'true')
}
if ($entry.Count -gt 0 -and $inner.HasAttribute('tx')) {
$entry["transparentPixel"] = [ordered]@{
$entry["transparent"] = [ordered]@{
x = [int]$inner.GetAttribute('tx')
y = [int]$inner.GetAttribute('ty')
}
@@ -603,6 +603,12 @@ foreach ($riNode in $root.SelectNodes("d:rowsItem", $ns)) {
$dNode = $cContent.SelectSingleNode("d:detailParameter", $ns)
if ($dNode) { $detail = $dNode.InnerText }
# Имя параметра, которым подставляют картинку. Сама картинка сидит в
# оформлении (picIndex), поэтому этот тег живёт отдельно от неё.
$picParam = $null
$ppNode = $cContent.SelectSingleNode("d:pictureParameter", $ns)
if ($ppNode) { $picParam = $ppNode.InnerText }
# Значение ячейки-поля ввода. Тип значения свой, из объявленного не выводится,
# поэтому читаем и его.
$value = $null
@@ -685,6 +691,7 @@ foreach ($riNode in $root.SelectNodes("d:rowsItem", $ns)) {
FormatIdx = $cellFmtIdx
Param = $param
Detail = $detail
PictureParam = $picParam
Value = $value
Control = $control
Note = $note
@@ -1337,7 +1344,7 @@ foreach ($area in $blocks) {
$hasValue = ($cf -and $cf.Props['containsValue'] -ceq 'true')
# Расшифровка сама по себе делает ячейку содержательной: в корпусе 12 653 ячейки
# несут только её. Без этого такая ячейка уходила в заполнители и терялась.
$hasContent = $cell.Param -or $cell.HasText -or $hasValue -or $cell.Detail -or $cell.Note
$hasContent = $cell.Param -or $cell.HasText -or $hasValue -or $cell.Detail -or $cell.Note -or $cell.PictureParam
$hasMerge = $mergeMap.ContainsKey("$globalRow,$($cell.Col)")
if ($hasContent -or $hasMerge) {
@@ -1455,6 +1462,7 @@ foreach ($area in $blocks) {
# несут её без параметра против 8 582 с ним. Пока она читалась только вместе
# с параметром, две трети расшифровок терялись молча.
if ($cell.Detail) { $dslCell["detail"] = $cell.Detail }
if ($cell.PictureParam) { $dslCell["pictureParameter"] = $cell.PictureParam }
if ($cell.Note) {
$n = $cell.Note