mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-18 09:10:21 +03:00
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:
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# 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
|
||||
|
||||
import argparse
|
||||
@@ -451,8 +451,8 @@ def main():
|
||||
if entry and inner.get("t") is not None:
|
||||
entry["transparent"] = inner.get("t") == "true"
|
||||
if entry and inner.get("tx") is not None:
|
||||
entry["transparentPixel"] = OrderedDict([("x", int(inner.get("tx"))),
|
||||
("y", int(inner.get("ty") or 0))])
|
||||
entry["transparent"] = OrderedDict([("x", int(inner.get("tx"))),
|
||||
("y", int(inner.get("ty") or 0))])
|
||||
pictures_out[name] = entry
|
||||
picture_key[pic_i] = name
|
||||
|
||||
@@ -738,6 +738,13 @@ def main():
|
||||
if d_node is not None and d_node.text:
|
||||
detail = d_node.text
|
||||
|
||||
# Имя параметра, которым подставляют картинку. Сама картинка сидит в
|
||||
# оформлении (picIndex), поэтому этот тег живёт отдельно от неё.
|
||||
pic_param = None
|
||||
pp_node = find(c_content, "d:pictureParameter")
|
||||
if pp_node is not None and pp_node.text:
|
||||
pic_param = pp_node.text
|
||||
|
||||
# Значение ячейки-поля ввода. Тип значения свой, из объявленного не выводится,
|
||||
# поэтому читаем и его: пустое значение сворачивается в "", остальные едут как есть.
|
||||
value = None
|
||||
@@ -814,6 +821,7 @@ def main():
|
||||
"FormatIdx": cell_fmt_idx,
|
||||
"Param": param,
|
||||
"Detail": detail,
|
||||
"PictureParam": pic_param,
|
||||
"Value": value,
|
||||
"Control": control,
|
||||
"Note": note,
|
||||
@@ -1296,7 +1304,7 @@ def main():
|
||||
# Расшифровка сама по себе делает ячейку содержательной: в корпусе 12 653 ячейки
|
||||
# несут только её. Без этого такая ячейка уходила в заполнители и терялась.
|
||||
has_content = (cell["Param"] or cell["HasText"] or has_value
|
||||
or cell["Detail"] or cell["Note"])
|
||||
or cell["Detail"] or cell["Note"] or cell["PictureParam"])
|
||||
has_merge = f"{global_row},{cell['Col']}" in merge_map
|
||||
|
||||
if has_content or has_merge:
|
||||
@@ -1409,6 +1417,8 @@ def main():
|
||||
# с параметром, две трети расшифровок терялись молча.
|
||||
if cell["Detail"]:
|
||||
dsl_cell["detail"] = cell["Detail"]
|
||||
if cell["PictureParam"]:
|
||||
dsl_cell["pictureParameter"] = cell["PictureParam"]
|
||||
|
||||
if cell["Note"]:
|
||||
n = cell["Note"]
|
||||
|
||||
Reference in New Issue
Block a user