Author: atsushi
Date: 2005-03-22 02:26:41 -0500 (Tue, 22 Mar 2005)
New Revision: 42062

Modified:
   trunk/mcs/class/System.XML/ChangeLog
   trunk/mcs/class/System.XML/Makefile
   trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog
   trunk/mcs/class/System.XML/System.Xml.XPath/Parser.jay
   trunk/mcs/class/System.XML/System.Xml.XPath/Tokenizer.cs
Log:
2004-03-22  Atsushi Enomoto  <[EMAIL PROTECTED]>

        * Makefile : now it creates XSLT pattern parser files from
          Parser.jay and Tokenizer.cs in System.Xml.XPath.

        * Parser.jay, Tokenizer.cs : Now they are used as common code base for
          XPath parser and XSLT pattern parser. Makefile now creates two
          set of sources of them. (This change takes effect on the next change).



Modified: trunk/mcs/class/System.XML/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/ChangeLog        2005-03-22 07:15:52 UTC (rev 
42061)
+++ trunk/mcs/class/System.XML/ChangeLog        2005-03-22 07:26:41 UTC (rev 
42062)
@@ -1,3 +1,8 @@
+2004-03-22  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * Makefile : now it creates XSLT pattern parser files from
+         Parser.jay and Tokenizer.cs in System.Xml.XPath.
+
 2004-03-04  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * System.Xml.dll.sources : Added XslNotSupportedOperation.cs.

