docs(mxl-compile,mxl-decompile): закрыть дыры каскада, найденные обходом по задачам

Перечитал каскад как модель, идущая от задачи, и нашёл три места, где задача
упиралась в пустоту:

- ключ pictureParameter стоял в схеме DSL, но не был описан нигде, а задача
  «картинка в ячейке» из индекса вела в drawings.md, где её не было. Добавлен
  раздел: picIndex считается с единицы по порядку объявления в pictures,
  выравнивания и положение текста — ключи стиля, pictureParameter — ключ ячейки;
- объектная форма rowStyle с модификатором apply нигде не описана, хотя её
  пишет декомпилятор: модель, разобравшая чужой макет, встречала непонятный
  ключ. Такие формы собраны в mxl-decompile отдельной таблицей — вместе с
  controlType "none", пустым valueType, пустой привязкой к раскладке и записью
  палитры без картинки;
- область печати и повторение шапки при печати DSL не выражает — теперь это
  сказано прямо в print.md, а не выясняется опытным путём.

Индекс задач дополнен колонкой ключей: модель, увидевшая незнакомый ключ
в схеме, сразу находит нужный файл.
This commit is contained in:
Nick Shirokov
2026-08-17 14:23:53 +03:00
parent e10421d18e
commit 2a16395951
5 changed files with 76 additions and 9 deletions
+9 -9
View File
@@ -46,15 +46,15 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/mxl-compile.ps1" -J
Ниже — всё, что нужно для типового макета. Остальное лежит по файлу на задачу, читать нужно
только свой:
| Задача | Файл |
|---|---|
| Свойство стиля вне частых: отступ, защита, узор, маска, формат редактирования | `reference/style-properties.md` |
| Область, не описываемая диапазоном строк; свои ширины колонок у части документа | `reference/layout.md` |
| Колонтитулы, ориентация, поля, масштаб | `reference/print.md` |
| Картинка, фигура или надпись поверх сетки; картинка в ячейке | `reference/drawings.md` |
| Ячейки для ввода данных пользователем | `reference/input-cells.md` |
| Сворачиваемые группы строк или колонок | `reference/groups.md` |
| Всплывающая подсказка у ячейки | `reference/notes.md` |
| Задача | Ключи | Файл |
|---|---|---|
| Свойство стиля вне частых: отступ, защита, узор, маска, поведение при выводе | — | `reference/style-properties.md` |
| Область, не описываемая диапазоном строк; свои ширины колонок у части документа | `namedAreas`, `columnSets`, `columnSet` | `reference/layout.md` |
| Колонтитулы, ориентация, поля, масштаб | `header`, `footer`, `printSettings` | `reference/print.md` |
| Картинка, фигура или надпись поверх сетки; картинка в ячейке | `pictures`, `drawings`, `pictureParameter` | `reference/drawings.md` |
| Ячейки для ввода данных пользователем | `valueType`, `controlType`, `value` | `reference/input-cells.md` |
| Сворачиваемые группы строк или колонок | `rowGroups`, `columnGroups` | `reference/groups.md` |
| Всплывающая подсказка у ячейки | `note` | `reference/notes.md` |
## Пример
@@ -47,3 +47,26 @@
картинки (по флажку «прозрачный фон» Конфигуратор берёт её правый нижний пиксель).
Одну запись `pictures` могут использовать несколько рисунков — данные в макете не дублируются.
## Картинка в ячейке
Картинка бывает не только поверх сетки, но и внутри ячейки — тогда её задаёт стиль, а сама
картинка берётся из той же палитры `pictures`:
```json
{
"columns": 2,
"pictures": { "стоп": { "ref": "v8ui:Стоп48" } },
"styles": { "значок": { "picIndex": 1, "picHorizontalAlignment": "Center",
"picVerticalAlignment": "Center", "textPosition": "Bottom" } },
"areas": [{ "rows": [
[{ "style": "значок", "text": "удалить", "pictureParameter": "Удалить" }]
]}]
}
```
- `picIndex` — номер записи в `pictures`, считая с единицы в порядке объявления;
- `picHorizontalAlignment`, `picVerticalAlignment`, `pictureSizeMode`, `textPosition` — как
картинка стоит в ячейке и где относительно неё текст (значения — в `style-properties.md`);
- `pictureParameter` — ключ самой ЯЧЕЙКИ, а не стиля: имя параметра, которым картинку
подставляют из кода, как `param` подставляет текст. С текстом ячейки уживается.
@@ -51,3 +51,9 @@
`blackAndWhite`, `printerName`, `paper`, `paperSource`, `pageWidth`, `pageHeight`, `duplexType`,
`pagePlacementAlternation`, `firstPageNumber`. Незнакомый ключ — ошибка. Порядок в объекте не
важен: компилятор пишет свойства в том порядке, что и платформа.
## Чего в DSL нет
Область печати и повторение области при печати (шапка на каждой странице) не описываются:
эти настройки задаются в Конфигураторе и при пересборке чужого макета теряются. Если задача
требует именно их — правьте макет в Конфигураторе, а не через DSL.
+15
View File
@@ -43,6 +43,21 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/mxl-decompile.ps1"
Формат JSON на выходе — тот же DSL, что принимает `/mxl-compile`; его описание живёт в навыке `/mxl-compile`.
## Формы, которые встречаются только в разобранном макете
Их пишет декомпилятор, чтобы ничего не потерять; для авторинга они не нужны, но в чужом
макете попадаются:
| Запись | Значение |
|---|---|
| `"rowStyle": { "style": "имя", "apply": "row" }` | Стиль строки лёг ТОЛЬКО на саму строку. `"cells"` — только на ячейки, `"both"` (умолчание при обычной записи именем) — на то и другое |
| `"controlType": "none"` | У ячейки-поля ввода элемент управления не задан вовсе |
| `"valueType": ""` | Ячейка содержит значение, но тип не ограничен |
| `"columnSet": ""` | У области нет привязки к колоночной раскладке |
| `"pictures": { "имя": {} }` | Запись палитры без картинки |
Компилятор принимает их обратно как есть — правя такой JSON, эти ключи можно не трогать.
## Что нужно знать о пересборке
Правка через DSL — это полная перегенерация макета, а не точечное изменение XML. Поэтому
+23
View File
@@ -438,6 +438,29 @@
Одну запись `pictures` могут использовать несколько рисунков — данные в макете не дублируются.
## Картинка в ячейке
Картинка бывает не только поверх сетки, но и внутри ячейки — тогда её задаёт стиль, а сама
картинка берётся из той же палитры `pictures`:
```json
{
"columns": 2,
"pictures": { "стоп": { "ref": "v8ui:Стоп48" } },
"styles": { "значок": { "picIndex": 1, "picHorizontalAlignment": "Center",
"picVerticalAlignment": "Center", "textPosition": "Bottom" } },
"areas": [{ "rows": [
[{ "style": "значок", "text": "удалить", "pictureParameter": "Удалить" }]
]}]
}
```
- `picIndex` — номер записи в `pictures`, считая с единицы в порядке объявления;
- `picHorizontalAlignment`, `picVerticalAlignment`, `pictureSizeMode`, `textPosition` — как
картинка стоит в ячейке и где относительно неё текст (значения — в разделе «Полный список свойств стиля»);
- `pictureParameter` — ключ самой ЯЧЕЙКИ, а не стиля: имя параметра, которым картинку
подставляют из кода, как `param` подставляет текст. С текстом ячейки уживается.
## `rowStyle` — оформление строки
Стиль применяется ко ВСЕЙ ширине строки: позиции без явных ячеек получают тот же стиль. Так в табличных строках получаются сплошные рамки. Он же становится оформлением самой строки — именно так платформа хранит строку, оформленную целиком.