From 2a16395951c9eb56d3071c798507615c3b3a3239 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 17 Aug 2026 14:23:53 +0300 Subject: [PATCH] =?UTF-8?q?docs(mxl-compile,mxl-decompile):=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BA=D1=80=D1=8B=D1=82=D1=8C=20=D0=B4=D1=8B=D1=80=D1=8B=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=81=D0=BA=D0=B0=D0=B4=D0=B0,=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B9=D0=B4=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BE=D0=B1=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D0=BE=D0=BC=20=D0=BF=D0=BE=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Перечитал каскад как модель, идущая от задачи, и нашёл три места, где задача упиралась в пустоту: - ключ pictureParameter стоял в схеме DSL, но не был описан нигде, а задача «картинка в ячейке» из индекса вела в drawings.md, где её не было. Добавлен раздел: picIndex считается с единицы по порядку объявления в pictures, выравнивания и положение текста — ключи стиля, pictureParameter — ключ ячейки; - объектная форма rowStyle с модификатором apply нигде не описана, хотя её пишет декомпилятор: модель, разобравшая чужой макет, встречала непонятный ключ. Такие формы собраны в mxl-decompile отдельной таблицей — вместе с controlType "none", пустым valueType, пустой привязкой к раскладке и записью палитры без картинки; - область печати и повторение шапки при печати DSL не выражает — теперь это сказано прямо в print.md, а не выясняется опытным путём. Индекс задач дополнен колонкой ключей: модель, увидевшая незнакомый ключ в схеме, сразу находит нужный файл. --- .claude/skills/mxl-compile/SKILL.md | 18 +++++++-------- .../skills/mxl-compile/reference/drawings.md | 23 +++++++++++++++++++ .claude/skills/mxl-compile/reference/print.md | 6 +++++ .claude/skills/mxl-decompile/SKILL.md | 15 ++++++++++++ docs/mxl-dsl-spec.md | 23 +++++++++++++++++++ 5 files changed, 76 insertions(+), 9 deletions(-) diff --git a/.claude/skills/mxl-compile/SKILL.md b/.claude/skills/mxl-compile/SKILL.md index cad11986..38a2150b 100644 --- a/.claude/skills/mxl-compile/SKILL.md +++ b/.claude/skills/mxl-compile/SKILL.md @@ -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` | ## Пример diff --git a/.claude/skills/mxl-compile/reference/drawings.md b/.claude/skills/mxl-compile/reference/drawings.md index 782914e9..2d035c07 100644 --- a/.claude/skills/mxl-compile/reference/drawings.md +++ b/.claude/skills/mxl-compile/reference/drawings.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` подставляет текст. С текстом ячейки уживается. diff --git a/.claude/skills/mxl-compile/reference/print.md b/.claude/skills/mxl-compile/reference/print.md index 96962575..95fb48a1 100644 --- a/.claude/skills/mxl-compile/reference/print.md +++ b/.claude/skills/mxl-compile/reference/print.md @@ -51,3 +51,9 @@ `blackAndWhite`, `printerName`, `paper`, `paperSource`, `pageWidth`, `pageHeight`, `duplexType`, `pagePlacementAlternation`, `firstPageNumber`. Незнакомый ключ — ошибка. Порядок в объекте не важен: компилятор пишет свойства в том порядке, что и платформа. + +## Чего в DSL нет + +Область печати и повторение области при печати (шапка на каждой странице) не описываются: +эти настройки задаются в Конфигураторе и при пересборке чужого макета теряются. Если задача +требует именно их — правьте макет в Конфигураторе, а не через DSL. diff --git a/.claude/skills/mxl-decompile/SKILL.md b/.claude/skills/mxl-decompile/SKILL.md index a232571b..30447934 100644 --- a/.claude/skills/mxl-decompile/SKILL.md +++ b/.claude/skills/mxl-decompile/SKILL.md @@ -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. Поэтому diff --git a/docs/mxl-dsl-spec.md b/docs/mxl-dsl-spec.md index 1bf08d16..69271f59 100644 --- a/docs/mxl-dsl-spec.md +++ b/docs/mxl-dsl-spec.md @@ -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` — оформление строки Стиль применяется ко ВСЕЙ ширине строки: позиции без явных ячеек получают тот же стиль. Так в табличных строках получаются сплошные рамки. Он же становится оформлением самой строки — именно так платформа хранит строку, оформленную целиком.