public void ConvertToPalasoConformPrivateUseRfc5646Tag(string flexConformPrivateUseRfc5646Tag)
        {
            string language   = String.Empty;
            string script     = String.Empty;
            string region     = String.Empty;
            string variant    = String.Empty;
            string privateUse = String.Empty;

            var tokens = flexConformPrivateUseRfc5646Tag.Split(new[] { '-' });

            for (int position = 0; position < tokens.Length; ++position)
            {
                string currentToken = tokens[position];
                if (position == 0)
                {
                    if (!currentToken.Equals("x", StringComparison.OrdinalIgnoreCase))
                    {
                        throw new ValidationException(String.Format("The rfctag {0} does not start with 'x-' or 'X-'.",
                                                                    flexConformPrivateUseRfc5646Tag));
                    }
                    language = currentToken;
                }
                else if (position == 1 && !StandardSubtags.IsValidIso15924ScriptCode(currentToken))
                {
                    language = language + '-' + currentToken;
                }
                else if (StandardSubtags.IsValidIso15924ScriptCode(currentToken))
                {
                    if (!String.IsNullOrEmpty(region) || !String.IsNullOrEmpty(variant))
                    {
                        throw new ValidationException(
                                  String.Format(
                                      "The rfctag '{0}' contains a misplaced Script subtag (i.e. it was preceded by a region or variant subtag.",
                                      flexConformPrivateUseRfc5646Tag));
                    }
                    script = currentToken;
                }
                else if (StandardSubtags.IsValidIso3166RegionCode(currentToken))
                {
                    if (!String.IsNullOrEmpty(variant))
                    {
                        throw new ValidationException(
                                  String.Format(
                                      "The rfctag '{0}' contains a misplaced Region subtag (i.e. it was preceded by a variant subtag.",
                                      flexConformPrivateUseRfc5646Tag));
                    }
                    region = currentToken;
                }
                else if (StandardSubtags.IsValidRegisteredVariantCode(currentToken))
                {
                    variant = variant + currentToken;
                }
                else
                {
                    privateUse = String.IsNullOrEmpty(privateUse) ? currentToken : privateUse + '-' + currentToken;
                }
            }
            variant = IetfLanguageTag.ConcatenateVariantAndPrivateUse(variant, privateUse);
            ConvertToPalasoConformPrivateUseRfc5646Tag(language, script, region, variant);
        }
        public void ConvertToPalasoConformPrivateUseRfc5646Tag(string language, string script, string region, string variant)
        {
            string newVariant    = "";
            string newPrivateUse = "";

            _script = script;
            _region = region;

            if (!String.IsNullOrEmpty(variant))
            {
                IetfLanguageTag.SplitVariantAndPrivateUse(variant, out newVariant, out newPrivateUse);
            }
            IEnumerable <string> privateUseSubtagsWithoutXs = StripXs(newPrivateUse);
            IEnumerable <string> languageSubtagsWithoutXs   = StripXs(language);

            newPrivateUse = String.Join("-", (languageSubtagsWithoutXs.Union(privateUseSubtagsWithoutXs)).Where(str => !String.IsNullOrEmpty(str)).ToArray());

            _variant = IetfLanguageTag.ConcatenateVariantAndPrivateUse(newVariant, newPrivateUse);

            if (!string.IsNullOrEmpty(script) || !string.IsNullOrEmpty(region) || !string.IsNullOrEmpty(newVariant))
            {
                _language = "qaa";
            }
        }
예제 #3
0
        public void ConcatenateVariantAndPrivateUse_BogusVariantBadprivateUse_HappilyGluesTheTwoTogether()
        {
            string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("bogusvariant", "etic-emic-audio");

            Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("bogusvariant-x-etic-emic-audio"));
        }
예제 #4
0
        public void ConcatenateVariantAndPrivateUse_VariantAndPrivateUseWithCapitalXDash_ReturnsConcatenatedVariantAndPrivateUse()
        {
            string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("1901", "X-audio");

            Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("1901-X-audio"));
        }
예제 #5
0
        public void ConcatenateVariantAndPrivateUse_PrivateUseWithCapitalXDashOnly_ReturnsPrivateUseWithxDash()
        {
            string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("", "X-audio");

            Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("X-audio"));
        }
예제 #6
0
        public void ConcatenateVariantAndPrivateUse_VariantOnly_ReturnsVariant()
        {
            string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("1901", string.Empty);

            Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("1901"));
        }