using System; using System.Collections.Generic; namespace PKHeX.Core; /// /// Default formatter for Legality Result displays. /// public sealed class BaseLegalityFormatter : ILegalityFormatter { /// /// Gets a minimal report string for the analysis. /// public string GetReport(in LegalityLocalizationContext la) { var l = la.Analysis; if (l.Valid) return la.Settings.Lines.Legal; if (!l.Parsed) return la.Settings.Lines.AnalysisUnavailable; List lines = []; GetLegalityReportLines(la, lines); return string.Join(Environment.NewLine, lines); } /// /// Gets a verbose report string for the analysis. /// public string GetReportVerbose(in LegalityLocalizationContext la) { var l = la.Analysis; if (!l.Parsed) return la.Settings.Lines.AnalysisUnavailable; var lines = GetVerboseLegalityReportLines(la); return string.Join(Environment.NewLine, lines); } private static void GetLegalityReportLines(in LegalityLocalizationContext la, List lines) { var l = la.Analysis; var info = l.Info; var pk = l.Entity; LegalityFormatting.AddMoves(la, info.Moves, lines, pk.Context, false); if (pk.Format >= 6) LegalityFormatting.AddRelearn(la, info.Relearn, lines, false); LegalityFormatting.AddSecondaryChecksInvalid(la, l.Results, lines); } private static List GetVerboseLegalityReportLines(in LegalityLocalizationContext la) { var l = la.Analysis; var lines = new List(); if (l.Valid) { lines.Add(la.Settings.Lines.Legal); lines.Add(string.Empty); } else { GetLegalityReportLines(la, lines); } var info = l.Info; var pk = l.Entity; int initialCount = lines.Count; LegalityFormatting.AddMoves(la, info.Moves, lines, pk.Context, true); if (pk.Format >= 6) LegalityFormatting.AddRelearn(la, info.Relearn, lines, true); if (lines.Count != initialCount) // move info added, break for next section lines.Add(string.Empty); LegalityFormatting.AddSecondaryChecksValid(la, l.Results, lines); lines.Add(string.Empty); LegalityFormatting.AddEncounterInfo(la, lines); return lines; } }