예제 #1
0
        internal static PrivateUseSubtags Parse(LanguageTag.TokenEnumerator tokens)
        {
            var result = new PrivateUseSubtags();

            if (!tokens.TokenIs(Singleton))
            {
                throw new FormatException("unexpected subtag '" + tokens.Token + "'");
            }

            var subtags = new List <string>();

            while (tokens.NextTokenAvailable)             // get all subtags
            {
                tokens.ToNextToken();
                subtags.Add(ValidateSubtag(tokens.Token));
            }

            if (subtags.Count == 0)
            {
                throw new FormatException("private use subtags not contain elements");
            }

            result._subtags = subtags.ToArray();
            return(result);
        }
예제 #2
0
        internal static ExtensionSubtag?TryParse(LanguageTag.TokenEnumerator tokens)
        {
            if (!tokens.CurrentTokenAvailable)             // get singletone
            {
                return(null);
            }

            if (tokens.Token.Length != 1)
            {
                return(null);
            }

            if (tokens.TokenIs(PrivateUseSubtags.Singleton))
            {
                return(null);
            }

            char singleton = ValidateSingleton(tokens.Token[0]);

            if (!tokens.NextTokenAvailable)
            {
                throw new FormatException("extension subtag '" + singleton + "' not contain elements");
            }

            var sequence = new List <string>();

            tokens.ToNextToken();

            sequence.Add(ValidateElement(tokens.Token));
            tokens.ToNextToken();             // get remaining elements

            while (tokens.CurrentTokenAvailable)
            {
                if (tokens.Token.Length == 1)                 // next extension subtag or private use
                {
                    break;
                }

                sequence.Add(ValidateElement(tokens.Token));
                tokens.ToNextToken();
            }

            var result = new ExtensionSubtag();

            result.Singleton = singleton;
            result._sequence = sequence.ToArray();

            return(result);
        }