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"; } }
public void ConcatenateVariantAndPrivateUse_BogusVariantBadprivateUse_HappilyGluesTheTwoTogether() { string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("bogusvariant", "etic-emic-audio"); Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("bogusvariant-x-etic-emic-audio")); }
public void ConcatenateVariantAndPrivateUse_VariantAndPrivateUseWithCapitalXDash_ReturnsConcatenatedVariantAndPrivateUse() { string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("1901", "X-audio"); Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("1901-X-audio")); }
public void ConcatenateVariantAndPrivateUse_PrivateUseWithCapitalXDashOnly_ReturnsPrivateUseWithxDash() { string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("", "X-audio"); Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("X-audio")); }
public void ConcatenateVariantAndPrivateUse_VariantOnly_ReturnsVariant() { string concatenatedVariantAndPrivateUse = IetfLanguageTag.ConcatenateVariantAndPrivateUse("1901", string.Empty); Assert.That(concatenatedVariantAndPrivateUse, Is.EqualTo("1901")); }