public TldRule(string ruleData, TldRuleDivision division = TldRuleDivision.Unknown) { if (string.IsNullOrEmpty(ruleData)) { throw new ArgumentException("RuleData is emtpy"); } this.Division = division; var parts = ruleData.Split('.').Select(x => x.Trim()).ToList(); foreach (var part in parts) { if (string.IsNullOrEmpty(part)) { throw new FormatException("Rule contains empty part"); } if (part.Contains("*") && part != "*") { throw new FormatException("Wildcard syntax not correct"); } } if (ruleData.StartsWith("!", StringComparison.InvariantCultureIgnoreCase)) { this.Type = TldRuleType.WildcardException; this.Name = ruleData.Substring(1).ToLower(); this.LabelCount = parts.Count - 1; //Left-most label is removed for Wildcard Exceptions } else if (ruleData.Contains("*")) { this.Type = TldRuleType.Wildcard; this.Name = ruleData.ToLower(); this.LabelCount = parts.Count; } else { this.Type = TldRuleType.Normal; this.Name = ruleData.ToLower(); this.LabelCount = parts.Count; } }
public IEnumerable <TldRule> ParseRules([NotNull] IEnumerable <string> lines) { List <TldRule> items = new List <TldRule>(); TldRuleDivision division = TldRuleDivision.Unknown; foreach (string line in lines) { //Ignore empty lines if (string.IsNullOrEmpty(line)) { continue; } //Ignore comments (and set Division) if (line.StartsWith("//")) { //Detect Division if (line.StartsWith("// ===BEGIN ICANN DOMAINS===")) { division = TldRuleDivision.ICANN; } else if (line.StartsWith("// ===END ICANN DOMAINS===")) { division = TldRuleDivision.Unknown; } else if (line.StartsWith("// ===BEGIN PRIVATE DOMAINS===")) { division = TldRuleDivision.Private; } else if (line.StartsWith("// ===END PRIVATE DOMAINS===")) { division = TldRuleDivision.Unknown; } continue; } TldRule tldRule = new TldRule(line.Trim(), division); items.Add(tldRule); } return(items); }