From 60c5d886a4f2bec273cf9e864fa483af9afc8ce5 Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Sat, 14 Mar 2026 10:21:26 +0100 Subject: [PATCH] Implement phase 5 critical branch extraction --- docs/critical_import_tool.md | 14 +- .../Data/RolemasterDbContext.cs | 9 + .../Data/RolemasterDbInitializer.cs | 1 + .../Data/RolemasterDbSchemaUpgrader.cs | 43 +++++ src/RolemasterDb.App/Domain/CriticalBranch.cs | 17 ++ src/RolemasterDb.App/Domain/CriticalResult.cs | 1 + src/RolemasterDb.App/rolemaster.db | Bin 716800 -> 770048 bytes ...dardCriticalTableParserIntegrationTests.cs | 96 ++++++++++ .../CriticalImportLoader.cs | 23 ++- .../Parsing/ColumnarCellEntry.cs | 10 + .../Parsing/CriticalCellParseContent.cs | 17 ++ .../Parsing/CriticalCellTextParser.cs | 114 +++++++++++ .../Parsing/CriticalTableParserSupport.cs | 178 +++++++++++++++++- .../GroupedVariantCriticalTableParser.cs | 149 ++------------- .../Parsing/ParsedCriticalBranch.cs | 19 ++ .../Parsing/ParsedCriticalCellArtifact.cs | 6 +- .../Parsing/ParsedCriticalResult.cs | 4 +- .../Parsing/RowAnchor.cs | 3 + .../Parsing/StandardCriticalTableParser.cs | 143 ++------------ .../VariantColumnCriticalTableParser.cs | 141 ++------------ 20 files changed, 589 insertions(+), 399 deletions(-) create mode 100644 src/RolemasterDb.App/Data/RolemasterDbSchemaUpgrader.cs create mode 100644 src/RolemasterDb.App/Domain/CriticalBranch.cs create mode 100644 src/RolemasterDb.ImportTool/Parsing/ColumnarCellEntry.cs create mode 100644 src/RolemasterDb.ImportTool/Parsing/CriticalCellParseContent.cs create mode 100644 src/RolemasterDb.ImportTool/Parsing/CriticalCellTextParser.cs create mode 100644 src/RolemasterDb.ImportTool/Parsing/ParsedCriticalBranch.cs create mode 100644 src/RolemasterDb.ImportTool/Parsing/RowAnchor.cs diff --git a/docs/critical_import_tool.md b/docs/critical_import_tool.md index cb746c0..861c140 100644 --- a/docs/critical_import_tool.md +++ b/docs/critical_import_tool.md @@ -63,7 +63,6 @@ The current implementation supports: The current implementation does not yet support: - OCR/image-based PDFs such as `Void.pdf` -- normalized `critical_branch` population - normalized `critical_effect` population - automatic confidence scoring beyond validation errors @@ -210,10 +209,6 @@ The importer now explicitly rejects cells that still look structurally wrong aft This keeps the phase-2.1 safety goal in place while allowing broader standard-table layouts that render a single affix block either before or after the prose block. -## Planned Future Phases - -The current architecture is intended to support additional phases: - ### Phase 3: Broader Table Coverage Phase 3 expands the manifest and validates the shared `standard` parser across a broader set of `A-E` tables. @@ -494,11 +489,12 @@ Affix-like classification is intentionally conservative. Numeric prose lines suc The current implementation stores: -- `RawCellText` -- `DescriptionText` -- `RawAffixText` +- base `RawCellText` +- base `DescriptionText` +- base `RawAffixText` +- parsed conditional branches with condition text, branch prose, and branch affix text -It does not yet normalize branches or effects into separate tables. +It does not yet normalize effects into separate tables. ## Validation Rules diff --git a/src/RolemasterDb.App/Data/RolemasterDbContext.cs b/src/RolemasterDb.App/Data/RolemasterDbContext.cs index 6f0dd04..8452ee0 100644 --- a/src/RolemasterDb.App/Data/RolemasterDbContext.cs +++ b/src/RolemasterDb.App/Data/RolemasterDbContext.cs @@ -14,6 +14,7 @@ public sealed class RolemasterDbContext(DbContextOptions op public DbSet CriticalColumns => Set(); public DbSet CriticalRollBands => Set(); public DbSet CriticalResults => Set(); + public DbSet CriticalBranches => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -78,5 +79,13 @@ public sealed class RolemasterDbContext(DbContextOptions op entity.HasIndex(item => new { item.CriticalTableId, item.CriticalGroupId, item.CriticalColumnId, item.CriticalRollBandId }).IsUnique(); entity.Property(item => item.ParseStatus).HasMaxLength(32); }); + + modelBuilder.Entity(entity => + { + entity.HasIndex(item => item.CriticalResultId); + entity.HasIndex(item => new { item.CriticalResultId, item.SortOrder }); + entity.Property(item => item.BranchKind).HasMaxLength(32); + entity.Property(item => item.ConditionKey).HasMaxLength(128); + }); } } diff --git a/src/RolemasterDb.App/Data/RolemasterDbInitializer.cs b/src/RolemasterDb.App/Data/RolemasterDbInitializer.cs index 63eb0d5..aa3ef6c 100644 --- a/src/RolemasterDb.App/Data/RolemasterDbInitializer.cs +++ b/src/RolemasterDb.App/Data/RolemasterDbInitializer.cs @@ -11,6 +11,7 @@ public static class RolemasterDbInitializer await using var dbContext = await dbFactory.CreateDbContextAsync(cancellationToken); await dbContext.Database.EnsureCreatedAsync(cancellationToken); + await RolemasterDbSchemaUpgrader.EnsureLatestAsync(dbContext, cancellationToken); if (await dbContext.AttackTables.AnyAsync(cancellationToken)) { diff --git a/src/RolemasterDb.App/Data/RolemasterDbSchemaUpgrader.cs b/src/RolemasterDb.App/Data/RolemasterDbSchemaUpgrader.cs new file mode 100644 index 0000000..5b415df --- /dev/null +++ b/src/RolemasterDb.App/Data/RolemasterDbSchemaUpgrader.cs @@ -0,0 +1,43 @@ +using Microsoft.EntityFrameworkCore; + +namespace RolemasterDb.App.Data; + +public static class RolemasterDbSchemaUpgrader +{ + public static async Task EnsureLatestAsync(RolemasterDbContext dbContext, CancellationToken cancellationToken = default) + { + await dbContext.Database.ExecuteSqlRawAsync( + """ + CREATE TABLE IF NOT EXISTS "CriticalBranches" ( + "Id" INTEGER NOT NULL CONSTRAINT "PK_CriticalBranches" PRIMARY KEY AUTOINCREMENT, + "CriticalResultId" INTEGER NOT NULL, + "BranchKind" TEXT NOT NULL, + "ConditionKey" TEXT NULL, + "ConditionText" TEXT NOT NULL, + "ConditionJson" TEXT NOT NULL, + "RawText" TEXT NOT NULL, + "DescriptionText" TEXT NOT NULL, + "RawAffixText" TEXT NULL, + "ParsedJson" TEXT NOT NULL, + "SortOrder" INTEGER NOT NULL, + CONSTRAINT "FK_CriticalBranches_CriticalResults_CriticalResultId" + FOREIGN KEY ("CriticalResultId") REFERENCES "CriticalResults" ("Id") ON DELETE CASCADE + ); + """, + cancellationToken); + + await dbContext.Database.ExecuteSqlRawAsync( + """ + CREATE INDEX IF NOT EXISTS "IX_CriticalBranches_CriticalResultId" + ON "CriticalBranches" ("CriticalResultId"); + """, + cancellationToken); + + await dbContext.Database.ExecuteSqlRawAsync( + """ + CREATE INDEX IF NOT EXISTS "IX_CriticalBranches_CriticalResultId_SortOrder" + ON "CriticalBranches" ("CriticalResultId", "SortOrder"); + """, + cancellationToken); + } +} diff --git a/src/RolemasterDb.App/Domain/CriticalBranch.cs b/src/RolemasterDb.App/Domain/CriticalBranch.cs new file mode 100644 index 0000000..c202e5a --- /dev/null +++ b/src/RolemasterDb.App/Domain/CriticalBranch.cs @@ -0,0 +1,17 @@ +namespace RolemasterDb.App.Domain; + +public sealed class CriticalBranch +{ + public int Id { get; set; } + public int CriticalResultId { get; set; } + public string BranchKind { get; set; } = "conditional"; + public string? ConditionKey { get; set; } + public string ConditionText { get; set; } = string.Empty; + public string ConditionJson { get; set; } = "{}"; + public string RawText { get; set; } = string.Empty; + public string DescriptionText { get; set; } = string.Empty; + public string? RawAffixText { get; set; } + public string ParsedJson { get; set; } = "{}"; + public int SortOrder { get; set; } + public CriticalResult CriticalResult { get; set; } = null!; +} diff --git a/src/RolemasterDb.App/Domain/CriticalResult.cs b/src/RolemasterDb.App/Domain/CriticalResult.cs index 23eb595..1596425 100644 --- a/src/RolemasterDb.App/Domain/CriticalResult.cs +++ b/src/RolemasterDb.App/Domain/CriticalResult.cs @@ -16,4 +16,5 @@ public sealed class CriticalResult public CriticalGroup? CriticalGroup { get; set; } public CriticalColumn CriticalColumn { get; set; } = null!; public CriticalRollBand CriticalRollBand { get; set; } = null!; + public List Branches { get; set; } = []; } diff --git a/src/RolemasterDb.App/rolemaster.db b/src/RolemasterDb.App/rolemaster.db index 208d4c6332fada174b5815ec3ba1f7f68c1d8e06..bba507835bf5db8e6e715eb0a210dfa4c78aa268 100644 GIT binary patch delta 211484 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⩔H_$#x=(LW;hQo#gzlVYii2219r#WZaswW`O?}&l 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 S-=#It`_F=T;`>N(;C}%Cxdoj7 delta 148173 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 diff --git a/src/RolemasterDb.ImportTool.Tests/StandardCriticalTableParserIntegrationTests.cs b/src/RolemasterDb.ImportTool.Tests/StandardCriticalTableParserIntegrationTests.cs index 7f598f9..13d807e 100644 --- a/src/RolemasterDb.ImportTool.Tests/StandardCriticalTableParserIntegrationTests.cs +++ b/src/RolemasterDb.ImportTool.Tests/StandardCriticalTableParserIntegrationTests.cs @@ -1,3 +1,6 @@ +using Microsoft.EntityFrameworkCore; + +using RolemasterDb.App.Data; using RolemasterDb.ImportTool.Parsing; namespace RolemasterDb.ImportTool.Tests; @@ -249,6 +252,83 @@ public sealed class StandardCriticalTableParserIntegrationTests Assert.Contains("Blast goes in through foe's eye", superSlaying.DescriptionText, StringComparison.OrdinalIgnoreCase); } + [Fact] + public async Task Slash_branch_cells_split_base_text_from_conditional_affix_branches() + { + var entry = LoadManifest().Tables.Single(item => string.Equals(item.Slug, "slash", StringComparison.Ordinal)); + var parseResult = await LoadParseResultAsync(entry); + var result = parseResult.Table.Results.Single(item => + item.GroupKey is null && + string.Equals(item.RollBandLabel, "36-45", StringComparison.Ordinal) && + string.Equals(item.ColumnKey, "B", StringComparison.Ordinal)); + + Assert.Equal("Strike foe in shin. If he doesn't have greaves, you slash open foe's shin.", result.DescriptionText); + Assert.Null(result.RawAffixText); + Assert.DoesNotContain("with leg greaves:", result.RawCellText, StringComparison.OrdinalIgnoreCase); + Assert.Equal(2, result.Branches.Count); + + var withGreaves = result.Branches.Single(item => string.Equals(item.ConditionText, "with leg greaves", StringComparison.OrdinalIgnoreCase)); + var withoutGreaves = result.Branches.Single(item => string.Equals(item.ConditionText, "w/o leg greaves", StringComparison.OrdinalIgnoreCase)); + + Assert.Equal("with_leg_greaves", withGreaves.ConditionKey); + Assert.Equal("+2H – π", withGreaves.RawAffixText); + Assert.Equal(string.Empty, withGreaves.DescriptionText); + Assert.Equal("without_leg_greaves", withoutGreaves.ConditionKey); + Assert.Equal("+2H – ∫", withoutGreaves.RawAffixText); + } + + [Fact] + public async Task Impact_branch_cells_keep_prose_branch_text_separate_from_affix_branch_text() + { + var entry = LoadManifest().Tables.Single(item => string.Equals(item.Slug, "impact", StringComparison.Ordinal)); + var parseResult = await LoadParseResultAsync(entry); + var result = parseResult.Table.Results.Single(item => + item.GroupKey is null && + string.Equals(item.RollBandLabel, "86-90", StringComparison.Ordinal) && + string.Equals(item.ColumnKey, "D", StringComparison.Ordinal)); + + Assert.Equal( + "Onslaught to foe's midsection. Organs are damaged and foe throws up blood. Foe's abdomen is seriously damaged. He falls and should not be moved.", + result.DescriptionText); + Assert.Null(result.RawAffixText); + Assert.Equal(2, result.Branches.Count); + + var withArmor = result.Branches.Single(item => string.Equals(item.ConditionText, "with abdominal armor", StringComparison.OrdinalIgnoreCase)); + var withoutArmor = result.Branches.Single(item => string.Equals(item.ConditionText, "w/o abdominal armor", StringComparison.OrdinalIgnoreCase)); + + Assert.Equal("12∑", withArmor.RawAffixText); + Assert.Equal(string.Empty, withArmor.DescriptionText); + Assert.Null(withoutArmor.RawAffixText); + Assert.Equal("dies in 6 rounds", withoutArmor.DescriptionText); + } + + [Fact] + public async Task Loader_upgrades_existing_sqlite_and_persists_branch_rows() + { + var entry = LoadManifest().Tables.Single(item => string.Equals(item.Slug, "slash", StringComparison.Ordinal)); + var parseResult = await LoadParseResultAsync(entry); + var databasePath = CreateTemporaryDatabaseCopy(); + var loader = new CriticalImportLoader(databasePath); + + await loader.LoadAsync(parseResult.Table); + + await using var dbContext = CreateDbContext(databasePath); + var result = await dbContext.CriticalResults + .Include(item => item.CriticalTable) + .Include(item => item.CriticalColumn) + .Include(item => item.CriticalRollBand) + .Include(item => item.Branches) + .SingleAsync(item => + item.CriticalTable.Slug == "slash" && + item.CriticalColumn.ColumnKey == "B" && + item.CriticalRollBand.Label == "36-45"); + + Assert.DoesNotContain("with leg greaves:", result.RawCellText, StringComparison.OrdinalIgnoreCase); + Assert.Equal(2, result.Branches.Count); + Assert.Contains(result.Branches, item => item.ConditionKey == "with_leg_greaves" && item.RawAffixText == "+2H – π"); + Assert.Contains(result.Branches, item => item.ConditionKey == "without_leg_greaves" && item.RawAffixText == "+2H – ∫"); + } + private static async Task LoadParseResultAsync(CriticalImportManifestEntry entry) { var xmlPath = Path.Combine(GetArtifactCacheRoot(), $"{entry.Slug}.xml"); @@ -278,6 +358,22 @@ public sealed class StandardCriticalTableParserIntegrationTests return cacheRoot; } + private static RolemasterDbContext CreateDbContext(string databasePath) + { + var options = new DbContextOptionsBuilder() + .UseSqlite($"Data Source={databasePath}") + .Options; + + return new RolemasterDbContext(options); + } + + private static string CreateTemporaryDatabaseCopy() + { + var databasePath = Path.Combine(GetArtifactCacheRoot(), $"rolemaster-{Guid.NewGuid():N}.db"); + File.Copy(Path.Combine(GetRepositoryRoot(), "src", "RolemasterDb.App", "rolemaster.db"), databasePath, true); + return databasePath; + } + private static string GetRepositoryRoot() { var probe = new DirectoryInfo(AppContext.BaseDirectory); diff --git a/src/RolemasterDb.ImportTool/CriticalImportLoader.cs b/src/RolemasterDb.ImportTool/CriticalImportLoader.cs index f7a0417..5a6133b 100644 --- a/src/RolemasterDb.ImportTool/CriticalImportLoader.cs +++ b/src/RolemasterDb.ImportTool/CriticalImportLoader.cs @@ -12,10 +12,12 @@ public sealed class CriticalImportLoader(string databasePath) { await using var dbContext = CreateDbContext(); await dbContext.Database.EnsureCreatedAsync(cancellationToken); + await RolemasterDbSchemaUpgrader.EnsureLatestAsync(dbContext, cancellationToken); var removedTableCount = await dbContext.CriticalTables.CountAsync(cancellationToken); await using var transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken); + await dbContext.CriticalBranches.ExecuteDeleteAsync(cancellationToken); await dbContext.CriticalResults.ExecuteDeleteAsync(cancellationToken); await dbContext.CriticalGroups.ExecuteDeleteAsync(cancellationToken); await dbContext.CriticalColumns.ExecuteDeleteAsync(cancellationToken); @@ -30,6 +32,7 @@ public sealed class CriticalImportLoader(string databasePath) { await using var dbContext = CreateDbContext(); await dbContext.Database.EnsureCreatedAsync(cancellationToken); + await RolemasterDbSchemaUpgrader.EnsureLatestAsync(dbContext, cancellationToken); await using var transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken); await DeleteTableAsync(dbContext, table.Slug, cancellationToken); @@ -86,7 +89,21 @@ public sealed class CriticalImportLoader(string databasePath) DescriptionText = item.DescriptionText, RawAffixText = item.RawAffixText, ParsedJson = "{}", - ParseStatus = "raw" + ParseStatus = "raw", + Branches = item.Branches + .Select(branch => new CriticalBranch + { + BranchKind = branch.BranchKind, + ConditionKey = branch.ConditionKey, + ConditionText = branch.ConditionText, + ConditionJson = "{}", + RawText = branch.RawText, + DescriptionText = branch.DescriptionText, + RawAffixText = branch.RawAffixText, + ParsedJson = "{}", + SortOrder = branch.SortOrder + }) + .ToList() }) .ToList(); @@ -121,6 +138,10 @@ public sealed class CriticalImportLoader(string databasePath) return; } + await dbContext.CriticalBranches + .Where(item => item.CriticalResult.CriticalTableId == tableId.Value) + .ExecuteDeleteAsync(cancellationToken); + await dbContext.CriticalResults .Where(item => item.CriticalTableId == tableId.Value) .ExecuteDeleteAsync(cancellationToken); diff --git a/src/RolemasterDb.ImportTool/Parsing/ColumnarCellEntry.cs b/src/RolemasterDb.ImportTool/Parsing/ColumnarCellEntry.cs new file mode 100644 index 0000000..a1823dd --- /dev/null +++ b/src/RolemasterDb.ImportTool/Parsing/ColumnarCellEntry.cs @@ -0,0 +1,10 @@ +namespace RolemasterDb.ImportTool.Parsing; + +internal sealed class ColumnarCellEntry(string? groupKey, string rollBandLabel, int rowIndex, string columnKey, List lines) +{ + public string? GroupKey { get; } = groupKey; + public string RollBandLabel { get; } = rollBandLabel; + public int RowIndex { get; } = rowIndex; + public string ColumnKey { get; } = columnKey; + public List Lines { get; } = lines; +} diff --git a/src/RolemasterDb.ImportTool/Parsing/CriticalCellParseContent.cs b/src/RolemasterDb.ImportTool/Parsing/CriticalCellParseContent.cs new file mode 100644 index 0000000..e5ea315 --- /dev/null +++ b/src/RolemasterDb.ImportTool/Parsing/CriticalCellParseContent.cs @@ -0,0 +1,17 @@ +namespace RolemasterDb.ImportTool.Parsing; + +internal sealed class CriticalCellParseContent( + IReadOnlyList baseLines, + string rawCellText, + string descriptionText, + string? rawAffixText, + IReadOnlyList branches, + IReadOnlyList validationErrors) +{ + public IReadOnlyList BaseLines { get; } = baseLines; + public string RawCellText { get; } = rawCellText; + public string DescriptionText { get; } = descriptionText; + public string? RawAffixText { get; } = rawAffixText; + public IReadOnlyList Branches { get; } = branches; + public IReadOnlyList ValidationErrors { get; } = validationErrors; +} diff --git a/src/RolemasterDb.ImportTool/Parsing/CriticalCellTextParser.cs b/src/RolemasterDb.ImportTool/Parsing/CriticalCellTextParser.cs new file mode 100644 index 0000000..0a561cf --- /dev/null +++ b/src/RolemasterDb.ImportTool/Parsing/CriticalCellTextParser.cs @@ -0,0 +1,114 @@ +namespace RolemasterDb.ImportTool.Parsing; + +internal static class CriticalCellTextParser +{ + internal static CriticalCellParseContent Parse(IReadOnlyList lines, ISet affixLegendSymbols) + { + var validationErrors = new List(); + var branchStartIndexes = FindBranchStartIndexes(lines); + var baseLineCount = branchStartIndexes.Count == 0 ? lines.Count : branchStartIndexes[0]; + var baseLines = lines.Take(baseLineCount).ToList(); + var branches = new List(); + + validationErrors.AddRange(ValidateSegmentCount(baseLines, affixLegendSymbols, "Base content")); + + for (var branchIndex = 0; branchIndex < branchStartIndexes.Count; branchIndex++) + { + var startIndex = branchStartIndexes[branchIndex]; + var endIndex = branchIndex == branchStartIndexes.Count - 1 + ? lines.Count + : branchStartIndexes[branchIndex + 1]; + + branches.Add(ParseBranch( + lines.Skip(startIndex).Take(endIndex - startIndex).ToList(), + branchIndex + 1, + affixLegendSymbols, + validationErrors)); + } + + var (rawCellText, descriptionText, rawAffixText) = BuildTextSections(baseLines, affixLegendSymbols); + return new CriticalCellParseContent(baseLines, rawCellText, descriptionText, rawAffixText, branches, validationErrors); + } + + private static ParsedCriticalBranch ParseBranch( + IReadOnlyList branchLines, + int sortOrder, + ISet affixLegendSymbols, + List validationErrors) + { + var firstLine = branchLines[0]; + var separatorIndex = firstLine.IndexOf(':', StringComparison.Ordinal); + var conditionText = CriticalTableParserSupport.CollapseWhitespace(firstLine[..separatorIndex]); + var firstPayloadLine = CriticalTableParserSupport.CollapseWhitespace(firstLine[(separatorIndex + 1)..]); + var payloadLines = new List(); + + if (!string.IsNullOrWhiteSpace(firstPayloadLine)) + { + payloadLines.Add(firstPayloadLine); + } + + foreach (var continuationLine in branchLines.Skip(1)) + { + var normalized = CriticalTableParserSupport.CollapseWhitespace(continuationLine); + if (!string.IsNullOrWhiteSpace(normalized)) + { + payloadLines.Add(normalized); + } + } + + validationErrors.AddRange(ValidateSegmentCount(payloadLines, affixLegendSymbols, $"Branch '{conditionText}'")); + + var (_, descriptionText, rawAffixText) = BuildTextSections(payloadLines, affixLegendSymbols); + return new ParsedCriticalBranch( + "conditional", + CriticalTableParserSupport.NormalizeConditionKey(conditionText), + conditionText, + string.Join(Environment.NewLine, branchLines), + descriptionText, + rawAffixText, + sortOrder); + } + + private static List FindBranchStartIndexes(IReadOnlyList lines) + { + var branchStartIndexes = new List(); + + for (var index = 0; index < lines.Count; index++) + { + if (CriticalTableParserSupport.IsConditionalBranchStartLine(lines[index])) + { + branchStartIndexes.Add(index); + } + } + + return branchStartIndexes; + } + + private static IReadOnlyList ValidateSegmentCount( + IReadOnlyList lines, + ISet affixLegendSymbols, + string scope) + { + if (lines.Count == 0) + { + return []; + } + + var segmentCount = CriticalTableParserSupport.CountLineTypeSegments(lines, affixLegendSymbols); + return segmentCount > 2 + ? [$"{scope} interleaves prose and affix lines."] + : []; + } + + private static (string RawText, string DescriptionText, string? RawAffixText) BuildTextSections( + IReadOnlyList lines, + ISet affixLegendSymbols) + { + var rawText = string.Join(Environment.NewLine, lines); + var rawAffixLines = lines.Where(line => CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); + var descriptionLines = lines.Where(line => !CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); + var descriptionText = CriticalTableParserSupport.CollapseWhitespace(string.Join(' ', descriptionLines)); + var rawAffixText = rawAffixLines.Count == 0 ? null : string.Join(Environment.NewLine, rawAffixLines); + return (rawText, descriptionText, rawAffixText); + } +} diff --git a/src/RolemasterDb.ImportTool/Parsing/CriticalTableParserSupport.cs b/src/RolemasterDb.ImportTool/Parsing/CriticalTableParserSupport.cs index 983ff2e..e7218e6 100644 --- a/src/RolemasterDb.ImportTool/Parsing/CriticalTableParserSupport.cs +++ b/src/RolemasterDb.ImportTool/Parsing/CriticalTableParserSupport.cs @@ -169,15 +169,9 @@ internal static class CriticalTableParserSupport return true; } - if (value.StartsWith("with ", StringComparison.OrdinalIgnoreCase) || - value.StartsWith("w/o ", StringComparison.OrdinalIgnoreCase) || - value.StartsWith("without ", StringComparison.OrdinalIgnoreCase) || - value.StartsWith("if ", StringComparison.OrdinalIgnoreCase) || - value.StartsWith("while ", StringComparison.OrdinalIgnoreCase) || - value.StartsWith("until ", StringComparison.OrdinalIgnoreCase) || - value.StartsWith("unless ", StringComparison.OrdinalIgnoreCase)) + if (IsConditionalBranchStartLine(value)) { - return value.Contains(':', StringComparison.Ordinal); + return true; } if (affixLegendSymbols.Count > 0 && @@ -242,6 +236,23 @@ internal static class CriticalTableParserSupport internal static string CollapseWhitespace(string value) => Regex.Replace(value.Trim(), @"\s+", " "); + internal static bool IsConditionalBranchStartLine(string value) + { + var normalized = value.Trim(); + if (!normalized.Contains(':', StringComparison.Ordinal)) + { + return false; + } + + return normalized.StartsWith("with ", StringComparison.OrdinalIgnoreCase) || + normalized.StartsWith("w/o ", StringComparison.OrdinalIgnoreCase) || + normalized.StartsWith("without ", StringComparison.OrdinalIgnoreCase) || + normalized.StartsWith("if ", StringComparison.OrdinalIgnoreCase) || + normalized.StartsWith("while ", StringComparison.OrdinalIgnoreCase) || + normalized.StartsWith("until ", StringComparison.OrdinalIgnoreCase) || + normalized.StartsWith("unless ", StringComparison.OrdinalIgnoreCase); + } + internal static string NormalizeText(string value) => value .Replace('\u00a0', ' ') @@ -250,6 +261,25 @@ internal static class CriticalTableParserSupport .Replace('’', '\'') .Trim(); + internal static string? NormalizeConditionKey(string conditionText) + { + var normalized = CollapseWhitespace(conditionText) + .ToLowerInvariant() + .Replace("w/o", "without", StringComparison.Ordinal); + normalized = Regex.Replace(normalized, @"[^a-z0-9]+", "_"); + normalized = normalized.Trim('_'); + return normalized.Length == 0 ? null : normalized; + } + + internal static int FindKeyTop(IReadOnlyList fragments) => + fragments + .Where(item => + string.Equals(item.Text, "Key:", StringComparison.OrdinalIgnoreCase) || + item.Text.Contains("must parry", StringComparison.OrdinalIgnoreCase) || + item.Text.Contains("attacker gets", StringComparison.OrdinalIgnoreCase)) + .Select(item => (int?)item.Top) + .Min() ?? int.MaxValue; + internal static HashSet DetectAffixLegendSymbols(IReadOnlyList fragments, int keyTop) { if (keyTop == int.MaxValue) @@ -347,6 +377,138 @@ internal static class CriticalTableParserSupport return groups; } + internal static List CreateRowAnchors(IReadOnlyList rowLabelFragments) => + rowLabelFragments + .OrderBy(item => item.Top) + .Select((item, index) => new RowAnchor(NormalizeRollBandLabel(item.Text), item.Top, index + 1)) + .ToList(); + + internal static List BuildBodyFragments( + IReadOnlyList fragments, + int bodyStartTop, + int keyTop, + int leftCutoff, + IReadOnlyList rowAnchors, + IReadOnlyCollection excludedFragments, + IReadOnlyList<(string Key, double CenterX)> columnCenters, + ISet affixLegendSymbols) + { + var bodyFragments = fragments + .Where(item => + item.Top >= bodyStartTop && + item.Top < keyTop - TopGroupingTolerance && + !IsFooterPageNumberFragment(item, keyTop) && + !IsPotentialRowLabelFragment(item, leftCutoff) && + !rowAnchors.Any(anchor => anchor.Top == item.Top && string.Equals(anchor.Label, NormalizeRollBandLabel(item.Text), StringComparison.OrdinalIgnoreCase)) && + !excludedFragments.Contains(item)) + .ToList(); + + return SplitBoundaryCrossingAffixFragments(bodyFragments, columnCenters, affixLegendSymbols); + } + + internal static void RepairLeadingAffixLeakage(List cellEntries, ISet affixLegendSymbols) + { + var maxRowIndex = cellEntries.Count == 0 ? -1 : cellEntries.Max(item => item.RowIndex); + var axes = cellEntries + .Select(item => (item.GroupKey, item.ColumnKey)) + .Distinct() + .ToList(); + + for (var rowIndex = 0; rowIndex < maxRowIndex; rowIndex++) + { + foreach (var (groupKey, columnKey) in axes) + { + var current = cellEntries.SingleOrDefault(item => + item.RowIndex == rowIndex && + string.Equals(item.GroupKey, groupKey, StringComparison.Ordinal) && + string.Equals(item.ColumnKey, columnKey, StringComparison.Ordinal)); + var next = cellEntries.SingleOrDefault(item => + item.RowIndex == rowIndex + 1 && + string.Equals(item.GroupKey, groupKey, StringComparison.Ordinal) && + string.Equals(item.ColumnKey, columnKey, StringComparison.Ordinal)); + if (current is null || next is null) + { + continue; + } + + var leadingAffixCount = 0; + while (leadingAffixCount < next.Lines.Count && IsAffixLikeLine(next.Lines[leadingAffixCount], affixLegendSymbols)) + { + leadingAffixCount++; + } + + if (leadingAffixCount == 0 || leadingAffixCount == next.Lines.Count) + { + continue; + } + + current.Lines.AddRange(next.Lines.Take(leadingAffixCount)); + next.Lines.RemoveRange(0, leadingAffixCount); + } + } + } + + internal static int ResolveRowBoundaryTop( + RowAnchor current, + RowAnchor next, + IReadOnlyList<(int Top, bool IsAffixLike)> bodyLines) + { + var linesBetweenLabels = bodyLines + .Where(item => item.Top >= current.Top && item.Top < next.Top) + .OrderBy(item => item.Top) + .ToList(); + + for (var index = linesBetweenLabels.Count - 2; index >= 0; index--) + { + if (linesBetweenLabels[index].IsAffixLike && !linesBetweenLabels[index + 1].IsAffixLike) + { + return (int)Math.Floor((linesBetweenLabels[index].Top + linesBetweenLabels[index + 1].Top) / 2.0) + 1; + } + } + + return (int)Math.Floor((current.Top + next.Top) / 2.0) + 1; + } + + internal static void BuildParsedArtifacts( + IReadOnlyList cellEntries, + ISet affixLegendSymbols, + List parsedCells, + List parsedResults, + List validationErrors) + { + foreach (var cellEntry in cellEntries) + { + var content = CriticalCellTextParser.Parse(cellEntry.Lines, affixLegendSymbols); + validationErrors.AddRange(content.ValidationErrors.Select(error => + $"Cell '{BuildCellIdentifier(cellEntry)}': {error}")); + + parsedCells.Add(new ParsedCriticalCellArtifact( + cellEntry.GroupKey, + cellEntry.RollBandLabel, + cellEntry.ColumnKey, + cellEntry.Lines.ToList(), + content.BaseLines, + content.RawCellText, + content.DescriptionText, + content.RawAffixText, + content.Branches)); + + parsedResults.Add(new ParsedCriticalResult( + cellEntry.GroupKey, + cellEntry.ColumnKey, + cellEntry.RollBandLabel, + content.RawCellText, + content.DescriptionText, + content.RawAffixText, + content.Branches)); + } + } + + private static string BuildCellIdentifier(ColumnarCellEntry cellEntry) => + cellEntry.GroupKey is null + ? $"{cellEntry.RollBandLabel}/{cellEntry.ColumnKey}" + : $"{cellEntry.RollBandLabel}/{cellEntry.GroupKey}/{cellEntry.ColumnKey}"; + private static bool LooksLikeSplitRollBandStart(string value) => Regex.IsMatch(value.Trim(), @"^\d{2,3}\s*-$"); diff --git a/src/RolemasterDb.ImportTool/Parsing/GroupedVariantCriticalTableParser.cs b/src/RolemasterDb.ImportTool/Parsing/GroupedVariantCriticalTableParser.cs index ed6c3e4..b0fcf76 100644 --- a/src/RolemasterDb.ImportTool/Parsing/GroupedVariantCriticalTableParser.cs +++ b/src/RolemasterDb.ImportTool/Parsing/GroupedVariantCriticalTableParser.cs @@ -36,13 +36,7 @@ public sealed class GroupedVariantCriticalTableParser groupHeaders.Max(item => item.Top), columnHeaders.Max(item => item.Top)) + CriticalTableParserSupport.HeaderToBodyMinimumGap; - var keyTop = fragments - .Where(item => - string.Equals(item.Text, "Key:", StringComparison.OrdinalIgnoreCase) || - item.Text.Contains("must parry", StringComparison.OrdinalIgnoreCase) || - item.Text.Contains("attacker gets", StringComparison.OrdinalIgnoreCase)) - .Select(item => (int?)item.Top) - .Min() ?? int.MaxValue; + var keyTop = CriticalTableParserSupport.FindKeyTop(fragments); var affixLegendSymbols = CriticalTableParserSupport.DetectAffixLegendSymbols(fragments, keyTop); var leftCutoff = columnHeaders.Min(item => item.Left) - 10; var rowLabelFragments = CriticalTableParserSupport.FindRowLabelFragments( @@ -50,11 +44,7 @@ public sealed class GroupedVariantCriticalTableParser leftCutoff, bodyStartTop, keyTop); - - var rowAnchors = rowLabelFragments - .OrderBy(item => item.Top) - .Select((item, index) => new RowAnchor(CriticalTableParserSupport.NormalizeRollBandLabel(item.Text), item.Top, index + 1)) - .ToList(); + var rowAnchors = CriticalTableParserSupport.CreateRowAnchors(rowLabelFragments); if (rowAnchors.Count == 0) { @@ -65,34 +55,33 @@ public sealed class GroupedVariantCriticalTableParser .Select(item => (item.CompositeKey, item.CenterX)) .ToList(); - var bodyFragments = fragments - .Where(item => - item.Top >= bodyStartTop && - item.Top < keyTop - CriticalTableParserSupport.TopGroupingTolerance && - !CriticalTableParserSupport.IsFooterPageNumberFragment(item, keyTop) && - !CriticalTableParserSupport.IsPotentialRowLabelFragment(item, leftCutoff) && - !rowAnchors.Any(anchor => anchor.Top == item.Top && string.Equals(anchor.Label, CriticalTableParserSupport.NormalizeRollBandLabel(item.Text), StringComparison.OrdinalIgnoreCase)) && - !groupHeaders.Contains(item) && - !columnHeaders.Contains(item)) - .ToList(); - bodyFragments = CriticalTableParserSupport.SplitBoundaryCrossingAffixFragments(bodyFragments, columnCenters, affixLegendSymbols); + var excludedFragments = groupHeaders.Concat(columnHeaders).ToList(); + var bodyFragments = CriticalTableParserSupport.BuildBodyFragments( + fragments, + bodyStartTop, + keyTop, + leftCutoff, + rowAnchors, + excludedFragments, + columnCenters, + affixLegendSymbols); var bodyLines = CriticalTableParserSupport.BuildBodyLines(bodyFragments, columnCenters, affixLegendSymbols); var parsedRollBands = rowAnchors .Select(anchor => CriticalTableParserSupport.CreateRollBand(anchor.Label, anchor.SortOrder)) .ToList(); - var cellEntries = new List(); + var cellEntries = new List(); for (var rowIndex = 0; rowIndex < rowAnchors.Count; rowIndex++) { var rowStart = rowIndex == 0 ? bodyStartTop - : ResolveRowBoundaryTop(rowAnchors[rowIndex - 1], rowAnchors[rowIndex], bodyLines); + : CriticalTableParserSupport.ResolveRowBoundaryTop(rowAnchors[rowIndex - 1], rowAnchors[rowIndex], bodyLines); var rowEnd = rowIndex == rowAnchors.Count - 1 ? keyTop - 1 - : ResolveRowBoundaryTop(rowAnchors[rowIndex], rowAnchors[rowIndex + 1], bodyLines); + : CriticalTableParserSupport.ResolveRowBoundaryTop(rowAnchors[rowIndex], rowAnchors[rowIndex + 1], bodyLines); var rowFragments = bodyFragments .Where(item => item.Top >= rowStart && item.Top < rowEnd) @@ -112,7 +101,7 @@ public sealed class GroupedVariantCriticalTableParser continue; } - cellEntries.Add(new CellEntry( + cellEntries.Add(new ColumnarCellEntry( anchor.GroupKey, rowAnchors[rowIndex].Label, rowIndex, @@ -121,45 +110,11 @@ public sealed class GroupedVariantCriticalTableParser } } - RepairLeadingAffixLeakage(cellEntries, affixLegendSymbols); + CriticalTableParserSupport.RepairLeadingAffixLeakage(cellEntries, affixLegendSymbols); var parsedCells = new List(); var parsedResults = new List(); - - foreach (var cellEntry in cellEntries - .OrderBy(item => item.RowIndex) - .ThenBy(item => item.GroupKey, StringComparer.Ordinal) - .ThenBy(item => item.ColumnKey, StringComparer.Ordinal)) - { - var segmentCount = CriticalTableParserSupport.CountLineTypeSegments(cellEntry.Lines, affixLegendSymbols); - if (segmentCount > 2) - { - validationErrors.Add($"Cell '{cellEntry.RollBandLabel}/{cellEntry.GroupKey}/{cellEntry.ColumnKey}' interleaves prose and affix lines."); - } - - var rawAffixLines = cellEntry.Lines.Where(line => CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); - var descriptionLines = cellEntry.Lines.Where(line => !CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); - var rawCellText = string.Join(Environment.NewLine, cellEntry.Lines); - var descriptionText = CriticalTableParserSupport.CollapseWhitespace(string.Join(' ', descriptionLines)); - var rawAffixText = rawAffixLines.Count == 0 ? null : string.Join(Environment.NewLine, rawAffixLines); - - parsedCells.Add(new ParsedCriticalCellArtifact( - cellEntry.GroupKey, - cellEntry.RollBandLabel, - cellEntry.ColumnKey, - cellEntry.Lines, - rawCellText, - descriptionText, - rawAffixText)); - - parsedResults.Add(new ParsedCriticalResult( - cellEntry.GroupKey, - cellEntry.ColumnKey, - cellEntry.RollBandLabel, - rawCellText, - descriptionText, - rawAffixText)); - } + CriticalTableParserSupport.BuildParsedArtifacts(cellEntries, affixLegendSymbols, parsedCells, parsedResults, validationErrors); var expectedCellCount = rowAnchors.Count * ExpectedGroups.Length * ExpectedColumns.Length; if (parsedCells.Count != expectedCellCount) @@ -235,72 +190,4 @@ public sealed class GroupedVariantCriticalTableParser throw new InvalidOperationException("Could not find the grouped-variant column header row in the XML artifact."); } - - private static void RepairLeadingAffixLeakage(List cellEntries, ISet affixLegendSymbols) - { - var maxRowIndex = cellEntries.Count == 0 ? -1 : cellEntries.Max(item => item.RowIndex); - var axes = cellEntries - .Select(item => (item.GroupKey, item.ColumnKey)) - .Distinct() - .ToList(); - - for (var rowIndex = 0; rowIndex < maxRowIndex; rowIndex++) - { - foreach (var (groupKey, columnKey) in axes) - { - var current = cellEntries.SingleOrDefault(item => item.RowIndex == rowIndex && item.GroupKey == groupKey && item.ColumnKey == columnKey); - var next = cellEntries.SingleOrDefault(item => item.RowIndex == rowIndex + 1 && item.GroupKey == groupKey && item.ColumnKey == columnKey); - if (current is null || next is null) - { - continue; - } - - var leadingAffixCount = 0; - while (leadingAffixCount < next.Lines.Count && CriticalTableParserSupport.IsAffixLikeLine(next.Lines[leadingAffixCount], affixLegendSymbols)) - { - leadingAffixCount++; - } - - if (leadingAffixCount == 0 || leadingAffixCount == next.Lines.Count) - { - continue; - } - - current.Lines.AddRange(next.Lines.Take(leadingAffixCount)); - next.Lines.RemoveRange(0, leadingAffixCount); - } - } - } - - private static int ResolveRowBoundaryTop( - RowAnchor current, - RowAnchor next, - IReadOnlyList<(int Top, bool IsAffixLike)> bodyLines) - { - var linesBetweenLabels = bodyLines - .Where(item => item.Top >= current.Top && item.Top < next.Top) - .OrderBy(item => item.Top) - .ToList(); - - for (var index = linesBetweenLabels.Count - 2; index >= 0; index--) - { - if (linesBetweenLabels[index].IsAffixLike && !linesBetweenLabels[index + 1].IsAffixLike) - { - return (int)Math.Floor((linesBetweenLabels[index].Top + linesBetweenLabels[index + 1].Top) / 2.0) + 1; - } - } - - return (int)Math.Floor((current.Top + next.Top) / 2.0) + 1; - } - - private sealed record RowAnchor(string Label, int Top, int SortOrder); - - private sealed class CellEntry(string groupKey, string rollBandLabel, int rowIndex, string columnKey, List lines) - { - public string GroupKey { get; } = groupKey; - public string RollBandLabel { get; } = rollBandLabel; - public int RowIndex { get; } = rowIndex; - public string ColumnKey { get; } = columnKey; - public List Lines { get; } = lines; - } } diff --git a/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalBranch.cs b/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalBranch.cs new file mode 100644 index 0000000..869d4fd --- /dev/null +++ b/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalBranch.cs @@ -0,0 +1,19 @@ +namespace RolemasterDb.ImportTool.Parsing; + +public sealed class ParsedCriticalBranch( + string branchKind, + string? conditionKey, + string conditionText, + string rawText, + string descriptionText, + string? rawAffixText, + int sortOrder) +{ + public string BranchKind { get; } = branchKind; + public string? ConditionKey { get; } = conditionKey; + public string ConditionText { get; } = conditionText; + public string RawText { get; } = rawText; + public string DescriptionText { get; } = descriptionText; + public string? RawAffixText { get; } = rawAffixText; + public int SortOrder { get; } = sortOrder; +} diff --git a/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalCellArtifact.cs b/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalCellArtifact.cs index ecfdc19..9377d7a 100644 --- a/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalCellArtifact.cs +++ b/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalCellArtifact.cs @@ -5,15 +5,19 @@ public sealed class ParsedCriticalCellArtifact( string rollBandLabel, string columnKey, IReadOnlyList lines, + IReadOnlyList baseLines, string rawCellText, string descriptionText, - string? rawAffixText) + string? rawAffixText, + IReadOnlyList branches) { public string? GroupKey { get; } = groupKey; public string RollBandLabel { get; } = rollBandLabel; public string ColumnKey { get; } = columnKey; public IReadOnlyList Lines { get; } = lines; + public IReadOnlyList BaseLines { get; } = baseLines; public string RawCellText { get; } = rawCellText; public string DescriptionText { get; } = descriptionText; public string? RawAffixText { get; } = rawAffixText; + public IReadOnlyList Branches { get; } = branches; } diff --git a/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalResult.cs b/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalResult.cs index 7d89774..0132f4d 100644 --- a/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalResult.cs +++ b/src/RolemasterDb.ImportTool/Parsing/ParsedCriticalResult.cs @@ -6,7 +6,8 @@ public sealed class ParsedCriticalResult( string rollBandLabel, string rawCellText, string descriptionText, - string? rawAffixText) + string? rawAffixText, + IReadOnlyList branches) { public string? GroupKey { get; } = groupKey; public string ColumnKey { get; } = columnKey; @@ -14,4 +15,5 @@ public sealed class ParsedCriticalResult( public string RawCellText { get; } = rawCellText; public string DescriptionText { get; } = descriptionText; public string? RawAffixText { get; } = rawAffixText; + public IReadOnlyList Branches { get; } = branches; } diff --git a/src/RolemasterDb.ImportTool/Parsing/RowAnchor.cs b/src/RolemasterDb.ImportTool/Parsing/RowAnchor.cs new file mode 100644 index 0000000..86ff1a3 --- /dev/null +++ b/src/RolemasterDb.ImportTool/Parsing/RowAnchor.cs @@ -0,0 +1,3 @@ +namespace RolemasterDb.ImportTool.Parsing; + +internal sealed record RowAnchor(string Label, int Top, int SortOrder); diff --git a/src/RolemasterDb.ImportTool/Parsing/StandardCriticalTableParser.cs b/src/RolemasterDb.ImportTool/Parsing/StandardCriticalTableParser.cs index c250495..df9aa97 100644 --- a/src/RolemasterDb.ImportTool/Parsing/StandardCriticalTableParser.cs +++ b/src/RolemasterDb.ImportTool/Parsing/StandardCriticalTableParser.cs @@ -15,13 +15,7 @@ public sealed class StandardCriticalTableParser .ToList(); var bodyStartTop = headerFragments.Max(item => item.Top) + CriticalTableParserSupport.HeaderToBodyMinimumGap; - var keyTop = fragments - .Where(item => - string.Equals(item.Text, "Key:", StringComparison.OrdinalIgnoreCase) || - item.Text.Contains("must parry", StringComparison.OrdinalIgnoreCase) || - item.Text.Contains("attacker gets", StringComparison.OrdinalIgnoreCase)) - .Select(item => (int?)item.Top) - .Min() ?? int.MaxValue; + var keyTop = CriticalTableParserSupport.FindKeyTop(fragments); var affixLegendSymbols = CriticalTableParserSupport.DetectAffixLegendSymbols(fragments, keyTop); var leftCutoff = headerFragments.Min(item => item.Left) - 10; var rowLabelFragments = CriticalTableParserSupport.FindRowLabelFragments( @@ -29,44 +23,39 @@ public sealed class StandardCriticalTableParser leftCutoff, bodyStartTop, keyTop); - - var rowAnchors = rowLabelFragments - .OrderBy(item => item.Top) - .Select((item, index) => new RowAnchor(CriticalTableParserSupport.NormalizeRollBandLabel(item.Text), item.Top, index + 1)) - .ToList(); + var rowAnchors = CriticalTableParserSupport.CreateRowAnchors(rowLabelFragments); if (rowAnchors.Count == 0) { validationErrors.Add("No roll-band labels were found in the XML artifact."); } - var bodyFragments = fragments - .Where(item => - item.Top >= bodyStartTop && - item.Top < keyTop - CriticalTableParserSupport.TopGroupingTolerance && - !CriticalTableParserSupport.IsFooterPageNumberFragment(item, keyTop) && - !CriticalTableParserSupport.IsPotentialRowLabelFragment(item, leftCutoff) && - !rowAnchors.Any(anchor => anchor.Top == item.Top && string.Equals(anchor.Label, CriticalTableParserSupport.NormalizeRollBandLabel(item.Text), StringComparison.OrdinalIgnoreCase)) && - !headerFragments.Contains(item)) - .ToList(); - bodyFragments = CriticalTableParserSupport.SplitBoundaryCrossingAffixFragments(bodyFragments, columnCenters, affixLegendSymbols); + var bodyFragments = CriticalTableParserSupport.BuildBodyFragments( + fragments, + bodyStartTop, + keyTop, + leftCutoff, + rowAnchors, + headerFragments, + columnCenters, + affixLegendSymbols); var bodyLines = CriticalTableParserSupport.BuildBodyLines(bodyFragments, columnCenters, affixLegendSymbols); var parsedRollBands = rowAnchors .Select(anchor => CriticalTableParserSupport.CreateRollBand(anchor.Label, anchor.SortOrder)) .ToList(); - var cellEntries = new List(); + var cellEntries = new List(); for (var rowIndex = 0; rowIndex < rowAnchors.Count; rowIndex++) { var rowStart = rowIndex == 0 ? bodyStartTop - : ResolveRowBoundaryTop(rowAnchors[rowIndex - 1], rowAnchors[rowIndex], bodyLines); + : CriticalTableParserSupport.ResolveRowBoundaryTop(rowAnchors[rowIndex - 1], rowAnchors[rowIndex], bodyLines); var rowEnd = rowIndex == rowAnchors.Count - 1 ? keyTop - 1 - : ResolveRowBoundaryTop(rowAnchors[rowIndex], rowAnchors[rowIndex + 1], bodyLines); + : CriticalTableParserSupport.ResolveRowBoundaryTop(rowAnchors[rowIndex], rowAnchors[rowIndex + 1], bodyLines); var rowFragments = bodyFragments .Where(item => item.Top >= rowStart && item.Top < rowEnd) @@ -86,7 +75,8 @@ public sealed class StandardCriticalTableParser continue; } - cellEntries.Add(new CellEntry( + cellEntries.Add(new ColumnarCellEntry( + null, rowAnchors[rowIndex].Label, rowIndex, columnAnchor.Key, @@ -94,44 +84,11 @@ public sealed class StandardCriticalTableParser } } - RepairLeadingAffixLeakage(cellEntries, affixLegendSymbols); + CriticalTableParserSupport.RepairLeadingAffixLeakage(cellEntries, affixLegendSymbols); var parsedCells = new List(); var parsedResults = new List(); - - foreach (var cellEntry in cellEntries.OrderBy(item => item.RowIndex).ThenBy(item => item.ColumnKey)) - { - var segmentCount = CriticalTableParserSupport.CountLineTypeSegments(cellEntry.Lines, affixLegendSymbols); - - if (segmentCount > 2) - { - validationErrors.Add( - $"Cell '{cellEntry.RollBandLabel}/{cellEntry.ColumnKey}' interleaves prose and affix lines."); - } - - var rawAffixLines = cellEntry.Lines.Where(line => CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); - var descriptionLines = cellEntry.Lines.Where(line => !CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); - var rawCellText = string.Join(Environment.NewLine, cellEntry.Lines); - var descriptionText = CriticalTableParserSupport.CollapseWhitespace(string.Join(' ', descriptionLines)); - var rawAffixText = rawAffixLines.Count == 0 ? null : string.Join(Environment.NewLine, rawAffixLines); - - parsedCells.Add(new ParsedCriticalCellArtifact( - null, - cellEntry.RollBandLabel, - cellEntry.ColumnKey, - cellEntry.Lines, - rawCellText, - descriptionText, - rawAffixText)); - - parsedResults.Add(new ParsedCriticalResult( - null, - cellEntry.ColumnKey, - cellEntry.RollBandLabel, - rawCellText, - descriptionText, - rawAffixText)); - } + CriticalTableParserSupport.BuildParsedArtifacts(cellEntries, affixLegendSymbols, parsedCells, parsedResults, validationErrors); if (columnCenters.Count != 5) { @@ -185,68 +142,4 @@ public sealed class StandardCriticalTableParser throw new InvalidOperationException("Could not find the standard-table A-E header row in the XML artifact."); } - - private static void RepairLeadingAffixLeakage(List cellEntries, ISet affixLegendSymbols) - { - var maxRowIndex = cellEntries.Count == 0 ? -1 : cellEntries.Max(item => item.RowIndex); - var columnKeys = cellEntries.Select(item => item.ColumnKey).Distinct(StringComparer.OrdinalIgnoreCase).ToList(); - - for (var rowIndex = 0; rowIndex < maxRowIndex; rowIndex++) - { - foreach (var columnKey in columnKeys) - { - var current = cellEntries.SingleOrDefault(item => item.RowIndex == rowIndex && item.ColumnKey == columnKey); - var next = cellEntries.SingleOrDefault(item => item.RowIndex == rowIndex + 1 && item.ColumnKey == columnKey); - if (current is null || next is null) - { - continue; - } - - var leadingAffixCount = 0; - while (leadingAffixCount < next.Lines.Count && CriticalTableParserSupport.IsAffixLikeLine(next.Lines[leadingAffixCount], affixLegendSymbols)) - { - leadingAffixCount++; - } - - if (leadingAffixCount == 0 || leadingAffixCount == next.Lines.Count) - { - continue; - } - - current.Lines.AddRange(next.Lines.Take(leadingAffixCount)); - next.Lines.RemoveRange(0, leadingAffixCount); - } - } - } - - private static int ResolveRowBoundaryTop( - RowAnchor current, - RowAnchor next, - IReadOnlyList<(int Top, bool IsAffixLike)> bodyLines) - { - var linesBetweenLabels = bodyLines - .Where(item => item.Top >= current.Top && item.Top < next.Top) - .OrderBy(item => item.Top) - .ToList(); - - for (var index = linesBetweenLabels.Count - 2; index >= 0; index--) - { - if (linesBetweenLabels[index].IsAffixLike && !linesBetweenLabels[index + 1].IsAffixLike) - { - return (int)Math.Floor((linesBetweenLabels[index].Top + linesBetweenLabels[index + 1].Top) / 2.0) + 1; - } - } - - return (int)Math.Floor((current.Top + next.Top) / 2.0) + 1; - } - - private sealed record RowAnchor(string Label, int Top, int SortOrder); - - private sealed class CellEntry(string rollBandLabel, int rowIndex, string columnKey, List lines) - { - public string RollBandLabel { get; } = rollBandLabel; - public int RowIndex { get; } = rowIndex; - public string ColumnKey { get; } = columnKey; - public List Lines { get; } = lines; - } } diff --git a/src/RolemasterDb.ImportTool/Parsing/VariantColumnCriticalTableParser.cs b/src/RolemasterDb.ImportTool/Parsing/VariantColumnCriticalTableParser.cs index 5e1a716..91f8dff 100644 --- a/src/RolemasterDb.ImportTool/Parsing/VariantColumnCriticalTableParser.cs +++ b/src/RolemasterDb.ImportTool/Parsing/VariantColumnCriticalTableParser.cs @@ -28,13 +28,7 @@ public sealed class VariantColumnCriticalTableParser .ToList(); var bodyStartTop = headerFragments.Max(item => item.Top) + CriticalTableParserSupport.HeaderToBodyMinimumGap; - var keyTop = fragments - .Where(item => - string.Equals(item.Text, "Key:", StringComparison.OrdinalIgnoreCase) || - item.Text.Contains("must parry", StringComparison.OrdinalIgnoreCase) || - item.Text.Contains("attacker gets", StringComparison.OrdinalIgnoreCase)) - .Select(item => (int?)item.Top) - .Min() ?? int.MaxValue; + var keyTop = CriticalTableParserSupport.FindKeyTop(fragments); var affixLegendSymbols = CriticalTableParserSupport.DetectAffixLegendSymbols(fragments, keyTop); var leftCutoff = headerFragments.Min(item => item.Left) - 10; var rowLabelFragments = CriticalTableParserSupport.FindRowLabelFragments( @@ -42,11 +36,7 @@ public sealed class VariantColumnCriticalTableParser leftCutoff, bodyStartTop, keyTop); - - var rowAnchors = rowLabelFragments - .OrderBy(item => item.Top) - .Select((item, index) => new RowAnchor(CriticalTableParserSupport.NormalizeRollBandLabel(item.Text), item.Top, index + 1)) - .ToList(); + var rowAnchors = CriticalTableParserSupport.CreateRowAnchors(rowLabelFragments); if (rowAnchors.Count == 0) { @@ -57,33 +47,32 @@ public sealed class VariantColumnCriticalTableParser .Select(item => (item.Key, item.CenterX)) .ToList(); - var bodyFragments = fragments - .Where(item => - item.Top >= bodyStartTop && - item.Top < keyTop - CriticalTableParserSupport.TopGroupingTolerance && - !CriticalTableParserSupport.IsFooterPageNumberFragment(item, keyTop) && - !CriticalTableParserSupport.IsPotentialRowLabelFragment(item, leftCutoff) && - !rowAnchors.Any(anchor => anchor.Top == item.Top && string.Equals(anchor.Label, CriticalTableParserSupport.NormalizeRollBandLabel(item.Text), StringComparison.OrdinalIgnoreCase)) && - !headerFragments.Contains(item)) - .ToList(); - bodyFragments = CriticalTableParserSupport.SplitBoundaryCrossingAffixFragments(bodyFragments, columnCenters, affixLegendSymbols); + var bodyFragments = CriticalTableParserSupport.BuildBodyFragments( + fragments, + bodyStartTop, + keyTop, + leftCutoff, + rowAnchors, + headerFragments, + columnCenters, + affixLegendSymbols); var bodyLines = CriticalTableParserSupport.BuildBodyLines(bodyFragments, columnCenters, affixLegendSymbols); var parsedRollBands = rowAnchors .Select(anchor => CriticalTableParserSupport.CreateRollBand(anchor.Label, anchor.SortOrder)) .ToList(); - var cellEntries = new List(); + var cellEntries = new List(); for (var rowIndex = 0; rowIndex < rowAnchors.Count; rowIndex++) { var rowStart = rowIndex == 0 ? bodyStartTop - : ResolveRowBoundaryTop(rowAnchors[rowIndex - 1], rowAnchors[rowIndex], bodyLines); + : CriticalTableParserSupport.ResolveRowBoundaryTop(rowAnchors[rowIndex - 1], rowAnchors[rowIndex], bodyLines); var rowEnd = rowIndex == rowAnchors.Count - 1 ? keyTop - 1 - : ResolveRowBoundaryTop(rowAnchors[rowIndex], rowAnchors[rowIndex + 1], bodyLines); + : CriticalTableParserSupport.ResolveRowBoundaryTop(rowAnchors[rowIndex], rowAnchors[rowIndex + 1], bodyLines); var rowFragments = bodyFragments .Where(item => item.Top >= rowStart && item.Top < rowEnd) @@ -103,7 +92,8 @@ public sealed class VariantColumnCriticalTableParser continue; } - cellEntries.Add(new CellEntry( + cellEntries.Add(new ColumnarCellEntry( + null, rowAnchors[rowIndex].Label, rowIndex, columnAnchor.Key, @@ -111,42 +101,11 @@ public sealed class VariantColumnCriticalTableParser } } - RepairLeadingAffixLeakage(cellEntries, affixLegendSymbols); + CriticalTableParserSupport.RepairLeadingAffixLeakage(cellEntries, affixLegendSymbols); var parsedCells = new List(); var parsedResults = new List(); - - foreach (var cellEntry in cellEntries.OrderBy(item => item.RowIndex).ThenBy(item => item.ColumnKey, StringComparer.Ordinal)) - { - var segmentCount = CriticalTableParserSupport.CountLineTypeSegments(cellEntry.Lines, affixLegendSymbols); - if (segmentCount > 2) - { - validationErrors.Add($"Cell '{cellEntry.RollBandLabel}/{cellEntry.ColumnKey}' interleaves prose and affix lines."); - } - - var rawAffixLines = cellEntry.Lines.Where(line => CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); - var descriptionLines = cellEntry.Lines.Where(line => !CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList(); - var rawCellText = string.Join(Environment.NewLine, cellEntry.Lines); - var descriptionText = CriticalTableParserSupport.CollapseWhitespace(string.Join(' ', descriptionLines)); - var rawAffixText = rawAffixLines.Count == 0 ? null : string.Join(Environment.NewLine, rawAffixLines); - - parsedCells.Add(new ParsedCriticalCellArtifact( - null, - cellEntry.RollBandLabel, - cellEntry.ColumnKey, - cellEntry.Lines, - rawCellText, - descriptionText, - rawAffixText)); - - parsedResults.Add(new ParsedCriticalResult( - null, - cellEntry.ColumnKey, - cellEntry.RollBandLabel, - rawCellText, - descriptionText, - rawAffixText)); - } + CriticalTableParserSupport.BuildParsedArtifacts(cellEntries, affixLegendSymbols, parsedCells, parsedResults, validationErrors); if (columnAnchors.Count != ExpectedColumns.Length) { @@ -208,69 +167,5 @@ public sealed class VariantColumnCriticalTableParser ExpectedColumns.SingleOrDefault(item => string.Equals(item.Label, value.Trim(), StringComparison.OrdinalIgnoreCase)) ?? throw new InvalidOperationException($"Unsupported variant column label '{value}'."); - private static void RepairLeadingAffixLeakage(List cellEntries, ISet affixLegendSymbols) - { - var maxRowIndex = cellEntries.Count == 0 ? -1 : cellEntries.Max(item => item.RowIndex); - var columnKeys = cellEntries.Select(item => item.ColumnKey).Distinct(StringComparer.OrdinalIgnoreCase).ToList(); - - for (var rowIndex = 0; rowIndex < maxRowIndex; rowIndex++) - { - foreach (var columnKey in columnKeys) - { - var current = cellEntries.SingleOrDefault(item => item.RowIndex == rowIndex && item.ColumnKey == columnKey); - var next = cellEntries.SingleOrDefault(item => item.RowIndex == rowIndex + 1 && item.ColumnKey == columnKey); - if (current is null || next is null) - { - continue; - } - - var leadingAffixCount = 0; - while (leadingAffixCount < next.Lines.Count && CriticalTableParserSupport.IsAffixLikeLine(next.Lines[leadingAffixCount], affixLegendSymbols)) - { - leadingAffixCount++; - } - - if (leadingAffixCount == 0 || leadingAffixCount == next.Lines.Count) - { - continue; - } - - current.Lines.AddRange(next.Lines.Take(leadingAffixCount)); - next.Lines.RemoveRange(0, leadingAffixCount); - } - } - } - - private static int ResolveRowBoundaryTop( - RowAnchor current, - RowAnchor next, - IReadOnlyList<(int Top, bool IsAffixLike)> bodyLines) - { - var linesBetweenLabels = bodyLines - .Where(item => item.Top >= current.Top && item.Top < next.Top) - .OrderBy(item => item.Top) - .ToList(); - - for (var index = linesBetweenLabels.Count - 2; index >= 0; index--) - { - if (linesBetweenLabels[index].IsAffixLike && !linesBetweenLabels[index + 1].IsAffixLike) - { - return (int)Math.Floor((linesBetweenLabels[index].Top + linesBetweenLabels[index + 1].Top) / 2.0) + 1; - } - } - - return (int)Math.Floor((current.Top + next.Top) / 2.0) + 1; - } - private sealed record ColumnDefinition(string Key, string Label); - - private sealed record RowAnchor(string Label, int Top, int SortOrder); - - private sealed class CellEntry(string rollBandLabel, int rowIndex, string columnKey, List lines) - { - public string RollBandLabel { get; } = rollBandLabel; - public int RowIndex { get; } = rowIndex; - public string ColumnKey { get; } = columnKey; - public List Lines { get; } = lines; - } }