From d002de3a26c882ec6c926f2dedefbe8dbbd21ba5 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 10 Aug 2026 18:20:30 +0300 Subject: [PATCH] =?UTF-8?q?docs(mxl):=20=D1=83=D0=B1=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20XML-=D1=83=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=20?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B8=D0=B7=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20DSL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Продолжение чистки протёкшей реализации. - «тип заполнения: param → Parameter, text → Text, template → Template» — автор DSL ключ fillType не пишет и в выводе mxl-compile его не видит, это имена XML-перечисления. Заменено на то, что действительно нужно: содержимое задаётся одним из ключей param / text / template, где template — текст со вставками [Параметр]. Раньше синтаксис вставок в инструкции не упоминался вовсе, хотя он куда полезнее перечисления. (У mxl-info fillType остаётся: там навык объясняет свой собственный вывод.) - «компилятор создаёт ячейки для ВСЕХ колонок строки» — механика. Оставлен наблюдаемый контракт: стиль применяется ко всей ширине строки, оттуда сплошные рамки. - «заданное имя компилятор разворачивает в именованную область типа строки» — то же самое. Теперь сказано, что даёт имя автору: область доступна как ПолучитьОбласть("Имя"). - убран пункт «"|" продолжает ячейку, только если её позиция известна явно». Он ссылался на поведение, которого в документации нет (позиция ячеек без col выводится прощающим вводом), то есть документированное ограничение опиралось на недокументированную механику. Случай закрыт сообщением об ошибке. Co-Authored-By: Claude Opus 5 (1M context) --- .claude/skills/mxl-compile/SKILL.md | 2 +- .../skills/mxl-compile/reference/dsl-spec.md | 19 +++++++++---------- docs/mxl-dsl-spec.md | 19 +++++++++---------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/.claude/skills/mxl-compile/SKILL.md b/.claude/skills/mxl-compile/SKILL.md index 2c9c32fb..fea42820 100644 --- a/.claude/skills/mxl-compile/SKILL.md +++ b/.claude/skills/mxl-compile/SKILL.md @@ -67,7 +67,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/mxl-compile.ps1" -J - Строку можно писать массивом ячеек — позиция из порядка, `col` не нужен: `"текст"`, `"{Имя}"` — параметр, `">"` — продолжить ячейку слева, `"|"` — сверху, `null` — пропуск колонки - `col` — 1-based позиция колонки - `rowspan` — объединение строк вниз (rowStyle учитывает занятые ячейки) -- Тип заполнения определяется автоматически: `param` → Parameter, `text` → Text, `template` → Template +- Содержимое ячейки задаётся одним из ключей: `param` — параметр заполнения, `text` — статический текст, `template` — текст со вставками `[Параметр]` Двухуровневая шапка массивами: ```json diff --git a/.claude/skills/mxl-compile/reference/dsl-spec.md b/.claude/skills/mxl-compile/reference/dsl-spec.md index 64c6ccea..9b5326ef 100644 --- a/.claude/skills/mxl-compile/reference/dsl-spec.md +++ b/.claude/skills/mxl-compile/reference/dsl-spec.md @@ -114,7 +114,7 @@ | `name` | нет | Имя области для `Макет.ПолучитьОбласть("Имя")` | | `rows` | да | Массив строк | -Макет собирается из областей — диапазонов подряд идущих строк. Заданное здесь имя компилятор разворачивает в именованную область типа «строки» на диапазон этих строк. **Область без имени** — просто кусок сетки: так описываются строки, не принадлежащие ни одной именованной области. +Макет собирается из областей — диапазонов подряд идущих строк. Имя делает область именованной: она доступна в коде как `Макет.ПолучитьОбласть("Имя")` и занимает строки своего диапазона. **Область без имени** — просто кусок сетки: так описываются строки, не принадлежащие ни одной именованной области. ## Именованные области координатами (`namedAreas[]`) @@ -175,8 +175,7 @@ Ограничения короткой формы: - не задать `height` и `rowStyle` — это свойства строки, а не ячейки; -- не выразить текст, совпадающий с `">"`, `"|"` или с шаблоном `"{...}"`; -- `"|"` продолжает ячейку из предыдущей строки, только если её позиция известна явно (`col` задан или строка записана массивом). +- не выразить текст, совпадающий с `">"`, `"|"` или с шаблоном `"{...}"`. Маркеру нужно, что продолжать: `">"` требует ячейку слева в той же строке, `"|"` — ячейку сверху. Объектный элемент не должен нести `col`: позиция уже задана порядком. Число элементов не может превышать `columns`. Нарушение любого из этих правил → ненулевой код выхода и сообщение в stderr. @@ -193,17 +192,17 @@ | `text` | нет | — | Статический текст | | `template` | нет | — | Шаблонный текст с `[Параметр]` | -### Тип заполнения +### Содержимое ячейки -Определяется автоматически по содержимому ячейки: -- `param` → fillType=Parameter -- `template` → fillType=Template -- `text` → fillType=Text -- ничего → без fillType (пустая ячейка или рамка) +Задаётся ровно одним из ключей, объявлять способ заполнения отдельно не нужно: +- `param` — параметр заполнения; +- `template` — текст со вставками `[Параметр]`; +- `text` — статический текст; +- ничего — пустая ячейка (нужна, например, ради рамки). ## `rowStyle` — автозаполнение -Когда задан `rowStyle`, компилятор создаёт ячейки для ВСЕХ колонок строки. Позиции без явных ячеек заполняются пустыми ячейками с указанным стилем. Это обеспечивает сплошные рамки в табличных строках. +Стиль применяется ко ВСЕЙ ширине строки: позиции без явных ячеек получают тот же стиль. Так в табличных строках получаются сплошные рамки. Если в предыдущих строках той же области есть ячейки с `rowspan`, их колонки при автозаполнении пропускаются. diff --git a/docs/mxl-dsl-spec.md b/docs/mxl-dsl-spec.md index f4f63dbf..fc768f7d 100644 --- a/docs/mxl-dsl-spec.md +++ b/docs/mxl-dsl-spec.md @@ -114,7 +114,7 @@ | `name` | нет | Имя области для `Макет.ПолучитьОбласть("Имя")` | | `rows` | да | Массив строк | -Макет собирается из областей — диапазонов подряд идущих строк. Заданное здесь имя компилятор разворачивает в именованную область типа «строки» на диапазон этих строк. **Область без имени** — просто кусок сетки: так описываются строки, не принадлежащие ни одной именованной области. +Макет собирается из областей — диапазонов подряд идущих строк. Имя делает область именованной: она доступна в коде как `Макет.ПолучитьОбласть("Имя")` и занимает строки своего диапазона. **Область без имени** — просто кусок сетки: так описываются строки, не принадлежащие ни одной именованной области. ## Именованные области координатами (`namedAreas[]`) @@ -175,8 +175,7 @@ Ограничения короткой формы: - не задать `height` и `rowStyle` — это свойства строки, а не ячейки; -- не выразить текст, совпадающий с `">"`, `"|"` или с шаблоном `"{...}"`; -- `"|"` продолжает ячейку из предыдущей строки, только если её позиция известна явно (`col` задан или строка записана массивом). +- не выразить текст, совпадающий с `">"`, `"|"` или с шаблоном `"{...}"`. Маркеру нужно, что продолжать: `">"` требует ячейку слева в той же строке, `"|"` — ячейку сверху. Объектный элемент не должен нести `col`: позиция уже задана порядком. Число элементов не может превышать `columns`. Нарушение любого из этих правил → ненулевой код выхода и сообщение в stderr. @@ -193,17 +192,17 @@ | `text` | нет | — | Статический текст | | `template` | нет | — | Шаблонный текст с `[Параметр]` | -### Тип заполнения +### Содержимое ячейки -Определяется автоматически по содержимому ячейки: -- `param` → fillType=Parameter -- `template` → fillType=Template -- `text` → fillType=Text -- ничего → без fillType (пустая ячейка или рамка) +Задаётся ровно одним из ключей, объявлять способ заполнения отдельно не нужно: +- `param` — параметр заполнения; +- `template` — текст со вставками `[Параметр]`; +- `text` — статический текст; +- ничего — пустая ячейка (нужна, например, ради рамки). ## `rowStyle` — автозаполнение -Когда задан `rowStyle`, компилятор создаёт ячейки для ВСЕХ колонок строки. Позиции без явных ячеек заполняются пустыми ячейками с указанным стилем. Это обеспечивает сплошные рамки в табличных строках. +Стиль применяется ко ВСЕЙ ширине строки: позиции без явных ячеек получают тот же стиль. Так в табличных строках получаются сплошные рамки. Если в предыдущих строках той же области есть ячейки с `rowspan`, их колонки при автозаполнении пропускаются.