public static MemberTarget CreateMemberTarget (XPathNavigator api) { string subgroup = (string)api.Evaluate(apiSubgroupExpression); MemberTarget target; if (subgroup == "method") { target = CreateMethodTarget(api); } else if (subgroup == "property") { target = CreatePropertyTarget(api); } else if (subgroup == "constructor") { target = CreateConstructorTarget(api); } else if (subgroup == "event") { target = CreateEventTarget(api); } else { target = new MemberTarget(); } target.name = (string) api.Evaluate(apiNameExpression); target.containingType = CreateSimpleTypeReference( api.SelectSingleNode(apiContainingTypeExpression) ); target.overload = (string) api.Evaluate(apiOverloadIdExpression); return (target); }
private void WriteMemberTarget (MemberTarget target, DisplayOptions options, XmlWriter writer, Dictionary<IndexedTemplateTypeReference, TypeReference> dictionary) { if (target == null) throw new ArgumentNullException("target"); if (writer == null) throw new ArgumentNullException("writer"); if ((options & DisplayOptions.ShowContainer) > 0) { TypeReference type = target.Type; WriteType(type, options & ~DisplayOptions.ShowContainer, writer); MethodTarget methodTarget = target as MethodTarget; if (methodTarget != null) { if (methodTarget.conversionOperator) { writer.WriteString(" "); } else { WriteSeperator(writer); } } else { WriteSeperator(writer); } } // special logic for writing methods MethodTarget method = target as MethodTarget; if (method != null) { WriteMethod(method, options, writer, dictionary); return; } // special logic for writing properties PropertyTarget property = target as PropertyTarget; if (property != null) { WriteProperty(property, options, writer); return; } // special logic for writing constructors ConstructorTarget constructor = target as ConstructorTarget; if (constructor != null) { WriteConstructor(constructor, options, writer); return; } // special logic for writing events EventTarget trigger = target as EventTarget; if (trigger != null) { WriteEvent(trigger, options, writer); return; } // by default, just write name writer.WriteString(target.Name); }
private static EnumerationTarget CreateEnumerationTarget (XPathNavigator api, LinkType2 linkType) { EnumerationTarget enumeration = new EnumerationTarget(); string typeId = (string) api.Evaluate(topicIdExpression); string file = (string) api.Evaluate(topicFileExpression); // Create tar List<MemberTarget> members = new List<MemberTarget>(); XPathNodeIterator elementNodes = api.Select("elements/element"); foreach (XPathNavigator elementNode in elementNodes) { string memberId = elementNode.GetAttribute("api", String.Empty); // try to get name from attribute on element node string memberName = elementNode.GetAttribute("name", String.Empty); if (String.IsNullOrEmpty(memberName)) { // if we can't do that, try to get the name by searching the file for the <api> element of that member XPathNavigator memberApi = api.SelectSingleNode(String.Format("following-sibling::api[@id='{0}']", memberId)); if (memberApi != null) { memberName = (string) memberApi.Evaluate(apiNameExpression); } else { // if all else fails, get the name by parsing the identifier string arguments; string type; TextReferenceUtilities.DecomposeMemberIdentifier(memberId, out type, out memberName, out arguments); } } MemberTarget member = new MemberTarget(); member.id = memberId; // get Id from element member.file = file; // get file from type file member.type = linkType; member.name = memberName; // get name from element member.containingType = new SimpleTypeReference(typeId); // get containing type from this type members.Add(member); } enumeration.elements = members.ToArray(); return (enumeration); }
public void WriteMemberTarget (MemberTarget target, DisplayOptions options, XmlWriter writer) { WriteMemberTarget(target, options, writer, null); }