diff --git a/.claude/skills/mxl-compile/SKILL.md b/.claude/skills/mxl-compile/SKILL.md index a4d62c4a..2c9c32fb 100644 --- a/.claude/skills/mxl-compile/SKILL.md +++ b/.claude/skills/mxl-compile/SKILL.md @@ -60,14 +60,14 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/mxl-compile.ps1" -J Ключевые правила: - `page` — формат страницы (`"A4-landscape"`, `"A4-portrait"` или число). Автоматически вычисляет `defaultWidth` из суммы пропорций `"Nx"` -- `col` — 1-based позиция колонки +- `name` у области в `areas` необязателен: область без имени — просто кусок сетки, именованной она не станет +- `namedAreas` — области, которые не описываются диапазоном подряд идущих строк: полоса колонок, прямоугольник, ячейка. Тип не указывается, он следует из того, какие оси заданы - `rowStyle` — автозаполнение пустот стилем (рамки по всей ширине) -- Тип заполнения определяется автоматически: `param` → Parameter, `text` → Text, `template` → Template -- `rowspan` — объединение строк вниз (rowStyle учитывает занятые ячейки) - `empty` в строке — шорткат для N подряд пустых строк (`{ "empty": 3 }` = три `{}`) -- `name` у области в `areas` необязателен: область без имени — просто кусок сетки, в макет как именованная она не попадёт -- `namedAreas` — области, которые не описываются диапазоном подряд идущих строк (полоса колонок, прямоугольник, ячейка). Тип не указывается: только `rows` → полоса строк, только `cols` → полоса колонок, обе оси → прямоугольник - Строку можно писать массивом ячеек — позиция из порядка, `col` не нужен: `"текст"`, `"{Имя}"` — параметр, `">"` — продолжить ячейку слева, `"|"` — сверху, `null` — пропуск колонки +- `col` — 1-based позиция колонки +- `rowspan` — объединение строк вниз (rowStyle учитывает занятые ячейки) +- Тип заполнения определяется автоматически: `param` → Parameter, `text` → Text, `template` → Template Двухуровневая шапка массивами: ```json diff --git a/.claude/skills/mxl-compile/reference/dsl-spec.md b/.claude/skills/mxl-compile/reference/dsl-spec.md index c5e18f77..64c6ccea 100644 --- a/.claude/skills/mxl-compile/reference/dsl-spec.md +++ b/.claude/skills/mxl-compile/reference/dsl-spec.md @@ -178,7 +178,7 @@ - не выразить текст, совпадающий с `">"`, `"|"` или с шаблоном `"{...}"`; - `"|"` продолжает ячейку из предыдущей строки, только если её позиция известна явно (`col` задан или строка записана массивом). -`">"` без ячейки слева, `"|"` без ячейки сверху, объектный элемент с `col`, элементов больше `columns` → ненулевой код выхода и сообщение в stderr. +Маркеру нужно, что продолжать: `">"` требует ячейку слева в той же строке, `"|"` — ячейку сверху. Объектный элемент не должен нести `col`: позиция уже задана порядком. Число элементов не может превышать `columns`. Нарушение любого из этих правил → ненулевой код выхода и сообщение в stderr. ## Ячейки (`cells[]`) @@ -211,22 +211,18 @@ DSL описывает не все конструкции табличного документа. Перечисленное ниже **теряется при round-trip** (`/mxl-decompile` → `/mxl-compile`): в JSON оно не попадает, в сгенерированный -XML не возвращается. Доля — по корпусу типовой ERP 8.3.24 (10 924 макета), где измерялась. +XML не возвращается. -| Конструкция | Доля макетов | -|-------------|--------------| -| Ячейки-поля ввода (`containsValue` / `valueType` / `controlType`) | 53% | -| Несколько наборов колонок (`columnsID`) — свои ширины у группы строк | 63% | -| Объединения, не привязанные к ячейке (по всей высоте или ширине) | 16% | -| Рисунки и картинки (в т.ч. штрихкоды) | 2% | -| Цвет текста, цвет фона ячейки, скрытые строки/колонки, отступ | — | -| Рамка с разным стилем у разных сторон; стили линий кроме сплошной | — | -| Группировки строк и колонок | — | -| Колонтитулы, параметры печати, область печати | — | +- ячейки-поля ввода (`containsValue` / `valueType` / `controlType`); +- несколько наборов колонок (`columnsID`) — свои ширины у группы строк; +- объединения, не привязанные к ячейке (по всей высоте или ширине документа); +- рисунки и картинки, в том числе штрихкоды; +- цвет текста, цвет фона ячейки, скрытые строки и колонки, отступ; +- рамка с разным стилем у разных сторон; стили линий кроме сплошной; +- группировки строк и колонок; +- колонтитулы, параметры печати, область печати; +- многоязычные надписи: при разборе берётся первый вариант текста, при генерации язык + всегда `ru`, остальные теряются. -**Многоязычные надписи не поддерживаются:** при разборе берётся первый вариант текста, -при генерации язык всегда `ru`. Для двуязычных макетов (в ERP это почти весь корпус) -надписи на остальных языках теряются. - -Отдельно: пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, -поэтому diff после round-trip обычно шире фактической доработки. +Пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, поэтому +diff после round-trip обычно шире фактической доработки. diff --git a/docs/mxl-dsl-spec.md b/docs/mxl-dsl-spec.md index 6f87f9c9..f4f63dbf 100644 --- a/docs/mxl-dsl-spec.md +++ b/docs/mxl-dsl-spec.md @@ -178,7 +178,7 @@ - не выразить текст, совпадающий с `">"`, `"|"` или с шаблоном `"{...}"`; - `"|"` продолжает ячейку из предыдущей строки, только если её позиция известна явно (`col` задан или строка записана массивом). -`">"` без ячейки слева, `"|"` без ячейки сверху, объектный элемент с `col`, элементов больше `columns` → ненулевой код выхода и сообщение в stderr. +Маркеру нужно, что продолжать: `">"` требует ячейку слева в той же строке, `"|"` — ячейку сверху. Объектный элемент не должен нести `col`: позиция уже задана порядком. Число элементов не может превышать `columns`. Нарушение любого из этих правил → ненулевой код выхода и сообщение в stderr. ## Ячейки (`cells[]`) @@ -211,22 +211,18 @@ DSL описывает не все конструкции табличного документа. Перечисленное ниже **теряется при round-trip** (`/mxl-decompile` → `/mxl-compile`): в JSON оно не попадает, в сгенерированный -XML не возвращается. Доля — по корпусу типовой ERP 8.3.24 (10 924 макета), где измерялась. +XML не возвращается. -| Конструкция | Доля макетов | -|-------------|--------------| -| Ячейки-поля ввода (`containsValue` / `valueType` / `controlType`) | 53% | -| Несколько наборов колонок (`columnsID`) — свои ширины у группы строк | 63% | -| Объединения, не привязанные к ячейке (по всей высоте или ширине) | 16% | -| Рисунки и картинки (в т.ч. штрихкоды) | 2% | -| Цвет текста, цвет фона ячейки, скрытые строки/колонки, отступ | — | -| Рамка с разным стилем у разных сторон; стили линий кроме сплошной | — | -| Группировки строк и колонок | — | -| Колонтитулы, параметры печати, область печати | — | +- ячейки-поля ввода (`containsValue` / `valueType` / `controlType`); +- несколько наборов колонок (`columnsID`) — свои ширины у группы строк; +- объединения, не привязанные к ячейке (по всей высоте или ширине документа); +- рисунки и картинки, в том числе штрихкоды; +- цвет текста, цвет фона ячейки, скрытые строки и колонки, отступ; +- рамка с разным стилем у разных сторон; стили линий кроме сплошной; +- группировки строк и колонок; +- колонтитулы, параметры печати, область печати; +- многоязычные надписи: при разборе берётся первый вариант текста, при генерации язык + всегда `ru`, остальные теряются. -**Многоязычные надписи не поддерживаются:** при разборе берётся первый вариант текста, -при генерации язык всегда `ru`. Для двуязычных макетов (в ERP это почти весь корпус) -надписи на остальных языках теряются. - -Отдельно: пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, -поэтому diff после round-trip обычно шире фактической доработки. +Пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, поэтому +diff после round-trip обычно шире фактической доработки.