void Bind(TreeNode node, CorePlus.Parser.Javascript.Node codeNode) { System.Type type = codeNode.GetType(); node.Text = String.Format("{0}<{1}>", codeNode.GetType().Name, codeNode); node.Tag = codeNode; TreeNode prop = node.Nodes.Add(PR); SimpleProperty(prop); foreach (System.Reflection.PropertyInfo p in type.GetProperties()) { TreeNode tnode = new TreeNode(); object value = p.GetValue(codeNode, null); if ((p.Name == "Parent" || p.Name == "Target") && value is BreakableStatement) { tnode.Text = p.Name + "=" + value; prop.Nodes.Add(tnode); continue; } if (value is CorePlus.Parser.Javascript.Node) { Bind(tnode, (CorePlus.Parser.Javascript.Node)value); node.Nodes.Add(tnode); } else if (value is IEnumerable && !(value is string)) { tnode.Text = p.Name; bool isNode = false; foreach (object node2 in (IEnumerable)value) { TreeNode node3 = new TreeNode(); if (node2 is CorePlus.Parser.Javascript.Node) { Bind(node3, (CorePlus.Parser.Javascript.Node)node2); isNode = true; } else { node3.Text = node2.ToString(); SimpleProperty(node3); } tnode.Nodes.Add(node3); } Contains(tnode); if (isNode) { node.Nodes.Add(tnode); } else { prop.Nodes.Add(tnode); } } else if (!HideName(p.Name)) { tnode.Text = String.Format("{0} = {1}", p.Name, value); // SimpleProperty(tnode); prop.Nodes.Add(tnode); continue; } else { continue; } } }
void AddSingle(CorePlus.Json.JsonObject obj, string key, object value) { if (value is string) { obj.Add(key, (string)value); } else if (value is bool) { obj.Add(key, (bool)value); } else if (value is TypeSummary) { var t = new JsonObject(); var v = (TypeSummary)value; t.Add("type", v.Type); t.Add("summary", v.Summary); obj[key] = t; }else if(value is ArrayProxy<string>){ var t = new JsonArray(); foreach (string v in (ArrayProxy<string>)value) { t.Add(v); } obj[key] = t; } else if (value is ArrayProxy<TypeSummary>) { var ta = new JsonArray(); foreach (TypeSummary v in (ArrayProxy<TypeSummary>)value) { var t = new JsonObject(); t.Add("type", v.Type); t.Add("summary", v.Summary); ta.Add(t); } obj[key] = ta; } else if(value is ParamInfoCollection) { var ta = new JsonArray(); foreach(ParamInfo v in (ParamInfoCollection)value) { var t = new JsonObject(); t.Add("type", v.Type); t.Add("name", v.Name); if(v.DefaultValue != null) t.Add("defaultValue", v.DefaultValue); t.Add("summary", v.Summary); ta.Add(t); } obj["params"] = ta; } else { obj.Add(key, value.ToString()); } }
/// <summary> /// Adds the members. /// </summary> /// <param name="dc">The dc.</param> /// <param name="obj">The obj.</param> /// <param name="defines">要操作的字符串。</param> void SaveTmpList(SortedList<string, DocComment> members, CorePlus.Json.JsonObject obj, string currentMemberOf, bool isStatic) { foreach (var vk in members) { DocComment value = vk.Value; string names = "members"; switch (value.MemberType) { case "method": case "function": names = "methods"; break; case "field": names = "fields"; break; case "config": names = "configs"; break; case "property": case "getter": case "setter": names = "properties"; break; case "event": names = "events"; break; } JsonArray arr = obj[names] as JsonArray; if (arr == null) { obj[names] = arr = new JsonArray(); } JsonObject values = new JsonObject(); arr.Add(values); values.Add("name", value.Name); values.Add("icon", GetIcon(value)); values.Add("fullName", value.FullName); values.Add("summary", value.Summary); values.Add("isStatic", isStatic); string m = value.MemberOf; if(currentMemberOf != m) values.Add("defines", m); } }
void SaveSimpleComment(DocComment dc, CorePlus.Json.JsonObject obj) { obj.Add("type", dc.MemberType); obj.Add("icon", GetIcon(dc)); }
void SaveJSONP(string filePath, CorePlus.Json.JsonObject obj) { File.WriteAllText(filePath, "jsonp(" + obj.ToString() + ");", Encoding.UTF8); }
void SaveClassInfo(DocComment dc, CorePlus.Json.JsonObject obj) { string fullName = dc.FullName; obj.Add("fullName",fullName); obj.Add("source", dc.Source); if(dc.Source != null) { obj.Add("sourceFile", "data/source/" + dc.Source + ".html#" + fullName.Replace('.', '-')); } SortedList<string, DocComment> members = new SortedList<string,DocComment>(); SortedList<string, DocComment> statics = new SortedList<string, DocComment>(); if (dc.MemberType == "class" && dc.Variant.Members != null) { GetMembersAndCopyToTmpList(dc.Variant.Members, members, statics); } // 如果有成员。生成成员字段。 if(dc.Variant.Count > 0) { GetMembersAndCopyToTmpList(dc.Variant, members, statics); } if (_project.DefaultExtends != null && dc.MemberType == "class") { DocComment dc2 ; if (_data.DocComments.TryGetValue(_project.DefaultExtends, out dc2) && dc2.Variant != null) { GetMembersAndCopyToTmpList(dc2.Variant, members, statics); } } DocComment e; if(dc.Extends != null && _data.DocComments.TryGetValue(dc.Extends, out e)) { string extends = dc.Extends; if (e.Variant.Members != null) { GetMembersAndCopyToTmpList(e.Variant.Members, members, statics); } JsonArray baseClasses = new JsonArray(); obj["baseClasses"] = baseClasses; while (extends != null && _data.DocComments.TryGetValue(extends, out e)) { baseClasses.Insert(0, extends); extends = e.Extends; } } if(dc.Implements != null) { foreach(string im in dc.Implements) { if(_data.DocComments.TryGetValue(im, out e)) GetMembersAndCopyToTmpList(e.Variant, members, members); } } string memberOf = dc.FullName; SaveTmpList(members, obj, memberOf, false); SaveTmpList(statics, obj, memberOf, true); if(_extendsInfo.ContainsKey(fullName)) { JsonArray subClasses = new JsonArray(); obj["subClasses"] = subClasses; var list = _extendsInfo[fullName]; list.Sort(); subClasses.AddRange(list); } foreach(string key in dc){ AddSingle(obj, key, dc[key]); } }
void GenerateAPISignle(CorePlus.Json.JsonObject dom, Variant value) { // 如果有子成员。 if(value.Count > 0){ CorePlus.Json.JsonObject parent = new JsonObject(); dom.Add(value.DocComment.Name, parent); foreach(var vk in value) { GenerateAPISignle(parent, vk.Value); } } else { dom.Add(value.DocComment.Name, 0); } }