remove svn:executable from .cs files
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Nvdl / NvdlRelaxngSupport.cs
1 using System;
2 using System.Collections;
3 using System.Collections.Specialized;
4 using System.IO;
5 using System.Xml;
6 using Commons.Xml.Relaxng;
7 using Commons.Xml.Relaxng.Rnc;
8
9 namespace Commons.Xml.Nvdl
10 {
11         public class NvdlRelaxngValidatorProvider : NvdlValidationProvider
12         {
13                 public const string RncMimeType = "application/vnd.oasis-open.relax-ng.rnc";
14
15                 public override NvdlValidatorGenerator CreateGenerator (
16                         NvdlValidate validate, string schemaType, NvdlConfig config)
17                 {
18                         if (schemaType == RncMimeType)
19                                 return CreateRncGenerator (validate, config);
20                         return base.CreateGenerator (validate, schemaType, config);
21                 }
22
23                 private NvdlValidatorGenerator CreateRncGenerator (NvdlValidate validate, NvdlConfig config)
24                 {
25                         XmlResolver resolver = config.XmlResolverInternal;
26                         string schemaUri = GetSchemaUri (validate);
27                         if (schemaUri == null)
28                                 return null;
29                         RelaxngPattern p = RncParser.ParseRnc (
30                                 new StreamReader ((Stream) resolver.GetEntity (
31                                         resolver.ResolveUri (null, schemaUri),
32                                         null,
33                                         typeof (Stream))));
34                         return new NvdlRelaxngValidatorGenerator (p, config);
35                 }
36
37                 public override NvdlValidatorGenerator CreateGenerator (
38                         XmlReader reader, NvdlConfig config)
39                 {
40                         if (reader.NamespaceURI != RelaxngGrammar.NamespaceURI)
41                                 return null;
42
43                         return new NvdlRelaxngValidatorGenerator (RelaxngPattern.Read (reader), config);
44                 }
45         }
46
47         internal class NvdlRelaxngValidatorGenerator : NvdlValidatorGenerator
48         {
49                 RelaxngPattern pattern;
50                 RelaxngPattern attributePattern;
51
52                 public NvdlRelaxngValidatorGenerator (RelaxngPattern p,
53                         NvdlConfig config)
54                 {
55                         // FIXME: use XmlResolver
56                         pattern = p;
57                 }
58
59                 public override XmlReader CreateValidator (XmlReader reader,
60                         XmlResolver resolver)
61                 {
62                         // XmlResolver is never used.
63                         RelaxngValidatingReader rvr = 
64                                 new RelaxngValidatingReader (
65                                         reader, pattern);
66                         rvr.ReportDetails = true;
67                         return rvr;
68                 }
69
70                 public override XmlReader CreateAttributeValidator (
71                         XmlReader reader,
72                         XmlResolver resolver)
73                 {
74                         if (attributePattern == null) {
75                                 RelaxngElement el = new RelaxngElement ();
76                                 el.NameClass = new RelaxngAnyName ();
77                                 el.Patterns.Add (pattern);
78                         }
79                         // XmlResolver is never used.
80                         RelaxngValidatingReader rvr = 
81                                 new RelaxngValidatingReader (
82                                         reader, attributePattern);
83                         rvr.ReportDetails = true;
84                         return rvr;
85                 }
86
87                 public override bool AddOption (string name, string arg)
88                 {
89                         return false;
90                 }
91         }
92 }