From 241a56a29f180c532c1ba289cd2627839866e219 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Wed, 12 Aug 2026 12:53:10 +0300 Subject: [PATCH] =?UTF-8?q?docs(mxl):=20=D0=B0=D0=BA=D1=82=D1=83=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B5=D1=86=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B8=D0=B8=20=D0=BD=D0=B0=D1=85=D0=BE=D0=B4=D0=BE=D0=BA?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=81=D1=82=D0=B5=D0=BD=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Спецификация XML — дописано то, что вскрыли контролируемые макеты и замеры по корпусу: - шрифт-ссылка на СИСТЕМНЫЙ шрифт: префикс sys в корне не объявлен, поэтому объявление xmlns дописывается прямо на узел. Плюс правило вывода kind из префикса и то, что неиспользуемый шрифт в палитру не попадает; - новый раздел «Устройство палитр»: порядок документный и НЕ зависит от последовательности действий автора (проверено опытом с оформлением снизу вверх), формат по умолчанию последний, палитра дедуплицирована по содержимому; - у текста ячейки ТРИ состояния: тега нет, тег с элементами, пустой . Третье — 57% макетов корпуса; - языковые настройки: набор языков не выводится из языков текста, description бывает самозакрывающимся, currentLanguage бывает отсутствующим и бывает указывающим на необъявленный язык. Спецификация DSL — из ограничений убрано объявление языков макета: оно больше не теряется. Добавлено пояснение, почему побайтовое совпадение достижимо не на любом макете: в долго правленных макетах остаются следы прежних состояний, которые из итогового документа не выводятся. В инструкции навыка отражена только форма шрифта-ссылки — остальное из этой серии либо уже там, либо для авторинга не нужно. Примеры из справочника скомпилированы и проверены валидатором. Co-Authored-By: Claude Opus 5 (1M context) --- .claude/skills/mxl-compile/SKILL.md | 2 +- .../skills/mxl-compile/reference/dsl-spec.md | 9 ++-- docs/1c-spreadsheet-spec.md | 52 ++++++++++++++++++- docs/mxl-dsl-spec.md | 9 ++-- 4 files changed, 64 insertions(+), 8 deletions(-) diff --git a/.claude/skills/mxl-compile/SKILL.md b/.claude/skills/mxl-compile/SKILL.md index ce2d473f..adc1486f 100644 --- a/.claude/skills/mxl-compile/SKILL.md +++ b/.claude/skills/mxl-compile/SKILL.md @@ -55,7 +55,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/mxl-compile.ps1" -J ``` { columns, page, defaultWidth, columnWidths, columnStyles, - fonts: { name: { face, size, bold, italic, underline, strikeout } }, + fonts: { name: { face, size, bold, italic, underline, strikeout } | { ref } }, styles: { name: { font, horizontalAlignment, verticalAlignment, textPlacement, backColor, textColor, border, borderColor, format, hidden } }, areas: [{ name, columnSet, rows: [{ height, hidden, rowStyle, cells: [ diff --git a/.claude/skills/mxl-compile/reference/dsl-spec.md b/.claude/skills/mxl-compile/reference/dsl-spec.md index 670fe81f..ef379cf3 100644 --- a/.claude/skills/mxl-compile/reference/dsl-spec.md +++ b/.claude/skills/mxl-compile/reference/dsl-spec.md @@ -230,9 +230,12 @@ XML не возвращается. - объединения, не привязанные к ячейке (по всей высоте или ширине документа); - рисунки и картинки, в том числе штрихкоды, и примечания к ячейкам; - группировки строк и колонок; -- колонтитулы, параметры печати, область печати; -- объявление языков макета: список языков и текущий язык всегда описываются как русский — - сами надписи при этом сохраняются на всех языках. +- колонтитулы, параметры печати, область печати. Пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, поэтому diff после round-trip обычно шире фактической доработки. + +Отдельно про побайтовое совпадение. В макетах, которые долго правили в Конфигураторе, +встречаются следы прежних состояний: формат ячейки может нести ширину колонки, которая с тех +пор изменилась. Такие значения не описывают итоговый документ и из него не выводятся, поэтому +собранный XML совпадёт с исходным не всегда — при полностью сохранённом содержании. diff --git a/docs/1c-spreadsheet-spec.md b/docs/1c-spreadsheet-spec.md index 1a199688..dd471e61 100644 --- a/docs/1c-spreadsheet-spec.md +++ b/docs/1c-spreadsheet-spec.md @@ -63,6 +63,18 @@ ``` +Языков бывает несколько, и объявленный набор НЕ выводится из того, на каких языках лежит +текст ячеек: на корпусе ERP объявлен один `ru` у 10 753 макетов, при том что текст в них +лежит и под `ru`, и под `en`. Наборы: `[ru]` — 10 753, `[ru,en]` — 148, `[en,ru]` — 20. + +`id` и `code` всегда со значением; `description` бывает пустым и тогда пишется +самозакрывающимся тегом `` (77 записей из 11 094). Из `id` эти поля не +выводятся: у `en` описание бывает «Английский», пустым и «English». + +`currentLanguage` иногда отсутствует вовсе (3 макета), иногда указывает на необъявленный +язык (8 макетов с `en` при объявленном одном `ru`). `defaultLanguage` во всех четырёх +русских типовых равен `ru`, но это свойство конфигурации, а не формата. + ## Колонки ### Основной набор @@ -169,6 +181,16 @@ На корпусе ERP из 1 212 023 записанных номеров ни один не избыточен (счётчик начинается с −1, поэтому у ячейки в колонке 0 номера тоже нет). +У текста ячейки ТРИ состояния, а не два: + +| запись | смысл | +|---|---| +| `` отсутствует | текста нет | +| `` с элементами | текст по элементу на язык (содержимое бывает пустым) | +| `` | тег есть, языков в нём нет | + +Третье — не редкость: 38 075 ячеек на 1200 макетов, встречается в 57% макетов корпуса. + `0` означает, что формата у ячейки **нет вовсе** — это не индекс записи. Так записана ячейка без собственного оформления: 170 710 таких ячеек против 50 635, ссылающихся на формат по умолчанию; `0` встречается в 71% макетов. @@ -365,10 +387,38 @@ - + + + + ``` +`kind` выводится из префикса ссылки: `style:` → `StyleItem`, `sys:` → `WindowsFont`. +На корпусе ERP таких шрифтов 272 в 213 макетах из 10 924 (StyleItem 209, WindowsFont 63). + +Шрифт, на который не ссылается ни один формат, в палитру не попадает: у макета без +оформления элемента `` нет вовсе. + +## Устройство палитр + +Три правила, общие для всех палитр. Все проверены на корпусе ERP (10 924 макета) и на +макетах, собранных вручную в Конфигураторе. + +**Порядок — документный.** Записи идут в том порядке, в каком встречаются при обходе +документа сверху вниз: сначала форматы колонок (в порядке колонок), затем форматы строк и +ячеек. Порядок НЕ зависит от того, в какой последовательности автор оформлял макет: +контрольный опыт с оформлением снизу вверх дал палитру в порядке строк. + +**Формат по умолчанию — последняя запись.** На корпусе он последний в 8285 макетах из 10 863, +первым — в 25. + +**Палитра форматов дедуплицирована по содержимому:** двух одинаковых записей в ней нет +(10 804 макета из 10 924). Остальные 120 — накопленный мусор редактирования, там доходит до +583 записей при 130 уникальных. + ## Форматы Палитра форматов — центральный элемент. **Индексация 1-based** (индекс 0 = формат не задан). diff --git a/docs/mxl-dsl-spec.md b/docs/mxl-dsl-spec.md index 00142e3e..5be9fe46 100644 --- a/docs/mxl-dsl-spec.md +++ b/docs/mxl-dsl-spec.md @@ -230,9 +230,12 @@ XML не возвращается. - объединения, не привязанные к ячейке (по всей высоте или ширине документа); - рисунки и картинки, в том числе штрихкоды, и примечания к ячейкам; - группировки строк и колонок; -- колонтитулы, параметры печати, область печати; -- объявление языков макета: список языков и текущий язык всегда описываются как русский — - сами надписи при этом сохраняются на всех языках. +- колонтитулы, параметры печати, область печати. Пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, поэтому diff после round-trip обычно шире фактической доработки. + +Отдельно про побайтовое совпадение. В макетах, которые долго правили в Конфигураторе, +встречаются следы прежних состояний: формат ячейки может нести ширину колонки, которая с тех +пор изменилась. Такие значения не описывают итоговый документ и из него не выводятся, поэтому +собранный XML совпадёт с исходным не всегда — при полностью сохранённом содержании.