mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-13 06:53:21 +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 = []
|
||||
|
||||
|
||||
@@ -1,21 +1,57 @@
|
||||
{
|
||||
"name": "Дробный размер шрифта сохраняется",
|
||||
"input": {
|
||||
"columns": 2,
|
||||
"columns": 3,
|
||||
"fonts": {
|
||||
"default": { "face": "Arial", "size": 10 },
|
||||
"мелкий": { "face": "Arial", "size": 8.3 },
|
||||
"крупный": { "face": "Arial", "size": 11.3, "bold": true }
|
||||
"default": {
|
||||
"face": "Arial",
|
||||
"size": 10
|
||||
},
|
||||
"мелкий": {
|
||||
"face": "Arial",
|
||||
"size": 8.3
|
||||
},
|
||||
"крупный": {
|
||||
"face": "Arial",
|
||||
"size": 11.3,
|
||||
"bold": true
|
||||
}
|
||||
},
|
||||
"styles": {
|
||||
"мелкий": { "font": "мелкий" },
|
||||
"крупный": { "font": "крупный" }
|
||||
"мелкий": {
|
||||
"font": "мелкий"
|
||||
},
|
||||
"крупный": {
|
||||
"font": "крупный"
|
||||
},
|
||||
"обычный": {
|
||||
"font": "default",
|
||||
"horizontalAlignment": "Center"
|
||||
}
|
||||
},
|
||||
"areas": [
|
||||
{
|
||||
"name": "Шапка",
|
||||
"rows": [
|
||||
{ "cells": [{ "col": 1, "style": "крупный", "text": "Заголовок" }, { "col": 2, "style": "мелкий", "text": "сноска" }] }
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"col": 1,
|
||||
"style": "крупный",
|
||||
"text": "Заголовок"
|
||||
},
|
||||
{
|
||||
"col": 2,
|
||||
"style": "мелкий",
|
||||
"text": "сноска"
|
||||
},
|
||||
{
|
||||
"col": 3,
|
||||
"style": "обычный",
|
||||
"text": "обычный"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -25,10 +61,16 @@
|
||||
},
|
||||
"validatePath": "Template.xml",
|
||||
"expect": {
|
||||
"files": ["Template.xml"],
|
||||
"files": [
|
||||
"Template.xml"
|
||||
],
|
||||
"fileContains": {
|
||||
"file": "Template.xml",
|
||||
"text": ["height=\"8.3\"", "height=\"11.3\"", "height=\"10\""]
|
||||
"text": [
|
||||
"height=\"8.3\"",
|
||||
"height=\"11.3\"",
|
||||
"height=\"10\""
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
</languageInfo>
|
||||
</languageSettings>
|
||||
<columns>
|
||||
<size>2</size>
|
||||
<size>3</size>
|
||||
</columns>
|
||||
<rowsItem>
|
||||
<index>0</index>
|
||||
@@ -37,10 +37,21 @@
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>3</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>обычный</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
</row>
|
||||
</rowsItem>
|
||||
<templateMode>true</templateMode>
|
||||
<defaultFormatIndex>3</defaultFormatIndex>
|
||||
<defaultFormatIndex>4</defaultFormatIndex>
|
||||
<height>1</height>
|
||||
<vgRows>1</vgRows>
|
||||
<namedItem xsi:type="NamedItemCells">
|
||||
@@ -62,6 +73,10 @@
|
||||
<format>
|
||||
<font>1</font>
|
||||
</format>
|
||||
<format>
|
||||
<font>0</font>
|
||||
<horizontalAlignment>Center</horizontalAlignment>
|
||||
</format>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
-1
@@ -42,7 +42,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -169,7 +169,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
-1
@@ -42,7 +42,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -280,7 +280,6 @@
|
||||
</line>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<font faceName="Arial" height="10" bold="false" italic="true" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<font faceName="Times New Roman" height="14" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="true" strikeout="false" kind="Absolute" scale="100"/>
|
||||
@@ -288,7 +287,7 @@
|
||||
<height>25</height>
|
||||
</format>
|
||||
<format>
|
||||
<font>3</font>
|
||||
<font>2</font>
|
||||
<horizontalAlignment>Center</horizontalAlignment>
|
||||
</format>
|
||||
<format>
|
||||
@@ -296,7 +295,7 @@
|
||||
<bottomBorder>0</bottomBorder>
|
||||
</format>
|
||||
<format>
|
||||
<font>5</font>
|
||||
<font>4</font>
|
||||
<fillType>Parameter</fillType>
|
||||
</format>
|
||||
<format>
|
||||
@@ -340,7 +339,7 @@
|
||||
<fillType>Parameter</fillType>
|
||||
</format>
|
||||
<format>
|
||||
<font>4</font>
|
||||
<font>3</font>
|
||||
<horizontalAlignment>Center</horizontalAlignment>
|
||||
</format>
|
||||
<format>
|
||||
|
||||
@@ -61,7 +61,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -1 +1 @@
|
||||
{ "columns": 2, "defaultWidth": 10, "fonts": { "default": { "face": "Arial", "size": 10 } }, "styles": {}, "areas": [{ "name": "Test", "rows": [["A", "B"]] }] }
|
||||
{ "columns": 2, "defaultWidth": 10, "fonts": {}, "styles": {}, "areas": [{ "name": "Test", "rows": [["A", "B"]] }] }
|
||||
@@ -61,7 +61,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
<endColumn>-1</endColumn>
|
||||
</area>
|
||||
</namedItem>
|
||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
||||
<format>
|
||||
<width>10</width>
|
||||
</format>
|
||||
|
||||
Reference in New Issue
Block a user