Каскад повторял спецификацию: reference/dsl-spec.md был её копией, а styles и format-properties — копиями двух других файлов документации. Модель, чтобы что-то сделать, читала спеку целиком. Теперь в SKILL.md лежит то, что нужно почти всегда: компактный пример печатной формы, структура DSL, области, строки, ячейки с короткой формой, rowStyle и оформление из десяти частых ключей. Остальное — по файлу на задачу: layout, print, drawings, input-cells, groups, notes, style-properties, каждый 26-81 строка; читать нужно только свой. Состав ядра выбран по частоте в обычных макетах (корпус без регламентированной отчётности, которая перекашивала статистику): шрифт 93%, выравнивание 88/87%, размещение текста 86%, рамки 57-72%, формат 52%; поля ввода и группы, наоборот, оказались редкими — 7%. В mxl-decompile переехало то, что относится к чтению чужого макета, а не к авторингу: пересборка — полная перегенерация, побайтового совпадения ждать не всегда стоит, и перечень конструкций, которые цикл не переживают.
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 работает тот же ключ. Ширина и стиль независимы: колонка может иметь
только ширину, только стиль или и то, и другое.