2 // Radegast Metaverse Client
3 // Copyright (c) 2009-2014, Radegast Development Team
4 // All rights reserved.
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
9 // * Redistributions of source code must retain the above copyright notice,
10 // this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above copyright
12 // notice, this list of conditions and the following disclaimer in the
13 // documentation and/or other materials provided with the distribution.
14 // * Neither the name of the application "Radegast", nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 using System.Collections.Generic;
34 using System.Text.RegularExpressions;
38 public struct LSLKeyWord
40 public string KeyWord;
41 public string ToolTip;
44 public override string ToString()
50 public class LSLKeywordParser
52 private static Dictionary<string, LSLKeyWord> keyWords;
54 public static Dictionary<string, LSLKeyWord> KeyWords
68 private static Regex sectionRegex = new Regex(@"\[(\w+)\s+([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\]", RegexOptions.Compiled);
69 private static Regex keyWordRegex = new Regex(@"^([^\s]+)(\s+(.*))?", RegexOptions.Compiled);
71 public static Dictionary<string, LSLKeyWord> Parse()
73 Dictionary<string, LSLKeyWord> ret = new Dictionary<string, LSLKeyWord>();
74 Color currentColor = Color.Black;
77 string section = string.Empty;
79 foreach (String line in Properties.Resources.lsl_keywords.Split('\n'))
83 string l = line.Trim();
85 if (l.StartsWith("#"))
90 // Looking for line like [word 0, .3, .5]
91 if ((m = sectionRegex.Match(l)).Success)
93 section = m.Groups[1].Value;
94 if (section == "word")
97 float r = float.Parse(m.Groups[2].Value, System.Globalization.CultureInfo.InvariantCulture);
98 float g = float.Parse(m.Groups[3].Value, System.Globalization.CultureInfo.InvariantCulture);
99 float b = float.Parse(m.Groups[4].Value, System.Globalization.CultureInfo.InvariantCulture);
100 currentColor = Color.FromArgb((int)(r * 255), (int)(g * 255), (int)(b * 255));
109 if ((m = keyWordRegex.Match(l)).Success)
111 LSLKeyWord kw = new LSLKeyWord();
112 kw.KeyWord = m.Groups[1].Value;
113 kw.ToolTip = m.Groups[3].Value.Replace(@"\n", "\n");
114 kw.Color = currentColor;
118 ret.Add(kw.KeyWord, kw);