Ejemplo n.º 1
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, IEnumerable <Variant> variants, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         null,
         null,
         VariantCollection.Create(lang, null, variants),
         default,
         privateUseSubtags)
 {
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         null,
         default,
         default,
         privateUseSubtags)
 {
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, IEnumerable <ExtensionSubtag> extSubtags, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         null,
         null,
         default,
         new ExtensionSubtagCollection(extSubtags),
         privateUseSubtags)
 {
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         default,
         default,
         privateUseSubtags)
 {
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         null,
         null,
         default,
         default,
         privateUseSubtags)
 {
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Region?region, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         null,
         region,
         default,
         default,
         privateUseSubtags)
 {
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Initializes new value of <see cref="LanguageTag"/>
        /// </summary>
        private LanguageTag(
            Language?language,
            Script?script,
            Region?region,
            VariantCollection variants,
            ExtensionSubtagCollection extensions,
            PrivateUseSubtags privateUse)
        {
            if (language.HasValue && script.HasValue)
            {
                var suppressScript = language.Value.GetSuppressScript();
                if (suppressScript.HasValue && suppressScript.Value == script.Value)
                {
                    script = null;
                }
            }

            Language   = language;
            Script     = script;
            Region     = region;
            Variants   = variants;
            Extensions = extensions;
            PrivateUse = privateUse;

            var fields = Field.None;

            if (language.HasValue)
            {
                fields |= Field.Language;
            }
            if (script.HasValue)
            {
                fields |= Field.Script;
            }
            if (region.HasValue)
            {
                fields |= Field.Region;
            }
            if (!variants.IsEmpty)
            {
                fields |= Field.Variants;
            }
            if (!extensions.IsEmpty)
            {
                fields |= Field.Extensions;
            }
            if (!privateUse.IsEmpty)
            {
                fields |= Field.PrivateUse;
            }

            Fields = fields;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Converts the string representation of a private use subtags
        /// </summary>
        /// <returns>true if s was converted successfully; otherwise, false.</returns>
        public static bool TryParse(string text, out PrivateUseSubtags result)
        {
            var parseResult = Parse(new TokenEnumerator(text));

            if (parseResult.ErrorOccured)
            {
                result = default;
                return(false);
            }

            result = parseResult.NothingToParse ? default : parseResult.Result;
                     return(true);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Tries to parse <see cref="LanguageTag"/> value from its text representation
        /// </summary>
        /// <param name="text">text representation of language tag</param>
        /// <param name="result">parsed value</param>
        /// <returns>true if parsing was successful, false otherwise</returns>
        public static bool TryParse(string text, out LanguageTag result)
        {
            var tokens = new TokenEnumerator(Grandfathered.GetPreferredValue(text) ?? text);

            if (tokens.TokenIs(PrivateUseSubtags.Singleton))
            {
                // This tag starts with private use subtags
                var immediatePrivateUseResult = PrivateUseSubtags.Parse(tokens);

                var error = immediatePrivateUseResult.NothingToParse || immediatePrivateUseResult.ErrorOccured ||
                            tokens.CurrentTokenAvailable;

                if (error)
                {
                    // But they are invalid
                    result = default;
                    return(false);
                }

                result = new LanguageTag(immediatePrivateUseResult.Result);
                return(true);
            }

            var language = tokens.TryParseLanguage();

            if (!language.HasValue)
            {
                // If language tag is not entirely private use subtags, it must contain language
                result = default;
                return(false);
            }

            // These two cannot produce error during parsing
            var script = tokens.TryParseScript();
            var region = tokens.TryParseRegion();

            // These three can
            var variantsResult = VariantCollection.Parse(language, script, tokens);

            if (variantsResult.ErrorOccured)
            {
                result = default;
                return(false);
            }

            var extensionsResult = ExtensionSubtagCollection.Parse(tokens);

            if (extensionsResult.ErrorOccured)
            {
                result = default;
                return(false);
            }

            var privateUseResult = PrivateUseSubtags.Parse(tokens);

            if (privateUseResult.ErrorOccured)
            {
                result = default;
                return(false);
            }

            if (tokens.CurrentTokenAvailable)
            {
                // Something left unparsed
                result = default;
                return(false);
            }

            var variants = variantsResult.NothingToParse ? default : variantsResult.Result;

                           var extensions = extensionsResult.NothingToParse ? default : extensionsResult.Result;

                                            var privateUse = privateUseResult.NothingToParse ? default : privateUseResult.Result;

                                                             result = new LanguageTag(language, script, region, variants, extensions, privateUse);
                                                             return(true);
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 public LanguageTag(PrivateUseSubtags privateUseSubtags)
     : this(null, null, null, default, default, privateUseSubtags)
 {
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <Variant> variants, IEnumerable <ExtensionSubtag> extSubtags, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         VariantCollection.Create(lang, script, variants),
         new ExtensionSubtagCollection(extSubtags),
         privateUseSubtags)
 {
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <Variant> variants, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         VariantCollection.Create(lang, script, variants),
         default,
         privateUseSubtags)
 {
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <ExtensionSubtag> extSubtags, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         default,
         new ExtensionSubtagCollection(extSubtags),
         privateUseSubtags)
 {
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, IEnumerable <Variant> variants, IEnumerable <ExtensionSubtag> extSubtags, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         null,
         null,
         VariantCollection.Create(lang, null, variants),
         new ExtensionSubtagCollection(extSubtags),
         privateUseSubtags)
 {
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Indicates whether the current object is equal to another object of the same type.
 /// </summary>
 public bool Equals(PrivateUseSubtags other)
 {
     return(_subtags.IsEquivalentTo(other._subtags));
 }