Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }