aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs97
1 files changed, 60 insertions, 37 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index caa39ba..cd8353f 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -5949,11 +5949,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5949 ScriptSleep(5000); 5949 ScriptSleep(5000);
5950 } 5950 }
5951 5951
5952 public LSL_List llParseString2List(string str, LSL_List separators, LSL_List in_spacers)
5953 {
5954 return ParseString2List(str, separators, in_spacers, false);
5955 }
5956
5957 public LSL_Integer llOverMyLand(string id) 5952 public LSL_Integer llOverMyLand(string id)
5958 { 5953 {
5959 m_host.AddScriptLPS(1); 5954 m_host.AddScriptLPS(1);
@@ -8936,7 +8931,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8936 // garbage generation. 8931 // garbage generation.
8937 // </remarks> 8932 // </remarks>
8938 8933
8939 public LSL_List llParseStringKeepNulls(string src, LSL_List separators, LSL_List spacers) 8934 private LSL_List ParseString(string src, LSL_List separators, LSL_List spacers, bool keepNulls)
8940 { 8935 {
8941 return ParseString2List(src, separators, spacers, true); 8936 return ParseString2List(src, separators, spacers, true);
8942 } 8937 }
@@ -8957,19 +8952,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8957 int i, j; 8952 int i, j;
8958 string d; 8953 string d;
8959 8954
8960 m_host.AddScriptLPS(1); 8955 // All entries are initially valid
8961 8956
8962 /* 8957 for (int i = 0; i < mlen; i++)
8963 * Convert separator and spacer lists to C# strings. 8958 active[i] = true;
8964 * Also filter out null strings so we don't hang. 8959
8965 */ 8960 offset[mlen] = srclen;
8966 for (i = 0; i < seplen; i ++) { 8961
8967 d = separray[i].ToString(); 8962 while (beginning < srclen)
8968 if (d.Length > 0) { 8963 {
8969 delarray[dellen++] = d; 8964
8970 } 8965 best = mlen; // as bad as it gets
8971 } 8966
8972 seplen = dellen; 8967 // Scan for separators
8973 8968
8974 for (i = 0; i < spclen; i ++) { 8969 for (i = 0; i < spclen; i ++) {
8975 d = spcarray[i].ToString(); 8970 d = spcarray[i].ToString();
@@ -9004,29 +8999,45 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9004 } 8999 }
9005 } 9000 }
9006 9001
9007 /* 9002 // This is the normal exit from the scanning loop
9008 * Output source string starting at i through start of earliest delimeter. 9003
9009 */ 9004 if (best == mlen)
9010 if (keepNulls || (earliestSrc > i)) { 9005 {
9011 outarray[outlen++] = src.Substring(i, earliestSrc - i); 9006 // no markers were found on this pass
9007 // so we're pretty much done
9008 if ((keepNulls) || ((!keepNulls) && (srclen - beginning) > 0))
9009 tokens.Add(new LSL_String(src.Substring(beginning, srclen - beginning)));
9010 break;
9012 } 9011 }
9013 9012
9014 /* 9013 // Otherwise we just add the newly delimited token
9015 * If no delimeter found at or after i, we're done scanning. 9014 // and recalculate where the search should continue.
9016 */ 9015 if ((keepNulls) || ((!keepNulls) && (offset[best] - beginning) > 0))
9017 if (earliestDel < 0) break; 9016 tokens.Add(new LSL_String(src.Substring(beginning,offset[best]-beginning)));
9018 9017
9019 /* 9018 if (best < seplen)
9020 * If delimeter was a spacer, output the spacer. 9019 {
9021 */ 9020 beginning = offset[best] + (separray[best].ToString()).Length;
9022 if (earliestDel >= seplen) { 9021 }
9023 outarray[outlen++] = earliestStr; 9022 else
9023 {
9024 beginning = offset[best] + (spcarray[best - seplen].ToString()).Length;
9025 string str = spcarray[best - seplen].ToString();
9026 if ((keepNulls) || ((!keepNulls) && (str.Length > 0)))
9027 tokens.Add(new LSL_String(str));
9024 } 9028 }
9029 }
9025 9030
9026 /* 9031 // This an awkward an not very intuitive boundary case. If the
9027 * Look at rest of src string following delimeter. 9032 // last substring is a tokenizer, then there is an implied trailing
9028 */ 9033 // null list entry. Hopefully the single comparison will not be too
9029 i = earliestSrc + earliestStr.Length; 9034 // arduous. Alternatively the 'break' could be replced with a return
9035 // but that's shabby programming.
9036
9037 if ((beginning == srclen) && (keepNulls))
9038 {
9039 if (srclen != 0)
9040 tokens.Add(new LSL_String(""));
9030 } 9041 }
9031 9042
9032 /* 9043 /*
@@ -9038,7 +9049,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9038 } 9049 }
9039 return new LSL_List(outlist); 9050 return new LSL_List(outlist);
9040 } 9051 }
9041 9052
9053 public LSL_List llParseString2List(string src, LSL_List separators, LSL_List spacers)
9054 {
9055 m_host.AddScriptLPS(1);
9056 return this.ParseString(src, separators, spacers, false);
9057 }
9058
9059 public LSL_List llParseStringKeepNulls(string src, LSL_List separators, LSL_List spacers)
9060 {
9061 m_host.AddScriptLPS(1);
9062 return this.ParseString(src, separators, spacers, true);
9063 }
9064
9042 public LSL_Integer llGetObjectPermMask(int mask) 9065 public LSL_Integer llGetObjectPermMask(int mask)
9043 { 9066 {
9044 m_host.AddScriptLPS(1); 9067 m_host.AddScriptLPS(1);