/// <summary> /// Try to parse the given value to a resource type. /// </summary> private static bool TryParseType(string value, out ResourceType type) { type = 0; if (string.IsNullOrEmpty(value)) { return(false); } // Try by android xml name var info = ResourceExtensions.GetResourceTypeInfos().FirstOrDefault(x => x.XmlName == value); if (info != null) { type = info.Type; return(true); } // Try by Dot42 ID name info = ResourceExtensions.GetResourceTypeInfos().FirstOrDefault(x => x.Dot42Name == value); if (info != null) { type = info.Type; return(true); } // Try by R nested class name info = ResourceExtensions.GetResourceTypeInfos().FirstOrDefault(x => x.RNestedClassName == value); if (info != null) { type = info.Type; return(true); } // Not found return(false); }
/// <summary> /// Try to parse the given string into a resource id. /// </summary> public static bool TryParse(string value, ResourceType defaultType, out ResourceId resourceId) { resourceId = null; if (string.IsNullOrEmpty(value)) { return(false); } value = value.Trim(); if (value.Length == 0) { return(false); } // Skip leading '@' var hasAt = (value[0] == '@'); if (hasAt) { value = value.Substring(1); if (value.Length == 0) { return(false); } } // Look for package prefix var index = value.IndexOf(':'); string packageName = null; if (index > 0) { packageName = value.Substring(0, index); value = value.Substring(index + 1); } var hasPackageName = (packageName != null); // Look for '+' if (value.Length == 0) { return(false); } var create = false; if (value[0] == '+') { create = true; value = value.Substring(1); if (value.Length == 0) { return(false); } } // Look for type index = value.IndexOf('/'); ResourceType type; if (index <= 0) { // Did not find a resource type, try to use default if (defaultType == ResourceType.Unknown) { return(false); } type = defaultType; } else { // Found a resource type, try to parse it var typeName = value.Substring(0, index); value = value.Substring(index + 1); if (!TryParseType(typeName, out type)) { return(false); } if (value.Length == 0) { return(false); } } // Remainder is name if (!(hasPackageName)) { value = ResourceExtensions.GetNormalizedResourceName(value, type); } var name = value; resourceId = new ResourceId(packageName, create, type, name); return(true); }