private string GetChildNodeInnerText(MemberXmlElement elem, string name) { if (elem != null) { XmlNodeList nodes = elem.Data.GetElementsByTagName(name); if (nodes != null && nodes.Count > 0 && nodes[0].NodeType == XmlNodeType.Element) { return(GetTag(nodes[0] as XmlElement, elem.OwnerDirectory)); } else { return(""); } } else { return(""); } }
/// <summary> /// 生成命名空间页面 /// </summary> /// <param name="typeItems">命名空间中的所有类型</param> /// <param name="ns">命名空间包含信息(名称,页面文件名等)</param> protected override void CreateNamespacePage(IGetTypes typeItems, ContentTreeItem ns) { HtmlText content = new HtmlText(); foreach (string category in typeItems.GetAllCategory()) { string title = NameToTitleDictionary[category] as string; HtmlText secContent = new HtmlText(); foreach (ContentTreeItem typeItem in typeItems.GetMembers(category)) { Type type = typeItem.Info as Type; MemberXmlElement data = DataProvider.GetMemberXmlNode(type); string summary; summary = GetChildNodeInnerText(data, "summary"); if (string.IsNullOrEmpty(summary)) { summary = " "; } string strRow = tempTypeTable_Row.Render( tempImg.Render(NameToTitleDictionary[category], category + ".png"), typeItem.FileName, HtmlText.HtmlFormat(typeItem.Name), summary ); secContent.AppendPre(strRow); } content.AppendPre(CreateTableSection(title, title, secContent.ToString())); } Hashtable values = new Hashtable(); values["CollapseAll"] = Resources.strCollapseAll; values["ExpandAll"] = Resources.strExpandAll; values["PIC"] = Resources.strPic; values["Title"] = HtmlText.HtmlFormat(ns.Name); values["Summary"] = ""; values["Content"] = content.ToString(); values["Encoding"] = TargetEncoding.HeaderName; tempPage.SaveAs(HtmlFileDirectory + "\\" + ns.FileName, TargetEncoding, values); }
/// <summary> /// 创建成员页面 /// </summary> /// <param name="memberItem">成员的信息</param> protected override void CreateMemberPage(ContentTreeItem memberItem) { MemberInfo info = memberItem.Info; MemberXmlElement memberData = DataProvider.GetMemberXmlNode(info); HtmlText content = new HtmlText(); int secID = 0; foreach (PageSection section in MemberPageSections) { string secText = null; switch (section.SectionType) { case PageSectionType.Syntax: { string parameters = ""; string ret = ""; string val = ""; if (memberData != null) { XmlNodeList ns; ns = memberData.Data.GetElementsByTagName("param"); foreach (XmlElement p in ns) { parameters += tempParam.Render( HtmlText.HtmlFormat(p.GetAttribute("name")), GetInnerTags(p, memberData.Owner) ); } ret = GetChildNodeInnerText(memberData, "returns"); val = GetChildNodeInnerText(memberData, "value"); } HtmlText secContent = new HtmlText(), declaration = new HtmlText(); declaration.AppendPre(HtmlText.HtmlFormat(CreateMemberDeclaration(info, memberData))); secContent.AppendPre(tempDeclaration.Render("C#", declaration)); switch (info.MemberType) { case MemberTypes.Constructor: case MemberTypes.Method: { if (!string.IsNullOrEmpty(parameters)) { secContent.AppendPre(tempParamsBlock.Render(Resources.String46, parameters)); } if (!string.IsNullOrEmpty(ret)) { secContent.AppendPre(tempParamsBlock.Render(Resources.String47, ret)); } break; } case MemberTypes.Property: { if (!string.IsNullOrEmpty(val)) { secContent.AppendPre(tempParamsBlock.Render(Resources.String48, val)); } break; } default: break; } Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "Syntex"; sectionValues["Title"] = section.Name; sectionValues["Content"] = secContent.ToString(); secText = tempSection.Render(sectionValues); break; } case PageSectionType.Remarks: { if (memberData != null) { string remarks = GetChildNodeInnerText(memberData, "remarks"); if (!string.IsNullOrEmpty(remarks)) { Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "Remarks"; sectionValues["Title"] = section.Name; sectionValues["Content"] = tempRemarks.Render(remarks); secText = tempSection.Render(sectionValues); } } break; } case PageSectionType.Exception: { if (memberData != null) { XmlNodeList ns; ns = memberData.Data.GetElementsByTagName("exception"); HtmlText ecx = new HtmlText(); foreach (XmlElement n in ns) { int index = n.GetAttribute("cref").LastIndexOfAny(new char[] { ':', '.', '+' }); ecx.AppendPre( tempExceptionTable_Row.Render( n.GetAttribute("cref").Substring(index + 1), n.InnerText ) ); } if (ecx.Length > 0) { Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "Exception"; sectionValues["Title"] = section.Name; sectionValues["Content"] = tempExceptionTable.Render(ecx); secText = tempSection.Render(sectionValues); } } break; } case PageSectionType.Example: { if (memberData != null) { string exampleText = GetChildNodeInnerText(memberData, "example"); if (!string.IsNullOrEmpty(exampleText)) { Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "Exception"; sectionValues["Title"] = section.Name; sectionValues["Content"] = exampleText; secText = tempSection.Render(sectionValues); } } break; } case PageSectionType.FromXML: { if (memberData != null) { string text = GetChildNodeInnerText(memberData, section.XmlSource); if (!string.IsNullOrEmpty(text)) { Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "SEC" + secID.ToString("00"); sectionValues["Title"] = section.Name; sectionValues["Content"] = text; secText = tempSection.Render(sectionValues); } } break; } } if (!string.IsNullOrEmpty(secText)) { content.AppendPre(secText); } secID++; } string summary = GetChildNodeInnerText(memberData, "summary"); Hashtable values = new Hashtable(); values["CollapseAll"] = Resources.strCollapseAll; values["ExpandAll"] = Resources.strExpandAll; values["PIC"] = Resources.strPic; if (info.MemberType == MemberTypes.Constructor) { values["Title"] = HtmlText.HtmlFormat(memberItem.Name) + " " + NameToTypeDictionary[memberItem.Parent.Name]; } else { values["Title"] = HtmlText.HtmlFormat(info.DeclaringType.Name + "." + info.Name) + " " + NameToTypeDictionary[memberItem.Parent.Name]; } values["Summary"] = summary; values["Content"] = content; values["Encoding"] = TargetEncoding.HeaderName; tempPage.SaveAs( HtmlFileDirectory + "\\" + memberItem.FileName, TargetEncoding, values ); }
private string GetTypeMemberCategorySection(IGetMembers memberItems, Type type, MemberXmlElement typeData, string category) { if (memberItems.GetMembers(category) != null) { string secText = null; string sectionTitle = NameToTitleDictionary[category] as string; HtmlText sectionContent = new HtmlText(); foreach (ContentTreeItem memberItem in memberItems.GetMembers(category)) { MemberXmlElement memberData = DataProvider.GetMemberXmlNode(memberItem.Info); string summary = ""; summary = GetChildNodeInnerText(memberData, "summary"); if (memberItem.Info.DeclaringType != type) { summary += string.Format(Resources.String56, memberItem.Info.DeclaringType.Name); } if (string.IsNullOrEmpty(summary)) { summary = " "; } HtmlText imgs = new HtmlText(); imgs.AppendPre(tempImg.Render(NameToTitleDictionary[category], category + ".bmp")); if (IsStatic(memberItem.Info)) { imgs.AppendPre(" "); imgs.AppendPre(tempImg.Render("static", "static.bmp")); } string mname = ""; mname += HtmlText.HtmlFormat(memberItem.Name); MethodInfo method = memberItem.Info as MethodInfo; //if (method != null) if (method != null) { //泛型方法 //if (method.IsGenericMethod == true) //{ if (memberData != null && memberData.Data != null) { XmlNodeList lst = memberData.Data.GetElementsByTagName("typeparam"); if (lst.Count > 0) { mname += HtmlText.HtmlFormat("<"); mname += (lst[0] as XmlElement).GetAttribute("name"); for (int i = 1; i < lst.Count; i++) { mname += ("," + (lst[i] as XmlElement).GetAttribute("name")); } //泛型方法处理 //name = name.Replace("``" + elem.GetElementsByTagName("typeparam").Count, ""); mname += HtmlText.HtmlFormat(">"); } } //} ParameterInfo[] parameters = method.GetParameters(); if (parameters.Length > 0) { string strParams = ""; foreach (ParameterInfo param in parameters) { if (string.IsNullOrEmpty(strParams)) { strParams = "" + SimpleParamName(DocumentBuilderUtility.GetTypeDefinition(param.ParameterType)) + ""; } else { strParams += "," + SimpleParamName(DocumentBuilderUtility.GetTypeDefinition(param.ParameterType)) + ""; } } mname += ("(" + strParams + ")"); } else { mname += ("()"); } } string strRow = tempTypeTable_Row.Render( imgs, memberItem.FileName, //HtmlText.HtmlFormat(memberItem.Name), mname, summary ); sectionContent.AppendPre(strRow); } if (sectionContent.Length > 0) { secText = CreateTableSection(category, sectionTitle, sectionContent.ToString()); } return(secText); } else { return(null); } }
/// <summary> /// 生成类型页面 /// </summary> /// <param name="memberItems">该类型包含的所有成员</param> /// <param name="typeItem">类型包含信息(名称,页面文件名等)</param> protected override void CreateTypePage(IGetMembers memberItems, ContentTreeItem typeItem) { HtmlText pageContent = new HtmlText(); Type type = typeItem.Info as Type; MemberXmlElement typeData = DataProvider.GetMemberXmlNode(type); int secID = 0; foreach (PageSection section in TypePageSections) { string secText = null; switch (section.SectionType) { case PageSectionType.Constructor: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "Constructor"); break; case PageSectionType.PublicMethod: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "PublicMethod"); break; case PageSectionType.ProtectedMethod: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "ProtectedMethod"); break; case PageSectionType.PrivateMethod: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "PrivateMethod"); break; case PageSectionType.PublicProperty: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "PublicProperty"); break; case PageSectionType.ProtectedProperty: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "ProtectedProperty"); break; case PageSectionType.PrivateProperty: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "PrivateProperty"); break; case PageSectionType.PublicField: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "PublicField"); break; case PageSectionType.ProtectedField: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "ProtectedField"); break; case PageSectionType.PrivateField: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "PrivateField"); break; case PageSectionType.Event: secText = GetTypeMemberCategorySection(memberItems, type, typeData, "Event"); break; case PageSectionType.Remarks: { if (typeData != null) { HtmlText remarks = new HtmlText(); remarks.AppendPre(GetChildNodeInnerText(typeData, "remarks")); if (remarks.Length > 0) { Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "remarks"; sectionValues["Title"] = Resources.String42; sectionValues["Content"] = tempRemarks.Render(remarks); secText = tempSection.Render(sectionValues); } } break; } case PageSectionType.Example: { if (typeData != null) { HtmlText example = new HtmlText(); example.AppendPre(GetChildNodeInnerText(typeData, "example")); if (example.Length > 0) { Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "example"; sectionValues["Title"] = Resources.String43; sectionValues["Content"] = tempRemarks.Render(example); secText = tempSection.Render(sectionValues); } } break; } case PageSectionType.FromXML: { if (typeData != null) { string text = GetChildNodeInnerText(typeData, section.XmlSource); if (!string.IsNullOrEmpty(text)) { Hashtable sectionValues = new Hashtable(); sectionValues["ID"] = "SEC" + secID.ToString("00"); sectionValues["Title"] = section.Name; sectionValues["Content"] = text; secText = tempSection.Render(sectionValues); } } break; } } if (!string.IsNullOrEmpty(secText)) { pageContent.AppendPre(secText); } secID++; } Hashtable values = new Hashtable(); values["CollapseAll"] = Resources.strCollapseAll; values["ExpandAll"] = Resources.strExpandAll; values["PIC"] = Resources.strPic; values["Title"] = HtmlText.HtmlFormat(DocumentBuilderUtility.GetTypeDefinition(type, false)) + " " + NameToTypeDictionary[typeItem.Parent.Name]; values["Summary"] = GetChildNodeInnerText(typeData, "summary"); values["Content"] = pageContent; values["Encoding"] = TargetEncoding.HeaderName; tempPage.SaveAs( HtmlFileDirectory + "\\" + typeItem.FileName, TargetEncoding, values ); }
private string CreateMemberDeclaration(MemberInfo info, MemberXmlElement memberData) { StringBuilder declaration = new StringBuilder(); switch (info.MemberType) { case MemberTypes.Method: { MethodInfo method = info as MethodInfo; if (method.IsStatic) { declaration.Append("static "); } if (method.IsVirtual) { declaration.Append("virtual "); } declaration.Append(DocumentBuilderUtility.GetTypeDefinition(method.ReturnType) + " " + method.Name); //泛型方法处理 //if (method.IsGenericMethod == true) //if (method.IsGenericMethod == true) //{ if (memberData != null && memberData.Data != null) { XmlNodeList lst = memberData.Data.GetElementsByTagName("typeparam"); if (lst.Count > 0) { declaration.Append("<"); declaration.Append((lst[0] as XmlElement).GetAttribute("name")); for (int i = 1; i < lst.Count; i++) { declaration.Append("," + (lst[i] as XmlElement).GetAttribute("name")); } declaration.Append(">"); } } //} ParameterInfo[] parameters = method.GetParameters(); if (parameters.Length > 0) { string strParams = ""; foreach (ParameterInfo param in parameters) { if (string.IsNullOrEmpty(strParams)) { strParams = " " + DocumentBuilderUtility.GetTypeDefinition(param.ParameterType) + " " + param.Name; } else { strParams += ",\r\n " + DocumentBuilderUtility.GetTypeDefinition(param.ParameterType) + " " + param.Name; } } declaration.Append("(\r\n" + strParams + "\r\n);"); } else { declaration.Append("();"); } break; } case MemberTypes.Property: { PropertyInfo property = info as PropertyInfo; MethodInfo method = property.GetGetMethod(true); if (method == null) { method = property.GetSetMethod(true); } if (method.IsStatic) { declaration.Append("static "); } if (method.IsVirtual) { declaration.Append("virtual "); } declaration.Append(DocumentBuilderUtility.GetTypeDefinition(method.ReturnType) + " " + property.Name); if (method != null) { ParameterInfo[] parameters = method.GetParameters(); if (parameters.Length > 0) { string strParams = ""; foreach (ParameterInfo param in parameters) { if (string.IsNullOrEmpty(strParams)) { strParams = " " + DocumentBuilderUtility.GetTypeDefinition(param.ParameterType) + " " + param.Name; } else { strParams += ",\r\n " + DocumentBuilderUtility.GetTypeDefinition(param.ParameterType) + " " + param.Name; } } declaration.Append("[\r\n" + strParams + "\r\n]"); } declaration.ToString(); } declaration.Append("{"); if (property.GetGetMethod(true) != null) { declaration.Append(" get;"); } if (property.GetSetMethod(true) != null) { declaration.Append(" set;"); } declaration.Append(" }"); break; } case MemberTypes.Constructor: { ConstructorInfo ctor = info as ConstructorInfo; declaration.Append(DocumentBuilderUtility.GetTypeDefinition(ctor.DeclaringType, false)); ParameterInfo[] parameters = ctor.GetParameters(); if (parameters.Length > 0) { string strParams = ""; foreach (ParameterInfo param in parameters) { if (string.IsNullOrEmpty(strParams)) { strParams = " " + DocumentBuilderUtility.GetTypeDefinition(param.ParameterType) + " " + param.Name; } else { strParams += ",\r\n " + DocumentBuilderUtility.GetTypeDefinition(param.ParameterType) + " " + param.Name; } } declaration.Append("(\r\n" + strParams + "\r\n);"); } else { declaration.Append("();"); } break; } case MemberTypes.Field: { FieldInfo field = info as FieldInfo; if (field.IsStatic) { declaration.Append("static "); } declaration.Append(field.ToString()); break; } case MemberTypes.Event: { EventInfo ent = info as EventInfo; declaration.Append(ent.ToString()); break; } } return(declaration.ToString()); }