/// <summary> /// Create an element descriptor for the given element. /// </summary> private static ElementDescriptor CreateElementDescriptor(AttrsXmlParser parser, LayoutXmlParser layoutParser, LayoutElement element) { var result = new ElementDescriptor(element.Name); while (element != null) { // Get attributes for this element var attrs = parser.FindElementDescriptor(element.Name); if (attrs != null) { foreach (var a in attrs.Attributes) { result.Add(a); } } // Get super class if (string.IsNullOrEmpty(element.SuperClassName)) break; element = layoutParser.FindElement(element.SuperClassName); } // Add ViewGroup_Layout var extraAttrs = parser.FindElementDescriptor("ViewGroup_Layout"); if (extraAttrs != null) result.AddRange(extraAttrs.Attributes); // Add ViewGroup_MarginLayout extraAttrs = parser.FindElementDescriptor("ViewGroup_MarginLayout"); if (extraAttrs != null) result.AddRange(extraAttrs.Attributes); return result; }
/// <summary> /// Create an element descriptor. /// </summary> private static ElementDescriptor CreateDescriptor(AttrsXmlParser parser, string descriptorName, string shortName) { var source = parser.FindElementDescriptor(descriptorName); var result = new ElementDescriptor(shortName); if (source != null) { result.AddRange(source.Attributes); } return(result); }
/// <summary> /// Default ctor /// </summary> internal MenuDescriptors(AttrsXmlParser parser) { menuDescriptor = CreateDescriptor(parser, "Menu", "menu"); itemDescriptor = CreateDescriptor(parser, "MenuItem", "item"); groupDescriptor = CreateDescriptor(parser, "MenuGroup", "group"); menuDescriptor.Add(itemDescriptor); menuDescriptor.Add(groupDescriptor); itemDescriptor.Add(menuDescriptor); groupDescriptor.Add(itemDescriptor); }
/// <summary> /// Lookup an element descriptor by the given short name. /// </summary> /// <returns>Null if not found</returns> private ElementDescriptor LoadElementDescriptor(string shortName) { var element = document.Root.Elements("declare-styleable").FirstOrDefault(x => GetName(x) == shortName); if (element == null) { return(null); } var result = new ElementDescriptor(shortName); foreach (var attr in element.Elements("attr")) { result.Add(ParseAttr(attr)); } return(result); }
/// <summary> /// Create an element descriptor for the given element. /// </summary> private static ElementDescriptor CreateElementDescriptor(AttrsXmlParser parser, LayoutXmlParser layoutParser, LayoutElement element) { var result = new ElementDescriptor(element.Name); while (element != null) { // Get attributes for this element var attrs = parser.FindElementDescriptor(element.Name); if (attrs != null) { foreach (var a in attrs.Attributes) { result.Add(a); } } // Get super class if (string.IsNullOrEmpty(element.SuperClassName)) { break; } element = layoutParser.FindElement(element.SuperClassName); } // Add ViewGroup_Layout var extraAttrs = parser.FindElementDescriptor("ViewGroup_Layout"); if (extraAttrs != null) { result.AddRange(extraAttrs.Attributes); } // Add ViewGroup_MarginLayout extraAttrs = parser.FindElementDescriptor("ViewGroup_MarginLayout"); if (extraAttrs != null) { result.AddRange(extraAttrs.Attributes); } return(result); }
/// <summary> /// Add the given element as possible child element for this element. /// </summary> internal void Add(ElementDescriptor child) { children[child.Name] = child; }
/// <summary> /// Create completions for attribute names. /// </summary> private IEnumerable<XmlResourceCompletion> CreateAttributeCompletions(ElementDescriptor elementDescriptor) { var provider = DescriptorProvider; if (provider == null) return Enumerable.Empty<XmlResourceCompletion>(); var names = elementDescriptor.Attributes.Select(x => x.Name); var prefix = "android"; return names.OrderBy(x => x).Select(x => new XmlResourceCompletion(glyphService, x, string.Format("{0}:{1}=\"\"", prefix, x), x, 1, XmlResourceCompletionType.Attribute)); }
/// <summary> /// Add the given element as possible child element for this element. /// </summary> internal void Add(ElementDescriptor child) { children[child.Name] = child; }
/// <summary> /// Lookup an element descriptor by the given short name. /// </summary> /// <returns>Null if not found</returns> private ElementDescriptor LoadElementDescriptor(string shortName) { var element = document.Root.Elements("declare-styleable").FirstOrDefault(x => GetName(x) == shortName); if (element == null) return null; var result = new ElementDescriptor(shortName); foreach (var attr in element.Elements("attr")) { result.Add(ParseAttr(attr)); } return result; }