public override void GetAttributeCompletions (CompletionDataList list, IAttributedXObject attributedOb, Dictionary<string, string> existingAtts)
		{
			var required = new NodeCompletionCategory ("Required", 0);
			var optional = new NodeCompletionCategory ("Optional", 1);

			foreach (NodeTypeAttribute att in info.Attributes) {
				if (!existingAtts.ContainsKey (att.Name)) {
					var data = new NodeTypeAttributeCompletionData (att) {
						CompletionCategory = att.Required ? required : optional
					};
					list.Add (data);
				}
			}

			var ordering = new NodeCompletionCategory ("Ordering", 2);
			if (!existingAtts.ContainsKey ("id")) {
				list.Add (new CompletionData ("id", null, "ID for the extension, unique in this extension point.") { CompletionCategory = ordering });
			}
			if (!existingAtts.ContainsKey ("insertbefore")) {
				list.Add (new CompletionData ("insertbefore", null, "ID of an existing extension before which to insert this.") { CompletionCategory = ordering });
			}
			if (!existingAtts.ContainsKey ("insertafter")) {
				list.Add (new CompletionData ("insertafter", null, "ID of an existing extension after which to insert this.") { CompletionCategory = ordering });
			}
		}
        public override void GetAttributeCompletions(CompletionDataList list, IAttributedXObject attributedOb, Dictionary <string, string> existingAtts)
        {
            var required = new NodeCompletionCategory("Required", 0);
            var optional = new NodeCompletionCategory("Optional", 1);

            foreach (NodeTypeAttribute att in info.Attributes)
            {
                if (!existingAtts.ContainsKey(att.Name))
                {
                    var data = new NodeTypeAttributeCompletionData(att)
                    {
                        CompletionCategory = att.Required ? required : optional
                    };
                    list.Add(data);
                }
            }

            var ordering = new NodeCompletionCategory("Ordering", 2);

            if (!existingAtts.ContainsKey("id"))
            {
                list.Add(new CompletionData("id", null, "ID for the extension, unique in this extension point.")
                {
                    CompletionCategory = ordering
                });
            }
            if (!existingAtts.ContainsKey("insertbefore"))
            {
                list.Add(new CompletionData("insertbefore", null, "ID of an existing extension before which to insert this.")
                {
                    CompletionCategory = ordering
                });
            }
            if (!existingAtts.ContainsKey("insertafter"))
            {
                list.Add(new CompletionData("insertafter", null, "ID of an existing extension after which to insert this.")
                {
                    CompletionCategory = ordering
                });
            }
        }