mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-14 23:39:02 +03:00
fix(mxl-compile): не класть в палитру шрифт, на который никто не ссылается
Мы всегда заводили шрифт Arial 10 по умолчанию, даже когда его никто не использует. Платформа так не делает: у макета без оформления элемента <font> нет вовсе. Неиспользуемые шрифты теперь отбрасываются, ссылки перенумеровываются (индексы шрифтов позиционные). Проверено на контролируемом стенде: после правки простейший макет расходится с платформенным ровно одной строкой — объявлением языков в шапке. Кейс font-fractional-size дополнен: стиль, задающий ТОЛЬКО шрифт по умолчанию, равнозначен отсутствию оформления (ячейка получает <f>0</f>), поэтому шрифт остаётся неиспользованным. Чтобы кейс продолжал проверять целый размер, стилю добавлено второе свойство. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3f80f936ae
commit
f72dd544dd
@@ -1,4 +1,4 @@
|
||||
# mxl-compile v1.34 — Compile 1C spreadsheet from JSON
|
||||
# mxl-compile v1.35 — Compile 1C spreadsheet from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -1021,6 +1021,30 @@ foreach ($area in $def.areas) {
|
||||
# Формат по умолчанию — последняя запись палитры (см. выше).
|
||||
$defaultFormatIndex = Register-Format @{ width = $defaultWidth }
|
||||
|
||||
# Шрифт, на который не ссылается ни один формат, платформа в палитру не кладёт: у макета
|
||||
# без оформления элемента <font> нет вовсе. Мы же всегда заводили Arial 10 по умолчанию.
|
||||
# Отбрасываем неиспользуемые и перенумеровываем ссылки — индексы шрифтов позиционные.
|
||||
$usedFonts = @{}
|
||||
foreach ($k in $formatRegistry.Keys) {
|
||||
$fp = $formatRegistry[$k]
|
||||
if ($fp.ContainsKey('font')) { $usedFonts[[int]$fp['font']] = $true }
|
||||
}
|
||||
if ($usedFonts.Count -lt $fontEntries.Count) {
|
||||
$fontRemap = @{}
|
||||
$kept = @()
|
||||
for ($i = 0; $i -lt $fontEntries.Count; $i++) {
|
||||
if ($usedFonts.ContainsKey($i)) {
|
||||
$fontRemap[$i] = $kept.Count
|
||||
$kept += $fontEntries[$i]
|
||||
}
|
||||
}
|
||||
foreach ($k in @($formatRegistry.Keys)) {
|
||||
$fp = $formatRegistry[$k]
|
||||
if ($fp.ContainsKey('font')) { $fp['font'] = $fontRemap[[int]$fp['font']] }
|
||||
}
|
||||
$fontEntries = $kept
|
||||
}
|
||||
|
||||
# --- 7. Generate XML ---
|
||||
|
||||
$xml = New-Object System.Text.StringBuilder 4096
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# mxl-compile v1.34 — Compile 1C spreadsheet from JSON
|
||||
# mxl-compile v1.35 — Compile 1C spreadsheet from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import hashlib
|
||||
@@ -1044,6 +1044,22 @@ def main():
|
||||
# Формат по умолчанию — последняя запись палитры (см. выше).
|
||||
default_format_index = register_format({'width': default_width})
|
||||
|
||||
# Шрифт, на который не ссылается ни один формат, платформа в палитру не кладёт: у макета
|
||||
# без оформления элемента <font> нет вовсе. Мы же всегда заводили Arial 10 по умолчанию.
|
||||
# Отбрасываем неиспользуемые и перенумеровываем ссылки — индексы шрифтов позиционные.
|
||||
used_fonts = {int(fp['font']) for fp in format_registry.values() if 'font' in fp}
|
||||
if len(used_fonts) < len(font_entries):
|
||||
font_remap = {}
|
||||
kept = []
|
||||
for i in range(len(font_entries)):
|
||||
if i in used_fonts:
|
||||
font_remap[i] = len(kept)
|
||||
kept.append(font_entries[i])
|
||||
for fp in format_registry.values():
|
||||
if 'font' in fp:
|
||||
fp['font'] = font_remap[int(fp['font'])]
|
||||
font_entries = kept
|
||||
|
||||
# --- 7. Generate XML ---
|
||||
lines = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user