Move province and power regexes to Map
This commit is contained in:
parent
973f8ea0d7
commit
93b106da1e
|
@ -37,6 +37,16 @@ public class Map
|
||||||
.ToDictionary(location => location.Key);
|
.ToDictionary(location => location.Key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A regex that matches any of the power names for this variant.
|
||||||
|
/// </summary>
|
||||||
|
public string PowerRegex => $"({string.Join("|", Powers)})";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A regex that matches any of the province names or abbreviations for this variant.
|
||||||
|
/// </summary>
|
||||||
|
public string ProvinceRegex => $"({string.Join("|", Provinces.SelectMany(p => p.AllNames))})";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get a province by name. Throws if the province is not found.
|
/// Get a province by name. Throws if the province is not found.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -31,6 +31,11 @@ public class Province
|
||||||
public IEnumerable<Location> Locations => LocationList;
|
public IEnumerable<Location> Locations => LocationList;
|
||||||
private List<Location> LocationList { get; set; }
|
private List<Location> LocationList { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The province's name and abbreviations as a single enumeration.
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<string> AllNames => Abbreviations.Append(Name);
|
||||||
|
|
||||||
public Province(string name, string[] abbreviations, bool isSupply, bool isTime)
|
public Province(string name, string[] abbreviations, bool isSupply, bool isTime)
|
||||||
{
|
{
|
||||||
this.Name = name;
|
this.Name = name;
|
||||||
|
|
|
@ -4,12 +4,6 @@ namespace MultiversalDiplomacy.Model;
|
||||||
|
|
||||||
public class OrderRegex(World world)
|
public class OrderRegex(World world)
|
||||||
{
|
{
|
||||||
static IEnumerable<string> AllProvinceNames(Province prov) => prov.Abbreviations.Append(prov.Name);
|
|
||||||
|
|
||||||
public string Power = $"({string.Join("|", world.Powers)})";
|
|
||||||
|
|
||||||
public string Province = $"({string.Join("|", world.Provinces.SelectMany(AllProvinceNames))})";
|
|
||||||
|
|
||||||
public const string Type = "(A|F|Army|Fleet)";
|
public const string Type = "(A|F|Army|Fleet)";
|
||||||
|
|
||||||
public const string Timeline = "([A-Za-z]+)";
|
public const string Timeline = "([A-Za-z]+)";
|
||||||
|
@ -20,9 +14,9 @@ public class OrderRegex(World world)
|
||||||
|
|
||||||
public const string ParenLocation = "(?:\\(([A-Za-z ]+)\\))";
|
public const string ParenLocation = "(?:\\(([A-Za-z ]+)\\))";
|
||||||
|
|
||||||
public string FullLocation => $"(?:{Timeline}-)?{Province}(?:{SlashLocation}|{ParenLocation})?(?:@{Turn})?";
|
public string FullLocation => $"(?:{Timeline}-)?{world.Map.ProvinceRegex}(?:{SlashLocation}|{ParenLocation})?(?:@{Turn})?";
|
||||||
|
|
||||||
public string Unit => $"(?:(?:{Power} )?{Type} )?{FullLocation}";
|
public string Unit => $"(?:(?:{world.Map.PowerRegex} )?{Type} )?{FullLocation}";
|
||||||
|
|
||||||
public const string HoldVerb = "(h|hold|holds)";
|
public const string HoldVerb = "(h|hold|holds)";
|
||||||
|
|
||||||
|
|
|
@ -100,8 +100,7 @@ public class SetupScriptHandler(World world, bool strict = false) : IScriptHandl
|
||||||
{
|
{
|
||||||
newUnit = null;
|
newUnit = null;
|
||||||
|
|
||||||
OrderRegex re = new(World);
|
Regex reUnit = new($"^{World.Map.PowerRegex} {OrderRegex.Type} {World.Map.ProvinceRegex}(?:{SlashLocation}|{ParenLocation})?$");
|
||||||
Regex reUnit = new($"^{re.Power} {OrderRegex.Type} {re.Province}(?:{SlashLocation}|{ParenLocation})?$");
|
|
||||||
Match match = reUnit.Match(unitSpec);
|
Match match = reUnit.Match(unitSpec);
|
||||||
if (!match.Success) {
|
if (!match.Success) {
|
||||||
Console.WriteLine($"Could not match unit spec \"{unitSpec}\"");
|
Console.WriteLine($"Could not match unit spec \"{unitSpec}\"");
|
||||||
|
|
Loading…
Reference in New Issue