* support-test-*.cs: Rename from test-*-p2.cs.
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Nvdl / NvdlValidatingReader.cs
1 using System;
2 using System.Collections;
3 using System.Collections.Specialized;
4 using System.Threading;
5 using System.Xml;
6 using Commons.Xml;
7
8 namespace Commons.Xml.Nvdl
9 {
10         public class NvdlValidatingReader : XmlDefaultReader
11         {
12                 NvdlDispatcher dispatcher;
13
14                 public NvdlValidatingReader (XmlReader reader, NvdlRules rules)
15                         : this (reader, rules, new XmlUrlResolver ())
16                 {
17                 }
18
19                 public NvdlValidatingReader (XmlReader reader, NvdlRules rules, XmlResolver resolver)
20                         : this (reader, rules, resolver, Nvdl.DefaultConfig)
21                 {
22                 }
23
24                 public NvdlValidatingReader (XmlReader reader, NvdlRules rules,
25                         XmlResolver resolver, NvdlConfig config)
26                         : base (reader)
27                 {
28                         dispatcher = new NvdlDispatcher (new SimpleRules (
29                                 new NvdlCompileContext (
30                                 rules, config, resolver)), this);
31                 }
32
33                 internal NvdlValidatingReader (XmlReader reader, SimpleRules rules)
34                         : base (reader)
35                 {
36                         dispatcher = new NvdlDispatcher (rules, this);
37                 }
38
39                 public event NvdlMessageEventHandler ActionStarted;
40
41                 internal void OnMessage (ListDictionary messages)
42                 {
43                         if (messages == null)
44                                 return;
45                         string message = messages [Thread.CurrentThread.CurrentCulture.Name] as string;
46                         if (message == null)
47                                 message = messages [String.Empty] as string;
48                         if (message == null)
49                                 return;
50                         if (ActionStarted != null)
51                                 ActionStarted (this, new NvdlMessageEventArgs (message));
52                 }
53
54                 // validation.
55
56                 public override bool Read ()
57                 {
58                         if (!Reader.Read ())
59                                 return false;
60                         switch (Reader.NodeType) {
61                         case XmlNodeType.Element:
62                                 dispatcher.StartElement ();
63                                 break;
64                         case XmlNodeType.EndElement:
65                                 dispatcher.EndElement ();
66                                 break;
67                         case XmlNodeType.Text:
68                         case XmlNodeType.CDATA:
69                         case XmlNodeType.SignificantWhitespace:
70                                 dispatcher.Text ();
71                                 break;
72                         case XmlNodeType.Whitespace:
73                                 dispatcher.Whitespace ();
74                                 break;
75                         }
76                         return true;
77                 }
78         }
79 }