Esempio n. 1
0
        /// <summary>
        ///     Returns all <see cref="LSLEventSignature" /> that could be parsed out of a given string.
        /// </summary>
        /// <param name="inString">The string to parse <see cref="LSLEventSignature" /> objects from.</param>
        /// <returns>An enumerable of <see cref="LSLEventSignature" /> objects that were successfully parsed from the string.</returns>
        public IEnumerable <LSLEventSignature> GetSignatures(string inString)
        {
            var matches = Regex.Matches(inString);

            foreach (Match m in matches)
            {
                if (!m.Success)
                {
                    continue;
                }

                var name  = m.Groups[1].ToString();
                var param = m.Groups[2].ToString();


                var sig = new LSLLibraryEventSignature(name);

                var ps = param.Split(',');

                if (ps.Length == 1 && string.IsNullOrWhiteSpace(ps[0]))
                {
                    yield return(sig);
                }
                else
                {
                    foreach (var p in ps)
                    {
                        var prm = p.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        sig.AddParameter(new LSLParameterSignature(LSLTypeTools.FromLSLTypeName(prm[0]), prm[1], false));
                    }
                    yield return(sig);
                }
            }
        }
Esempio n. 2
0
        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);
        }