fix(mxl-decompile): не писать style по умолчанию, чинить потерю стиля при rowStyle

Одно условие делает две вещи.

Сокращение: у 56% ячеек (19 737 из 35 190) стоял "style": "default", хотя компилятор
и так подставляет default, когда ключа нет и у строки нет rowStyle. Чистый шум;
объём декомпилированного JSON на пилоте упал на 7%.

Починка: при ЗАДАННОМ rowStyle ячейка со стилем default, которая его не наследует,
теряла стиль вовсе — условие содержало -not rowStyleName, — и при обратной сборке
такая ячейка наследовала rowStyle вместо своего умолчания.

Проверка на потери: из 40 макетов пилота 23 собрались байт в байт как прежде. У 17
XML изменился, и это разобрано поячеечно: во всех 181 разошедшейся ячейке НИ ОДНА
версия не совпадает с оригиналом — там backColor, фон ячейки, который DSL не
поддерживает вовсе (числится в ограничениях). То есть правка переключает между двумя
одинаково неверными отображениями неподдерживаемой конструкции, не улучшая и не
ухудшая совпадение: фактов, совпавших с оригиналом, было 8183 и осталось 8183.

Проверено: тесты 54/54 на обоих рантаймах. Дрейф снэпшота один и ожидаемый — из
back.json ушёл "style": "default".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-10 21:36:07 +03:00
co-authored by Claude Opus 5
parent 1e06e43e92
commit a9697b613d
3 changed files with 15 additions and 5 deletions
@@ -1,4 +1,4 @@
# mxl-decompile v1.6 — Decompile 1C spreadsheet to JSON
# mxl-decompile v1.7 — Decompile 1C spreadsheet to JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -638,8 +638,13 @@ foreach ($area in $blocks) {
if ($rowStyleKey -and $cellStyleKey -eq $rowStyleKey) {
# Inherits rowStyle
} else {
# Стиль пишем, только когда он отличается от того, что подставит компилятор:
# без rowStyle умолчание и есть "default", поэтому такой ключ — шум (56% ячеек).
# А при заданном rowStyle стиль "default" писать ОБЯЗАТЕЛЬНО: раньше здесь стояло
# `-not $rowStyleName`, и такая ячейка теряла стиль вовсе — при обратной сборке
# она наследовала rowStyle.
$sn = Get-StyleName $cell.FormatIdx
if ($sn -ne "default" -or -not $rowStyleName) {
if ($sn -ne "default" -or $rowStyleName) {
$dslCell["style"] = $sn
}
}
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# mxl-decompile v1.6 — Decompile 1C spreadsheet to JSON
# mxl-decompile v1.7 — Decompile 1C spreadsheet to JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -807,8 +807,13 @@ def main():
if row_style_key and cell_style_key == row_style_key:
pass # Inherits rowStyle
else:
# Стиль пишем, только когда он отличается от того, что подставит компилятор:
# без rowStyle умолчание и есть "default", поэтому такой ключ — шум (56% ячеек).
# А при заданном rowStyle стиль "default" писать ОБЯЗАТЕЛЬНО: раньше здесь было
# `not row_style_name`, и такая ячейка теряла стиль вовсе — при обратной сборке
# она наследовала rowStyle.
sn = get_style_name(cell["FormatIdx"])
if sn != "default" or not row_style_name:
if sn != "default" or row_style_name:
dsl_cell["style"] = sn
# Content
@@ -1 +1 @@
{ "columns": 2, "defaultWidth": 10, "fonts": { "default": { "face": "Arial", "size": 10 } }, "styles": {}, "areas": [{ "name": "Test", "rows": [{ "cells": [{ "col": 1, "style": "default", "text": "A" }, { "col": 2, "style": "default", "text": "B" }] }] }] }
{ "columns": 2, "defaultWidth": 10, "fonts": { "default": { "face": "Arial", "size": 10 } }, "styles": {}, "areas": [{ "name": "Test", "rows": [{ "cells": [{ "col": 1, "text": "A" }, { "col": 2, "text": "B" }] }] }] }