Прогнал каждый json-блок инструкций и спецификации через компилятор и валидатор, фрагменты достраивая до минимального макета. Нашлось: - пример колоночных раскладок показывал области с "rows": [] — макет с именованными областями поверх нуля строк, валидатор на нём ругается; - шапка таблицы в примере SKILL.md была записана пятью объектами с col там, где хватает позиционного списка строк. Оба поправлены; раундтрип примера подтверждает, что форма каноническая — декомпилятор возвращает её же.
4.8 KiB
Разметка: области координатами и колоночные раскладки
Читать, когда область не описывается диапазоном подряд идущих строк или когда части документа нужны разные ширины колонок.
Именованные области координатами (namedAreas[])
Для областей, которые диапазоном подряд идущих строк не описываются: полоса колонок, прямоугольник, ячейка, а также пересекающиеся с другими.
| Поле | Обяз. | Описание |
|---|---|---|
name |
да | Имя области |
rows |
* | Строки: число или диапазон "N-M", 1-based |
cols |
* | Колонки: число или диапазон "N-M", 1-based |
columnSet |
нет | Колоночная раскладка области. Без ключа выводится из накрытых строк, "" — привязки нет |
* Обязательна хотя бы одна из осей.
Тип области не указывается — он следует из того, какие оси заданы, как в ТабличныйДокумент.Область(): только строки → полоса строк, только колонки → полоса колонок, обе оси → прямоугольник, одиночные значения по обеим осям → одна ячейка.
"namedAreas": [
{ "name": "ОбластьПечатиПоВысоте", "rows": "1-48" },
{ "name": "ОбластьПечатиПоШирине", "cols": "1-35" },
{ "name": "HZY", "rows": 9, "cols": "16-17" }
]
Диапазон — та же грамматика, что у columnWidths, но только число или "N-M": список через запятую запрещён, область непрерывна. Имя обязательно, и хотя бы одна ось должна быть задана; нарушение любого из этих правил → ненулевой код выхода и сообщение в stderr.
Колоночные раскладки (columnSets)
Группа строк может иметь собственные ширины колонок — в 1С это «индивидуальная ширина колонок».
Документные columns и columnWidths описывают раскладку по умолчанию; дополнительные
объявляются в columnSets, а область ссылается на нужную ключом columnSet — так же, как
ячейка ссылается на styles через style.
{
"columns": 52,
"columnWidths": { "1": 8 },
"columnSets": {
"таблица": { "columns": 52, "columnWidths": { "1": 7, "2-52": 24 } }
},
"areas": [
{ "name": "Шапка", "rows": [["Отчёт о продажах"]] },
{ "name": "ТабличнаяЧасть", "columnSet": "таблица",
"rows": [["№", "Номенклатура"]] }
]
}
Раскладка описывается той же парой полей, что и документная: columns — количество колонок
(у раскладок оно обычно разное), columnWidths — ширины. Ключ словаря — имя раскладки;
в макетах, полученных декомпиляцией, это идентификатор из исходного файла, при описании
с нуля — любая строка.
Все строки области получают раскладку области, поэтому одна область не может смешивать
раскладки. Позиции колонок (col, span) проверяются по ширине раскладки СВОЕЙ области,
а не документной.
Ссылка на необъявленную раскладку → ненулевой код выхода и сообщение в stderr.
Стиль колонки (columnStyles)
Колонка несёт то же оформление, что ячейка и строка. Ключи — та же грамматика диапазонов,
что у columnWidths; значение — имя стиля.
"columnWidths": { "1": 30, "2-3": 15 },
"columnStyles": { "1": "по-центру", "4": "скрытая" }
Внутри columnSets работает тот же ключ. Ширина и стиль независимы: колонка может иметь
только ширину, только стиль или и то, и другое.