private static MemberDocumentNode GetMemberDocumentNode( FunctionDescriptor function, XmlReader xml) { //customNodeDefinitions typedParameters don't have functionDescriptors if (function == null) { return(null); } var assemblyName = function.Assembly; if (string.IsNullOrEmpty(assemblyName)) { return(null); } var fullyQualifiedName = MemberDocumentNode.MakeFullyQualifiedName (assemblyName, GetMemberElementName(function)); if (!documentNodes.ContainsKey(fullyQualifiedName)) { if (xml == null) { xml = DocumentationServices.GetForAssembly(function.Assembly, function.PathManager); } LoadDataFromXml(xml, assemblyName); } MemberDocumentNode documentNode = null; if (documentNodes.ContainsKey(fullyQualifiedName)) { documentNode = documentNodes[fullyQualifiedName]; } else { var overloadedName = documentNodes.Keys. Where(key => key.Contains(function.ClassName + "." + function.FunctionName)).FirstOrDefault(); if (overloadedName == null) { return(null); } if (documentNodes.ContainsKey(overloadedName)) { documentNode = documentNodes[overloadedName]; } } return(documentNode); }
private static void LoadDataFromXml(XmlReader reader, string assemblyName) { if (reader == null) return; MemberDocumentNode currentDocNode = null; XmlTagType currentTag = XmlTagType.None; string currentParamName = String.Empty; while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: switch (reader.Name) { case "member": // Find attribute "name". if (reader.MoveToAttribute("name")) { currentDocNode = new MemberDocumentNode(assemblyName, reader.Value); documentNodes.Add(currentDocNode.FullyQualifiedName, currentDocNode); } currentTag = XmlTagType.Member; break; case "summary": currentTag = XmlTagType.Summary; break; case "param": if (reader.MoveToAttribute("name")) { currentParamName = reader.Value; } currentTag = XmlTagType.Parameter; break; case "search": currentTag = XmlTagType.SearchTags; break; default: currentTag = XmlTagType.None; break; } break; case XmlNodeType.Text: if (currentDocNode == null) continue; switch (currentTag) { case XmlTagType.Summary: currentDocNode.Summary = reader.Value.CleanUpDocString(); break; case XmlTagType.Parameter: currentDocNode.Parameters.Add(currentParamName, reader.Value.CleanUpDocString()); break; case XmlTagType.SearchTags: currentDocNode.SearchTags = reader.Value.CleanUpDocString(); break; } break; } } }
private static string GetMemberElement( FunctionDescriptor function, XmlReader xml, DocumentElementType property, string paramName = "") { var assemblyName = function.Assembly; if (string.IsNullOrEmpty(assemblyName) || (function.Type == FunctionType.GenericFunction)) { return(String.Empty); // Operators, or generic global function in DS script. } var fullyQualifiedName = MemberDocumentNode.MakeFullyQualifiedName (assemblyName, GetMemberElementName(function)); if (!documentNodes.ContainsKey(fullyQualifiedName)) { if (xml == null) { xml = DocumentationServices.GetForAssembly(function.Assembly, function.PathManager); } LoadDataFromXml(xml, assemblyName); } MemberDocumentNode documentNode = null; if (documentNodes.ContainsKey(fullyQualifiedName)) { documentNode = documentNodes[fullyQualifiedName]; } else { var overloadedName = documentNodes.Keys. Where(key => key.Contains(function.ClassName + "." + function.FunctionName)).FirstOrDefault(); if (overloadedName == null) { return(String.Empty); } if (documentNodes.ContainsKey(overloadedName)) { documentNode = documentNodes[overloadedName]; } } if (documentNode == null) { return(String.Empty); } if (property.Equals(DocumentElementType.Description) && !documentNode.Parameters.ContainsKey(paramName)) { return(String.Empty); } switch (property) { case DocumentElementType.Summary: return(documentNode.Summary); case DocumentElementType.Description: return(documentNode.Parameters[paramName]); case DocumentElementType.SearchTags: return(documentNode.SearchTags); default: throw new ArgumentException("property"); } }
private static void LoadDataFromXml(XmlReader reader, string assemblyName) { if (reader == null) { return; } MemberDocumentNode currentDocNode = null; XmlTagType currentTag = XmlTagType.None; string currentParamName = String.Empty; while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: switch (reader.Name) { case "member": // Find attribute "name". if (reader.MoveToAttribute("name")) { currentDocNode = new MemberDocumentNode(assemblyName, reader.Value); documentNodes.Add(currentDocNode.FullyQualifiedName, currentDocNode); } currentTag = XmlTagType.Member; break; case "summary": currentTag = XmlTagType.Summary; break; case "param": if (reader.MoveToAttribute("name")) { currentParamName = reader.Value; } currentTag = XmlTagType.Parameter; break; case "search": currentTag = XmlTagType.SearchTags; break; default: currentTag = XmlTagType.None; break; } break; case XmlNodeType.Text: if (currentDocNode == null) { continue; } switch (currentTag) { case XmlTagType.Summary: currentDocNode.Summary = reader.Value.CleanUpDocString(); break; case XmlTagType.Parameter: currentDocNode.Parameters.Add(currentParamName, reader.Value.CleanUpDocString()); break; case XmlTagType.SearchTags: currentDocNode.SearchTags = reader.Value.CleanUpDocString(); break; } break; } } }