Beispiel #1
0
        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) + ",");
        }
Beispiel #2
0
        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) + ",");
        }
Beispiel #3
0
        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("");
            }
        }
Beispiel #5
0
        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);
            }
        }