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 совпадёт с исходным не всегда — при полностью сохранённом содержании.