From 4c197445792cc1c1b238a431e418928916c12fbf Mon Sep 17 00:00:00 2001 From: swmal <897655+swmal@users.noreply.github.com> Date: Wed, 9 Sep 2026 08:29:15 +0200 Subject: [PATCH 1/3] Add mark positioning, script-aware GPOS/GSUB, ligature features (#2503) --- .../EPPlus.Export.Pdf.Tests.csproj | 3 + .../Fonts/EBGaramond-Regular.ttf | Bin 0 -> 558640 bytes .../LigatureDligReproTests.cs | 126 +++++++++++ src/EPPlus.Export.Pdf.Tests/PdfTestBase.cs | 62 +++++- .../PdfTextShaperShapingOptionsTests.cs | 100 +++++++++ .../Settings/PdfPageSettings.cs | 27 +++ .../FeatureTagMappingCoverageTests.cs | 97 ++++++++ .../Ligatures/LigatureFeatureTagTests.cs | 207 ++++++++++++++++++ .../TextShaping/ScriptAwareGsubTests.cs | 2 +- .../Ligatures/LigatureProcessor.cs | 183 +++++++++++----- .../TextShaping/TextShaper.cs | 22 +- src/EPPlus.Interfaces/Fonts/GposFeature.cs | 52 +++++ .../Fonts/GposFeatureTags.cs | 46 ++++ src/EPPlus.Interfaces/Fonts/GsubFeature.cs | 59 +++++ .../Fonts/GsubFeatureTags.cs | 46 ++++ src/EPPlus.Interfaces/Fonts/ShapingOptions.cs | 2 +- .../PdfExport/TextShaping/PdfTextShaper.cs | 37 +++- 17 files changed, 992 insertions(+), 79 deletions(-) create mode 100644 src/EPPlus.Export.Pdf.Tests/Fonts/EBGaramond-Regular.ttf create mode 100644 src/EPPlus.Export.Pdf.Tests/LigatureDligReproTests.cs create mode 100644 src/EPPlus.Export.Pdf.Tests/PdfTextShaperShapingOptionsTests.cs create mode 100644 src/EPPlus.Fonts.OpenType.Tests/FeatureTagMappingCoverageTests.cs create mode 100644 src/EPPlus.Fonts.OpenType.Tests/TextShaping/Ligatures/LigatureFeatureTagTests.cs create mode 100644 src/EPPlus.Interfaces/Fonts/GposFeature.cs create mode 100644 src/EPPlus.Interfaces/Fonts/GposFeatureTags.cs create mode 100644 src/EPPlus.Interfaces/Fonts/GsubFeature.cs create mode 100644 src/EPPlus.Interfaces/Fonts/GsubFeatureTags.cs diff --git a/src/EPPlus.Export.Pdf.Tests/EPPlus.Export.Pdf.Tests.csproj b/src/EPPlus.Export.Pdf.Tests/EPPlus.Export.Pdf.Tests.csproj index ab727dd81a..fe5001f3a0 100644 --- a/src/EPPlus.Export.Pdf.Tests/EPPlus.Export.Pdf.Tests.csproj +++ b/src/EPPlus.Export.Pdf.Tests/EPPlus.Export.Pdf.Tests.csproj @@ -28,6 +28,9 @@ + + PreserveNewest + PreserveNewest diff --git a/src/EPPlus.Export.Pdf.Tests/Fonts/EBGaramond-Regular.ttf b/src/EPPlus.Export.Pdf.Tests/Fonts/EBGaramond-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fd54ab43fd05b8fead4df4abb31ee3f246e9a58b GIT binary patch literal 558640 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

v^{;e6fsx|-=+v(B?>8~(E6_Sgwt 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

64IUQbC9#-cn-zwPOVPc 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

+ /// Visible before/after repro for the ligature feature-tag fix: EBGaramond's "dlig" feature + /// merges "Th" into a single connected historical ligature glyph - a real, visually obvious + /// effect, unlike "liga" which only covers the common ff/fi/fl set. + /// + /// Does not depend on a system font. EBGaramond-Regular.ttf is a repo test font (see + /// EPPlus.Fonts.OpenType.Tests/Fonts) and is loaded via workbook.ConfigureFonts pointing at + /// this test project's own Fonts folder, so both tests below are deterministic and CI-safe. + /// + /// The two tests are NOT symmetric in how they export, and that is unavoidable given the + /// current public API: + /// + /// - "Off" uses PdfTestBase.SaveAsPdf(sheet, name), since the default GsubFeatures + /// (Liga | Clig) is already what it needs. + /// - "On" needs GsubFeature.Dlig, which cannot be reached through the plain SaveAsPdf + /// overloads at all - ExcelWorksheet.SaveAsPdf always builds its own PdfPageSettings + /// internally (GetPdfSettings.GetPdfSettingsFromPrinterSettings), with no path from + /// ExcelPrinterSettings into GsubFeatures/GposFeatures. "On" therefore uses + /// PdfTestBase's PdfPageSettings-accepting SaveAsPdf overload instead. + /// + [TestClass] + public class LigatureDligReproTests : PdfTestBase + { + private const string ReproFontFamily = "EB Garamond"; + private const float ReproFontSize = 48f; + private const string ReproText = "Th"; + + private static string FontsFolder => Path.Combine(AppContext.BaseDirectory, "Fonts"); + + [TestMethod] + public void Th_EBGaramond48_DligOff_DoesNotLigate() + { + using (var package = OpenPackage("WP3DligRepro_Off.xlsx", true)) + { + var workbook = package.Workbook; + + workbook.ConfigureFonts(cfg => + { + cfg.FontDirectories.Add(FontsFolder); + cfg.SearchSystemDirectories = false; + }); + + var sheet = BuildReproSheet(workbook); + + // Default GsubFeatures is Liga | Clig - "dlig" is not requested, so this is the + // "before" state: "Th" renders as two separate glyphs. + SaveAsPdf(sheet, "WP3DligRepro_Off"); + + SaveWorkbook("WP3DligRepro_Off.xlsx", package); + } + } + + [TestMethod] + public void Th_EBGaramond48_DligOn_MergesIntoLigature() + { + using (var engine = new OpenTypeFontEngine(cfg => + { + cfg.FontDirectories.Add(FontsFolder); + cfg.SearchSystemDirectories = false; + })) + using (var package = OpenPackage("WP3DligRepro_On.xlsx", true)) + { + var sheet = BuildReproSheet(package.Workbook); + + // GsubFeature.Dlig cannot be requested through the plain SaveAsPdf overloads - + // see PdfTestBase's PdfPageSettings-accepting overload for why. + var settings = new PdfPageSettings(engine) + { + GsubFeatures = GsubFeature.Liga | GsubFeature.Clig | GsubFeature.Dlig + }; + + SaveAsPdf(sheet, "WP3DligRepro_On", settings); + + SaveWorkbook("WP3DligRepro_On.xlsx", package); + } + } + + /// + /// Open WP3DligRepro_Off.pdf and WP3DligRepro_On.pdf side by side (both under + /// _pdfPath, i.e. c:\epplusTest\Testoutput\PDF\). In "Off", "Th" renders as a plain T + /// followed by a plain h. In "On" it renders as a single connected T-h glyph with a + /// joining stroke - visibly narrower than the two separate letters. Before the fix, both + /// files rendered identically, since "dlig" never reached the shaper regardless of what + /// GsubFeatures was set to. + /// + private static ExcelWorksheet BuildReproSheet(ExcelWorkbook workbook) + { + var sheet = workbook.Worksheets.Add("Dlig"); + + sheet.Cells["A1"].Value = ReproText; + sheet.Cells["A1"].Style.Font.Name = ReproFontFamily; + sheet.Cells["A1"].Style.Font.Size = ReproFontSize; + sheet.Cells["A1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left; + sheet.Cells["A1"].Style.Indent = 0; + + sheet.Column(1).Width = 25; + sheet.Row(1).CustomHeight = true; + sheet.Row(1).Height = 70; + + return sheet; + } + } +} \ No newline at end of file diff --git a/src/EPPlus.Export.Pdf.Tests/PdfTestBase.cs b/src/EPPlus.Export.Pdf.Tests/PdfTestBase.cs index 5682e42e1f..ee3cd93380 100644 --- a/src/EPPlus.Export.Pdf.Tests/PdfTestBase.cs +++ b/src/EPPlus.Export.Pdf.Tests/PdfTestBase.cs @@ -1,10 +1,7 @@ -using EPPlusTest; +using EPPlus.Export.Pdf.Settings; +using EPPlusTest; using OfficeOpenXml; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using OfficeOpenXml.Export.PdfExport; namespace EPPlus.Export.Pdf.Tests { @@ -14,7 +11,7 @@ public abstract class PdfTestBase : TestBase protected void SaveAsPdf(ExcelWorksheet sheet, string pdfFileName) { - if(!pdfFileName.ToLower().EndsWith(".pdf")) + if (!pdfFileName.ToLower().EndsWith(".pdf")) { pdfFileName += ".pdf"; } @@ -44,5 +41,54 @@ protected void SaveAsPdf(ExcelWorkbook wb, string pdfFileName, params ExcelRange else ranges[0].SaveAsPdf(path); } + + /// + /// Exports with a caller-supplied PdfPageSettings instead of one built from the + /// worksheet's printer settings. Needed for anything ExcelWorksheet.SaveAsPdf has no way + /// to express - e.g. GsubFeatures/GposFeatures, or a custom font engine/directory - + /// since that extension method always builds its own PdfPageSettings internally + /// (GetPdfSettings.GetPdfSettingsFromPrinterSettings) with no way to override it. + /// Drives PdfCatalog directly: the same internal entry point SaveAsPdf itself calls into. + /// + protected void SaveAsPdf(ExcelWorksheet sheet, string pdfFileName, PdfPageSettings settings) + { + if (!pdfFileName.ToLower().EndsWith(".pdf")) + { + pdfFileName += ".pdf"; + } + var path = Path.Combine(_pdfPath, pdfFileName); + new PdfCatalog(settings, sheet).Save(path); + } + + /// + /// Workbook-level counterpart to . + /// See that overload's remarks for why this bypasses ExcelWorkbook.SaveAsPdf. + /// + protected void SaveAsPdf(ExcelWorkbook wb, string pdfFileName, PdfPageSettings settings) + { + if (!pdfFileName.ToLower().EndsWith(".pdf")) + { + pdfFileName += ".pdf"; + } + var path = Path.Combine(_pdfPath, pdfFileName); + new PdfCatalog(settings, wb).Save(path); + } + + /// + /// Range-collection counterpart to . + /// See that overload's remarks for why this bypasses ExcelRangeBase/ExcelWorkbook.SaveAsPdf. + /// + protected void SaveAsPdf(ExcelWorkbook wb, string pdfFileName, PdfPageSettings settings, params ExcelRangeBase[] ranges) + { + if (!pdfFileName.ToLower().EndsWith(".pdf")) + { + pdfFileName += ".pdf"; + } + var path = Path.Combine(_pdfPath, pdfFileName); + if (ranges.Count() > 1) + new PdfCatalog(settings, ranges).Save(path); + else + new PdfCatalog(settings, ranges[0]).Save(path); + } } -} +} \ No newline at end of file diff --git a/src/EPPlus.Export.Pdf.Tests/PdfTextShaperShapingOptionsTests.cs b/src/EPPlus.Export.Pdf.Tests/PdfTextShaperShapingOptionsTests.cs new file mode 100644 index 0000000000..dc7603fb24 --- /dev/null +++ b/src/EPPlus.Export.Pdf.Tests/PdfTextShaperShapingOptionsTests.cs @@ -0,0 +1,100 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB GsubFeature/GposFeature plumbing + *************************************************************************************************/ +using EPPlus.Export.Pdf.Settings; +using EPPlus.Fonts.OpenType; +using OfficeOpenXml.Export.PdfExport.TextShaping; +using OfficeOpenXml.Interfaces.Fonts; +using System.Linq; + +namespace EPPlus.Export.Pdf.Tests +{ + /// + /// Covers PdfTextShaper.BuildShapingOptions, in particular GsubFeature.None/GposFeature.None. + /// + /// TextShaper.ApplyPositioning treats an empty or null GposFeatures list as "apply every GPOS + /// feature" for kerning and mark positioning - so naively mapping GposFeature.None to an + /// empty tag list and assigning it to ShapingOptions.GposFeatures would turn kerning and mark + /// positioning ON, the opposite of what None means. BuildShapingOptions instead turns + /// ApplyPositioning/ApplySubstitutions off outright when None is requested, which is + /// unambiguous regardless of how an empty tag list is interpreted further down. + /// + [TestClass] + public class PdfTextShaperShapingOptionsTests + { + public TestContext? TestContext { get; set; } + + private static PdfPageSettings CreateSettings() + { + // BuildShapingOptions never touches pageSettings.FontEngine, but the engine is kept + // alive (not disposed) regardless, so this helper stays valid if that ever changes. + var engine = new OpenTypeFontEngine(); + return new PdfPageSettings(engine); + } + + [TestMethod] + public void BuildShapingOptions_Default_AppliesBothAndUsesDefaultTags() + { + var settings = CreateSettings(); + // Defaults per PdfPageSettings: GsubFeatures = Liga|Clig, GposFeatures = Kern|Mark. + + var options = PdfTextShaper.BuildShapingOptions(settings); + + Assert.IsTrue(options.ApplySubstitutions); + Assert.IsTrue(options.ApplyPositioning); + CollectionAssert.AreEquivalent(new[] { "liga", "clig" }, options.GsubFeatures.ToList()); + CollectionAssert.AreEquivalent(new[] { "kern", "mark" }, options.GposFeatures.ToList()); + } + + [TestMethod] + public void BuildShapingOptions_GsubNone_TurnsOffSubstitutionsEntirely() + { + var settings = CreateSettings(); + settings.GsubFeatures = GsubFeature.None; + + var options = PdfTextShaper.BuildShapingOptions(settings); + + Assert.IsFalse( + options.ApplySubstitutions, + "GsubFeature.None must disable substitutions outright, not rely on an empty tag " + + "list being interpreted as \"apply nothing\" somewhere downstream"); + } + + [TestMethod] + public void BuildShapingOptions_GposNone_TurnsOffPositioningEntirely() + { + var settings = CreateSettings(); + settings.GposFeatures = GposFeature.None; + + var options = PdfTextShaper.BuildShapingOptions(settings); + + Assert.IsFalse( + options.ApplyPositioning, + "GposFeature.None must disable positioning outright. TextShaper.ApplyPositioning " + + "treats an empty/null GposFeatures list as \"apply every feature\" for kerning " + + "and mark, so leaving ApplyPositioning on with an empty list here would turn " + + "kerning and mark ON instead of off."); + } + + [TestMethod] + public void BuildShapingOptions_GsubDligOnly_MapsToSingleTag() + { + var settings = CreateSettings(); + settings.GsubFeatures = GsubFeature.Dlig; + + var options = PdfTextShaper.BuildShapingOptions(settings); + + Assert.IsTrue(options.ApplySubstitutions); + CollectionAssert.AreEquivalent(new[] { "dlig" }, options.GsubFeatures.ToList()); + } + } +} \ No newline at end of file diff --git a/src/EPPlus.Export.Pdf/Settings/PdfPageSettings.cs b/src/EPPlus.Export.Pdf/Settings/PdfPageSettings.cs index 76287e5a12..158b29dc61 100644 --- a/src/EPPlus.Export.Pdf/Settings/PdfPageSettings.cs +++ b/src/EPPlus.Export.Pdf/Settings/PdfPageSettings.cs @@ -13,6 +13,7 @@ Date Author Change using EPPlus.Export.Pdf.Settings.PdfPageSizes; using EPPlus.Fonts.OpenType; using OfficeOpenXml; +using OfficeOpenXml.Interfaces.Fonts; using System.Collections.Generic; using System.Linq; @@ -196,6 +197,32 @@ public PdfScaling Scaling } } + /// + /// GSUB (glyph substitution) features to request when shaping text for this export, e.g. + /// ligatures. Defaults to | , + /// matching the shaping engine's own default. + /// + /// + /// This setting applies to the whole export - there is currently no per-cell or + /// per-range override. Whether a requested feature has any visible effect still depends + /// on the font actually defining it; see for what each flag + /// means and which fonts typically support it. + /// + public GsubFeature GsubFeatures { get; set; } = GsubFeature.Liga | GsubFeature.Clig; + + /// + /// GPOS (glyph positioning) features to request when shaping text for this export, e.g. + /// kerning and mark attachment. Defaults to | , + /// matching the shaping engine's own default. + /// + /// + /// This setting applies to the whole export - there is currently no per-cell or + /// per-range override. Whether a requested feature has any visible effect still depends + /// on the font actually defining it; see for what each flag + /// means. + /// + public GposFeature GposFeatures { get; set; } = GposFeature.Kern | GposFeature.Mark; + internal PdfContentBounds ContentBounds = new PdfContentBounds(PdfMargins.Normal, PdfPageSize.A4); internal string defaultFontName = ""; diff --git a/src/EPPlus.Fonts.OpenType.Tests/FeatureTagMappingCoverageTests.cs b/src/EPPlus.Fonts.OpenType.Tests/FeatureTagMappingCoverageTests.cs new file mode 100644 index 0000000000..f0b77aaa8d --- /dev/null +++ b/src/EPPlus.Fonts.OpenType.Tests/FeatureTagMappingCoverageTests.cs @@ -0,0 +1,97 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB Feature-tag mapping coverage + *************************************************************************************************/ +using OfficeOpenXml.Interfaces.Fonts; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace EPPlus.Fonts.OpenType.Tests +{ + /// + /// GsubFeatureTags.ToTagList and GposFeatureTags.ToTagList use an explicit if-chain rather + /// than reflecting over the enum, specifically so a future named combination value (e.g. an + /// "All = Kern | Mark" convenience member) cannot silently slip an extra tag into the list - + /// see the discussion in Åtgärdsplan about GposFeature.All matching via bitwise AND. + /// + /// The trade-off is that the if-chain has to be updated by hand whenever a new single-bit + /// flag is added to either enum. These tests are the safety net for that: they walk every + /// enum member via reflection and require each single-bit flag to produce exactly one, and a + /// DIFFERENT, tag. Forgetting to add a branch in ToTagList turns into a failing test here, + /// rather than a silently dropped feature. + /// + [TestClass] + public class FeatureTagMappingCoverageTests + { + public TestContext? TestContext { get; set; } + + [TestMethod] + public void GsubFeatureTags_CoversEverySingleBitFlag() + { + AssertEveryFlagMapsToExactlyOneDistinctTag( + GetSingleBitFlags(), + flag => GsubFeatureTags.ToTagList((GsubFeature)flag)); + } + + [TestMethod] + public void GposFeatureTags_CoversEverySingleBitFlag() + { + AssertEveryFlagMapsToExactlyOneDistinctTag( + GetSingleBitFlags(), + flag => GposFeatureTags.ToTagList((GposFeature)flag)); + } + + /// + /// Returns every defined enum member that is a single-bit flag (excludes None = 0 and any + /// named combination such as a hypothetical "All" whose value has more than one bit set). + /// A named combination is intentionally NOT tested here: its whole point is to be a + /// convenience alias, not a distinct feature with its own tag, so it must not appear in + /// ToTagList's if-chain at all. + /// + private static List GetSingleBitFlags() where TEnum : struct, Enum + { + return Enum.GetValues(typeof(TEnum)) + .Cast() + .Select(v => Convert.ToInt32(v)) + .Where(v => v != 0 && (v & (v - 1)) == 0) // v != 0 and exactly one bit set + .Distinct() + .ToList(); + } + + private static void AssertEveryFlagMapsToExactlyOneDistinctTag( + List singleBitFlags, Func> toTagList) + { + Assert.AreNotEqual( + 0, + singleBitFlags.Count, + "the enum under test must actually have single-bit flags for this test to mean anything"); + + var seenTags = new HashSet(StringComparer.OrdinalIgnoreCase); + + foreach (var flag in singleBitFlags) + { + var tags = toTagList(flag); + + Assert.AreEqual( + 1, + tags.Count, + $"flag value {flag} (0x{flag:X}) must map to exactly one tag. Either it is " + + "missing a branch in ToTagList, or it is unexpectedly mapping to more than one."); + + Assert.IsTrue( + seenTags.Add(tags[0]), + $"tag \"{tags[0]}\" is produced by more than one flag - each single-bit flag " + + "must map to a distinct OpenType feature tag."); + } + } + } +} \ No newline at end of file diff --git a/src/EPPlus.Fonts.OpenType.Tests/TextShaping/Ligatures/LigatureFeatureTagTests.cs b/src/EPPlus.Fonts.OpenType.Tests/TextShaping/Ligatures/LigatureFeatureTagTests.cs new file mode 100644 index 0000000000..da108f1f7f --- /dev/null +++ b/src/EPPlus.Fonts.OpenType.Tests/TextShaping/Ligatures/LigatureFeatureTagTests.cs @@ -0,0 +1,207 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB Ligature feature-tag plumbing (WP3/WP4) + *************************************************************************************************/ +using EPPlus.Fonts.OpenType.Tables.Common.Layout.Coverage; +using EPPlus.Fonts.OpenType.Tables.Common.Layout.Features; +using EPPlus.Fonts.OpenType.Tables.Common.Layout.Lookups; +using EPPlus.Fonts.OpenType.Tables.Gsub; +using EPPlus.Fonts.OpenType.Tables.Gsub.Data.Lookups; +using EPPlus.Fonts.OpenType.TextShaping.Ligatures; +using OfficeOpenXml.Interfaces.Fonts; +using System.Collections.Generic; + +namespace EPPlus.Fonts.OpenType.Tests.TextShaping.Ligatures +{ + /// + /// Covers two previous defects in LigatureProcessor: + /// + /// 1. The feature tag "liga" used to be hardcoded in the constructor, so a ligature tagged + /// "dlig", "clig" or "rlig" was never even loaded, regardless of what + /// ShapingOptions.GsubFeatures asked for. + /// 2. "if (lookup.LookupType != 4) continue" used to skip lookup type 7 (Extension + /// Substitution) entirely. Unlike GPOS, the GSUB loader does NOT unwrap extension + /// lookups - the wrapper survives with LookupType still 7 - so an extension-wrapped + /// ligature was silently dropped. + /// + /// Both tests use a synthetic GsubTable so they do not depend on any specific font file. + /// + [TestClass] + public class LigatureFeatureTagTests : FontTestBase + { + public override TestContext? TestContext { get; set; } + + private const ushort GlyphA = 5; + private const ushort GlyphB = 6; + private const ushort LigatureGlyph = 7; + + /// + /// Previously the constructor only ever looked for the "liga" tag, regardless of what was + /// requested at call time, so a ligature tagged "dlig" was invisible to it no matter what. + /// Now that LigatureProcessor's constructor scans every tag and ApplyLigaturesInPlace + /// takes a featureTags parameter (matching the pattern already used by + /// SingleSubstitutionProcessor.ApplySubstitutions and + /// ChainingContextualProcessor.ApplyContextualSubstitutions), this is a regression test. + /// + [TestMethod] + public void Ligature_TaggedDlig_IsAppliedWhenRequested() + { + var font = TestFolderEngine.LoadFont("BIZUDGothic", FontSubFamily.Regular, ignoreCache: true); + Assert.IsNotNull(font, "BIZUDGothic must be present in the test font folder"); + + font.AddOrReplaceTable(BuildDligOnlyGsubTable()); + + var processor = new LigatureProcessor(font); + + var glyphs = new List + { + new ShapedGlyph { GlyphId = GlyphA }, + new ShapedGlyph { GlyphId = GlyphB } + }; + + processor.ApplyLigaturesInPlace(glyphs, new List { "dlig" }, "latn", null); + + Assert.AreEqual( + 1, + glyphs.Count, + "A+B must be merged into the ligature when \"dlig\" is an active feature tag, " + + "even though the ligature is not tagged \"liga\""); + Assert.AreEqual(LigatureGlyph, glyphs[0].GlyphId); + } + + /// + /// Now a regression test. The "liga" lookup here is Extension Substitution (Type 7) wrapping a + /// LigatureSubstSubTable, which is exactly how EBGaramond and other real fonts in the test + /// suite store some of their ligature data. "if (lookup.LookupType != 4) continue" skips + /// it outright, so the A+B ligature never fires despite "liga" being requested and present. + /// + [TestMethod] + public void Ligature_ExtensionWrapped_IsApplied() + { + var font = TestFolderEngine.LoadFont("BIZUDGothic", FontSubFamily.Regular, ignoreCache: true); + Assert.IsNotNull(font, "BIZUDGothic must be present in the test font folder"); + + font.AddOrReplaceTable(BuildExtensionWrappedLigaGsubTable()); + + var processor = new LigatureProcessor(font); + + var glyphs = new List + { + new ShapedGlyph { GlyphId = GlyphA }, + new ShapedGlyph { GlyphId = GlyphB } + }; + + // Uses the same signature as the "dlig" test above: this defect is independent of + // the feature-tag plumbing fix and is reachable through the "liga" tag alone. + processor.ApplyLigaturesInPlace(glyphs, new List { "liga" }, "latn", null); + + Assert.AreEqual( + 1, + glyphs.Count, + "A+B must be merged even though the \"liga\" lookup is Extension Substitution " + + "(Type 7) wrapping a LigatureSubstSubTable, not a direct Type 4 lookup"); + Assert.AreEqual(LigatureGlyph, glyphs[0].GlyphId); + } + + /// + /// One "dlig" FeatureRecord -> a direct Type 4 LigatureSubstSubTable merging A+B. + /// No "liga" tag anywhere in this table. + /// + private static GsubTable BuildDligOnlyGsubTable() + { + var ligatureSubtable = BuildLigatureSubtable(); + + var lookup = new LookupTable + { + LookupType = 4, + SubTables = new List { ligatureSubtable } + }; + + var featureList = new FeatureListTable + { + FeatureRecords = new List + { + new FeatureRecord + { + FeatureTag = new Tag("dlig"), + FeatureTable = new FeatureTable { LookupListIndices = new ushort[] { 0 } } + } + } + }; + + // No ScriptList: GetActiveIndices falls back to "no filter", so this test exercises + // only the feature-tag defect, not script filtering. + return new GsubTable + { + FeatureList = featureList, + LookupList = new LookupListTable { Lookups = new List { lookup } } + }; + } + + /// + /// One "liga" FeatureRecord -> a Type 7 (Extension) lookup wrapping the same Type 4 + /// LigatureSubstSubTable, mirroring how real fonts store extension-wrapped GSUB data + /// (GSUB keeps the wrapper; unlike GPOS, the loader does not flatten it). + /// + private static GsubTable BuildExtensionWrappedLigaGsubTable() + { + var ligatureSubtable = BuildLigatureSubtable(); + + var extensionWrapper = new ExtensionSubstSubTable + { + ExtensionLookupType = 4, + ExtendedSubTable = ligatureSubtable + }; + + var lookup = new LookupTable + { + LookupType = 7, + SubTables = new List { extensionWrapper } + }; + + var featureList = new FeatureListTable + { + FeatureRecords = new List + { + new FeatureRecord + { + FeatureTag = new Tag("liga"), + FeatureTable = new FeatureTable { LookupListIndices = new ushort[] { 0 } } + } + } + }; + + return new GsubTable + { + FeatureList = featureList, + LookupList = new LookupListTable { Lookups = new List { lookup } } + }; + } + + private static LigatureSubstSubTable BuildLigatureSubtable() + { + return new LigatureSubstSubTable + { + Coverage = new CoverageTableFormat1 { GlyphArray = new ushort[] { GlyphA } }, + LigatureSets = new Dictionary + { + [GlyphA] = new LigatureSetTable + { + Ligatures = new List + { + new LigatureTable { LigatureGlyph = LigatureGlyph, Components = new ushort[] { GlyphB } } + } + } + } + }; + } + } +} \ No newline at end of file diff --git a/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs b/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs index 8da0fee630..095906f069 100644 --- a/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs +++ b/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs @@ -64,7 +64,7 @@ public void Ligatures_ForLatinScript_DoNotPickUpArabicOnlyLigature() new ShapedGlyph { GlyphId = GlyphB } }; - processor.ApplyLigaturesInPlace(glyphs, "latn", null); + processor.ApplyLigaturesInPlace(glyphs, new List { "liga" }, "latn", null); Assert.AreEqual( 2, diff --git a/src/EPPlus.Fonts.OpenType/TextShaping/Ligatures/LigatureProcessor.cs b/src/EPPlus.Fonts.OpenType/TextShaping/Ligatures/LigatureProcessor.cs index cfdccb6c63..43fce78cf6 100644 --- a/src/EPPlus.Fonts.OpenType/TextShaping/Ligatures/LigatureProcessor.cs +++ b/src/EPPlus.Fonts.OpenType/TextShaping/Ligatures/LigatureProcessor.cs @@ -10,6 +10,10 @@ Date Author Change ************************************************************************************************* 01/15/2025 EPPlus Software AB Initial implementation 09/07/2026 EPPlus Software AB Filter by ScriptList/LangSys, not just tag + 09/07/2026 EPPlus Software AB Read feature tags from GsubFeatures instead of + hardcoded "liga"; unwrap extension-wrapped (Type + 7) ligature lookups, which GSUB does not flatten + the way GPOS does *************************************************************************************************/ using EPPlus.Fonts.OpenType.Tables.Common.Layout.Lookups; using EPPlus.Fonts.OpenType.Tables.Common.Layout.Scripts; @@ -36,80 +40,132 @@ public IndexedLookup(int featureIndex, LookupTable lookup) } private readonly OpenTypeFont _font; - private readonly List _ligaLookups; + + // Feature tag ("liga", "dlig", "clig", "rlig", ...) -> every ligature-relevant lookup + // recorded under that tag, across ALL scripts, together with each lookup's original + // FeatureList index so ApplyLigaturesInPlace can filter by script at call time. Built once + // for every tag the font defines, not just "liga" - which tags are actually applied is + // decided per call via the featureTags parameter, driven by ShapingOptions.GsubFeatures. + private readonly Dictionary> _lookupsByFeatureTag; private readonly Dictionary> _activeIndexCache = new Dictionary>(); public LigatureProcessor(OpenTypeFont font) { _font = font; - if (font.GsubTable != null) - { - _ligaLookups = FindLookupsForFeature(font.GsubTable, "liga"); - } - else - { - _ligaLookups = new List(); - } + _lookupsByFeatureTag = font.GsubTable != null + ? BuildLookupsByFeatureTag(font.GsubTable) + : new Dictionary>(); } /// - /// Applies standard ligature substitutions (fi, ff, ffi, ffl, etc.). + /// Applies ligature substitutions for the given feature tags (e.g. "liga", "dlig"). /// Processes glyphs left-to-right, replacing sequences with ligature glyphs. /// - internal List ApplyLigatures(List glyphs, string script, string language) + internal List ApplyLigatures( + List glyphs, List featureTags, string script, string language) { - var gsub = _font.GsubTable; - if (gsub == null) + if (_font.GsubTable == null) return glyphs; - if (_ligaLookups.Count == 0) - return glyphs; - - ApplyLigaturesInPlace(glyphs, script, language); + ApplyLigaturesInPlace(glyphs, featureTags, script, language); return glyphs; } - internal void ApplyLigaturesInPlace(List glyphs, string script, string language) + /// + /// Applies ligature substitutions for the given feature tags directly onto . + /// + /// + /// Feature tags to apply, e.g. ["liga", "clig"]. Only tags the font actually defines a + /// ligature lookup for have any effect - a tag with no matching lookup is silently + /// skipped, the same way an unmatched glyph sequence is. + /// + /// + /// OpenType script tag (e.g. "latn"). Pass null to fall back to unfiltered lookup, which + /// reproduces the previous behavior for callers that have no script to give. + /// + /// OpenType language-system tag, or null for the script's default. + internal void ApplyLigaturesInPlace( + List glyphs, List featureTags, string script, string language) { - if (_ligaLookups.Count == 0) return; + if (featureTags == null || featureTags.Count == 0) return; + if (_lookupsByFeatureTag.Count == 0) return; HashSet activeIndices = GetActiveIndices(script, language); - foreach (var entry in _ligaLookups) + foreach (var tag in featureTags) { - // null activeIndices means "no ScriptList to filter by" - keep every entry, - // matching the previous behavior rather than discarding ligatures we cannot resolve. - if (activeIndices != null && !activeIndices.Contains(entry.FeatureIndex)) + if (!_lookupsByFeatureTag.TryGetValue(tag, out var entries)) { continue; } - var lookup = entry.Lookup; - if (lookup.LookupType != 4) continue; + foreach (var entry in entries) + { + // null activeIndices means "no ScriptList to filter by" - keep every entry, + // matching the previous behavior rather than discarding ligatures we cannot + // resolve. + if (activeIndices != null && !activeIndices.Contains(entry.FeatureIndex)) + { + continue; + } + + ApplyLookup(glyphs, entry.Lookup); + } + } + } - int i = 0; - while (i < glyphs.Count) + private void ApplyLookup(List glyphs, LookupTable lookup) + { + int i = 0; + while (i < glyphs.Count) + { + bool substituted = false; + + foreach (var subtableObj in lookup.SubTables) { - bool substituted = false; + var subtable = UnwrapLigatureSubtable(subtableObj); + if (subtable == null) continue; - foreach (var subtableObj in lookup.SubTables) + if (TryApplyLigatureInPlace(glyphs, i, subtable, out int consumed)) { - if (subtableObj is not LigatureSubstSubTable subtable) continue; - - if (TryApplyLigatureInPlace(glyphs, i, subtable, out int consumed)) - { - substituted = true; - i += consumed; // Usually 1 after a substitution - break; // First match wins - break out - } + substituted = true; + i += consumed; // Usually 1 after a substitution + break; // First match wins - break out } - - if (!substituted) i++; } + + if (!substituted) i++; } } + /// + /// Returns the LigatureSubstSubTable a GSUB subtable represents, unwrapping Extension + /// Substitution (Type 7) if needed. Unlike GPOS, whose loader flattens extension-wrapped + /// lookups so LookupType 9 never actually appears on a loaded lookup, GSUB keeps the + /// wrapper: an extension-wrapped ligature lookup has LookupType 7 with + /// ExtensionSubstSubTable entries in SubTables, each pointing at the real subtable via + /// ExtendedSubTable. Returns null for anything that is not, directly or via unwrapping, a + /// LigatureSubstSubTable. + /// + private static LigatureSubstSubTable UnwrapLigatureSubtable(Tables.FontTableElement subtableObj) + { + if (subtableObj is LigatureSubstSubTable direct) + { + return direct; + } + + if (subtableObj is ExtensionSubstSubTable extension + && extension.ExtensionLookupType == 4 + && extension.ExtendedSubTable is LigatureSubstSubTable wrapped) + { + return wrapped; + } + + return null; + } + private HashSet GetActiveIndices(string script, string language) { string cacheKey = (script ?? string.Empty) + "|" + (language ?? string.Empty); @@ -176,45 +232,60 @@ private bool TryApplyLigatureInPlace( return false; } - /// - /// Finds all lookups associated with a feature tag, together with each one's original - /// FeatureList index, across all scripts. Two FeatureRecords can legitimately share a - /// tag (one per script); both are kept so ApplyLigaturesInPlace can filter by script at - /// call time instead of the constructor baking in whichever script happened to be active - /// when this processor was built. + /// Builds a map from feature tag to every ligature-relevant lookup recorded under that + /// tag (LookupType 4, or 7 wrapping 4), together with each lookup's original FeatureList + /// index. Scans every FeatureRecord in the font, not just "liga" - which tags matter is + /// decided later, per call, by ApplyLigaturesInPlace's featureTags parameter. Two + /// FeatureRecords can legitimately share a tag (one per script); both are kept so the + /// script filter in ApplyLigaturesInPlace has something to choose between. /// - private List FindLookupsForFeature(GsubTable gsub, string featureTag) + private static Dictionary> BuildLookupsByFeatureTag(GsubTable gsub) { - var lookups = new List(); + var map = new Dictionary>(); - if (gsub?.FeatureList?.FeatureRecords == null) - return lookups; + if (gsub?.FeatureList?.FeatureRecords == null || gsub.LookupList == null) + return map; var featureRecords = gsub.FeatureList.FeatureRecords; for (int featureIndex = 0; featureIndex < featureRecords.Count; featureIndex++) { var featureRecord = featureRecords[featureIndex]; + string tag = featureRecord.FeatureTag.Value; + var feature = featureRecord.FeatureTable; - if (featureRecord.FeatureTag.Value != featureTag) + if (feature?.LookupListIndices == null) continue; - var feature = featureRecord.FeatureTable; - foreach (var lookupIndex in feature.LookupListIndices) { - if (lookupIndex < gsub.LookupList.Lookups.Count) + if (lookupIndex >= gsub.LookupList.Lookups.Count) + continue; + + var lookup = gsub.LookupList.Lookups[lookupIndex]; + + // Only lookups that are, or wrap, a ligature substitution are relevant here. + // A tag can legitimately also reference non-ligature lookup types (e.g. a + // "liga" record could in principle sit next to unrelated data); those are + // simply not collected, exactly like today's UnwrapLigatureSubtable check on + // the individual subtables would have discarded them anyway. + if (lookup.LookupType != 4 && lookup.LookupType != 7) + continue; + + if (!map.TryGetValue(tag, out var list)) { - lookups.Add(new IndexedLookup(featureIndex, gsub.LookupList.Lookups[lookupIndex])); + list = new List(); + map[tag] = list; } + + list.Add(new IndexedLookup(featureIndex, lookup)); } } - return lookups; + return map; } - /// /// Creates a new shaped glyph for a ligature, combining metrics from components. /// diff --git a/src/EPPlus.Fonts.OpenType/TextShaping/TextShaper.cs b/src/EPPlus.Fonts.OpenType/TextShaping/TextShaper.cs index fb712758f5..338b9e9659 100644 --- a/src/EPPlus.Fonts.OpenType/TextShaping/TextShaper.cs +++ b/src/EPPlus.Fonts.OpenType/TextShaping/TextShaper.cs @@ -460,16 +460,21 @@ private List ApplyGsubSubstitutionsInternal(List glyph glyphs = _singleSubstitutionProcessor.ApplySubstitutions(glyphs, options.GsubFeatures, options.Script, options.Language); } - // Phase 2: Chaining Contextual Substitution (Type 6) - if (options.GsubFeatures != null && options.GsubFeatures.Contains("liga")) + // Phase 2: Chaining Contextual Substitution (Type 6) - once per active feature tag, + // not just "liga". A font can define calt/clig/rlig contextual rules too. + if (options.GsubFeatures != null) { - glyphs = _chainingContextualProcessor.ApplyContextualSubstitutions(glyphs, "liga", options.Script, options.Language); + foreach (var tag in options.GsubFeatures) + { + glyphs = _chainingContextualProcessor.ApplyContextualSubstitutions(glyphs, tag, options.Script, options.Language); + } } - // Phase 3: Simple Ligatures (Type 4) - if (options.GsubFeatures != null && options.GsubFeatures.Contains("liga")) + // Phase 3: Ligatures (Type 4, including Type 7 extension-wrapped) - across every + // active feature tag (liga, dlig, clig, ...), not just "liga". + if (options.GsubFeatures != null && options.GsubFeatures.Count > 0) { - _ligatureProcessor.ApplyLigaturesInPlace(glyphs, options.Script, options.Language); + _ligatureProcessor.ApplyLigaturesInPlace(glyphs, options.GsubFeatures, options.Script, options.Language); } return glyphs; @@ -503,7 +508,10 @@ private void ApplyPositioning(List glyphs, ShapingOptions options) } // Phase 3: Mark-to-Base positioning (GPOS Type 4) - primary font only - _markToBaseProvider.ApplyMarkPositioning(glyphs, options.Script, options.Language); + if (applyAllFeatures || (options.GposFeatures != null && options.GposFeatures.Contains("mark"))) + { + _markToBaseProvider.ApplyMarkPositioning(glyphs, options.Script, options.Language); + } } /// diff --git a/src/EPPlus.Interfaces/Fonts/GposFeature.cs b/src/EPPlus.Interfaces/Fonts/GposFeature.cs new file mode 100644 index 0000000000..b2175a67eb --- /dev/null +++ b/src/EPPlus.Interfaces/Fonts/GposFeature.cs @@ -0,0 +1,52 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB Public feature selection for GPOS shaping + *************************************************************************************************/ +using System; + +namespace OfficeOpenXml.Interfaces.Fonts +{ + /// + /// GPOS (glyph positioning) features that can be requested when shaping text. + /// Combine flags to request more than one feature, e.g. + /// GposFeature.Kern | GposFeature.Mark. + /// + /// + /// Each flag corresponds to a 4-character OpenType feature tag that a font's GPOS table may + /// define. A flag being set only means the feature is requested - whether it has any effect + /// still depends on the specific font actually defining that feature, and for which glyphs + /// and scripts. + /// + [Flags] + public enum GposFeature + { + /// + /// No GPOS positioning is requested. Glyphs are placed using only their default + /// advance widths, with no pair kerning or mark attachment applied. + /// + None = 0, + + /// + /// Pair kerning ("kern"). Adjusts the spacing between specific pairs of glyphs (e.g. "AV", + /// "To") so they sit visually closer or further apart than their default advance widths + /// alone would produce. + /// + Kern = 1 << 0, + + /// + /// Mark-to-base attachment ("mark"). Positions combining marks (accents, diacritics) + /// relative to the base glyph they attach to, rather than at the base glyph's default + /// advance position. Needed for decomposed sequences such as a base letter followed by a + /// combining accent (e.g. "A" + U+0301) to render correctly. + /// + Mark = 1 << 1 + } +} \ No newline at end of file diff --git a/src/EPPlus.Interfaces/Fonts/GposFeatureTags.cs b/src/EPPlus.Interfaces/Fonts/GposFeatureTags.cs new file mode 100644 index 0000000000..0e9dfe9dc2 --- /dev/null +++ b/src/EPPlus.Interfaces/Fonts/GposFeatureTags.cs @@ -0,0 +1,46 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB Public feature selection for GPOS shaping + *************************************************************************************************/ +using System.Collections.Generic; + +namespace OfficeOpenXml.Interfaces.Fonts +{ + /// + /// Converts flag combinations to the OpenType feature tags + /// expects. + /// + public static class GposFeatureTags + { + /// + /// Converts the given flags to a list of OpenType feature tags. + /// + /// + /// currently produces an EMPTY list, not a list that + /// actively blocks every feature. treats a null + /// or empty list as "apply every feature the font defines" (see + /// TextShaper.ApplyPositioning's applyAllFeatures check), so passing the + /// result of ToTagList(GposFeature.None) straight into + /// ShapingOptions.GposFeatures does not suppress kerning/mark positioning - it does + /// the opposite. Callers that need to guarantee no GPOS positioning runs should set + /// ShapingOptions.ApplyPositioning = false instead. + /// + public static List ToTagList(GposFeature features) + { + var tags = new List(); + + if ((features & GposFeature.Kern) != 0) tags.Add("kern"); + if ((features & GposFeature.Mark) != 0) tags.Add("mark"); + + return tags; + } + } +} \ No newline at end of file diff --git a/src/EPPlus.Interfaces/Fonts/GsubFeature.cs b/src/EPPlus.Interfaces/Fonts/GsubFeature.cs new file mode 100644 index 0000000000..5e58a1f10a --- /dev/null +++ b/src/EPPlus.Interfaces/Fonts/GsubFeature.cs @@ -0,0 +1,59 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB Public feature selection for GSUB shaping + *************************************************************************************************/ +using System; + +namespace OfficeOpenXml.Interfaces.Fonts +{ + /// + /// GSUB (glyph substitution) features that can be requested when shaping text. + /// Combine flags to request more than one feature, e.g. + /// GsubFeature.Liga | GsubFeature.Clig. + /// + /// + /// Each flag corresponds to a 4-character OpenType feature tag that a font's GSUB table may + /// define. A flag being set only means the feature is requested - whether it has any effect + /// still depends on the specific font actually defining that feature, and for which glyphs. + /// Fonts commonly use "liga" for a small set of default ligatures (fi, fl, ff, ...) and + /// reserve "dlig"/"clig" for optional or context-dependent ones (e.g. historical ligatures + /// like "Th" or "ct"), so requesting only will not render those. + /// + [Flags] + public enum GsubFeature + { + /// + /// No GSUB substitution is requested. Text is shaped as a plain, unsubstituted sequence + /// of glyphs mapped directly from characters. + /// + None = 0, + + /// + /// Standard ligatures ("liga"). Common, typographically expected ligatures that a font + /// applies by default - typically a small fixed set such as fi, fl, ff, ffi and ffl. + /// + Liga = 1 << 0, + + /// + /// Contextual ligatures ("clig"). Ligatures a font applies only in specific contexts, + /// as opposed to unconditionally whenever the glyphs appear together. + /// + Clig = 1 << 1, + + /// + /// Discretionary ligatures ("dlig"). Optional, often decorative ligatures a font offers + /// but does not apply by default - for example historical forms like "Th" or "ct". Off + /// unless explicitly requested, since they are a stylistic choice rather than a + /// correctness requirement. + /// + Dlig = 1 << 2 + } +} \ No newline at end of file diff --git a/src/EPPlus.Interfaces/Fonts/GsubFeatureTags.cs b/src/EPPlus.Interfaces/Fonts/GsubFeatureTags.cs new file mode 100644 index 0000000000..c21ddc83d6 --- /dev/null +++ b/src/EPPlus.Interfaces/Fonts/GsubFeatureTags.cs @@ -0,0 +1,46 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB Public feature selection for GSUB shaping + *************************************************************************************************/ +using System.Collections.Generic; + +namespace OfficeOpenXml.Interfaces.Fonts +{ + /// + /// Converts flag combinations to the OpenType feature tags + /// expects. + /// + public static class GsubFeatureTags + { + /// + /// Converts the given flags to a list of OpenType feature tags. + /// + /// + /// currently produces an EMPTY list, not a list that + /// actively blocks every feature. treats a null + /// or empty list as "apply every feature the font defines" (see its own XML doc), so + /// passing the result of ToTagList(GsubFeature.None) straight into + /// ShapingOptions.GsubFeatures does not suppress ligatures - it does the opposite. + /// Callers that need to guarantee no GSUB substitutions run should set + /// ShapingOptions.ApplySubstitutions = false instead. + /// + public static List ToTagList(GsubFeature features) + { + var tags = new List(); + + if ((features & GsubFeature.Liga) != 0) tags.Add("liga"); + if ((features & GsubFeature.Clig) != 0) tags.Add("clig"); + if ((features & GsubFeature.Dlig) != 0) tags.Add("dlig"); + + return tags; + } + } +} \ No newline at end of file diff --git a/src/EPPlus.Interfaces/Fonts/ShapingOptions.cs b/src/EPPlus.Interfaces/Fonts/ShapingOptions.cs index a62ca99d72..f02a24dedf 100644 --- a/src/EPPlus.Interfaces/Fonts/ShapingOptions.cs +++ b/src/EPPlus.Interfaces/Fonts/ShapingOptions.cs @@ -65,7 +65,7 @@ public static ShapingOptions Default ApplySubstitutions = true, GsubFeatures = new List { "liga", "clig" }, ApplyPositioning = true, - GposFeatures = new List { "kern" }, + GposFeatures = new List { "kern", "mark" }, Script = "latn", Language = null }; diff --git a/src/EPPlus/Export/PdfExport/TextShaping/PdfTextShaper.cs b/src/EPPlus/Export/PdfExport/TextShaping/PdfTextShaper.cs index 2f71206f73..c16225479f 100644 --- a/src/EPPlus/Export/PdfExport/TextShaping/PdfTextShaper.cs +++ b/src/EPPlus/Export/PdfExport/TextShaping/PdfTextShaper.cs @@ -64,9 +64,7 @@ public static void ShapeText(PdfPageSettings pageSettings, PdfDictionaries dicti layoutEngine = new TextLayoutEngine(shaper); layoutEngineCache[st.FontProvider] = layoutEngine; } - var options = ShapingOptions.Default; - options.ApplyPositioning = true; - options.ApplySubstitutions = true; + var options = BuildShapingOptions(pageSettings); var shaped = shaper.Shape(tf.Text, options); var usedFonts = shaper.GetUsedFonts().ToList(); var fontIdMap = new Dictionary(); @@ -136,9 +134,7 @@ public static void ShapeText(PdfPageSettings pageSettings, PdfDictionaries dicti layoutEngine = new TextLayoutEngine(shaper); layoutEngineCache[st.FontProvider] = layoutEngine; } - var options = ShapingOptions.Default; - options.ApplyPositioning = true; - options.ApplySubstitutions = true; + var options = BuildShapingOptions(pageSettings); var shaped = shaper.Shape(tf.Text, options); var usedFonts = shaper.GetUsedFonts().ToList(); var fontIdMap = new Dictionary(); @@ -179,5 +175,34 @@ public static void ShapeText(PdfPageSettings pageSettings, PdfDictionaries dicti } cell.TotalTextLength = totalTextLength; } + + /// + /// Builds the ShapingOptions used for one text fragment, from the caller's requested + /// GsubFeature/GposFeature flags. + /// + /// + /// GsubFeature.None / GposFeature.None need special handling here rather than a plain + /// pass-through of ToTagList's empty list. TextShaper.ApplyPositioning treats an empty or + /// null GposFeatures list as "apply every GPOS feature" for kerning and mark positioning + /// (though NOT for single adjustment, which treats it as "apply nothing" - the two + /// disagree on empty/null already, independently of this method). That documented + /// contract has other, unrelated callers (measurement, rich text default, benchmarks) and + /// is not changed here. Instead, None is handled at the source: when the caller asks for + /// no GPOS/GSUB features at all, ApplyPositioning/ApplySubstitutions are turned off + /// outright, which is unambiguous regardless of what an empty tag list would otherwise be + /// interpreted as further down. + /// + internal static ShapingOptions BuildShapingOptions(PdfPageSettings pageSettings) + { + var options = ShapingOptions.Default; + + options.GsubFeatures = GsubFeatureTags.ToTagList(pageSettings.GsubFeatures); + options.GposFeatures = GposFeatureTags.ToTagList(pageSettings.GposFeatures); + + options.ApplySubstitutions = pageSettings.GsubFeatures != GsubFeature.None; + options.ApplyPositioning = pageSettings.GposFeatures != GposFeature.None; + + return options; + } } } \ No newline at end of file From c1269e9ddf7eb82c0c004a97e73c9de2fdf4515d Mon Sep 17 00:00:00 2001 From: swmal <897655+swmal@users.noreply.github.com> Date: Wed, 9 Sep 2026 09:38:35 +0200 Subject: [PATCH 2/3] Added unit test --- .../KerningReproTests.cs | 2 +- .../MeasurementRenderWidthParityTests.cs | 253 ++++++++++++++++++ 2 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 src/EPPlus.Export.Pdf.Tests/MeasurementRenderWidthParityTests.cs diff --git a/src/EPPlus.Export.Pdf.Tests/KerningReproTests.cs b/src/EPPlus.Export.Pdf.Tests/KerningReproTests.cs index 8362375eda..a3d9447e88 100644 --- a/src/EPPlus.Export.Pdf.Tests/KerningReproTests.cs +++ b/src/EPPlus.Export.Pdf.Tests/KerningReproTests.cs @@ -18,7 +18,7 @@ Date Author Change using System.IO; using System.Text; -namespace EPPlusTest.PDF +namespace EPPlus.Export.Pdf.Tests { /// /// Reproduces the reference sheet the kerning and mark-to-base work is measured against. diff --git a/src/EPPlus.Export.Pdf.Tests/MeasurementRenderWidthParityTests.cs b/src/EPPlus.Export.Pdf.Tests/MeasurementRenderWidthParityTests.cs new file mode 100644 index 0000000000..38c1215cc3 --- /dev/null +++ b/src/EPPlus.Export.Pdf.Tests/MeasurementRenderWidthParityTests.cs @@ -0,0 +1,253 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB Measurement/render width parity (WP1) + *************************************************************************************************/ +using EPPlus.Export.Pdf.Settings; +using EPPlus.Export.Pdf.Tests; +using EPPlus.Fonts.OpenType; +using OfficeOpenXml; +using OfficeOpenXml.Export.PdfExport; +using OfficeOpenXml.Packaging.Ionic.Zlib; +using OfficeOpenXml.Style; +using System; +using System.Globalization; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; + +namespace EPPlusTest.PDF +{ + /// + /// WP1's last, previously unverified acceptance criterion: the measurement path + /// (PdfCatalog.GetCellCollectionFromRange, which shapes against the FULL font and skips + /// BuildSubsets) and the render path (PdfCatalog.Save, which shapes against the SUBSETTED + /// font) must produce the same width for the same string and font. + /// + /// This matters because autofit and row-height calculations are driven by the measurement + /// path's PdfCell.TotalTextLength, while what actually appears on the page is driven by the + /// render path. If the two ever diverged, a cell could measure as fitting a string, but the + /// rendered glyphs would run wider (or narrower) than that measurement said - text clipped or + /// falsely wrapped, or autofit-shrunk column widths leaving unnecessary blank margin. + /// + /// The test: + /// 1. Gets the MEASURED width via GetCellCollectionFromRange -> PdfCell.TotalTextLength. + /// 2. Renders the same sheet to actual PDF bytes. + /// 3. Independently recomputes the RENDERED width by parsing the content stream's TJ array + /// and looking up each glyph's advance in the embedded (subsetted) font's own hmtx + /// table, loaded via this same library's OpenTypeFontFactory - not via any external + /// tool, and not by trusting the PDF's own /W CID-widths array, since that would only be + /// checking the writer's arithmetic against itself. + /// 4. Asserts the two match within a small tolerance. + /// + /// The tolerance is not slack for a real discrepancy: PdfContentStream writes kerning + /// adjustments through ToPdfStringF0 (rounded to the nearest integer TJ unit), while + /// TotalTextLength is computed from the exact, unrounded kerning value. That integer rounding + /// is the only expected source of difference, and it is at most a few hundredths of a point + /// per kerned pair. + /// + /// Uses "AVATAR Wa To" in Roboto - a repo test font with real kerning and no accents - so the + /// content stream only contains glyph tokens and kerning numbers, with no Ts (mark offset) or + /// mid-string font switches to account for. + /// + [TestClass] + public class MeasurementRenderWidthParityTests : PdfTestBase + { + // Encoding.Latin1 (a 1:1 byte<->char mapping, needed so string indices from Regex + // line up with byte offsets in the original array) is only available from .NET 5+. + // GetEncoding("ISO-8859-1") gives the same mapping on both net481 and net8.0. + private static readonly Encoding Latin1 = Encoding.GetEncoding("ISO-8859-1"); + + private const string ReproFontFamily = "Roboto"; + private const float ReproFontSize = 48f; + private const string ReproText = "AVATAR Wa To"; + + // PdfContentStream.ToPdfStringF0 rounds each kerning TJ number to the nearest integer + // (1/1000 em unit). At 48pt that is at most 0.048pt of rounding error per kerned pair; + // "AVATAR Wa To" has six kerned pairs (A+V, V+A, A+T, T+A, W+a, T+o), so 0.5pt covers the + // worst case with headroom. + private const double ToleranceInPoints = 0.5; + + [TestMethod] + public void MeasuredWidth_MatchesRenderedWidth_ForKernedText() + { + using (var package = OpenPackage("WidthParity.xlsx", true)) + { + var sheet = package.Workbook.Worksheets.Add("Parity"); + sheet.Cells["A1"].Value = ReproText; + sheet.Cells["A1"].Style.Font.Name = ReproFontFamily; + sheet.Cells["A1"].Style.Font.Size = ReproFontSize; + sheet.Cells["A1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left; + sheet.Cells["A1"].Style.Indent = 0; + sheet.Column(1).Width = 60; + sheet.Row(1).CustomHeight = true; + sheet.Row(1).Height = 70; + + var engine = package.Workbook.RenderContext.FontEngine; + var settings = new PdfPageSettings(engine); + var range = sheet.Cells["A1"]; + + double measuredWidth = GetMeasuredWidth(settings, range); + + var pdfBytes = RenderToBytes(settings, sheet); + + // Written out unconditionally (not just on failure) so a parsing mismatch can be + // diagnosed from the actual bytes rather than guessed at from source alone. + File.WriteAllBytes(Path.Combine(_pdfPath, "WidthParity.pdf"), pdfBytes); + + double renderedWidth = GetRenderedWidth(pdfBytes, ReproFontSize); + + Assert.AreNotEqual(0, measuredWidth, "measured width must not be zero - shaping did not run"); + Assert.AreNotEqual(0, renderedWidth, "rendered width must not be zero - TJ parsing found nothing"); + + Assert.AreEqual( + measuredWidth, + renderedWidth, + ToleranceInPoints, + $"measurement path width ({measuredWidth:F3}pt) and render path width " + + $"({renderedWidth:F3}pt) must match within rounding. A real divergence here " + + "means the measurement path (full font) and render path (subsetted font) " + + "are shaping this string differently."); + } + } + + private static double GetMeasuredWidth(PdfPageSettings settings, ExcelRangeBase range) + { + var catalog = new PdfCatalog(); + var cells = catalog.GetCellCollectionFromRange(settings, range); + return cells[range.Start.Row, range.Start.Column].TotalTextLength; + } + + private static byte[] RenderToBytes(PdfPageSettings settings, ExcelWorksheet sheet) + { + using (var stream = new MemoryStream()) + { + new PdfCatalog(settings, sheet).Save(stream); + return stream.ToArray(); + } + } + + private static double GetRenderedWidth(byte[] pdfBytes, float fontSize) + { + string pdfText = Latin1.GetString(pdfBytes); + + byte[] fontBytes = ExtractFirstFontFile2(pdfBytes, pdfText); + Assert.IsNotNull(fontBytes, "no /FontFile2 found in the rendered PDF"); + + var font = OpenTypeFontFactory.CreateFromBytes(fontBytes); + ushort unitsPerEm = font.HeadTable.UnitsPerEm; + + string contentStream = ExtractContentStreamWithTJ(pdfBytes, pdfText); + Assert.IsNotNull(contentStream, "no content stream containing a TJ array was found"); + + var tjMatch = Regex.Match(contentStream, @"\[(?.*?)\]\s*TJ", RegexOptions.Singleline); + Assert.IsTrue(tjMatch.Success, "no [...] TJ array found in the content stream"); + + double widthInFontUnits = 0; + + foreach (Match token in Regex.Matches( + tjMatch.Groups["body"].Value, + @"<(?[0-9A-Fa-f]{4})>|(?-?\d+(\.\d+)?)")) + { + if (token.Groups["glyph"].Success) + { + ushort glyphId = ushort.Parse(token.Groups["glyph"].Value, NumberStyles.HexNumber); + widthInFontUnits += font.HmtxTable.GetAdvanceWidth(glyphId); + } + else if (token.Groups["num"].Success) + { + // TJ numbers are in 1/1000 text space units already, independent of the + // font's own unitsPerEm - convert to the same font-unit space as the glyph + // advances above so both can be summed together before the final scale to + // points. + double tjNumber = double.Parse(token.Groups["num"].Value, CultureInfo.InvariantCulture); + widthInFontUnits -= tjNumber / 1000.0 * unitsPerEm; + } + } + + return widthInFontUnits / unitsPerEm * fontSize; + } + + /// + /// Finds the first "N 0 obj ... stream ... endstream" block that contains "TJ" once + /// inflated, skipping font-file streams. EPPlus's PDF writer never emits object or + /// cross-reference streams, so every stream is either an uncompressed page content + /// stream candidate or a FlateDecode-compressed one - this handles both. + /// + private static string ExtractContentStreamWithTJ(byte[] pdfBytes, string pdfText) + { + foreach (Match m in Regex.Matches(pdfText, @"<<(?.*?)>>\s*stream\r?\n", RegexOptions.Singleline)) + { + if (m.Groups["dict"].Value.Contains("FontFile")) + continue; + + int start = m.Index + m.Length; + int end = pdfText.IndexOf("endstream", start, StringComparison.Ordinal); + if (end < 0) continue; + + byte[] raw = Latin1Slice(pdfBytes, start, end); + byte[] data = m.Groups["dict"].Value.Contains("FlateDecode") ? Inflate(raw) : raw; + + string text = Latin1.GetString(data); + if (text.Contains("TJ")) + return text; + } + + return null; + } + + /// + /// Finds the object referenced by the first /FontFile2 entry and returns its + /// (decompressed) stream bytes - the embedded, SUBSETTED font, which is exactly what the + /// render path actually shaped against and what a PDF viewer would use. + /// + private static byte[] ExtractFirstFontFile2(byte[] pdfBytes, string pdfText) + { + var refMatch = Regex.Match(pdfText, @"/FontFile2\s+(?\d+)\s+0\s+R"); + if (!refMatch.Success) return null; + + string objNum = refMatch.Groups["num"].Value; + + var objMatch = Regex.Match(pdfText, $@"(?<<.*?>>)\s*stream\r?\n", RegexOptions.Singleline); + if (!objMatch.Success) return null; + + int start = objMatch.Index + objMatch.Length; + int end = pdfText.IndexOf("endstream", start, StringComparison.Ordinal); + if (end < 0) return null; + + byte[] raw = Latin1Slice(pdfBytes, start, end); + return objMatch.Groups["dict"].Value.Contains("FlateDecode") ? Inflate(raw) : raw; + } + + /// + /// Slices the ORIGINAL byte array using offsets found via a Latin-1 string view of it. + /// Latin-1 is a 1:1 byte<->char mapping, so string indices returned by Regex against the + /// Latin-1-decoded text correspond exactly to byte offsets in the original array - unlike + /// UTF-8 or any other multi-byte encoding, which would desynchronize the two. + /// + private static byte[] Latin1Slice(byte[] bytes, int start, int end) + { + var result = new byte[end - start]; + Array.Copy(bytes, start, result, 0, result.Length); + return result; + } + + private static byte[] Inflate(byte[] flateCompressed) + { + using (var input = new MemoryStream(flateCompressed)) + using (var zlib = new ZlibStream(input, CompressionMode.Decompress)) + using (var output = new MemoryStream()) + { + zlib.CopyTo(output); + return output.ToArray(); + } + } + } +} \ No newline at end of file From 7b24656e69ab7e40e685aa6dbfbdb1e4849b26b4 Mon Sep 17 00:00:00 2001 From: swmal <897655+swmal@users.noreply.github.com> Date: Wed, 9 Sep 2026 10:00:53 +0200 Subject: [PATCH 3/3] Unwrap extension-wrapped GSUB Type 1 lookups in SingleSubstitutionProcessor --- .../TextShaping/ScriptAwareGsubTests.cs | 67 +++++++++++++++++++ .../SingleSubstitutionProcessor.cs | 50 +++++++++++--- 2 files changed, 106 insertions(+), 11 deletions(-) diff --git a/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs b/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs index 095906f069..2112baa355 100644 --- a/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs +++ b/src/EPPlus.Fonts.OpenType.Tests/TextShaping/ScriptAwareGsubTests.cs @@ -213,6 +213,73 @@ private static GsubTable BuildChainingContextualGsubTable() }; } + [TestMethod] + public void SingleSubstitution_ExtensionWrapped_IsApplied() + { + var font = LoadHostFont(); + font.AddOrReplaceTable(BuildExtensionWrappedSingleSubstGsubTable()); + + var processor = new SingleSubstitutionProcessor(font); + + var glyphs = new List + { + new ShapedGlyph { GlyphId = GlyphA, BaseAdvance = 500, XAdvance = 500 } + }; + + var result = processor.ApplySubstitutions( + glyphs, new List { "smcp" }, "latn", null); + + Assert.AreEqual( + SubstituteGlyph, + result[0].GlyphId, + "GlyphA must be substituted even though the \"smcp\" lookup is Extension " + + "Substitution (Type 7) wrapping a SingleSubstSubTable, not a direct Type 1 lookup"); + } + + /// + /// One "smcp" FeatureRecord -> a Type 7 (Extension) lookup wrapping a Type 1 + /// SingleSubstSubTable substituting GlyphA -> SubstituteGlyph. No ScriptList: this test + /// is about extension unwrapping, not script filtering. + /// + private static GsubTable BuildExtensionWrappedSingleSubstGsubTable() + { + var singleSubst = new SingleSubstSubTableFormat2 + { + Coverage = new CoverageTableFormat1 { GlyphArray = new ushort[] { GlyphA } }, + SubstituteGlyphIDs = new ushort[] { SubstituteGlyph } + }; + + var extensionWrapper = new ExtensionSubstSubTable + { + ExtensionLookupType = 1, + ExtendedSubTable = singleSubst + }; + + var lookup = new LookupTable + { + LookupType = 7, + SubTables = new List { extensionWrapper } + }; + + var featureList = new FeatureListTable + { + FeatureRecords = new List + { + new FeatureRecord + { + FeatureTag = new Tag("smcp"), + FeatureTable = new FeatureTable { LookupListIndices = new ushort[] { 0 } } + } + } + }; + + return new GsubTable + { + FeatureList = featureList, + LookupList = new LookupListTable { Lookups = new List { lookup } } + }; + } + /// /// Two "smcp" FeatureRecords: index 0 -> 'latn', a lookup with no subtables. Index 1 -> /// 'arab', a SingleSubstSubTable substituting GlyphA -> SubstituteGlyph. Index 1 is last, diff --git a/src/EPPlus.Fonts.OpenType/TextShaping/Substitutions/SingleSubstitutionProcessor.cs b/src/EPPlus.Fonts.OpenType/TextShaping/Substitutions/SingleSubstitutionProcessor.cs index 4d34ead307..9bd3bcb7cf 100644 --- a/src/EPPlus.Fonts.OpenType/TextShaping/Substitutions/SingleSubstitutionProcessor.cs +++ b/src/EPPlus.Fonts.OpenType/TextShaping/Substitutions/SingleSubstitutionProcessor.cs @@ -10,6 +10,7 @@ Date Author Change ************************************************************************************************* 01/19/2026 EPPlus Software AB GSUB Single Substitution support 09/07/2026 EPPlus Software AB Filter by ScriptList/LangSys, not just tag + 09/07/2026 EPPlus Software AB Unwrap extension-wrapped (Type 7) lookups *************************************************************************************************/ using EPPlus.Fonts.OpenType.Tables.Common.Layout.Scripts; using EPPlus.Fonts.OpenType.Tables.Gsub; @@ -175,6 +176,28 @@ private bool TryGetSubstitution(ushort glyphId, List subtab return false; // No substitution found in any subtable } + /// + /// Returns the SingleSubstSubTable a GSUB subtable represents, unwrapping Extension + /// Substitution (Type 7) if needed. Returns null for anything that is not, directly or + /// via unwrapping, a SingleSubstSubTable. + /// + private static SingleSubstSubTable UnwrapSingleSubstSubtable(Tables.FontTableElement subtableObj) + { + if (subtableObj is SingleSubstSubTable direct) + { + return direct; + } + + if (subtableObj is ExtensionSubstSubTable extension + && extension.ExtensionLookupType == 1 + && extension.ExtendedSubTable is SingleSubstSubTable wrapped) + { + return wrapped; + } + + return null; + } + /// /// Builds a map of feature tags to their Single Substitution subtables, keeping each /// subtable's original FeatureList index so ApplySubstitutions can filter by script later. @@ -202,21 +225,26 @@ private void BuildFeatureSubtableMap() { var lookup = _gsubTable.LookupList.Lookups[lookupIndex]; - // Only process Type 1 (Single Substitution) lookups - if (lookup.LookupType == 1) + // Type 1 (Single Substitution) directly, or Type 7 (Extension) wrapping + // one. Unlike GPOS, whose loader flattens extension-wrapped lookups so + // Type 9 never actually appears on a loaded lookup, GSUB keeps the + // wrapper - an extension-wrapped single-substitution lookup has + // LookupType 7 with ExtensionSubstSubTable entries in SubTables, each + // pointing at the real subtable via ExtendedSubTable. + if (lookup.LookupType == 1 || lookup.LookupType == 7) { - foreach (var subtable in lookup.SubTables) + foreach (var subtableObj in lookup.SubTables) { - if (subtable is SingleSubstSubTable singleSubst) - { - if (!_featureSubtables.TryGetValue(featureTag, out var list)) - { - list = new List(); - _featureSubtables[featureTag] = list; - } + var singleSubst = UnwrapSingleSubstSubtable(subtableObj); + if (singleSubst == null) continue; - list.Add(new IndexedSubtable(featureIndex, singleSubst)); + if (!_featureSubtables.TryGetValue(featureTag, out var list)) + { + list = new List(); + _featureSubtables[featureTag] = list; } + + list.Add(new IndexedSubtable(featureIndex, singleSubst)); } } }

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 Oc~1BiUSm1KpZ^Er!Xg;} literal 0 HcmV?d00001 diff --git a/src/EPPlus.Export.Pdf.Tests/LigatureDligReproTests.cs b/src/EPPlus.Export.Pdf.Tests/LigatureDligReproTests.cs new file mode 100644 index 0000000000..a5ae7b1e8c --- /dev/null +++ b/src/EPPlus.Export.Pdf.Tests/LigatureDligReproTests.cs @@ -0,0 +1,126 @@ +/************************************************************************************************* + Required Notice: Copyright (C) EPPlus Software AB. + This software is licensed under PolyForm Noncommercial License 1.0.0 + and may only be used for noncommercial purposes + https://polyformproject.org/licenses/noncommercial/1.0.0/ + + A commercial license to use this software can be purchased at https://epplussoftware.com + ************************************************************************************************* + Date Author Change + ************************************************************************************************* + 09/07/2026 EPPlus Software AB WP3/WP4 dlig ligature repro sheet + *************************************************************************************************/ +using EPPlus.Export.Pdf.Settings; +using EPPlus.Export.Pdf.Tests; +using EPPlus.Fonts.OpenType; +using OfficeOpenXml; +using OfficeOpenXml.Interfaces.Fonts; +using OfficeOpenXml.Style; +using System; +using System.IO; + +namespace EPPlusTest.PDF +{ + ///