[runtime] Fix DISABLE_REFLECTION_EMIT build.
[mono.git] / docs / HtmlAgilityPack / NameValuePairList.cs
1 // HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com>\r
2 using System;\r
3 using System.Collections;\r
4 \r
5 namespace HtmlAgilityPack\r
6 {\r
7     internal class NameValuePairList\r
8     {\r
9         #region Fields\r
10 \r
11         internal readonly string Text;\r
12         private ArrayList _allPairs;\r
13         private Hashtable _pairsWithName;\r
14 \r
15         #endregion\r
16 \r
17         #region Constructors\r
18 \r
19         internal NameValuePairList() :\r
20             this(null)\r
21         {\r
22         }\r
23 \r
24         internal NameValuePairList(string text)\r
25         {\r
26             Text = text;\r
27             _allPairs = new ArrayList();\r
28             _pairsWithName = new Hashtable();\r
29 \r
30             Parse(text);\r
31         }\r
32 \r
33         #endregion\r
34 \r
35         #region Internal Methods\r
36 \r
37         internal static string GetNameValuePairsValue(string text, string name)\r
38         {\r
39             NameValuePairList l = new NameValuePairList(text);\r
40             return l.GetNameValuePairValue(name);\r
41         }\r
42 \r
43         internal ArrayList GetNameValuePairs(string name)\r
44         {\r
45             if (name == null)\r
46                 return _allPairs;\r
47             return _pairsWithName[name] as ArrayList;\r
48         }\r
49 \r
50         internal string GetNameValuePairValue(string name)\r
51         {\r
52             if (name == null)\r
53                 throw new ArgumentNullException();\r
54             ArrayList al = GetNameValuePairs(name);\r
55             if (al == null)\r
56                 return null;\r
57 \r
58             // return first item\r
59             NameValuePair nvp = al[0] as NameValuePair;\r
60             return nvp != null ? nvp.Value : string.Empty;\r
61         }\r
62 \r
63         #endregion\r
64 \r
65         #region Private Methods\r
66 \r
67         private void Parse(string text)\r
68         {\r
69             _allPairs.Clear();\r
70             _pairsWithName.Clear();\r
71             if (text == null)\r
72                 return;\r
73 \r
74             string[] p = text.Split(';');\r
75             foreach (string pv in p)\r
76             {\r
77                 if (pv.Length == 0)\r
78                     continue;\r
79                 string[] onep = pv.Split(new char[] {'='}, 2);\r
80                 if (onep.Length==0)\r
81                     continue;\r
82                 NameValuePair nvp = new NameValuePair(onep[0].Trim().ToLower());\r
83 \r
84                 nvp.Value = onep.Length < 2 ? "" : onep[1];\r
85 \r
86                 _allPairs.Add(nvp);\r
87 \r
88                 // index by name\r
89                 ArrayList al = _pairsWithName[nvp.Name] as ArrayList;\r
90                 if (al == null)\r
91                 {\r
92                     al = new ArrayList();\r
93                     _pairsWithName[nvp.Name] = al;\r
94                 }\r
95                 al.Add(nvp);\r
96             }\r
97         }\r
98 \r
99         #endregion\r
100     }\r
101 }