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

SecurityParser.cs « Mono.Xml « Mono.Security « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 6c0d96591259f0523960fc109e97ad5041778721 (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
//
// Mono.Xml.SecurityParser.cs class implementation
//
// Author:
//	Sebastien Pouliot (spouliot@motus.com)
//
// (C) 2003 Motus Technologies Inc. (http://www.motus.com)
//

using System;
using System.Collections;
using System.Security;

namespace Mono.Xml {

	// convert an XML document into SecurityElement objects
	[CLSCompliant(false)]
#if INSIDE_CORLIB
	internal
#else
	public
#endif
	class SecurityParser : MiniParser, MiniParser.IHandler, MiniParser.IReader {

		private SecurityElement root;

		public SecurityParser () : base () 
		{
			stack = new Stack ();
		}

		public void LoadXml (string xml) 
		{
			root = null;
			xmldoc = xml;
			pos = 0;
			stack.Clear ();
			Parse (this, this);
		}

		public SecurityElement ToXml () 
		{
			return root;
		}

		// IReader

		private string xmldoc;
		private int pos;

		public int Read () 
		{
			if (pos >= xmldoc.Length)
				return -1;
			return (int) xmldoc [pos++];
		}

		// IHandler

		private SecurityElement current;
		private Stack stack;

		public void OnStartParsing (MiniParser parser) {}

		public void OnStartElement (string name, MiniParser.IAttrList attrs) 
		{
			SecurityElement newel = new SecurityElement (name); 
			if (root == null) {
				root = newel;
				current = newel;
			}
			else {
				SecurityElement parent = (SecurityElement) stack.Peek ();
				parent.AddChild (newel);
			}
			stack.Push (newel);
			current = newel;
			// attributes
			int n = attrs.Length;
			for (int i=0; i < n; i++)
				current.AddAttribute (attrs.GetName (i), attrs.GetValue (i));
		}

		public void OnEndElement (string name) 
		{
			current = (SecurityElement) stack.Pop ();
		}

		public void OnChars (string ch) 
		{
			current.Text = ch;
		}

		public void OnEndParsing (MiniParser parser) {}
	}
}