Merge pull request #439 from mono-soc-2012/garyb/iconfix
[mono.git] / mcs / class / System.XML / System.Xml.Xsl / XslTransform.cs
index 97a40b06396c1041f8dd6267cd5e80c1fb87c34d..a3c2c5a70d35f6c70dcc80709ed78f5cfc8cfdc8 100644 (file)
@@ -40,16 +40,78 @@ using System.Xml.XPath;
 using Mono.Xml.Xsl;\r
 \r
 namespace System.Xml.Xsl {\r
+       internal class SimpleXsltDebugger\r
+       {\r
+               public void OnCompile (XPathNavigator style)\r
+               {\r
+                       Console.Write ("Compiling: ");\r
+                       PrintXPathNavigator (style);\r
+                       Console.WriteLine ();\r
+               }\r
+\r
+               public void OnExecute (XPathNodeIterator currentNodeSet, XPathNavigator style, XsltContext xsltContext)\r
+               {\r
+                       Console.Write ("Executing: ");\r
+                       PrintXPathNavigator (style);\r
+                       Console.WriteLine (" / NodeSet: (type {1}) {0} / XsltContext: {2}", currentNodeSet, currentNodeSet.GetType (), xsltContext);\r
+               }\r
+\r
+               void PrintXPathNavigator (XPathNavigator nav)\r
+               {\r
+                       IXmlLineInfo li = nav as IXmlLineInfo;\r
+                       li = li != null && li.HasLineInfo () ? li : null;\r
+                       Console.Write ("({0}, {1}) element {2}", li != null ? li.LineNumber : 0, li != null ? li.LinePosition : 0, nav.Name);\r
+               }\r
+       }\r
+\r
+       [Obsolete]\r
        public sealed class XslTransform {\r
 \r
+               internal static readonly bool TemplateStackFrameError;\r
+               internal static readonly TextWriter TemplateStackFrameOutput;\r
+\r
+               static XslTransform ()\r
+               {\r
+                       string env = Environment.GetEnvironmentVariable ("MONO_XSLT_STACK_FRAME");\r
+                       switch (env) {\r
+                       case "stdout":\r
+                               TemplateStackFrameOutput = Console.Out;\r
+                               break;\r
+                       case "stderr":\r
+                               TemplateStackFrameOutput = Console.Error;\r
+                               break;\r
+                       case "error":\r
+                               TemplateStackFrameError = true;\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               static object GetDefaultDebugger ()\r
+               {\r
+                       string env = Environment.GetEnvironmentVariable ("MONO_XSLT_DEBUGGER");\r
+                       if (env == null)\r
+                               return null;\r
+                       if (env == "simple")\r
+                               return new SimpleXsltDebugger ();\r
+                       object obj = Activator.CreateInstance (Type.GetType (env));\r
+                       return obj;\r
+               }\r
+\r
+               public XslTransform ()\r
+                       : this (GetDefaultDebugger ())\r
+               {\r
+               }\r
+\r
+               internal XslTransform (object debugger)\r
+               {\r
+                       this.debugger = debugger;\r
+               }\r
+\r
+               object debugger;\r
                CompiledStylesheet s;\r
                XmlResolver xmlResolver = new XmlUrlResolver ();\r
 \r
-               [MonoTODO ("Security check.")]\r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
+               [MonoTODO] // FIXME: audit security check\r
                public XmlResolver XmlResolver {\r
                        set {\r
                                 xmlResolver = value;\r
@@ -57,37 +119,22 @@ namespace System.Xml.Xsl {
                }\r
                \r
                #region Transform\r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public XmlReader Transform (IXPathNavigable input, XsltArgumentList args)\r
                {\r
                        return Transform (input.CreateNavigator (), args, xmlResolver);\r
                }\r
 \r
-#if NET_1_1\r
                public XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)\r
-#else\r
-               XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)\r
-#endif\r
                {\r
                        return Transform (input.CreateNavigator (), args, resolver);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public XmlReader Transform (XPathNavigator input, XsltArgumentList args)\r
                {\r
                        return Transform (input, args, xmlResolver);\r
                }\r
-#if NET_1_1\r
+\r
                public XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)\r
-#else\r
-               XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)\r
-#endif\r
                {\r
                        // todo: is this right?\r
                        MemoryStream stream = new MemoryStream ();\r
@@ -96,134 +143,82 @@ namespace System.Xml.Xsl {
                        return new XmlTextReader (stream, XmlNodeType.Element, null);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output)\r
                {\r
                        Transform (input.CreateNavigator (), args, output, xmlResolver);\r
                }\r
-#if NET_1_1\r
+\r
                public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
-#else\r
-               void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
-#endif\r
                {\r
                        Transform (input.CreateNavigator (), args, output, resolver);\r
                }\r
                \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output)\r
                {\r
                        Transform (input.CreateNavigator (), args, output, xmlResolver);\r
                }\r
-#if NET_1_1\r
                public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
-#else\r
-               void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
-#endif\r
                {\r
                        Transform (input.CreateNavigator (), args, output, resolver);\r
                }\r
                \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output)\r
                {\r
                        Transform (input.CreateNavigator (), args, output, xmlResolver);\r
                }\r
-#if NET_1_1\r
+\r
                public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
-#else\r
-               void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
-#endif\r
                {\r
                        Transform (input.CreateNavigator (), args, output, resolver);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output)\r
                {\r
                        Transform (input, args, output, xmlResolver);\r
                }\r
-#if NET_1_1\r
+\r
                public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
-#else\r
-               void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
-#endif\r
                {\r
                        if (s == null)\r
                                throw new XsltException ("No stylesheet was loaded.", null);\r
 \r
                        Outputter outputter = new GenericOutputter (output, s.Outputs, null);\r
-                       new XslTransformProcessor (s).Process (input, outputter, args, resolver);\r
+                       new XslTransformProcessor (s, debugger).Process (input, outputter, args, resolver);\r
                        output.Flush ();\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public void Transform (XPathNavigator input, XsltArgumentList args, Stream output)\r
                {\r
                        Transform (input, args, output, xmlResolver);           \r
                }\r
-#if NET_1_1\r
                public void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
-#else\r
-               void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
-#endif\r
                {\r
                        XslOutput xslOutput = (XslOutput)s.Outputs[String.Empty];\r
                        Transform (input, args, new StreamWriter (output, xslOutput.Encoding), resolver);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output)\r
                {\r
                        Transform (input, args, output, xmlResolver);\r
                }\r
-#if NET_1_1\r
+\r
                public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
-#else\r
-               void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
-#endif\r
                {\r
                        if (s == null)\r
                                throw new XsltException ("No stylesheet was loaded.", null);\r
 \r
                        Outputter outputter = new GenericOutputter(output, s.Outputs, output.Encoding);                 \r
-                       new XslTransformProcessor (s).Process (input, outputter, args, resolver);\r
+                       new XslTransformProcessor (s, debugger).Process (input, outputter, args, resolver);\r
                        outputter.Done ();\r
                        output.Flush ();\r
                }\r
                \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
-#endif\r
                public void Transform (string inputfile, string outputfile)\r
                { \r
                        Transform (inputfile, outputfile, xmlResolver);\r
                }\r
 \r
-#if NET_1_1\r
                public void Transform (string inputfile, string outputfile, XmlResolver resolver)\r
-#else\r
-               void Transform (string inputfile, string outputfile, XmlResolver resolver)\r
-#endif\r
                {\r
                        using (Stream s = new FileStream (outputfile, FileMode.Create, FileAccess.ReadWrite)) {\r
                                Transform(new XPathDocument (inputfile).CreateNavigator (), null, s, resolver);\r
@@ -253,84 +248,48 @@ namespace System.Xml.Xsl {
                        }\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete("You should pass evidence.", false)]\r
-#endif\r
                public void Load (XmlReader stylesheet)\r
                {\r
                        Load (stylesheet, null, null);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete("You should pass evidence.", false)]\r
-#endif\r
                public void Load (XmlReader stylesheet, XmlResolver resolver)\r
                {\r
                        Load (stylesheet, resolver, null);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete("You should pass evidence.", false)]\r
-#endif\r
                public void Load (XPathNavigator stylesheet)\r
                {\r
                        Load (stylesheet, null, null);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete("You should pass evidence.", false)]\r
-#endif\r
                public void Load (XPathNavigator stylesheet, XmlResolver resolver)\r
                {\r
                        Load (stylesheet, resolver, null);\r
                }\r
                \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete("You should pass evidence.", false)]\r
-#endif\r
                public void Load (IXPathNavigable stylesheet)\r
                {\r
                        Load (stylesheet.CreateNavigator(), null);\r
                }\r
 \r
-#if NET_2_0\r
-#elif NET_1_1\r
-               [Obsolete("You should pass evidence.", false)]\r
-#endif\r
                public void Load (IXPathNavigable stylesheet, XmlResolver resolver)\r
                {\r
                        Load (stylesheet.CreateNavigator(), resolver);\r
                }\r
 \r
                // Introduced in .NET 1.1\r
-#if NET_1_1\r
                public void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)\r
-#else\r
-               internal void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)\r
-#endif\r
                {\r
                        Load (stylesheet.CreateNavigator(), resolver, evidence);\r
                }\r
 \r
-#if NET_1_1\r
                public void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)\r
-#else\r
-               internal void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)\r
-#endif\r
                {\r
-                       s = new Compiler ().Compile (stylesheet, resolver, evidence);\r
+                       s = new Compiler (debugger).Compile (stylesheet, resolver, evidence);\r
                }\r
 \r
-#if NET_1_1\r
                public void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)\r
-#else\r
-               internal void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)\r
-#endif\r
                {\r
                        Load (new XPathDocument (stylesheet, XmlSpace.Preserve).CreateNavigator (), resolver, evidence);\r
                }\r