From 3df7ccb1e7f27818fc70357bb39b4a49922e45c1 Mon Sep 17 00:00:00 2001 From: Stefan Nikolei Date: Mon, 31 Aug 2026 22:07:57 +0200 Subject: [PATCH 1/6] Migrate to slnx --- SixLabors.Fonts.sln | 110 ------------------ SixLabors.Fonts.slnx | 46 ++++++++ src/UnicodeTrieGenerator/Generator.cs | 2 +- .../MeasureShapedRunBenchmark.cs | 2 +- .../ShapeTextBenchmark.cs | 2 +- .../ShapingBufferConventionTests.cs | 2 +- .../SixLabors.Fonts.Tests/TestEnvironment.cs | 2 +- 7 files changed, 51 insertions(+), 115 deletions(-) delete mode 100644 SixLabors.Fonts.sln create mode 100644 SixLabors.Fonts.slnx diff --git a/SixLabors.Fonts.sln b/SixLabors.Fonts.sln deleted file mode 100644 index 41d80f947..000000000 --- a/SixLabors.Fonts.sln +++ /dev/null @@ -1,110 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 18 -VisualStudioVersion = 18.0.11012.119 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_root", "_root", "{C317F1B1-D75E-4C6D-83EB-80367343E0D7}" - ProjectSection(SolutionItems) = preProject - standards\.editorconfig = standards\.editorconfig - ci-build.ps1 = ci-build.ps1 - ci-pack.ps1 = ci-pack.ps1 - ci-test.ps1 = ci-test.ps1 - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - NuGet.config = NuGet.config - README.md = README.md - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{815C0625-CD3D-440F-9F80-2D83856AB7AE}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - src\Directory.Build.targets = src\Directory.Build.targets - src\Fonts.ruleset = src\Fonts.ruleset - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{56801022-D71A-4FBE-BC5B-CBA08E2284EC}" - ProjectSection(SolutionItems) = preProject - tests\Directory.Build.props = tests\Directory.Build.props - tests\Directory.Build.targets = tests\Directory.Build.targets - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixLabors.Fonts", "src\SixLabors.Fonts\SixLabors.Fonts.csproj", "{09E744EC-4852-4FC7-BE78-C1B399F17967}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixLabors.Fonts.Tests", "tests\SixLabors.Fonts.Tests\SixLabors.Fonts.Tests.csproj", "{F836E8E6-B4D9-4208-8346-140C74678B91}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{7CDD4908-7CCD-4945-860C-D2F1732D3AE6}" - ProjectSection(SolutionItems) = preProject - .github\CONTRIBUTING.md = .github\CONTRIBUTING.md - .github\FUNDING.yml = .github\FUNDING.yml - .github\PULL_REQUEST_TEMPLATE.md = .github\PULL_REQUEST_TEMPLATE.md - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ISSUE_TEMPLATE", "ISSUE_TEMPLATE", "{EC0F1812-C6AF-48D8-882B-5637730D2DB1}" - ProjectSection(SolutionItems) = preProject - .github\ISSUE_TEMPLATE\config.yml = .github\ISSUE_TEMPLATE\config.yml - .github\ISSUE_TEMPLATE\oss-bug-report.yml = .github\ISSUE_TEMPLATE\oss-bug-report.yml - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{CFCC940C-DEA3-42CC-9626-0B7D09289FF4}" - ProjectSection(SolutionItems) = preProject - .github\workflows\build-and-test.yml = .github\workflows\build-and-test.yml - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{249327CF-1415-428B-8EEA-8C7705B1DE8F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnicodeTrieGenerator", "src\UnicodeTrieGenerator\UnicodeTrieGenerator.csproj", "{ABB6E111-672F-4846-88D6-C49C6CD01606}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnicodeTestData", "UnicodeTestData", "{654DD381-B93D-4459-B669-296F5D9172ED}" - ProjectSection(SolutionItems) = preProject - tests\UnicodeTestData\BidiCharacterTest.txt = tests\UnicodeTestData\BidiCharacterTest.txt - tests\UnicodeTestData\BidiTest.txt = tests\UnicodeTestData\BidiTest.txt - tests\UnicodeTestData\GraphemeBreakTest.txt = tests\UnicodeTestData\GraphemeBreakTest.txt - tests\UnicodeTestData\LineBreakTest.txt = tests\UnicodeTestData\LineBreakTest.txt - tests\UnicodeTestData\README.md = tests\UnicodeTestData\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixLabors.Fonts.Benchmarks", "tests\SixLabors.Fonts.Benchmarks\SixLabors.Fonts.Benchmarks\SixLabors.Fonts.Benchmarks.csproj", "{FB8FDC5F-7FEB-4132-9133-C25E05C0B3D9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {09E744EC-4852-4FC7-BE78-C1B399F17967}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09E744EC-4852-4FC7-BE78-C1B399F17967}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09E744EC-4852-4FC7-BE78-C1B399F17967}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09E744EC-4852-4FC7-BE78-C1B399F17967}.Release|Any CPU.Build.0 = Release|Any CPU - {F836E8E6-B4D9-4208-8346-140C74678B91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F836E8E6-B4D9-4208-8346-140C74678B91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F836E8E6-B4D9-4208-8346-140C74678B91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F836E8E6-B4D9-4208-8346-140C74678B91}.Release|Any CPU.Build.0 = Release|Any CPU - {ABB6E111-672F-4846-88D6-C49C6CD01606}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABB6E111-672F-4846-88D6-C49C6CD01606}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABB6E111-672F-4846-88D6-C49C6CD01606}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABB6E111-672F-4846-88D6-C49C6CD01606}.Release|Any CPU.Build.0 = Release|Any CPU - {FB8FDC5F-7FEB-4132-9133-C25E05C0B3D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB8FDC5F-7FEB-4132-9133-C25E05C0B3D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB8FDC5F-7FEB-4132-9133-C25E05C0B3D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB8FDC5F-7FEB-4132-9133-C25E05C0B3D9}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {09E744EC-4852-4FC7-BE78-C1B399F17967} = {815C0625-CD3D-440F-9F80-2D83856AB7AE} - {F836E8E6-B4D9-4208-8346-140C74678B91} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC} - {7CDD4908-7CCD-4945-860C-D2F1732D3AE6} = {C317F1B1-D75E-4C6D-83EB-80367343E0D7} - {EC0F1812-C6AF-48D8-882B-5637730D2DB1} = {7CDD4908-7CCD-4945-860C-D2F1732D3AE6} - {CFCC940C-DEA3-42CC-9626-0B7D09289FF4} = {7CDD4908-7CCD-4945-860C-D2F1732D3AE6} - {ABB6E111-672F-4846-88D6-C49C6CD01606} = {249327CF-1415-428B-8EEA-8C7705B1DE8F} - {654DD381-B93D-4459-B669-296F5D9172ED} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC} - {FB8FDC5F-7FEB-4132-9133-C25E05C0B3D9} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {38F4B47F-4F74-40F5-8707-C0EF1D0BDF92} - EndGlobalSection - GlobalSection(SharedMSBuildProjectFiles) = preSolution - shared-infrastructure\src\SharedInfrastructure\SharedInfrastructure.projitems*{09e744ec-4852-4fc7-be78-c1b399f17967}*SharedItemsImports = 5 - shared-infrastructure\src\SharedInfrastructure\SharedInfrastructure.projitems*{abb6e111-672f-4846-88d6-c49c6cd01606}*SharedItemsImports = 5 - EndGlobalSection -EndGlobal diff --git a/SixLabors.Fonts.slnx b/SixLabors.Fonts.slnx new file mode 100644 index 000000000..bf76ea62e --- /dev/null +++ b/SixLabors.Fonts.slnx @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/UnicodeTrieGenerator/Generator.cs b/src/UnicodeTrieGenerator/Generator.cs index 7b2c15605..839260b4b 100644 --- a/src/UnicodeTrieGenerator/Generator.cs +++ b/src/UnicodeTrieGenerator/Generator.cs @@ -560,7 +560,7 @@ private static readonly Dictionary VerticalOrie { "Tr", VerticalOrientationType.TransformRotate } }; - private const string SixLaborsSolutionFileName = "SixLabors.Fonts.sln"; + private const string SixLaborsSolutionFileName = "SixLabors.Fonts.slnx"; private const string InputRulesRelativePath = @"src\UnicodeTrieGenerator\Rules"; private const string OutputResourcesRelativePath = @"src\SixLabors.Fonts\Unicode\Resources"; diff --git a/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/MeasureShapedRunBenchmark.cs b/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/MeasureShapedRunBenchmark.cs index 6da21ddcc..86edb6ca7 100644 --- a/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/MeasureShapedRunBenchmark.cs +++ b/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/MeasureShapedRunBenchmark.cs @@ -216,7 +216,7 @@ private void PrepareSkiaBuffer() private static string GetRepositoryPath(string relativePath) { DirectoryInfo? directory = new(AppContext.BaseDirectory); - while (directory != null && !File.Exists(Path.Combine(directory.FullName, "SixLabors.Fonts.sln"))) + while (directory != null && !File.Exists(Path.Combine(directory.FullName, "SixLabors.Fonts.slnx"))) { directory = directory.Parent; } diff --git a/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/ShapeTextBenchmark.cs b/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/ShapeTextBenchmark.cs index e2afe52f8..cd56c174f 100644 --- a/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/ShapeTextBenchmark.cs +++ b/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/ShapeTextBenchmark.cs @@ -256,7 +256,7 @@ public void Dispose() private static string GetRepositoryPath(string relativePath) { DirectoryInfo? directory = new(AppContext.BaseDirectory); - while (directory != null && !File.Exists(Path.Combine(directory.FullName, "SixLabors.Fonts.sln"))) + while (directory != null && !File.Exists(Path.Combine(directory.FullName, "SixLabors.Fonts.slnx"))) { directory = directory.Parent; } diff --git a/tests/SixLabors.Fonts.Tests/ShapingBufferConventionTests.cs b/tests/SixLabors.Fonts.Tests/ShapingBufferConventionTests.cs index 593a465c3..e5ec2eee3 100644 --- a/tests/SixLabors.Fonts.Tests/ShapingBufferConventionTests.cs +++ b/tests/SixLabors.Fonts.Tests/ShapingBufferConventionTests.cs @@ -78,7 +78,7 @@ public void NoPhaseDispatchByBufferType(string path) private static string GetSourceRoot() { DirectoryInfo? directory = new(AppContext.BaseDirectory); - while (directory != null && !File.Exists(Path.Combine(directory.FullName, "SixLabors.Fonts.sln"))) + while (directory != null && !File.Exists(Path.Combine(directory.FullName, "SixLabors.Fonts.slnx"))) { directory = directory.Parent; } diff --git a/tests/SixLabors.Fonts.Tests/TestEnvironment.cs b/tests/SixLabors.Fonts.Tests/TestEnvironment.cs index 43f7fc287..fadaacd0c 100644 --- a/tests/SixLabors.Fonts.Tests/TestEnvironment.cs +++ b/tests/SixLabors.Fonts.Tests/TestEnvironment.cs @@ -10,7 +10,7 @@ internal static class TestEnvironment { private static readonly FileInfo TestAssemblyFile = new(typeof(TestEnvironment).GetTypeInfo().Assembly.Location); - private const string SixLaborsSolutionFileName = "SixLabors.Fonts.sln"; + private const string SixLaborsSolutionFileName = "SixLabors.Fonts.slnx"; private const string ActualOutputDirectoryRelativePath = @"tests\Images\ActualOutput"; From 669d610941c449daa50f715c7441459108e68b10 Mon Sep 17 00:00:00 2001 From: Stefan Nikolei Date: Mon, 31 Aug 2026 22:18:38 +0200 Subject: [PATCH 2/6] Update to .net10 + .net11 as preview --- .github/workflows/build-and-test.yml | 34 +++++++++---------- src/SixLabors.Fonts/SixLabors.Fonts.csproj | 4 +-- .../UnicodeTrieGenerator.csproj | 4 +-- .../SixLabors.Fonts.Benchmarks.csproj | 8 ++--- .../SixLabors.Fonts.Tests.csproj | 6 ++-- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 4406a2859..c28eb8232 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -55,7 +55,7 @@ jobs: - name: Git Pull LFS shell: bash run: git lfs pull - + Build: needs: WarmLFS strategy: @@ -64,42 +64,42 @@ jobs: - ${{ contains(github.event.pull_request.labels.*.name, 'arch:arm32') || contains(github.event.pull_request.labels.*.name, 'arch:arm64') }} options: - os: ubuntu-latest - framework: net10.0 - sdk: 10.0.x + framework: net11.0 + sdk: 11.0.x sdk-preview: true runtime: -x64 codecov: false - os: macos-latest - framework: net10.0 - sdk: 10.0.x + framework: net11.0 + sdk: 11.0.x sdk-preview: true runtime: -x64 codecov: false - os: windows-latest - framework: net10.0 - sdk: 10.0.x + framework: net11.0 + sdk: 11.0.x sdk-preview: true runtime: -x64 codecov: false - os: buildjet-4vcpu-ubuntu-2204-arm - framework: net10.0 - sdk: 10.0.x + framework: net11.0 + sdk: 11.0.x sdk-preview: true runtime: -x64 codecov: false - os: ubuntu-latest - framework: net8.0 - sdk: 8.0.x + framework: net10.0 + sdk: 10.0.x runtime: -x64 codecov: false - os: macos-latest - framework: net8.0 - sdk: 8.0.x + framework: net10.0 + sdk: 10.0.x runtime: -x64 codecov: false - os: windows-latest - framework: net8.0 - sdk: 8.0.x + framework: net10.0 + sdk: 10.0.x runtime: -x64 codecov: true exclude: @@ -154,14 +154,14 @@ jobs: uses: actions/setup-dotnet@v6 with: dotnet-version: | - 8.0.x + 10.0.x - name: DotNet Setup Preview if: ${{ matrix.options.sdk-preview == true }} uses: actions/setup-dotnet@v6 with: dotnet-version: | - 10.0.x + 11.0.x - name: DotNet Build if: ${{ matrix.options.sdk-preview != true }} diff --git a/src/SixLabors.Fonts/SixLabors.Fonts.csproj b/src/SixLabors.Fonts/SixLabors.Fonts.csproj index c71e6b255..f6eb108e0 100644 --- a/src/SixLabors.Fonts/SixLabors.Fonts.csproj +++ b/src/SixLabors.Fonts/SixLabors.Fonts.csproj @@ -32,13 +32,13 @@ - net8.0;net10.0 + net10.0;net11.0 true - net8.0 + net10.0 true diff --git a/src/UnicodeTrieGenerator/UnicodeTrieGenerator.csproj b/src/UnicodeTrieGenerator/UnicodeTrieGenerator.csproj index aa356ad10..d42abd2ae 100644 --- a/src/UnicodeTrieGenerator/UnicodeTrieGenerator.csproj +++ b/src/UnicodeTrieGenerator/UnicodeTrieGenerator.csproj @@ -10,12 +10,12 @@ - net8.0;net10.0 + net10.0;net11.0 - net8.0 + net10.0 diff --git a/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks.csproj b/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks.csproj index c5a2491a8..ee93f16ec 100644 --- a/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks.csproj +++ b/tests/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks/SixLabors.Fonts.Benchmarks.csproj @@ -15,20 +15,20 @@ CA1822 - + - net8.0;net10.0 + net10.0;net11.0 - net8.0 + net10.0 - + diff --git a/tests/SixLabors.Fonts.Tests/SixLabors.Fonts.Tests.csproj b/tests/SixLabors.Fonts.Tests/SixLabors.Fonts.Tests.csproj index 0e39a31f2..744a2c9c7 100644 --- a/tests/SixLabors.Fonts.Tests/SixLabors.Fonts.Tests.csproj +++ b/tests/SixLabors.Fonts.Tests/SixLabors.Fonts.Tests.csproj @@ -13,12 +13,12 @@ - net8.0;net10.0 + net10.0;net11.0 - net8.0 + net10.0 @@ -47,7 +47,7 @@ - + From 2b202f9d9c44796bf4a4b5529debdf2e9f387999 Mon Sep 17 00:00:00 2001 From: Stefan Nikolei Date: Mon, 31 Aug 2026 22:23:17 +0200 Subject: [PATCH 3/6] =?UTF-8?q?Update=20SharedInfra=20+=20XUnit.v3=20v4=20?= =?UTF-8?q?=20Update=F0=9F=92=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 7 +++++++ global.json | 18 ++++++++++++++++++ shared-infrastructure | 2 +- .../Unicode/BidiAlgorithmTests.cs | 1 - .../Unicode/BidiCharacterTests.cs | 1 - .../Unicode/GraphemeEnumeratorTests.cs | 1 - .../Unicode/LineBreakEnumeratorTests.cs | 1 - .../Unicode/WordBreakEnumeratorTests.cs | 1 - 8 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 global.json diff --git a/.gitattributes b/.gitattributes index 031420e53..e594c0e9b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -110,6 +110,7 @@ ############################################################################### # Handle image files by git lfs ############################################################################### +*.pdf filter=lfs diff=lfs merge=lfs -text *.jpg filter=lfs diff=lfs merge=lfs -text *.jpeg filter=lfs diff=lfs merge=lfs -text *.bmp filter=lfs diff=lfs merge=lfs -text @@ -137,6 +138,12 @@ *.heic filter=lfs diff=lfs merge=lfs -text *.hif filter=lfs diff=lfs merge=lfs -text *.avif filter=lfs diff=lfs merge=lfs -text +*.hvc1 filter=lfs diff=lfs merge=lfs -text +*.hvcc filter=lfs diff=lfs merge=lfs -text +*.ivf filter=lfs diff=lfs merge=lfs -text +*.y4m filter=lfs diff=lfs merge=lfs -text +*.yuv filter=lfs diff=lfs merge=lfs -text +*.bit filter=lfs diff=lfs merge=lfs -text ############################################################################### # Handle ICC files by git lfs ############################################################################### diff --git a/global.json b/global.json new file mode 100644 index 000000000..8ff67c2a0 --- /dev/null +++ b/global.json @@ -0,0 +1,18 @@ +// Pins the .NET SDK to major version 10 or later for all SixLabors repositories. +// The build copies this file to consuming repositories together with .editorconfig and +// the other shared config files (see msbuild/targets/SixLabors.Src.targets). +{ + "sdk": { + // The floor, not an exact build: resolution never selects an SDK below major 10. + "version": "10.0.0", + + // Select the newest installed SDK at or above the floor. This spans feature bands, + // minor versions, and major versions, so a machine with only stable 10.0.x SDKs + // resolves the newest of those, and a machine with a newer SDK resolves that instead. + "rollForward": "latestMajor", + + // Let the CLI and Visual Studio select preview SDKs when one is installed. + // Machines and CI lanes without a preview SDK are unaffected. + "allowPrerelease": true + } +} diff --git a/shared-infrastructure b/shared-infrastructure index 20f15a2d4..a835a9d74 160000 --- a/shared-infrastructure +++ b/shared-infrastructure @@ -1 +1 @@ -Subproject commit 20f15a2d47bba9d8375b5fd34fac283336ec9a5e +Subproject commit a835a9d74e82b2d32b580a7902eb2699ebc47098 diff --git a/tests/SixLabors.Fonts.Tests/Unicode/BidiAlgorithmTests.cs b/tests/SixLabors.Fonts.Tests/Unicode/BidiAlgorithmTests.cs index d20891ef2..1800771c8 100644 --- a/tests/SixLabors.Fonts.Tests/Unicode/BidiAlgorithmTests.cs +++ b/tests/SixLabors.Fonts.Tests/Unicode/BidiAlgorithmTests.cs @@ -4,7 +4,6 @@ using System.Globalization; using SixLabors.Fonts.Rendering; using SixLabors.Fonts.Unicode; -using Xunit.Abstractions; namespace SixLabors.Fonts.Tests.Unicode; diff --git a/tests/SixLabors.Fonts.Tests/Unicode/BidiCharacterTests.cs b/tests/SixLabors.Fonts.Tests/Unicode/BidiCharacterTests.cs index b77c9be37..a5be3bba5 100644 --- a/tests/SixLabors.Fonts.Tests/Unicode/BidiCharacterTests.cs +++ b/tests/SixLabors.Fonts.Tests/Unicode/BidiCharacterTests.cs @@ -4,7 +4,6 @@ using System.Runtime.InteropServices; using System.Text; using SixLabors.Fonts.Unicode; -using Xunit.Abstractions; namespace SixLabors.Fonts.Tests.Unicode; diff --git a/tests/SixLabors.Fonts.Tests/Unicode/GraphemeEnumeratorTests.cs b/tests/SixLabors.Fonts.Tests/Unicode/GraphemeEnumeratorTests.cs index 99c2ff552..4461fd0c9 100644 --- a/tests/SixLabors.Fonts.Tests/Unicode/GraphemeEnumeratorTests.cs +++ b/tests/SixLabors.Fonts.Tests/Unicode/GraphemeEnumeratorTests.cs @@ -4,7 +4,6 @@ using System.Runtime.InteropServices; using System.Text; using SixLabors.Fonts.Unicode; -using Xunit.Abstractions; namespace SixLabors.Fonts.Tests.Unicode; diff --git a/tests/SixLabors.Fonts.Tests/Unicode/LineBreakEnumeratorTests.cs b/tests/SixLabors.Fonts.Tests/Unicode/LineBreakEnumeratorTests.cs index 6efe04a20..c626ff925 100644 --- a/tests/SixLabors.Fonts.Tests/Unicode/LineBreakEnumeratorTests.cs +++ b/tests/SixLabors.Fonts.Tests/Unicode/LineBreakEnumeratorTests.cs @@ -4,7 +4,6 @@ using System.Runtime.InteropServices; using System.Text; using SixLabors.Fonts.Unicode; -using Xunit.Abstractions; namespace SixLabors.Fonts.Tests.Unicode; diff --git a/tests/SixLabors.Fonts.Tests/Unicode/WordBreakEnumeratorTests.cs b/tests/SixLabors.Fonts.Tests/Unicode/WordBreakEnumeratorTests.cs index 70b6616d3..142188d6a 100644 --- a/tests/SixLabors.Fonts.Tests/Unicode/WordBreakEnumeratorTests.cs +++ b/tests/SixLabors.Fonts.Tests/Unicode/WordBreakEnumeratorTests.cs @@ -4,7 +4,6 @@ using System.Runtime.InteropServices; using System.Text; using SixLabors.Fonts.Unicode; -using Xunit.Abstractions; namespace SixLabors.Fonts.Tests.Unicode; From 4611aeee91993bb77244ecd6c97660e05a97c60b Mon Sep 17 00:00:00 2001 From: Stefan Nikolei Date: Mon, 31 Aug 2026 22:33:51 +0200 Subject: [PATCH 4/6] Fix CA1517 declare as ReadOnlySpan --- .../AdvancedTypographic/Variations/GlyphVariationProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SixLabors.Fonts/Tables/AdvancedTypographic/Variations/GlyphVariationProcessor.cs b/src/SixLabors.Fonts/Tables/AdvancedTypographic/Variations/GlyphVariationProcessor.cs index 229cf30e8..5e976553e 100644 --- a/src/SixLabors.Fonts/Tables/AdvancedTypographic/Variations/GlyphVariationProcessor.cs +++ b/src/SixLabors.Fonts/Tables/AdvancedTypographic/Variations/GlyphVariationProcessor.cs @@ -989,7 +989,7 @@ private static void InterpolateMissingDeltas( IReadOnlyList endPoints, Span adjustX, Span adjustY, - Span hasDelta) + ReadOnlySpan hasDelta) { if (points.Count == 0 || endPoints.Count == 0) { From ed60fa9af35027c931e8c5af7d21dd11aac13b6a Mon Sep 17 00:00:00 2001 From: Stefan Nikolei Date: Mon, 31 Aug 2026 22:51:38 +0200 Subject: [PATCH 5/6] Add actual and expected size to exception --- .../ImageComparison/TolerantImageComparer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/SixLabors.Fonts.Tests/ImageComparison/TolerantImageComparer.cs b/tests/SixLabors.Fonts.Tests/ImageComparison/TolerantImageComparer.cs index ec43b052e..958efa753 100644 --- a/tests/SixLabors.Fonts.Tests/ImageComparison/TolerantImageComparer.cs +++ b/tests/SixLabors.Fonts.Tests/ImageComparison/TolerantImageComparer.cs @@ -60,7 +60,7 @@ public override ImageSimilarityReport CompareImagesOrFrames Date: Tue, 1 Sep 2026 13:52:46 +0200 Subject: [PATCH 6/6] Fix CFF empty-glyph bounds overflow on .NET 11 CffBoundsFinder.GetBounds() cast the float.MaxValue/MinValue straight to short when a charstring never emitted a path operation (e.g. the space glyph). That overflow is unspecified by the C# spec; .NET 10 happened to produce small values, but .NET 11 preview saturates to short.MinValue/MaxValue instead, producing bogus +/-32767 unit bounds that blew up text layout for any run containing a space in a CFF font. Return Bounds.Empty when no point was ever recorded. --- src/SixLabors.Fonts/Tables/Cff/CffBoundsFinder.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/SixLabors.Fonts/Tables/Cff/CffBoundsFinder.cs b/src/SixLabors.Fonts/Tables/Cff/CffBoundsFinder.cs index 9f6ef9d63..a4f7ce025 100644 --- a/src/SixLabors.Fonts/Tables/Cff/CffBoundsFinder.cs +++ b/src/SixLabors.Fonts/Tables/Cff/CffBoundsFinder.cs @@ -238,11 +238,21 @@ private void UpdateMinMax(float x0, float y0) /// /// Gets the computed bounding box from all tracked path coordinates. /// - /// The representing the glyph bounding box. + /// + /// The representing the glyph bounding box, or + /// when the charstring never emitted a path operation (e.g. a space or other invisible glyph). + /// public Bounds GetBounds() - => new( + { + if (this.firstEval) + { + return Bounds.Empty; + } + + return new Bounds( (short)Math.Floor(this.minX), (short)Math.Floor(this.minY), (short)Math.Ceiling(this.maxX), (short)Math.Ceiling(this.maxY)); + } }