private void InternalParse(string text) { var gf = Grandfathered.GetPreferredValue(text); if (gf != null) { text = gf; } var tokens = new TokenEnumerator(text); if (tokens.TokenIs(PrivateUseSubtags.Singleton)) { PrivateUse = PrivateUseSubtags.Parse(tokens); return; } Language = tokens.ParseLanguage(); if (!tokens.CurrentTokenAvailable) { return; } Script = tokens.TryParseScript(); if (!tokens.CurrentTokenAvailable) { return; } Region = tokens.TryParseRegion(); if (!tokens.CurrentTokenAvailable) { return; } Variants = VariantCollection.TryParse(Language, Script, tokens); if (!tokens.CurrentTokenAvailable) { return; } Extensions = ExtensionSubtagCollection.TryParse(tokens); if (!tokens.CurrentTokenAvailable) { return; } PrivateUse = PrivateUseSubtags.Parse(tokens); }