private static string ReadHTMLLayout() { using (var sr = new StreamReader(ExtFiles.Get("html_layout.htm"))) { return(sr.ReadToEnd()); } }
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); } }
private static int CreateDocumentation(string xmlDocPath, string pathOutput, string baseUrl) { XDocument doc; using (var fs = new FileStream(xmlDocPath, FileMode.Open, FileAccess.Read)) { doc = XDocument.Load(fs); } string docContent = doc.ToString(); XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(ExtFiles.Get("markdown.xslt")); XPathDocument xpathdocument = new XPathDocument(new StringReader(docContent)); var stream = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8); xslt.Transform(xpathdocument, null, writer, null); stream.Position = 0; XDocument xdoc = XDocument.Load(stream); writer.Close(); if (!Directory.Exists(pathOutput)) { Directory.CreateDirectory(pathOutput); } var contentStdlibPath = Path.Combine(pathOutput, "stdlib"); Directory.CreateDirectory(contentStdlibPath); var tocBuilder = new StringBuilder(); var knownNodes = new HashSet <string>(); if (baseUrl == null) { baseUrl = ""; } using (var layout = new StreamReader(ExtFiles.Get("toc_layout.md"))) { var content = layout.ReadToEnd(); tocBuilder.Append(content); tocBuilder.Replace("$base_url$", baseUrl); var matches = Regex.Matches(content, @"(?=\S)\[(.*)\]\S"); foreach (Match match in matches) { var uri = match.Groups[1].Value; knownNodes.Add(uri); } } using (var tocWriter = new StreamWriter(Path.Combine(pathOutput, "stdlib.md"))) { tocWriter.Write(tocBuilder.ToString()); tocBuilder.Clear(); foreach (var fileNode in xdoc.Root.Elements("document")) { string name = fileNode.Attribute("href").Value.Replace(".md", ""); string link = name.Replace(" ", "%20"); string path = Path.Combine(contentStdlibPath, fileNode.Attribute("href").Value); var file = new FileStream(path, FileMode.Create); using (var fileWriter = new StreamWriter(file)) { fileWriter.Write(fileNode.Value); } if (!knownNodes.Contains(name)) { tocWriter.WriteLine("* [{0}]({1}/{2})", name, baseUrl, link); } } } return(0); }