public LSLLibraryEventSignature LSLEvent(string name)
        {
            var map = GetEventOSDMap(_data, name);

            if (map == null)
            {
                return(null);
            }

            LSLLibraryEventSignature ev = new LSLLibraryEventSignature(name)
            {
                DocumentationString = DocumentEvent(_data, name)
            };

            ev.Subsets.SetSubsets(_subsets);

            ev.Deprecated = map.ContainsKey("deprecated");

            if (map.ContainsKey("arguments"))
            {
                var args = map["arguments"] as OSDArray;

                if (args == null)
                {
                    return(ev);
                }


                var paramNameDuplicates = new HashMap <string, int>();

                foreach (var arg in args.Cast <OSDMap>())
                {
                    var argName = arg.Keys.First();

                    var paramDetails = (OSDMap)arg[argName];

                    if (paramNameDuplicates.ContainsKey(argName))
                    {
                        //rename duplicates with a trailing number
                        int curValue = paramNameDuplicates[argName];
                        int newValue = curValue + 1;
                        paramNameDuplicates[argName] = newValue;

                        argName = argName + "_" + newValue;
                    }
                    else
                    {
                        paramNameDuplicates.Add(argName, 0);
                    }


                    ev.AddParameter(new LSLParameterSignature(
                                        LSLTypeTools.FromLSLTypeName(paramDetails["type"].AsString()), argName, false));
                }
            }

            return(ev);
        }
Exemple #2
0
        private IEnumerable <LSLLibraryConstantSignature> LSLConstantsFromKeywordsAll()
        {
            var data = _client.DownloadString(SecondlifeWikiBaseUrl + "Category:LSL_Keywords/All");

            var group = _constantsGroupKeywordsAll.Match(data);

            if (group.Success)
            {
                var groupString = group.ToString();
                foreach (Match constantMatch in _constantInKeywordsAll.Matches(groupString))
                {
                    var type   = LSLTypeTools.FromLSLTypeName(constantMatch.Groups[1].ToString());
                    var webVal = constantMatch.Groups[3].ToString();
                    var strVal = "";

                    if (type == LSLType.Integer)
                    {
                        strVal = webVal.Contains("x")
                            ? Convert.ToInt32(webVal, 16).ToString()
                            : webVal;
                    }

                    if (type == LSLType.Vector || type == LSLType.Rotation)
                    {
                        strVal = webVal.Replace("&lt;", "").Replace("&gt;", "");
                    }

                    if (type == LSLType.String || type == LSLType.Key)
                    {
                        strVal = webVal.Replace("&quot;", "").Replace("\"", "");
                    }

                    LSLLibraryConstantSignature result;
                    if (string.IsNullOrWhiteSpace(strVal))
                    {
                        result =
                            new LSLLibraryConstantSignature(
                                LSLTypeTools.FromLSLTypeName(constantMatch.Groups[1].ToString()),
                                constantMatch.Groups[2].ToString());
                    }
                    else
                    {
                        result =
                            new LSLLibraryConstantSignature(
                                LSLTypeTools.FromLSLTypeName(constantMatch.Groups[1].ToString()),
                                constantMatch.Groups[2].ToString(), strVal);
                    }


                    result.Subsets.SetSubsets(_subsets);
                    yield return(result);
                }
            }
        }
        public LSLLibraryConstantSignature LSLConstant(string name)
        {
            var map = GetConstantOSDMap(_data, name);

            if (map == null)
            {
                return(null);
            }

            if (!map.ContainsKey("type"))
            {
                return(null);
            }

            LSLType type = LSLTypeTools.FromLSLTypeName(map["type"].AsString());

            if (!map.ContainsKey("value"))
            {
                return(null);
            }


            var val = map["value"].AsString();


            switch (type)
            {
            case LSLType.String:
                val = replaceStringCodePoints(val);
                val = val.Replace("&quot;", "").
                      Replace("\"", "");
                break;

            case LSLType.Integer:
                val = replaceHexInts(val);
                break;

            case LSLType.Rotation:
            case LSLType.Vector:
                val =
                    val.Replace("&lt;", "").
                    Replace("&gt;", "").
                    Replace("<", "").
                    Replace(">", "");
                break;

            case LSLType.Key:
                val = val.Replace("&quot;", "").
                      Replace("\"", "");
                break;
            }

            var sig = new LSLLibraryConstantSignature(type, name, val)
            {
                DocumentationString = DocumentConstant(_data, name)
            };

            sig.Subsets.SetSubsets(_subsets);
            sig.Deprecated = map.ContainsKey("deprecated");

            return(sig);
        }
        public IReadOnlyGenericArray <LSLLibraryFunctionSignature> LSLFunctionOverloads(string name)
        {
            var map = GetFunctionOSDMap(_data, name);

            if (map == null)
            {
                return(new GenericArray <LSLLibraryFunctionSignature> ());
            }

            LSLType returnType = LSLType.Void;

            if (map.ContainsKey("return"))
            {
                var value = map["return"].AsString();
                if (value != "void")
                {
                    returnType = LSLTypeTools.FromLSLTypeName(value);
                }
            }

            LSLLibraryFunctionSignature func = new LSLLibraryFunctionSignature(returnType, name)
            {
                DocumentationString = DocumentFunction(_data, name)
            };

            func.Subsets.SetSubsets(_subsets);
            func.Deprecated = map.ContainsKey("deprecated");


            if (!map.ContainsKey("arguments"))
            {
                return new GenericArray <LSLLibraryFunctionSignature> {
                           func
                }
            }
            ;



            var args = map["arguments"] as OSDArray;

            if (args == null)
            {
                return new GenericArray <LSLLibraryFunctionSignature> {
                           func
                }
            }
            ;


            var paramNameDuplicates = new HashMap <string, int>();

            foreach (var arg in args.Cast <OSDMap>())
            {
                var argName = arg.Keys.First();

                var paramDetails = (OSDMap)arg[argName];

                if (paramNameDuplicates.ContainsKey(argName))
                {
                    //rename duplicates with a trailing number
                    int curValue = paramNameDuplicates[argName];
                    int newValue = curValue + 1;
                    paramNameDuplicates[argName] = newValue;

                    argName = argName + "_" + newValue;
                }
                else
                {
                    paramNameDuplicates.Add(argName, 0);
                }


                func.AddParameter(new LSLParameterSignature(
                                      LSLTypeTools.FromLSLTypeName(paramDetails["type"].AsString()), argName, false));
            }

            return(new GenericArray <LSLLibraryFunctionSignature> {
                func
            });
        }
Exemple #5
0
        private LSLLibraryConstantSignature GetSigFromConstantPage(string url)
        {
            var page = _client.DownloadString(url);



            var match = _constantSignature.Match(page);

            if (!match.Success)
            {
                return(null);
            }


            var    val = match.Groups[3].ToString();
            string strValue;


            var type = LSLTypeTools.FromLSLTypeName(match.Groups[1].ToString());


            if (type == LSLType.Integer || type == LSLType.Float)
            {
                var hxMatch = _hexNotation.Match(val);
                if (hxMatch.Success)
                {
                    strValue = hxMatch.Groups[1].ToString();
                }
                else if (val.Contains("x"))
                {
                    strValue = Convert.ToInt32(val, 16).ToString(CultureInfo.InvariantCulture);
                }
                else
                {
                    strValue = val;
                }
            }
            else if (type == LSLType.Rotation || type == LSLType.Vector)
            {
                strValue = val.Replace("&lt;", "").
                           Replace("&gt;", "").
                           Replace("<", "").
                           Replace(">", "");
            }
            else if (type == LSLType.String || type == LSLType.Key)
            {
                strValue = val.Replace("&quot;", "").
                           Replace("\"", "");

                var specialUnicode = _matchConstantllUnescapeUrl.Match(strValue);
                if (specialUnicode.Success)
                {
                    strValue = HttpUtility.UrlDecode(specialUnicode.Groups[1].ToString());
                }
            }
            else
            {
                strValue = val;
            }


            var constantSignature =
                new LSLLibraryConstantSignature(type,
                                                match.Groups[2].ToString().Replace(' ', '_'), strValue)
            {
                Deprecated = _deprecatedMarker.IsMatch(page)
            };



            constantSignature.Subsets.SetSubsets(_subsets);

            Log.WriteLineWithHeader(
                "[SecondlifeWikiLibraryData]: ", "Retrieved" + (constantSignature.Deprecated ? " (DEPRECATED) " : " ") +
                "constant {0}; from {1}",
                constantSignature.SignatureString, url);

            return(constantSignature);
        }