Ejemplo n.º 1
0
        public SecondlifeWikiLibraryData(IDocumentationProvider documentationProvider, IEnumerable <string> subsets)
        {
            _client = new CachedWebDownloader(WebCacheFileDirectory);

            _subsets = subsets.ToList();


            Log.WriteLine("============================");
            Log.WriteLine("Starting scrape of " + SecondlifeWikiDomain + " ... ");
            Log.WriteLine("============================");

            foreach (var lslLibraryConstantSignature in GetLSLConstants())
            {
                lslLibraryConstantSignature.DocumentationString =
                    documentationProvider.DocumentConstant(lslLibraryConstantSignature);

                _constants.Add(lslLibraryConstantSignature.Name, lslLibraryConstantSignature);
            }

            foreach (var lslLibraryFunctionSignature in GetLSLFunctions())
            {
                lslLibraryFunctionSignature.DocumentationString =
                    documentationProvider.DocumentFunction(lslLibraryFunctionSignature);

                if (_functions.ContainsKey(lslLibraryFunctionSignature.Name))
                {
                    _functions[lslLibraryFunctionSignature.Name].Add(lslLibraryFunctionSignature);
                }
                else
                {
                    _functions.Add(lslLibraryFunctionSignature.Name,
                                   new GenericArray <LSLLibraryFunctionSignature> {
                        lslLibraryFunctionSignature
                    });
                }
            }


            foreach (var lslLibraryEventSignature in GetLSLEvents())
            {
                lslLibraryEventSignature.DocumentationString =
                    documentationProvider.DocumentEvent(lslLibraryEventSignature);

                _events.Add(lslLibraryEventSignature.Name, lslLibraryEventSignature);
            }


            Log.WriteLine("============================");
            Log.WriteLine("Finished scrape of " + SecondlifeWikiDomain);
            Log.WriteLine("============================");
        }
        public LSLLibraryConstantSignature LSLConstant(string name)
        {
            if (!IncludeConstants)
            {
                return(null);
            }

            const BindingFlags bindingFlags = BindingFlags.Default | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic;

            if (name == "GCDummy")
            {
                return(null);
            }

            foreach (var constantContrainerType in _scriptConstantContainerClasses)
            {
                var subsets = _subsetsMap[constantContrainerType];

                var constant = constantContrainerType.GetField(name, bindingFlags);


                if (constant != null)
                {
                    var type = LslTypeFromCsharpType(constant.FieldType);
                    if (type != null)
                    {
                        var con = new LSLLibraryConstantSignature(type.Value, constant.Name,
                                                                  constant.GetValue(null).ToString());
                        con.DocumentationString = _documentationProvider.DocumentConstant(con);
                        con.Subsets.SetSubsets(subsets);
                        return(con);
                    }

                    Log.WriteLineWithHeader("[OpenSimLibraryDataReflector]: ",
                                            "constant {0} of {1}, type is an un-recognized data type ({2})",
                                            name, constantContrainerType.FullName, constant.Name);

                    return(null);
                }

                Log.WriteLineWithHeader("[OpenSimLibraryDataReflector]: ",
                                        "constant {0} does not exist in {1}",
                                        name, constantContrainerType.FullName);
            }

            foreach (var constantContrainerType in _attributedScriptModuleClasses)
            {
                var subsets = _subsetsMap[constantContrainerType];

                var constant = constantContrainerType.GetField(name, bindingFlags);

                if (constant == null)
                {
                    Log.WriteLineWithHeader("[OpenSimLibraryDataReflector]: ",
                                            "constant {0} does not exist in {1}",
                                            name, constantContrainerType.FullName);

                    return(null);
                }

                if (constant.GetCustomAttributes(ScriptModuleConstantAttribute, true).Any())
                {
                    continue;
                }


                var type = LslTypeFromCsharpType(constant.FieldType);

                if (type != null)
                {
                    var con = new LSLLibraryConstantSignature(type.Value, constant.Name,
                                                              constant.GetValue(null).ToString());
                    con.Expand = true;
                    con.DocumentationString = _documentationProvider.DocumentConstant(con);
                    con.Subsets.SetSubsets(subsets);
                    return(con);
                }

                Log.WriteLineWithHeader("[OpenSimLibraryDataReflector]: ",
                                        "constant {0} of {1}, type is an un-recognized data type ({2})",
                                        name, constantContrainerType.FullName, constant.Name);

                return(null);
            }

            return(null);
        }