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); }
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("<", "").Replace(">", ""); } if (type == LSLType.String || type == LSLType.Key) { strVal = webVal.Replace(""", "").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(""", ""). Replace("\"", ""); break; case LSLType.Integer: val = replaceHexInts(val); break; case LSLType.Rotation: case LSLType.Vector: val = val.Replace("<", ""). Replace(">", ""). Replace("<", ""). Replace(">", ""); break; case LSLType.Key: val = val.Replace(""", ""). 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 }); }
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("<", ""). Replace(">", ""). Replace("<", ""). Replace(">", ""); } else if (type == LSLType.String || type == LSLType.Key) { strValue = val.Replace(""", ""). 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); }