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());
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }