2006-03-28 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Tue, 28 Mar 2006 02:02:10 +0000 (02:02 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Tue, 28 Mar 2006 02:02:10 +0000 (02:02 -0000)
Based on the patch by Alexandre Alapetite:
* RelaxngException.cs : added another constructor that takes
  pattern, string and innerException.
* RelaxngReader.cs
  RelaxngPattern.cs :
  - wrap xml resolution error in RelaxngInclude.Read(). This change
    is argurable but might be convenient for certain users.
  - Added another constructor to RelaxngReader, and another overload
    for RelaxngPattern.Read(), otherwise RelaxngPattern.Read() can
    never use different XmlResolvers.

svn path=/trunk/mcs/; revision=58636

mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng/ChangeLog
mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng/RelaxngException.cs
mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng/RelaxngPattern.cs
mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng/RelaxngReader.cs

index a8be7499f5bddd685f51e2fd8ec2831859788cc5..1ee981df18db02142e7688b91001ea4c18419727 100644 (file)
@@ -1,3 +1,16 @@
+2006-03-28  Atsushi Enomoto <atsushi@ximian.com>
+
+       Based on the patch by Alexandre Alapetite:
+       * RelaxngException.cs : added another constructor that takes
+         pattern, string and innerException.
+       * RelaxngReader.cs
+         RelaxngPattern.cs :
+         - wrap xml resolution error in RelaxngInclude.Read(). This change
+           is argurable but might be convenient for certain users.
+         - Added another constructor to RelaxngReader, and another overload
+           for RelaxngPattern.Read(), otherwise RelaxngPattern.Read() can
+           never use different XmlResolvers.
+
 2006-03-27  Atsushi Enomoto <atsushi@ximian.com>
 
        Patch by Alexandre Alapetite (http://alexandre.alapetite.net/cv/)
index 42a09649ee25d68a16d8bd1485c0dc7a0ac644a5..43ab59c90b99706292045cb03abcc1776c1fc8bf 100644 (file)
@@ -53,7 +53,12 @@ namespace Commons.Xml.Relaxng
                }
 
                public RelaxngException (RelaxngElementBase source, string message)
-                       : base (message + String.Format (" {0} ({1}, {2})", source.BaseUri, source.LineNumber, source.LinePosition))
+                       : this (source, message, null)
+               {
+               }
+
+               public RelaxngException (RelaxngElementBase source, string message, Exception innerException)
+                       : base (message + String.Format (" {0} ({1}, {2})", source.BaseUri, source.LineNumber, source.LinePosition), innerException)
                {
                }
        }
index d5c0b8045744b8da97756b286e532126d1d93139..04e00f5d12c6bb47176cdc1efe2bf9141595db63 100644 (file)
@@ -325,6 +325,8 @@ namespace Commons.Xml.Relaxng
                                RelaxngReader r = new RelaxngReader (xtr, ns);
                                r.MoveToContent ();
                                g = r.ReadPattern () as RelaxngGrammar;
+                       } catch (Exception ex) { // umm, bad catch though :-(
+                               throw new RelaxngException (this, String.Format("Could not include grammar {0}: {1}", uri.AbsoluteUri, ex.Message), ex);
                        } finally {
                                if (xtr != null)
                                        xtr.Close ();
@@ -455,7 +457,12 @@ namespace Commons.Xml.Relaxng
 
                public static RelaxngPattern Read (XmlReader xmlReader, RelaxngDatatypeProvider provider)
                {
-                       RelaxngReader r = new RelaxngReader (xmlReader, null);
+                       return Read (xmlReader, provider, new XmlUrlResolver ());
+               }
+               
+               public static RelaxngPattern Read (XmlReader xmlReader, RelaxngDatatypeProvider provider, XmlResolver xmlResolver)
+               {
+                       RelaxngReader r = new RelaxngReader (xmlReader, null, xmlResolver);
                        if (r.ReadState == ReadState.Initial)
                                r.Read ();
                        r.MoveToContent ();
index 3aaace1cd79cf554c274a2b313907fb5256bfd3e..fbb040893cdb6ec3dfecb88671433a113e528faf 100644 (file)
@@ -59,7 +59,7 @@ namespace Commons.Xml.Relaxng
                // fields
                Stack nsStack = new Stack ();
                Stack datatypeLibraryStack = new Stack ();
-               XmlResolver resolver = new XmlUrlResolver ();
+               XmlResolver resolver;
 //             ArrayList annotationNamespaces = new ArrayList ();
 
                // ctor
@@ -69,9 +69,15 @@ namespace Commons.Xml.Relaxng
                }
 
                public RelaxngReader (XmlReader reader, string ns)
+                       : this (reader, ns, new XmlUrlResolver ())
+               {
+               }
+
+               public RelaxngReader (XmlReader reader, string ns, XmlResolver resolver)
 //                     : base (grammarForRelaxng == null ? reader : new RelaxngValidatingReader (reader, grammarForRelaxng))
                        : base (reader)
                {
+                       this.resolver = resolver;
                        if (Reader.ReadState == ReadState.Initial)
                                Read ();
                        MoveToContent ();