public LanguageTag[] Filter(LanguageTag[] languageTags) { List <LanguageTag> filteredLanguageTags = new List <LanguageTag>(Count); foreach (var value in this) { LanguageTag matchingLanguageTag = null; int? matchingLanguageTagSepcificy = null; foreach (var languageTag in languageTags) { if (!filteredLanguageTags.Contains(languageTag) && Match(value, languageTag) && (matchingLanguageTagSepcificy == null || languageTag.Subtags.Length < matchingLanguageTagSepcificy)) { matchingLanguageTagSepcificy = languageTag.Subtags.Length; matchingLanguageTag = languageTag; } } if (matchingLanguageTag != null) { filteredLanguageTags.Add(matchingLanguageTag); } } return(filteredLanguageTags.ToArray()); }
public bool Match(LanguageTag languageTag) { switch (Type) { case LanguageRangeType.Extended: return(ExtendedFilteringMatch(languageTag)); case LanguageRangeType.Basic: default: return(BasicFilteringMatch(languageTag)); } }
public static bool Match(LanguageRange languageRange, LanguageTag languageTag) { if (languageRange.ToString() == "*" || string.Compare(languageRange.ToString(), languageTag.ToString(), StringComparison.InvariantCultureIgnoreCase) == 0) { return(true); } if (languageRange.Subtags.Length <= languageTag.Subtags.Length) { for (int i = 0; i < languageRange.Subtags.Length; i++) { if (string.Compare(languageRange.Subtags[i], languageTag.Subtags[i], StringComparison.InvariantCultureIgnoreCase) != 0) { return(false); } } return(true); } return(false); }
public bool BasicFilteringMatch(LanguageTag languageTag) { if (this.ToString() == "*" || string.Compare(this.ToString(), languageTag.ToString(), StringComparison.InvariantCultureIgnoreCase) == 0) { return(true); } if (this.Subtags.Length <= languageTag.Subtags.Length) { for (int i = 0; i < this.Subtags.Length; i++) { if (string.Compare(this.Subtags[i], languageTag.Subtags[i], StringComparison.InvariantCultureIgnoreCase) != 0) { return(false); } } return(true); } return(false); }
public bool ExtendedFilteringMatch(LanguageTag languageTag) { if (SubtagMatch(Subtags[0], languageTag.Subtags[0])) { int currentlanguageRangeSubTag = 1; int currentlanguageTagSubTag = 1; while (Subtags.GetUpperBound(0) <= currentlanguageRangeSubTag) { if (Subtags[currentlanguageRangeSubTag] == "*") { currentlanguageRangeSubTag++; } else if (languageTag.Subtags.GetUpperBound(0) < currentlanguageTagSubTag) { return(false); } else if (SubtagMatch(Subtags[currentlanguageRangeSubTag], languageTag.Subtags[currentlanguageTagSubTag])) { currentlanguageRangeSubTag++; currentlanguageTagSubTag++; } else if (Regex.IsMatch(languageTag.Subtags[currentlanguageTagSubTag], @"^[\dA-Za-z]$")) { return(false); } else { currentlanguageTagSubTag++; } } return(true); } return(false); }