// (C) Copyright 2002 Tim Coleman\r
// (c) 2003 Ximian Inc. (http://www.ximian.com)\r
//\r
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
+\r
+//\r
+// Permission is hereby granted, free of charge, to any person obtaining\r
+// a copy of this software and associated documentation files (the\r
+// "Software"), to deal in the Software without restriction, including\r
+// without limitation the rights to use, copy, modify, merge, publish,\r
+// distribute, sublicense, and/or sell copies of the Software, and to\r
+// permit persons to whom the Software is furnished to do so, subject to\r
+// the following conditions:\r
+// \r
+// The above copyright notice and this permission notice shall be\r
+// included in all copies or substantial portions of the Software.\r
+// \r
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+//\r
\r
using System;\r
using System.Collections;\r
using System.Security;\r
using System.Security.Policy;\r
using System.Xml.XPath;\r
-using Mono.Xml.Xsl;
+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_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
}\r
\r
#region Transform\r
-#if 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_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
return new XmlTextReader (stream, XmlNodeType.Element, null);\r
}\r
\r
-#if 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_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_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_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)
- throw new XsltException ("No stylesheet was loaded.", null);
-
- Outputter outputter = new GenericOutputter (output, s.Outputs, null);
- new XslTransformProcessor (s).Process (input, outputter, args, resolver);
+ {\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, debugger).Process (input, outputter, args, resolver);\r
output.Flush ();\r
}\r
\r
-#if 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];
+ XslOutput xslOutput = (XslOutput)s.Outputs[String.Empty];\r
Transform (input, args, new StreamWriter (output, xslOutput.Encoding), resolver);\r
}\r
\r
-#if 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)
- throw new XsltException ("No stylesheet was loaded.", null);
-
- Outputter outputter = new GenericOutputter(output, s.Outputs, output.Encoding);
- new XslTransformProcessor (s).Process (input, outputter, args, resolver);
- outputter.Done ();
+ {\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, debugger).Process (input, outputter, args, resolver);\r
+ outputter.Done ();\r
output.Flush ();\r
}\r
\r
-#if 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)) {
- Transform(new XPathDocument (inputfile).CreateNavigator (), null, s, resolver);
+ using (Stream s = new FileStream (outputfile, FileMode.Create, FileAccess.ReadWrite)) {\r
+ Transform(new XPathDocument (inputfile).CreateNavigator (), null, s, resolver);\r
}\r
}\r
#endregion\r
\r
public void Load (string url, XmlResolver resolver)\r
{\r
- XmlResolver res = resolver;
- if (res == null)
- res = new XmlUrlResolver ();
- Uri uri = res.ResolveUri (null, url);
- using (Stream s = res.GetEntity (uri, null, typeof (Stream)) as Stream) {
- XmlTextReader xtr = new XmlTextReader (uri.ToString (), s);
- xtr.XmlResolver = res;
- XmlValidatingReader xvr = new XmlValidatingReader (xtr);
- xvr.XmlResolver = res;
- xvr.ValidationType = ValidationType.None;
- Load (new XPathDocument (xvr, XmlSpace.Preserve).CreateNavigator (), resolver, null);
+ XmlResolver res = resolver;\r
+ if (res == null)\r
+ res = new XmlUrlResolver ();\r
+ Uri uri = res.ResolveUri (null, url);\r
+ using (Stream s = res.GetEntity (uri, null, typeof (Stream)) as Stream) {\r
+ XmlTextReader xtr = new XmlTextReader (uri.ToString (), s);\r
+ xtr.XmlResolver = res;\r
+ XmlValidatingReader xvr = new XmlValidatingReader (xtr);\r
+ xvr.XmlResolver = res;\r
+ xvr.ValidationType = ValidationType.None;\r
+ Load (new XPathDocument (xvr, XmlSpace.Preserve).CreateNavigator (), resolver, null);\r
}\r
}\r
\r
-#if 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_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_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_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_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_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