Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Header.cs « HtmlAgilityPack « MainsoftWebTest « mainsoft « Test « System.Web « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a88c963df64b04bf6b9c06b8a7c20db7304ea7c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// HtmlAgilityPack V1.0 - Simon Mourier <simonm@microsoft.com>
using System;
using System.Collections;

namespace HtmlAgilityPack
{
	internal class NameValuePair
	{
		internal readonly string Name;
		internal string Value;

		internal NameValuePair()
		{
		}

		internal NameValuePair(string name):
			this()
		{
			Name = name;
		}

		internal NameValuePair(string name, string value):
			this(name)
		{
			Value = value;
		}
	}

	internal class NameValuePairList
	{
		internal readonly string Text;
		private ArrayList _allPairs;
		private Hashtable _pairsWithName;

		internal NameValuePairList():
			this(null)
		{
		}

		internal NameValuePairList(string text)
		{
			Text = text;
			_allPairs = new ArrayList();
			_pairsWithName = new Hashtable();

			Parse(text);
		}

		internal string GetNameValuePairValue(string name)
		{
			if (name==null)
				throw new ArgumentNullException();
			ArrayList al = GetNameValuePairs(name);
			if (al==null)
				return null;

			// return first item
			NameValuePair nvp = al[0] as NameValuePair;
			return nvp.Value;
		}

		internal ArrayList GetNameValuePairs(string name)
		{
			if (name==null)
				return _allPairs;
			return _pairsWithName[name] as ArrayList;
		}

		private void Parse(string text)
		{
			_allPairs.Clear();
			_pairsWithName.Clear();
			if (text==null)
				return;

			string[] p = text.Split(';');
			if (p==null)
				return;
			foreach(string pv in p)
			{
				if (pv.Length==0)
					continue;
				string[] onep = pv.Split(new char[]{'='}, 2);
				if (onep==null)
					continue;
				NameValuePair nvp = new NameValuePair(onep[0].Trim().ToLower());
				if (onep.Length<2)
					nvp.Value = "";
				else
					nvp.Value = onep[1];

				_allPairs.Add(nvp);

				// index by name
				ArrayList al = _pairsWithName[nvp.Name] as ArrayList;
				if (al==null)
				{
					al = new ArrayList();
					_pairsWithName[nvp.Name] = al;
				}
				al.Add(nvp);
			}
		}

		internal static string GetNameValuePairsValue(string text, string name)
		{
			NameValuePairList l = new NameValuePairList(text);
			return l.GetNameValuePairValue(name);
		}
	}
}