/// <summary> /// Link all references. /// </summary> internal override void Link(DocModel model) { foreach (var id in innerClassIds) { DocClass @class; if (model.TryGetClassById(id, out @class)) { innerClasses.Add(@class); } } }
/// <summary> /// Write as C# code. /// </summary> private void WriteAsCode(XElement element, CommentBuilder builder, CommentSection section, bool inCode, IDocTypeNameResolver resolver) { string tag = null; string postfix = null; var appendNewline = false; if (IsEmpty(element)) { return; } switch (element.Name.LocalName) { case "para": tag = "para"; break; case "ref": var id = element.GetAttribute("refid"); DocClass @class; string name = null; if (model.TryGetClassById(id, out @class)) { name = resolver.ResolveTypeName(@class.Name); } if (name != null) { section.Write("<see cref=\"{0}\">", name); postfix = "</see>"; } break; case "heading": var level = element.GetAttribute("level"); tag = "h" + level; break; case "preformatted": tag = "pre"; inCode = true; break; case "itemizedlist": tag = "ul"; break; case "orderedlist": tag = "ol"; break; case "listitem": tag = "li"; break; case "linebreak": tag = "br"; break; case "bold": case "emphasis": tag = "b"; break; case "computeroutput": tag = "code"; break; case "programlisting": if (!inCode) { tag = "c"; } break; case "codeline": if (inCode) { appendNewline = true; } break; case "table": tag = "table"; break; case "superscript": case "verbatim": tag = "span"; break; case "simplesect": var kind = element.GetAttribute("kind"); if (kind == "return") { section = builder.Returns; } break; case "nonbreakablespace": case "sp": section.Write(" "); return; case "mdash": case "ndash": case "ulink": case "parameterlist": case "variablelist": case "anchor": return; case "highlight": break; default: tag = element.Name.LocalName; break; } if (tag != null) { section.Write("<{0}>", tag); } foreach (var child in element.Nodes()) { WriteAsCode(child, builder, section, inCode, resolver); } if (tag != null) { section.Write("</{0}>", tag); } if (postfix != null) { section.Write("{0}", postfix); } if (appendNewline) { section.WriteLine(); } }