private void AddContextDescriptionJSON(Type classType, DocumentBlocks textBlocks) { var attrib = _library.GetMarkup(classType, ScriptMemberType.Class); string name, alias; GetNameAndAlias(attrib, classType.Name, out name, out alias); var childElement = new XElement(name); childElement.Add(new XElement("name", name)); childElement.Add(new XElement("name_en", alias)); AppendXmlDocsJSON(childElement, "T:" + classType.FullName); AddProperties(classType, childElement, "JSON"); AddMethodsJSON(classType, childElement); AddConstructorsJSON(classType, childElement); var JSONNode = JSon.XmlToJSON(childElement.ToString()); var separatorPos = JSONNode.IndexOf("\"constructors\":", StringComparison.InvariantCulture); if (separatorPos > 0) { JSONNode = JSONNode.Substring(0, separatorPos) + JSONNode.Substring(separatorPos).Replace("_", " "); } textBlocks.TextContextDescription.Append(JSONNode.Substring(1, JSONNode.Length - 2) + ","); }
private void AddEnumsDescriptionJSON(Type sysEnum, DocumentBlocks textBlocks, ScriptMemberType sysType) { var attrib = _library.GetMarkup(sysEnum, sysType); string name, alias; GetNameAndAlias(attrib, sysEnum.Name, out name, out alias); var childElement = new XElement(name); childElement.Add(new XElement("name", name)); childElement.Add(new XElement("name_en", alias)); AppendXmlDocsJSON(childElement, "T:" + sysEnum.FullName); AddValues(sysEnum, childElement); var JSONNode = JSon.XmlToJSON(childElement.ToString()); textBlocks.TextEnumsDescription.Append(JSONNode.Substring(1, JSONNode.Length - 2) + ","); }
private void AddGlobalContextDescriptionJSON(Type globalContext, DocumentBlocks textBlocks) { var attrib = _library.GetMarkup(globalContext, ScriptMemberType.GlobalContext); if (attrib == null) { return; } string categoryName = null; try { if (attrib.NamedArguments != null) { var categoryMember = attrib.NamedArguments.First(x => x.MemberName == "Category"); categoryName = (string)categoryMember.TypedValue.Value; var childElement = new XElement(categoryName.Replace(" ", "_")); AppendXmlDocsJSON(childElement, "T:" + globalContext.FullName); AddProperties(globalContext, childElement, "JSON"); AddMethodsJSON(globalContext, childElement); if (!childElement.IsEmpty) { var JSONNode = JSon.XmlToJSON(childElement.ToString()); var separatorPos = JSONNode.IndexOf(":", StringComparison.InvariantCulture); JSONNode = JSONNode.Substring(0, separatorPos).Replace("_", " ") + JSONNode.Substring(separatorPos); textBlocks.TextGlobalContext.Append(JSONNode.Substring(1, JSONNode.Length - 2) + ","); } } } catch (InvalidOperationException) { return; } }
internal string CreateDocumentationJSON(string pathOutput, List <string> assemblies) { using (StreamWriter sbJSON = new StreamWriter(pathOutput)) { DocumentBlocks textBlocks = new DocumentBlocks(); bool isOscriptStd = false; var hostedScript = new AssemblyDocumenter(Path.Combine(Path.GetDirectoryName(assemblies[0]), "ScriptEngine.HostedScript.dll")); hostedScript.FillTypesDictionary(); foreach (var assembly in assemblies) { var name = Path.GetFileNameWithoutExtension(assembly); var xmlName = Path.Combine(Path.GetDirectoryName(assembly), name + ".xml"); if (!File.Exists(xmlName)) { Console.WriteLine("Missing xml-doc: {0}", xmlName); continue; } if (name == "ScriptEngine.HostedScript") { isOscriptStd = true; } Console.WriteLine("Processing: {0}", name); var docMaker = new AssemblyDocumenter(assembly, xmlName); docMaker.CreateDocumentationJSON(textBlocks); } JObject jsonObj = new JObject(); var list = JsonConvert.DeserializeObject <dynamic>("{" + textBlocks.TextGlobalContext.ToString() + "}"); jsonObj.Add("structureMenu", JObject.Parse(@"{ }")); JObject structureMenu = jsonObj["structureMenu"] as JObject; if (isOscriptStd) { using (var layout = new StreamReader(ExtFiles.Get("structureMenu.json"))) { var content = layout.ReadToEnd(); var menu = JsonConvert.DeserializeObject <dynamic>(content); foreach (JToken curType in menu) { if (((JProperty)curType).Name == "global") { structureMenu.Add(((JProperty)curType).Name, JObject.Parse(@"{ }")); } else { structureMenu.Add(((JProperty)curType).Name, curType.First); } } foreach (JToken curType in list) { if (((JObject)structureMenu["global"]).GetValue(((JProperty)curType).Name) == null) { JObject elemStructure = jsonObj["structureMenu"]["global"] as JObject; elemStructure.Add(((JProperty)curType).Name, JObject.Parse(@"{ }")); } if (((JProperty)curType).Value.SelectToken("properties") != null) { foreach (JToken elem in ((JProperty)curType).Value.SelectToken("properties")) { JObject elemStructure = jsonObj["structureMenu"]["global"][((JProperty)curType).Name] as JObject; elemStructure.Add(((JProperty)elem).Name, ""); } } if (((JProperty)curType).Value.SelectToken("methods") != null) { foreach (JToken elem in ((JProperty)curType).Value.SelectToken("methods")) { JObject elemStructure = jsonObj["structureMenu"]["global"][((JProperty)curType).Name] as JObject; elemStructure.Add(((JProperty)elem).Name, ""); } } } } } else { structureMenu.Add("classes", JsonConvert.DeserializeObject <dynamic>("{\n\"Прочее\": \"\"\n }")); } foreach (JToken curType in list) { if (((JProperty)curType).Value.SelectToken("properties") != null) { if (jsonObj["globalvariables"] == null) { jsonObj.Add("globalvariables", JObject.Parse(@"{ }")); } JObject globalvariables = jsonObj["globalvariables"] as JObject; foreach (JToken prop in curType.First["properties"]) { globalvariables.Add(((JProperty)prop).Name, prop.First); } } if (((JProperty)curType).Value.SelectToken("methods") != null) { if (jsonObj["globalfunctions"] == null) { jsonObj.Add("globalfunctions", JObject.Parse(@"{ }")); } JObject globalfunctions = jsonObj["globalfunctions"] as JObject; foreach (JToken meth in curType.First["methods"]) { JObject jsonDesc = new JObject(); foreach (JToken token in meth.First) { if (((JProperty)token).Name != "signature" && ((JProperty)token).Name != "params") { jsonDesc.Add(((JProperty)token).Name, token.First); } } if (((JProperty)meth).Value.SelectToken("signature") != null) { jsonDesc.Add("signature", JObject.Parse(@"{ }")); JObject signature = jsonDesc["signature"] as JObject; signature.Add("default", JObject.Parse(@"{ }")); JObject defaultValue = signature["default"] as JObject; defaultValue.Add("СтрокаПараметров", meth.First["signature"]); if (((JProperty)meth).Value.SelectToken("params") != null) { defaultValue.Add("Параметры", meth.First["params"]); } else { defaultValue.Add("Параметры", JObject.Parse(@"{ }")); } } globalfunctions.Add(((JProperty)meth).Name, jsonDesc); } } } jsonObj.Add("classes", JObject.Parse(@"{ }")); JObject classes = jsonObj["classes"] as JObject; var classesList = JsonConvert.DeserializeObject <dynamic>("{" + textBlocks.TextContextDescription.ToString() + "}"); foreach (JToken classDesc in classesList) { JObject jsonDescClass = new JObject(); foreach (JToken curType in classDesc.First) { if (((JProperty)curType).Name != "methods") { jsonDescClass.Add(((JProperty)curType).Name, curType.First); } } if (((JProperty)classDesc).Value.SelectToken("methods") != null) { jsonDescClass.Add("methods", JObject.Parse(@"{ }")); JObject methods = jsonDescClass["methods"] as JObject; foreach (JToken method in classDesc.First["methods"]) { JObject jsonDesc = new JObject(); if (method.First.First.Type == JTokenType.Object) { foreach (JToken token in method.First.First) { if (((JProperty)token).Name != "signature" && ((JProperty)token).Name != "params" && ((JProperty)token).Name != "remarks") { jsonDesc.Add(((JProperty)token).Name, token.First); } } jsonDesc.Add("signature", JObject.Parse(@"{ }")); JObject signature = jsonDesc["signature"] as JObject; foreach (JToken varSyntax in method.First) { signature.Add(varSyntax["remarks"].ToString(), JObject.Parse(@"{ }")); JObject defaultValue = signature[varSyntax["remarks"].ToString()] as JObject; if (varSyntax.SelectToken("signature") != null) { defaultValue.Add("СтрокаПараметров", varSyntax["signature"]); } else { defaultValue.Add("СтрокаПараметров", JObject.Parse(@"{ }")); } if (varSyntax.SelectToken("params") != null) { defaultValue.Add("Параметры", varSyntax["params"]); } else { defaultValue.Add("Параметры", JObject.Parse(@"{ }")); } } } else { foreach (JToken token in method.First) { if (((JProperty)token).Name != "signature" && ((JProperty)token).Name != "params") { jsonDesc.Add(((JProperty)token).Name, token.First); } } if (((JProperty)method).Value.SelectToken("signature") != null) { jsonDesc.Add("signature", JObject.Parse(@"{ }")); JObject signature = jsonDesc["signature"] as JObject; signature.Add("default", JObject.Parse(@"{ }")); JObject defaultValue = signature["default"] as JObject; defaultValue.Add("СтрокаПараметров", method.First["signature"]); if (((JProperty)method).Value.SelectToken("params") != null) { defaultValue.Add("Параметры", method.First["params"]); } else { defaultValue.Add("Параметры", JObject.Parse(@"{ }")); } } } methods.Add(((JProperty)method).Name, jsonDesc); } } classes.Add(((JProperty)classDesc).Name, jsonDescClass); } jsonObj.Add("systemEnum", JObject.Parse(@"{ }")); JObject systemEnum = jsonObj["systemEnum"] as JObject; var systemEnumList = JsonConvert.DeserializeObject <dynamic>("{" + textBlocks.TextEnumsDescription.ToString() + "}"); foreach (JToken curType in systemEnumList) { systemEnum.Add(((JProperty)curType).Name, curType.First); } sbJSON.Write(JsonConvert.SerializeObject(jsonObj, Formatting.Indented)); Console.WriteLine("Done"); return(""); } }
public void CreateDocumentationJSON(DocumentBlocks textBlocks) { var asmElement = _xmlDoc.Root.Element("assembly"); if (asmElement == null) { throw new ArgumentException("Wrong XML doc format"); } var libName = _library.Name; var fileLibName = asmElement.Element("name").Value; if (String.Compare(libName, fileLibName, true, System.Globalization.CultureInfo.InvariantCulture) != 0) { throw new ArgumentNullException(String.Format("Mismatch assembly names. Expected {0}, found in XML {1}", libName, fileLibName)); } var members = _xmlDoc.Element("doc").Element("members").Elements(); _memberDocumentation.Clear(); foreach (var item in members) { string key = item.Attribute("name").Value; _memberDocumentation[key] = item; } var globalContexts = _library.GetMarkedTypes(ScriptMemberType.GlobalContext); foreach (var globalContext in globalContexts) { AddGlobalContextDescriptionJSON(globalContext, textBlocks); } if (_library.Name == "ScriptEngine.HostedScript") { using (var layout = new StreamReader(ExtFiles.Get("BasicMethods.json"))) { var content = layout.ReadToEnd().Trim(); textBlocks.TextGlobalContext.Append(content.Substring(1, content.Length - 2)); } } var contextTypes = _library.GetMarkedTypes(ScriptMemberType.Class); foreach (var classType in contextTypes) { AddContextDescriptionJSON(classType, textBlocks); } var systemEnums = _library.GetMarkedTypes(ScriptMemberType.SystemEnum); foreach (var systemEnum in systemEnums) { AddEnumsDescriptionJSON(systemEnum, textBlocks, ScriptMemberType.SystemEnum); } var enums = _library.GetMarkedTypes(ScriptMemberType.EnumerationType); foreach (var sysEnum in enums) { AddEnumsDescriptionJSON(sysEnum, textBlocks, ScriptMemberType.EnumerationType); } }