aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs103
1 files changed, 22 insertions, 81 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 621d429..a6ca171 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -5601,78 +5601,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5601 ScriptSleep(5000); 5601 ScriptSleep(5000);
5602 } 5602 }
5603 5603
5604 public LSL_List llParseString2List(string str, LSL_List separators, LSL_List in_spacers)
5605 {
5606 m_host.AddScriptLPS(1);
5607 LSL_List ret = new LSL_List();
5608 LSL_List spacers = new LSL_List();
5609 if (in_spacers.Length > 0 && separators.Length > 0)
5610 {
5611 for (int i = 0; i < in_spacers.Length; i++)
5612 {
5613 object s = in_spacers.Data[i];
5614 for (int j = 0; j < separators.Length; j++)
5615 {
5616 if (separators.Data[j].ToString() == s.ToString())
5617 {
5618 s = null;
5619 break;
5620 }
5621 }
5622 if (s != null)
5623 {
5624 spacers.Add(s);
5625 }
5626 }
5627 }
5628 object[] delimiters = new object[separators.Length + spacers.Length];
5629 separators.Data.CopyTo(delimiters, 0);
5630 spacers.Data.CopyTo(delimiters, separators.Length);
5631 bool dfound = false;
5632 do
5633 {
5634 dfound = false;
5635 int cindex = -1;
5636 string cdeli = "";
5637 for (int i = 0; i < delimiters.Length; i++)
5638 {
5639 int index = str.IndexOf(delimiters[i].ToString());
5640 bool found = index != -1;
5641 if (found && String.Empty != delimiters[i].ToString())
5642 {
5643 if ((cindex > index) || (cindex == -1))
5644 {
5645 cindex = index;
5646 cdeli = delimiters[i].ToString();
5647 }
5648 dfound = dfound || found;
5649 }
5650 }
5651 if (cindex != -1)
5652 {
5653 if (cindex > 0)
5654 {
5655 ret.Add(new LSL_String(str.Substring(0, cindex)));
5656 }
5657 // Cannot use spacers.Contains() because spacers may be either type String or LSLString
5658 for (int j = 0; j < spacers.Length; j++)
5659 {
5660 if (spacers.Data[j].ToString() == cdeli)
5661 {
5662 ret.Add(new LSL_String(cdeli));
5663 break;
5664 }
5665 }
5666 str = str.Substring(cindex + cdeli.Length);
5667 }
5668 } while (dfound);
5669 if (str != "")
5670 {
5671 ret.Add(new LSL_String(str));
5672 }
5673 return ret;
5674 }
5675
5676 public LSL_Integer llOverMyLand(string id) 5604 public LSL_Integer llOverMyLand(string id)
5677 { 5605 {
5678 m_host.AddScriptLPS(1); 5606 m_host.AddScriptLPS(1);
@@ -8436,7 +8364,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8436 // of arrays or other objects. 8364 // of arrays or other objects.
8437 // </remarks> 8365 // </remarks>
8438 8366
8439 public LSL_List llParseStringKeepNulls(string src, LSL_List separators, LSL_List spacers) 8367 private LSL_List ParseString(string src, LSL_List separators, LSL_List spacers, bool keepNulls)
8440 { 8368 {
8441 int beginning = 0; 8369 int beginning = 0;
8442 int srclen = src.Length; 8370 int srclen = src.Length;
@@ -8456,8 +8384,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8456 8384
8457 LSL_List tokens = new LSL_List(); 8385 LSL_List tokens = new LSL_List();
8458 8386
8459 m_host.AddScriptLPS(1);
8460
8461 // All entries are initially valid 8387 // All entries are initially valid
8462 8388
8463 for (int i = 0; i < mlen; i++) 8389 for (int i = 0; i < mlen; i++)
@@ -8529,14 +8455,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8529 { 8455 {
8530 // no markers were found on this pass 8456 // no markers were found on this pass
8531 // so we're pretty much done 8457 // so we're pretty much done
8532 tokens.Add(new LSL_String(src.Substring(beginning, srclen - beginning))); 8458 if ((keepNulls) || ((!keepNulls) && (srclen - beginning) > 0))
8459 tokens.Add(new LSL_String(src.Substring(beginning, srclen - beginning)));
8533 break; 8460 break;
8534 } 8461 }
8535 8462
8536 // Otherwise we just add the newly delimited token 8463 // Otherwise we just add the newly delimited token
8537 // and recalculate where the search should continue. 8464 // and recalculate where the search should continue.
8538 8465 if ((keepNulls) || ((!keepNulls) && (offset[best] - beginning) > 0))
8539 tokens.Add(new LSL_String(src.Substring(beginning,offset[best]-beginning))); 8466 tokens.Add(new LSL_String(src.Substring(beginning,offset[best]-beginning)));
8540 8467
8541 if (best < seplen) 8468 if (best < seplen)
8542 { 8469 {
@@ -8545,7 +8472,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8545 else 8472 else
8546 { 8473 {
8547 beginning = offset[best] + (spcarray[best - seplen].ToString()).Length; 8474 beginning = offset[best] + (spcarray[best - seplen].ToString()).Length;
8548 tokens.Add(new LSL_String(spcarray[best - seplen].ToString())); 8475 string str = spcarray[best - seplen].ToString();
8476 if ((keepNulls) || ((!keepNulls) && (str.Length > 0)))
8477 tokens.Add(new LSL_String(str));
8549 } 8478 }
8550 } 8479 }
8551 8480
@@ -8555,7 +8484,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8555 // arduous. Alternatively the 'break' could be replced with a return 8484 // arduous. Alternatively the 'break' could be replced with a return
8556 // but that's shabby programming. 8485 // but that's shabby programming.
8557 8486
8558 if (beginning == srclen) 8487 if ((beginning == srclen) && (keepNulls))
8559 { 8488 {
8560 if (srclen != 0) 8489 if (srclen != 0)
8561 tokens.Add(new LSL_String("")); 8490 tokens.Add(new LSL_String(""));
@@ -8563,7 +8492,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8563 8492
8564 return tokens; 8493 return tokens;
8565 } 8494 }
8566 8495
8496 public LSL_List llParseString2List(string src, LSL_List separators, LSL_List spacers)
8497 {
8498 m_host.AddScriptLPS(1);
8499 return this.ParseString(src, separators, spacers, false);
8500 }
8501
8502 public LSL_List llParseStringKeepNulls(string src, LSL_List separators, LSL_List spacers)
8503 {
8504 m_host.AddScriptLPS(1);
8505 return this.ParseString(src, separators, spacers, true);
8506 }
8507
8567 public LSL_Integer llGetObjectPermMask(int mask) 8508 public LSL_Integer llGetObjectPermMask(int mask)
8568 { 8509 {
8569 m_host.AddScriptLPS(1); 8510 m_host.AddScriptLPS(1);