mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-18 09:10:21 +03:00
fix(mxl-compile,mxl-decompile): пустой текст ячейки и расхождение портов на нём
Пустой текст платформа хранит только самозакрывающимся тегом: в корпусе ERP таких 1 224 460, а из 780 934 непустых блоков нет ни одного, где пусты все языки. Компилятор же на `text: ""` писал блок с пустым элементом языка — запись, которой в выгрузках не существует. Теперь любая пустая форма (строка, пустой объект, все языки пустыми) даёт один и тот же тег, а декомпилятор возвращает её канонической пустой строкой. Отсюда же росло расхождение портов. Свёртка текста на пустой карте языков возвращала null, если ДРУГОГО текста в макете нет вовсе: набор языков документа при этом пуст. Дальше py писал пропуск колонки, а ps1 наступал на разворачивание одноэлементного массива — список из одного $null превращался в $null, и строка целиком уходила в пустые. Проверено на 12 корпусных макетах: 1411 пустых текстов из 1411 вернулись на место, JSON портов совпадает.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# mxl-decompile v1.29 — Decompile 1C spreadsheet to JSON
|
||||
# mxl-decompile v1.30 — Decompile 1C spreadsheet to JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -723,6 +723,10 @@ $textLanguages = @($docLangs.Keys)
|
||||
function Get-DslText {
|
||||
param($byLang)
|
||||
if ($byLang -isnot [System.Collections.IDictionary]) { return $byLang }
|
||||
# Пустой текст (<tl/>) записывается в DSL пустой строкой — той же формой, что
|
||||
# авторская. Без этой ветки макет, где ДРУГОГО текста нет вовсе, отдавал $null,
|
||||
# и ячейка с пустым текстом теряла содержимое.
|
||||
if ($byLang.Count -eq 0) { return '' }
|
||||
if ($byLang.Count -ne $textLanguages.Count) { return $byLang }
|
||||
$common = $null
|
||||
foreach ($l in $textLanguages) {
|
||||
@@ -1219,8 +1223,10 @@ function ConvertTo-PositionalCells {
|
||||
# Позиционная форма ценна компактностью: если она длиннее объектной, смысла в ней нет.
|
||||
$a = Try-InlineJson $out
|
||||
$b = Try-InlineJson $cells
|
||||
if ($null -ne $a -and $null -ne $b -and $a.Length -gt $b.Length) { return $cells }
|
||||
return $out
|
||||
if ($null -ne $a -and $null -ne $b -and $a.Length -gt $b.Length) { return ,$cells }
|
||||
# Запятая обязательна: без неё список из одной ячейки разворачивается в саму ячейку,
|
||||
# а список из одного $null — в $null, и строка целиком уходила в пустые.
|
||||
return ,$out
|
||||
}
|
||||
|
||||
# --- 12. Build areas ---
|
||||
|
||||
Reference in New Issue
Block a user