Implement phase 6 critical effect normalization
This commit is contained in:
@@ -2,13 +2,14 @@ namespace RolemasterDb.ImportTool.Parsing;
|
||||
|
||||
internal static class CriticalCellTextParser
|
||||
{
|
||||
internal static CriticalCellParseContent Parse(IReadOnlyList<string> lines, ISet<string> affixLegendSymbols)
|
||||
internal static CriticalCellParseContent Parse(IReadOnlyList<string> lines, AffixLegend affixLegend)
|
||||
{
|
||||
var validationErrors = new List<string>();
|
||||
var branchStartIndexes = FindBranchStartIndexes(lines);
|
||||
var baseLineCount = branchStartIndexes.Count == 0 ? lines.Count : branchStartIndexes[0];
|
||||
var baseLines = lines.Take(baseLineCount).ToList();
|
||||
var branches = new List<ParsedCriticalBranch>();
|
||||
var affixLegendSymbols = affixLegend.ClassificationSymbols;
|
||||
|
||||
validationErrors.AddRange(ValidateSegmentCount(baseLines, affixLegendSymbols, "Base content"));
|
||||
|
||||
@@ -22,18 +23,19 @@ internal static class CriticalCellTextParser
|
||||
branches.Add(ParseBranch(
|
||||
lines.Skip(startIndex).Take(endIndex - startIndex).ToList(),
|
||||
branchIndex + 1,
|
||||
affixLegendSymbols,
|
||||
affixLegend,
|
||||
validationErrors));
|
||||
}
|
||||
|
||||
var (rawCellText, descriptionText, rawAffixText) = BuildTextSections(baseLines, affixLegendSymbols);
|
||||
return new CriticalCellParseContent(baseLines, rawCellText, descriptionText, rawAffixText, branches, validationErrors);
|
||||
var effects = AffixEffectParser.Parse(rawAffixText, affixLegend);
|
||||
return new CriticalCellParseContent(baseLines, rawCellText, descriptionText, rawAffixText, effects, branches, validationErrors);
|
||||
}
|
||||
|
||||
private static ParsedCriticalBranch ParseBranch(
|
||||
IReadOnlyList<string> branchLines,
|
||||
int sortOrder,
|
||||
ISet<string> affixLegendSymbols,
|
||||
AffixLegend affixLegend,
|
||||
List<string> validationErrors)
|
||||
{
|
||||
var firstLine = branchLines[0];
|
||||
@@ -56,9 +58,11 @@ internal static class CriticalCellTextParser
|
||||
}
|
||||
}
|
||||
|
||||
var affixLegendSymbols = affixLegend.ClassificationSymbols;
|
||||
validationErrors.AddRange(ValidateSegmentCount(payloadLines, affixLegendSymbols, $"Branch '{conditionText}'"));
|
||||
|
||||
var (_, descriptionText, rawAffixText) = BuildTextSections(payloadLines, affixLegendSymbols);
|
||||
var effects = AffixEffectParser.Parse(rawAffixText, affixLegend);
|
||||
return new ParsedCriticalBranch(
|
||||
"conditional",
|
||||
CriticalTableParserSupport.NormalizeConditionKey(conditionText),
|
||||
@@ -66,6 +70,7 @@ internal static class CriticalCellTextParser
|
||||
string.Join(Environment.NewLine, branchLines),
|
||||
descriptionText,
|
||||
rawAffixText,
|
||||
effects,
|
||||
sortOrder);
|
||||
}
|
||||
|
||||
@@ -86,7 +91,7 @@ internal static class CriticalCellTextParser
|
||||
|
||||
private static IReadOnlyList<string> ValidateSegmentCount(
|
||||
IReadOnlyList<string> lines,
|
||||
ISet<string> affixLegendSymbols,
|
||||
IReadOnlySet<string> affixLegendSymbols,
|
||||
string scope)
|
||||
{
|
||||
if (lines.Count == 0)
|
||||
@@ -102,7 +107,7 @@ internal static class CriticalCellTextParser
|
||||
|
||||
private static (string RawText, string DescriptionText, string? RawAffixText) BuildTextSections(
|
||||
IReadOnlyList<string> lines,
|
||||
ISet<string> affixLegendSymbols)
|
||||
IReadOnlySet<string> affixLegendSymbols)
|
||||
{
|
||||
var rawText = string.Join(Environment.NewLine, lines);
|
||||
var rawAffixLines = lines.Where(line => CriticalTableParserSupport.IsAffixLikeLine(line, affixLegendSymbols)).ToList();
|
||||
|
||||
Reference in New Issue
Block a user