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
@@ -53,32 +53,32 @@
<formatIndex>2</formatIndex>
<c>
<c>
<f>4</f>
<f>3</f>
<parameter>НомерСтроки</parameter>
</c>
</c>
<c>
<c>
<f>4</f>
<f>3</f>
<parameter>Товар</parameter>
<detailParameter>Номенклатура</detailParameter>
</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>
@@ -90,7 +90,7 @@
<c>
<i>3</i>
<c>
<f>6</f>
<f>5</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -101,14 +101,14 @@
</c>
<c>
<c>
<f>7</f>
<f>6</f>
<parameter>Всего</parameter>
</c>
</c>
</row>
</rowsItem>
<templateMode>true</templateMode>
<defaultFormatIndex>8</defaultFormatIndex>
<defaultFormatIndex>7</defaultFormatIndex>
<height>4</height>
<vgRows>4</vgRows>
<merge>
@@ -169,37 +169,29 @@
<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>0</font>
<fillType>Parameter</fillType>
</format>
<format>
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>
<fillType>Parameter</fillType>
</format>
<format>
<font>0</font>
<border>0</border>
<horizontalAlignment>Right</horizontalAlignment>
<fillType>Parameter</fillType>
</format>
<format>
<font>1</font>
<font>0</font>
<topBorder>0</topBorder>
<horizontalAlignment>Right</horizontalAlignment>
</format>
<format>
<font>1</font>
<font>0</font>
<topBorder>0</topBorder>
<horizontalAlignment>Right</horizontalAlignment>
<fillType>Parameter</fillType>
@@ -18,27 +18,27 @@
<formatIndex>1</formatIndex>
<c>
<c>
<f>3</f>
<f>2</f>
<parameter>НомерСтроки</parameter>
</c>
</c>
<c>
<c>
<f>3</f>
<f>2</f>
<parameter>Товар</parameter>
<detailParameter>Номенклатура</detailParameter>
</c>
</c>
<c>
<c>
<f>3</f>
<f>2</f>
<parameter>Сумма</parameter>
</c>
</c>
</row>
</rowsItem>
<templateMode>true</templateMode>
<defaultFormatIndex>4</defaultFormatIndex>
<defaultFormatIndex>3</defaultFormatIndex>
<height>1</height>
<vgRows>1</vgRows>
<namedItem xsi:type="NamedItemCells">
@@ -54,16 +54,10 @@
<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"/>
<format>
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>
<fillType>Parameter</fillType>
</format>
@@ -43,9 +43,7 @@
<endColumn>-1</endColumn>
</area>
</namedItem>
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
<format>
<font>0</font>
<fillType>Parameter</fillType>
</format>
<format>
@@ -139,13 +139,10 @@
<endColumn>-1</endColumn>
</area>
</namedItem>
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
<format>
<font>0</font>
<fillType>Template</fillType>
</format>
<format>
<font>0</font>
<fillType>Parameter</fillType>
</format>
<format>