diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 83 |
1 files changed, 2 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 dc4249c..974f91b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -9705,90 +9705,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9705 | 9705 | ||
9706 | Notecard nc = new Notecard(); | 9706 | Notecard nc = new Notecard(); |
9707 | nc.lastRef = DateTime.Now; | 9707 | nc.lastRef = DateTime.Now; |
9708 | nc.text = ParseText(text.Replace("\r", "").Split('\n')); | 9708 | nc.text = SLUtil.ParseNotecardToList(text).ToArray(); |
9709 | m_Notecards[assetID] = nc; | 9709 | m_Notecards[assetID] = nc; |
9710 | } | 9710 | } |
9711 | } | 9711 | } |
9712 | 9712 | ||
9713 | protected static string[] ParseText(string[] input) | ||
9714 | { | ||
9715 | int idx = 0; | ||
9716 | int level = 0; | ||
9717 | List<string> output = new List<string>(); | ||
9718 | string[] words; | ||
9719 | |||
9720 | while (idx < input.Length) | ||
9721 | { | ||
9722 | if (input[idx] == "{") | ||
9723 | { | ||
9724 | level++; | ||
9725 | idx++; | ||
9726 | continue; | ||
9727 | } | ||
9728 | |||
9729 | if (input[idx]== "}") | ||
9730 | { | ||
9731 | level--; | ||
9732 | idx++; | ||
9733 | continue; | ||
9734 | } | ||
9735 | |||
9736 | switch (level) | ||
9737 | { | ||
9738 | case 0: | ||
9739 | words = input[idx].Split(' '); // Linden text ver | ||
9740 | // Notecards are created *really* empty. Treat that as "no text" (just like after saving an empty notecard) | ||
9741 | if (words.Length < 3) | ||
9742 | return new String[0]; | ||
9743 | |||
9744 | int version = int.Parse(words[3]); | ||
9745 | if (version != 2) | ||
9746 | return new String[0]; | ||
9747 | break; | ||
9748 | case 1: | ||
9749 | words = input[idx].Split(' '); | ||
9750 | if (words[0] == "LLEmbeddedItems") | ||
9751 | break; | ||
9752 | if (words[0] == "Text") | ||
9753 | { | ||
9754 | int len = int.Parse(words[2]); | ||
9755 | idx++; | ||
9756 | |||
9757 | int count = -1; | ||
9758 | |||
9759 | while (count < len) | ||
9760 | { | ||
9761 | // int l = input[idx].Length; | ||
9762 | string ln = input[idx]; | ||
9763 | |||
9764 | int need = len-count-1; | ||
9765 | if (ln.Length > need) | ||
9766 | ln = ln.Substring(0, need); | ||
9767 | |||
9768 | output.Add(ln); | ||
9769 | count += ln.Length + 1; | ||
9770 | idx++; | ||
9771 | } | ||
9772 | |||
9773 | return output.ToArray(); | ||
9774 | } | ||
9775 | break; | ||
9776 | case 2: | ||
9777 | words = input[idx].Split(' '); // count | ||
9778 | if (words[0] == "count") | ||
9779 | { | ||
9780 | int c = int.Parse(words[1]); | ||
9781 | if (c > 0) | ||
9782 | return new String[0]; | ||
9783 | break; | ||
9784 | } | ||
9785 | break; | ||
9786 | } | ||
9787 | idx++; | ||
9788 | } | ||
9789 | return output.ToArray(); | ||
9790 | } | ||
9791 | |||
9792 | public static bool IsCached(UUID assetID) | 9713 | public static bool IsCached(UUID assetID) |
9793 | { | 9714 | { |
9794 | lock (m_Notecards) | 9715 | lock (m_Notecards) |
@@ -9844,4 +9765,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9844 | } | 9765 | } |
9845 | } | 9766 | } |
9846 | } | 9767 | } |
9847 | } | 9768 | } \ No newline at end of file |