/// <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); } } }
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); }