mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-13 15:03:20 +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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -1021,6 +1021,30 @@ foreach ($area in $def.areas) {
|
|||||||
# Формат по умолчанию — последняя запись палитры (см. выше).
|
# Формат по умолчанию — последняя запись палитры (см. выше).
|
||||||
$defaultFormatIndex = Register-Format @{ width = $defaultWidth }
|
$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 ---
|
# --- 7. Generate XML ---
|
||||||
|
|
||||||
$xml = New-Object System.Text.StringBuilder 4096
|
$xml = New-Object System.Text.StringBuilder 4096
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import hashlib
|
import hashlib
|
||||||
@@ -1044,6 +1044,22 @@ def main():
|
|||||||
# Формат по умолчанию — последняя запись палитры (см. выше).
|
# Формат по умолчанию — последняя запись палитры (см. выше).
|
||||||
default_format_index = register_format({'width': default_width})
|
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 ---
|
# --- 7. Generate XML ---
|
||||||
lines = []
|
lines = []
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,57 @@
|
|||||||
{
|
{
|
||||||
"name": "Дробный размер шрифта сохраняется",
|
"name": "Дробный размер шрифта сохраняется",
|
||||||
"input": {
|
"input": {
|
||||||
"columns": 2,
|
"columns": 3,
|
||||||
"fonts": {
|
"fonts": {
|
||||||
"default": { "face": "Arial", "size": 10 },
|
"default": {
|
||||||
"мелкий": { "face": "Arial", "size": 8.3 },
|
"face": "Arial",
|
||||||
"крупный": { "face": "Arial", "size": 11.3, "bold": true }
|
"size": 10
|
||||||
|
},
|
||||||
|
"мелкий": {
|
||||||
|
"face": "Arial",
|
||||||
|
"size": 8.3
|
||||||
|
},
|
||||||
|
"крупный": {
|
||||||
|
"face": "Arial",
|
||||||
|
"size": 11.3,
|
||||||
|
"bold": true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"styles": {
|
"styles": {
|
||||||
"мелкий": { "font": "мелкий" },
|
"мелкий": {
|
||||||
"крупный": { "font": "крупный" }
|
"font": "мелкий"
|
||||||
|
},
|
||||||
|
"крупный": {
|
||||||
|
"font": "крупный"
|
||||||
|
},
|
||||||
|
"обычный": {
|
||||||
|
"font": "default",
|
||||||
|
"horizontalAlignment": "Center"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"areas": [
|
"areas": [
|
||||||
{
|
{
|
||||||
"name": "Шапка",
|
"name": "Шапка",
|
||||||
"rows": [
|
"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",
|
"validatePath": "Template.xml",
|
||||||
"expect": {
|
"expect": {
|
||||||
"files": ["Template.xml"],
|
"files": [
|
||||||
|
"Template.xml"
|
||||||
|
],
|
||||||
"fileContains": {
|
"fileContains": {
|
||||||
"file": "Template.xml",
|
"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>
|
</languageInfo>
|
||||||
</languageSettings>
|
</languageSettings>
|
||||||
<columns>
|
<columns>
|
||||||
<size>2</size>
|
<size>3</size>
|
||||||
</columns>
|
</columns>
|
||||||
<rowsItem>
|
<rowsItem>
|
||||||
<index>0</index>
|
<index>0</index>
|
||||||
@@ -37,10 +37,21 @@
|
|||||||
</tl>
|
</tl>
|
||||||
</c>
|
</c>
|
||||||
</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>
|
</row>
|
||||||
</rowsItem>
|
</rowsItem>
|
||||||
<templateMode>true</templateMode>
|
<templateMode>true</templateMode>
|
||||||
<defaultFormatIndex>3</defaultFormatIndex>
|
<defaultFormatIndex>4</defaultFormatIndex>
|
||||||
<height>1</height>
|
<height>1</height>
|
||||||
<vgRows>1</vgRows>
|
<vgRows>1</vgRows>
|
||||||
<namedItem xsi:type="NamedItemCells">
|
<namedItem xsi:type="NamedItemCells">
|
||||||
@@ -62,6 +73,10 @@
|
|||||||
<format>
|
<format>
|
||||||
<font>1</font>
|
<font>1</font>
|
||||||
</format>
|
</format>
|
||||||
|
<format>
|
||||||
|
<font>0</font>
|
||||||
|
<horizontalAlignment>Center</horizontalAlignment>
|
||||||
|
</format>
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
-1
@@ -42,7 +42,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -169,7 +169,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -42,7 +42,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
-1
@@ -42,7 +42,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -280,7 +280,6 @@
|
|||||||
</line>
|
</line>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
<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="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="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="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"/>
|
<font faceName="Arial" height="10" bold="false" italic="false" underline="true" strikeout="false" kind="Absolute" scale="100"/>
|
||||||
@@ -288,7 +287,7 @@
|
|||||||
<height>25</height>
|
<height>25</height>
|
||||||
</format>
|
</format>
|
||||||
<format>
|
<format>
|
||||||
<font>3</font>
|
<font>2</font>
|
||||||
<horizontalAlignment>Center</horizontalAlignment>
|
<horizontalAlignment>Center</horizontalAlignment>
|
||||||
</format>
|
</format>
|
||||||
<format>
|
<format>
|
||||||
@@ -296,7 +295,7 @@
|
|||||||
<bottomBorder>0</bottomBorder>
|
<bottomBorder>0</bottomBorder>
|
||||||
</format>
|
</format>
|
||||||
<format>
|
<format>
|
||||||
<font>5</font>
|
<font>4</font>
|
||||||
<fillType>Parameter</fillType>
|
<fillType>Parameter</fillType>
|
||||||
</format>
|
</format>
|
||||||
<format>
|
<format>
|
||||||
@@ -340,7 +339,7 @@
|
|||||||
<fillType>Parameter</fillType>
|
<fillType>Parameter</fillType>
|
||||||
</format>
|
</format>
|
||||||
<format>
|
<format>
|
||||||
<font>4</font>
|
<font>3</font>
|
||||||
<horizontalAlignment>Center</horizontalAlignment>
|
<horizontalAlignment>Center</horizontalAlignment>
|
||||||
</format>
|
</format>
|
||||||
<format>
|
<format>
|
||||||
|
|||||||
@@ -61,7 +61,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -53,7 +53,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</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>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
<endColumn>-1</endColumn>
|
<endColumn>-1</endColumn>
|
||||||
</area>
|
</area>
|
||||||
</namedItem>
|
</namedItem>
|
||||||
<font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
|
|
||||||
<format>
|
<format>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
</format>
|
</format>
|
||||||
|
|||||||
Reference in New Issue
Block a user