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); }
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); }