Пример #1
0
        /// <summary>

        /// Attempts to locate the reference name in the specified schema.

        /// </summary>

        /// <param name="name">The reference to look up.</param>

        /// <param name="schemaCompletionData">The schema completion data to use to

        /// find the reference.</param>

        /// <param name="elementName">The element to determine what sort of reference it is

        /// (e.g. group, attribute, element).</param>

        /// <returns><see langword="null"/> if no match can be found.</returns>

        XmlSchemaObject FindSchemaObjectReference(string name, XmlSchemaCompletionProvider schemaCompletionData, string elementName)

        {
            QualifiedName qualifiedName = schemaCompletionData.CreateQualifiedName(name);

            XmlSchemaCompletionProvider qualifiedNameSchema = FindSchema(qualifiedName.Namespace);

            if (qualifiedNameSchema != null)
            {
                schemaCompletionData = qualifiedNameSchema;
            }

            switch (elementName)
            {
            case "element":

                return(schemaCompletionData.FindElement(qualifiedName));

            case "attribute":

                return(schemaCompletionData.FindAttribute(qualifiedName.Name));

            case "group":

                return(schemaCompletionData.FindGroup(qualifiedName.Name));

            case "attributeGroup":

                return(schemaCompletionData.FindAttributeGroup(qualifiedName.Name));
            }

            return(null);
        }
Пример #2
0
        /// <summary>

        /// Gets the XmlSchemaObject that defines the currently selected xml element or attribute.

        /// </summary>

        /// <param name="currentSchemaCompletionData">This is the schema completion data for the schema currently being
        /// displayed. This can be null if the document is not a schema.</param>

        public XmlSchemaObject GetSchemaObjectSelected(XmlSchemaCompletionProvider currentSchemaCompletionData)

        {
            // Find element under cursor.

            XmlElementPath path = GetElementPath();

            //attribute name under cursor, if valid

            string     attributeName = null;
            XAttribute xatt          = Tracker.Engine.Nodes.Peek(0) as XAttribute;

            if (xatt != null)
            {
                XName xattName = xatt.Name;
                if (Tracker.Engine.CurrentState is XmlNameState)
                {
                    xattName = GetCompleteName();
                }
                attributeName = xattName.FullName;
            }


            // Find schema definition object.

            XmlSchemaCompletionProvider schemaCompletionData = FindSchema(path);

            XmlSchemaObject schemaObject = null;

            if (schemaCompletionData != null)
            {
                XmlSchemaElement element = schemaCompletionData.FindElement(path);

                schemaObject = element;

                if (element != null)
                {
                    if (!string.IsNullOrEmpty(attributeName))
                    {
                        XmlSchemaAttribute attribute = schemaCompletionData.FindAttribute(element, attributeName);

                        if (attribute != null)
                        {
                            if (currentSchemaCompletionData != null)
                            {
                                schemaObject = GetSchemaObjectReferenced(currentSchemaCompletionData, element, attribute);
                            }
                            else
                            {
                                schemaObject = attribute;
                            }
                        }
                    }

                    return(schemaObject);
                }
            }

            return(null);
        }