public void Generate(string filePath, List <string> areaNames, DistinctColorList distinctColorList) { const string monsoonPattern = @"\s*?monsoon\s*?=\s*?{.*?}\s*?"; const string blockPattern = @"(?<regionName>(?<=\}|^)\s*?\w+?)\s*?\=\s*?\{\s*?areas\s*?\=\s*?\{(?<areas>.*?(?=\}\s*?\}))"; Names = new List <string>(); AreaToRegions = new int[areaNames.Count]; RegionColors = new List <Color32>(); var rawFile = File.ReadAllText(filePath); // Triplicate remover. LoadMethods.EntireAllInOneRemover(ref rawFile); var areaLookup = new Dictionary <string, int>(areaNames.Count); for (var index = 0; index < areaNames.Count; index++) { areaLookup[areaNames[index]] = index; } // Not using monsoon data, removing them all. rawFile = Regex.Replace(rawFile, monsoonPattern, ""); // Adding Unknown as default area. Names.Add("unknown"); RegionColors.Add(Color.white); // Get blocks. var blocks = Regex.Match(rawFile, blockPattern); while (blocks.Success) { var name = blocks.Groups["regionName"].Value.Trim(); Names.Add(name); RegionColors.Add(distinctColorList.GetNextColor()); var areaSplit = blocks.Groups["areas"].Value.Trim() .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var areaString in areaSplit) { if (areaLookup.TryGetValue(areaString, out var index)) { AreaToRegions[index] = Names.Count - 1; } } blocks = blocks.NextMatch(); } distinctColorList.ResetColorList(); }
public void Generate(string filePath, List <string> regionNames, DistinctColorList distinctColorList) { const string blockPattern = @"(?<superName>(?<=\}|^)\s*?\w+?)\s*?\=\s*?{(?<regions>.*?(?=\}))"; Names = new List <string>(); RegionsToSupers = new int[regionNames.Count]; Colors = new List <Color32>(); var rawFile = File.ReadAllText(filePath); // Triplicate remover. LoadMethods.EntireAllInOneRemover(ref rawFile); var regionLookup = new Dictionary <string, int>(regionNames.Count); for (var index = 0; index < regionNames.Count; index++) { regionLookup[regionNames[index]] = index; } // Adding Unknown as default area. Names.Add("unknown"); Colors.Add(Color.white); // Get blocks. var blocks = Regex.Match(rawFile, blockPattern); while (blocks.Success) { var name = blocks.Groups["superName"].Value.Trim(); Names.Add(name); Colors.Add(distinctColorList.GetNextColor()); var regionSplit = blocks.Groups["regions"].Value.Trim() .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var areaString in regionSplit) { if (regionLookup.TryGetValue(areaString, out var index)) { RegionsToSupers[index] = Names.Count - 1; } } blocks = blocks.NextMatch(); } distinctColorList.ResetColorList(); }
public void Generate(string areasPath, List <int> idIndices, DistinctColorList distinctColorList) { const string colorPattern = @"(?<areaName>(?<=\}|^)\w+?)\s*?\=\s*?\{\s*?color\s*?\=\s*?\{(?<color>.*?(?=\}))"; const string blockPattern = @"(?<areaName>(?<=^|\}).*?(?=\=)).*?(?<provIds>(?<=\{).*?(?=\}))"; const string colorRemovalPattern = @"color.*?}"; ProvinceToAreas = new int[idIndices.Count]; Names = new List <string>(); AreaColors = new List <Color32>(); var customColors = new Dictionary <string, Color32>(); var idLookup = new Dictionary <int, int>(idIndices.Count); for (var index = 0; index < idIndices.Count; index++) { idLookup[idIndices[index]] = index; } var areaFile = File.ReadAllText(areasPath); // Triplicate remover. LoadMethods.EntireAllInOneRemover(ref areaFile); // Finding colors needs to be first. var colors = Regex.Match(areaFile, colorPattern); while (colors.Success) { customColors[colors.Groups["areaName"].Value.Trim()] = LoadMethods.ParseColor32(colors.Groups["color"].Value); colors = colors.NextMatch(); } // Removing colors. areaFile = Regex.Replace(areaFile, colorRemovalPattern, ""); // Adding Unknown as default area. Names.Add("unknown"); AreaColors.Add(Color.white); // Get blocks. var blocks = Regex.Match(areaFile, blockPattern); while (blocks.Success) { var name = blocks.Groups["areaName"].Value.Trim(); Names.Add(name); if (customColors.TryGetValue(name, out var predefinedColor)) { AreaColors.Add(predefinedColor); } else { AreaColors.Add(distinctColorList.GetNextColor()); } var provinces = blocks.Groups["provIds"].Value.Trim() .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var idString in provinces) { if (!int.TryParse(idString, out var id)) { throw new Exception( $"Invalid province id '{idString}' found in area '{Names.Last()}' parsing."); } if (idLookup.TryGetValue(id, out var index)) { ProvinceToAreas[index] = Names.Count - 1; } } blocks = blocks.NextMatch(); } distinctColorList.ResetColorList(); }