feat(mxl-compile,mxl-decompile): языки макета и шрифт как у платформы

Контролируемый стенд (upload/epf/МакетТабличныйДокумент) вскрыл четыре
системных расхождения подряд. После правок 7 макетов стенда из 10 проходят
раундтрип БАЙТ В БАЙТ обоими портами — до этого ни один.

1. Объявление языков макета жёстко писалось как «только русский». Это не то же
   самое, что textLanguages: почти во всех макетах ERP объявлен один ru, а текст
   лежит и под ru, и под en, поэтому выводить одно из другого нельзя. Заведены
   недокументированные ключи languages / currentLanguage / defaultLanguage —
   автору они не нужны, нужны раундтрипу. defaultLanguage несём, а не выводим:
   «всегда ru» — наблюдение на четырёх русских типовых, а не правило формата.

2. <font> писался в каждом формате. Платформа пишет его только когда шрифт
   задан: треть форматов корпуса (23 003 из 69 581) обходится без него.

3. Декомпилятор считал шрифт с индексом 0 «обычным» и не писал его в стиль.
   Нулевой шрифт вовсе не обязан быть обычным — в макетах стенда он курсивный
   и жирный, и начертание терялось.

4. Формат, несущий ТОЛЬКО шрифт, выглядел пустым: у ячейки он получал
   зарезервированное имя default и не записывался, у строки терялся целиком.

Остаток на стенде — три макета, и все три про одно: ссылка ячейки на запись
ширины, оставшуюся от прежнего состояния документа. Это не воспроизводится
принципиально, разобрано в docs/1c-spreadsheet-spec.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-11 20:08:28 +03:00
co-authored by Claude Opus 5
parent f72dd544dd
commit fc792bfee6
33 changed files with 356 additions and 379 deletions
@@ -70,7 +70,7 @@
<c>
<i>1</i>
<c>
<f>4</f>
<f>3</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -81,7 +81,7 @@
</c>
<c>
<c>
<f>4</f>
<f>3</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -98,32 +98,32 @@
<formatIndex>3</formatIndex>
<c>
<c>
<f>5</f>
<f>4</f>
<parameter>Номер</parameter>
</c>
</c>
<c>
<c>
<f>5</f>
<f>4</f>
<parameter>Имя</parameter>
</c>
</c>
<c>
<c>
<f>5</f>
<f>4</f>
<parameter>Код</parameter>
</c>
</c>
<c>
<c>
<f>5</f>
<f>4</f>
<parameter>Сумма</parameter>
</c>
</c>
</row>
</rowsItem>
<templateMode>true</templateMode>
<defaultFormatIndex>6</defaultFormatIndex>
<defaultFormatIndex>5</defaultFormatIndex>
<height>4</height>
<vgRows>4</vgRows>
<merge>
@@ -181,16 +181,15 @@
<line width="1" gap="false">
<v8ui:style xsi:type="v8ui:SpreadsheetDocumentCellLineType">Solid</v8ui:style>
</line>
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
<font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
<format>
<font>1</font>
<font>0</font>
<border>0</border>
<horizontalAlignment>Center</horizontalAlignment>
<fillType>Parameter</fillType>
</format>
<format>
<font>1</font>
<font>0</font>
<border>0</border>
<horizontalAlignment>Center</horizontalAlignment>
</format>
@@ -198,11 +197,6 @@
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>
<fillType>Parameter</fillType>
</format>