Modified: trunk/mcs/class/System.XML/Makefile
===================================================================
--- trunk/mcs/class/System.XML/Makefile 2005-03-22 07:15:52 UTC (rev 42061)
+++ trunk/mcs/class/System.XML/Makefile 2005-03-22 07:26:41 UTC (rev 42062)
@@ -40,7 +40,6 @@
        $(wildcard System.Xml.Serialization/standalone_tests/*.cs) \
        $(wildcard System.Xml.Serialization/standalone_tests/*.output) \
        System.Xml.XPath/Parser.jay     \
-       System.Xml.Query/XQueryParser.jay       \
        System.Xml.Query/skeleton-2.0.cs        \
        Test/Microsoft.Test.csproj      \
        Test/Mono.Test.csproj           \
@@ -54,10 +53,24 @@
 System.Xml.XPath/Parser.cs: System.Xml.XPath/Parser.jay 
$(topdir)/jay/skeleton.cs
        $(topdir)/jay/jay -ct < $(topdir)/jay/skeleton.cs $< >$@
 
-System.Xml.Query/XQueryParser.cs: System.Xml.Query/XQueryParser.jay 
System.Xml.Query/skeleton-2.0.cs
-       $(topdir)/jay/jay -ct < System.Xml.Query/skeleton-2.0.cs $< >$@
+Mono.Xml.Xsl/PatternParser.jay: System.Xml.XPath/Parser.jay 
$(topdir)/jay/skeleton.cs
+       sed "s/\%start Expr/\%start Pattern/" $< >$@
 
-BUILT_SOURCES = System.Xml.XPath/Parser.cs #System.Xml.Query/XQueryParser.cs
-CLEAN_FILES = Test/XmlFiles/xsl/result.xml System.Xml.Query/XQueryParser.cs
+Mono.Xml.Xsl/PatternParser.cs: Mono.Xml.Xsl/PatternParser.jay 
$(topdir)/jay/skeleton.cs
+       echo "#define XSLT_PATTERN" > $@
+       $(topdir)/jay/jay -ct $< < $(topdir)/jay/skeleton.cs >>$@
 
+Mono.Xml.Xsl/PatternTokenizer.cs: System.Xml.XPath/Tokenizer.cs
+       echo "#define XSLT_PATTERN" > $@
+       cat $< >>$@
+
+BUILT_SOURCES = System.Xml.XPath/Parser.cs \
+       Mono.Xml.Xsl/PatternParser.cs \
+       Mono.Xml.Xsl/PatternTokenizer.cs
+
+CLEAN_FILES = Test/XmlFiles/xsl/result.xml \
+       System.Xml.XPath/Parser.cs \
+       Mono.Xml.Xsl/PatternParser.cs \
+       Mono.Xml.Xsl/PatternTokenizer.cs
+
 include ../../build/library.make

Modified: trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog       2005-03-22 
07:15:52 UTC (rev 42061)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog       2005-03-22 
07:26:41 UTC (rev 42062)
@@ -1,3 +1,9 @@
+2004-03-22  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * Parser.jay, Tokenizer.cs : Now they are used as common code base for
+         XPath parser and XSLT pattern parser. Makefile now creates two
+         set of sources of them. (This change takes effect on the next change).
+
 2004-03-16  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * Parser.jay : rewrote step part to be reusable for upcoming XSLT

Modified: trunk/mcs/class/System.XML/System.Xml.XPath/Parser.jay
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/Parser.jay      2005-03-22 
07:15:52 UTC (rev 42061)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/Parser.jay      2005-03-22 
07:26:41 UTC (rev 42062)
@@ -1,23 +1,41 @@
 %{
-// XPath parser
+// XPath/XSLT Pattern parser
 //
-// Author - Piers Haken <[EMAIL PROTECTED]>
+// Author: Piers Haken <[EMAIL PROTECTED]>
+//         Atsushi Enomoto  <[EMAIL PROTECTED]>
 //
+// IMPORTANT:
+// Do not edit "PatternParser.jay". It is autogenerated from
+// Parser.jay. It will be overwritten!
+//
 
 using System;
 using System.Collections;
 using System.Xml;
 using System.Xml.XPath;
 
+#if XSLT_PATTERN
+namespace Mono.Xml.Xsl
+#else
 namespace Mono.Xml.XPath
+#endif
 {
+#if XSLT_PATTERN
+       internal class XsltPatternParser
+#else
        internal class XPathParser
+#endif
        {
        
                internal System.Xml.Xsl.IStaticXsltContext Context;
                
+#if XSLT_PATTERN
+               public XsltPatternParser () : this (null) {}
+               internal XsltPatternParser (System.Xml.Xsl.IStaticXsltContext 
context)
+#else
                public XPathParser () : this (null) {}
                internal XPathParser (System.Xml.Xsl.IStaticXsltContext context)
+#endif
                {
                        Context = context;
                        ErrorOutput = System.IO.TextWriter.Null;
@@ -29,7 +47,7 @@
                        try {
                                Tokenizer tokenizer = new Tokenizer (xpath);
                                return (Expression) yyparse (tokenizer);
-                       } catch (XPathException e) {
+                       } catch (XPathException) {
                                throw;
                        } catch (Exception e) {
                                throw new XPathException ("Error during parse 
of " + xpath, e);
@@ -144,8 +162,117 @@
 
 %%
 
+/* XSLT Pattern */
 
+Pattern
+       : LocationPathPattern
+       | Pattern BAR LocationPathPattern
+       {
+               $$ = new ExprUNION ((NodeSet) $1, (NodeSet) $3);
+       }
+       ;
 
+LocationPathPattern
+       : SLASH
+       {
+               $$ = new ExprRoot ();
+       }
+       | SLASH RelativePathPattern
+       {
+               $$ = new ExprSLASH (new ExprRoot (), (NodeSet) $2);
+       }
+       | IdKeyPattern
+       | IdKeyPattern SLASH RelativePathPattern
+       {
+               $$ = new ExprSLASH ((Expression) $1, (NodeSet) $3);
+       }
+       | IdKeyPattern SLASH2 RelativePathPattern
+       {
+               $$ = new ExprSLASH2 ((Expression) $1, (NodeSet) $3);
+       }
+       | SLASH2 RelativePathPattern
+       {
+               $$ = new ExprSLASH2 (new ExprRoot (), (NodeSet) $2);
+       }
+       | RelativePathPattern
+       ;
+
+// to avoid context-sensitive tokenizer, I just reuse FUNCTION_NAME
+IdKeyPattern
+       : FUNCTION_NAME PAREN_OPEN LITERAL PAREN_CLOSE
+       {
+               XmlQualifiedName name = (XmlQualifiedName) $1;
+               if (name.Name != "id" || name.Namespace != String.Empty)
+                       throw new XPathException (String.Format ("Expected 'id' 
but got '{0}'", name));
+               $$ = ExprFunctionCall.Factory (name,
+                       new FunctionArguments (
+                               new ExprLiteral ((string) $3),
+                               null),
+                       Context);
+       }
+       | FUNCTION_NAME PAREN_OPEN LITERAL COMMA LITERAL PAREN_CLOSE
+       {
+               XmlQualifiedName name = (XmlQualifiedName) $1;
+               if (name.Name != "key" || name.Namespace != String.Empty)
+                       throw new XPathException (String.Format ("Expected 
'key' but got '{0}'", name));
+               $$ = Context.TryGetFunction (name,
+                       new FunctionArguments (
+                               new ExprLiteral ((string) $3),
+                               new FunctionArguments (
+                                       new ExprLiteral ((string) $5),
+                                       null)));
+       }
+       ;
+
+RelativePathPattern
+       : StepPattern
+       | RelativePathPattern SLASH StepPattern
+       {
+               $$ = new ExprSLASH ((Expression) $1, (NodeSet) $3);
+       }
+       | RelativePathPattern SLASH2 StepPattern
+       {
+               $$ = new ExprSLASH2 ((Expression) $1, (NodeSet) $3);
+       }
+       ;
+
+StepPattern
+       : ChildOrAttributeAxisSpecifier NodeTest Predicates
+       {
+               $$ = CreateNodeTest ((Axes) $1, $2, (ArrayList) $3);
+       }
+       ;
+
+ChildOrAttributeAxisSpecifier
+       : AbbreviatedAxisSpecifier
+       | CHILD COLON2
+       {
+               $$ = Axes.Child;
+       }
+       | ATTRIBUTE COLON2
+       {
+               $$ = Axes.Attribute;
+       }
+       ;
+
+Predicates
+       : // empty
+       {
+               $$ = null;
+       }
+       | Predicates Predicate
+       {
+               ArrayList al = (ArrayList) $1;
+               if (al == null)
+                       al = new ArrayList ();
+               al.Add ((Expression) $2);
+               $$ = al;
+       }
+       ;
+
+/* ---- end of XSLT Pattern ---- */
+
+
 Expr
        : OrExpr
        ;

Modified: trunk/mcs/class/System.XML/System.Xml.XPath/Tokenizer.cs
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/Tokenizer.cs    2005-03-22 
07:15:52 UTC (rev 42061)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/Tokenizer.cs    2005-03-22 
07:26:41 UTC (rev 42062)
@@ -1,11 +1,17 @@
 //
-// System.Xml.XPath.Tokenizer
+// System.Xml.XPath.Tokenizer.cs / Mono.Xml.Xsl/PatternTokenizer.cs
 //
 // Author:
 //   Piers Haken ([EMAIL PROTECTED])
+//   Atsushi Enomoto ([EMAIL PROTECTED])
 //
 // (C) 2002 Piers Haken
+// (C) 2005 Novell Inc,
 //
+// IMPORTANT:
+//
+// Do not edit PatternTokenizer.cs. It is autogenerated.
+//
 
 //
 // Permission is hereby granted, free of charge, to any person obtaining
@@ -32,12 +38,17 @@
 using System.IO;
 using System.Text;
 using System.Collections;
+using System.Xml;
+using System.Xml.XPath;
 using Mono.Xml.XPath;
-using Mono.Xml.XPath.yyParser;
 
-namespace System.Xml.XPath
+#if XSLT_PATTERN
+namespace Mono.Xml.Xsl
+#else
+namespace Mono.Xml.XPath
+#endif
 {
-       internal class Tokenizer : Mono.Xml.XPath.yyParser.yyInput
+       internal class Tokenizer : yyParser.yyInput
        {
                private string m_rgchInput;
                private int m_ich;

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to