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
@@ -72,26 +72,26 @@
<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>
</row>
</rowsItem>
<templateMode>true</templateMode>
<defaultFormatIndex>6</defaultFormatIndex>
<defaultFormatIndex>5</defaultFormatIndex>
<height>3</height>
<vgRows>3</vgRows>
<merge>
@@ -127,24 +127,17 @@
<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>
</format>
<format>
<font>0</font>
<fillType>Template</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>