Author: atsushi
Date: 2006-04-03 19:58:51 -0400 (Mon, 03 Apr 2006)
New Revision: 58987

Added:
   trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/atom.rnc
Modified:
   trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/ChangeLog
   trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/RncParser.jay
   trunk/mcs/class/Commons.Xml.Relaxng/Test/ChangeLog
   trunk/mcs/class/Commons.Xml.Relaxng/Test/RncTests.cs
   trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/ChangeLog
Log:
2006-04-04  Atsushi Enomoto <[EMAIL PROTECTED]>

        * RncParser.jay : handle "nested" annotations as well. This fixes
          atom.rnc parsing.

        * atom.rnc : new file for RNC parser test (It is from
        http://atompub.org/2005/08/17/atom.rnc i.e.
        http://www.ietf.org/rfc/rfc4287.txt).

        * RncTests.cs : added atom.rnc parsing test.



Modified: trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/ChangeLog
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/ChangeLog       
2006-04-03 23:46:37 UTC (rev 58986)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/ChangeLog       
2006-04-03 23:58:51 UTC (rev 58987)
@@ -1,5 +1,10 @@
 2006-04-04  Atsushi Enomoto <[EMAIL PROTECTED]>
 
+       * RncParser.jay : handle "nested" annotations as well. This fixes
+         atom.rnc parsing.
+
+2006-04-04  Atsushi Enomoto <[EMAIL PROTECTED]>
+
        * XmlChar.cs : copied newer one from System.Xml.
        * RncParser.jay,
          RncTokenizer.cs :

Modified: 
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/RncParser.jay
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/RncParser.jay   
2006-04-03 23:46:37 UTC (rev 58986)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/RncParser.jay   
2006-04-03 23:58:51 UTC (rev 58987)
@@ -1078,12 +1078,23 @@
 */
 
 AnnotationAttributesContent /* returns null */
-       : OpenBracket NestedAnnotationAttributes AnnotationContent CloseBracket
+       : OpenBracket NestedAnnotationContents CloseBracket
        {
                $$ = null;
        }
        ;
 
+// ditto (see also AnnotationContentInAnnotations)
+NestedAnnotationContents
+       : /* empty */
+       | PrefixedName Equal Literal NestedAnnotationContents
+       | IdentifierOrKeyword Equal Literal NestedAnnotationContents
+       | PrefixedName AnnotationAttributesContent NestedAnnotationContents
+       | IdentifierOrKeyword AnnotationAttributesContent 
NestedAnnotationContents
+       | Literal
+       | Literal NestedAnnotationContents
+       ;
+
 NestedAnnotationAttributes /* returns null */
        : /* empty */
        {

Modified: trunk/mcs/class/Commons.Xml.Relaxng/Test/ChangeLog
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Test/ChangeLog  2006-04-03 23:46:37 UTC 
(rev 58986)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Test/ChangeLog  2006-04-03 23:58:51 UTC 
(rev 58987)
@@ -1,5 +1,9 @@
 2006-04-04  Atsushi Enomoto <[EMAIL PROTECTED]>
 
+       * RncTests.cs : added atom.rnc parsing test.
+
+2006-04-04  Atsushi Enomoto <[EMAIL PROTECTED]>
+
        * RncTests.cs : added surrogate test and foreign-elements/attributes
          ambiguity test.
 

Modified: trunk/mcs/class/Commons.Xml.Relaxng/Test/RncTests.cs
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Test/RncTests.cs        2006-04-03 
23:46:37 UTC (rev 58986)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Test/RncTests.cs        2006-04-03 
23:58:51 UTC (rev 58987)
@@ -41,6 +41,12 @@
                }
 
                [Test]
+               public void TestAtomRnc ()
+               {
+                       Compile ("Test/XmlFiles/atom.rnc");
+               }
+
+               [Test]
                // Make sure that it is not rejected by ambiguity between
                // foreign attribute and foreign element.
                public void Annotations ()

Modified: trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/ChangeLog
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/ChangeLog 2006-04-03 
23:46:37 UTC (rev 58986)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/ChangeLog 2006-04-03 
23:58:51 UTC (rev 58987)
@@ -1,3 +1,9 @@
+2006-04-04  Atsushi Enomoto <[EMAIL PROTECTED]>
+
+       * atom.rnc : new file for RNC parser test (It is from
+       http://atompub.org/2005/08/17/atom.rnc i.e.
+       http://www.ietf.org/rfc/rfc4287.txt).
+
 2004-03-17  Atsushi Enomoto <[EMAIL PROTECTED]>
 
        * Added relaxng.rng and relaxng.rnc.

Added: trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/atom.rnc
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/atom.rnc  2006-04-03 
23:46:37 UTC (rev 58986)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Test/XmlFiles/atom.rnc  2006-04-03 
23:58:51 UTC (rev 58987)
@@ -0,0 +1,339 @@
+# -*- rnc -*-
+# RELAX NG Compact Syntax Grammar for the
+# Atom Format Specification Version 11
+
+namespace atom = "http://www.w3.org/2005/Atom";
+namespace xhtml = "http://www.w3.org/1999/xhtml";
+namespace s = "http://www.ascc.net/xml/schematron";
+namespace local = ""
+
+start = atomFeed | atomEntry
+
+# Common attributes
+
+atomCommonAttributes =
+   attribute xml:base { atomUri }?,
+   attribute xml:lang { atomLanguageTag }?,
+   undefinedAttribute*
+
+# Text Constructs
+
+atomPlainTextConstruct =
+   atomCommonAttributes,
+   attribute type { "text" | "html" }?,
+   text
+
+atomXHTMLTextConstruct =
+   atomCommonAttributes,
+   attribute type { "xhtml" },
+   xhtmlDiv
+
+atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
+
+# Person Construct
+
+atomPersonConstruct =
+   atomCommonAttributes,
+   (element atom:name { text }
+    & element atom:uri { atomUri }?
+    & element atom:email { atomEmailAddress }?
+    & extensionElement*)
+
+# Date Construct
+
+atomDateConstruct =
+   atomCommonAttributes,
+   xsd:dateTime
+
+# atom:feed
+
+atomFeed =
+   [
+      s:rule [
+         context = "atom:feed"
+         s:assert [
+            test = "atom:author or not(atom:entry[not(atom:author)])"
+            "An atom:feed must have an atom:author unless all "
+            ~ "of its atom:entry children have an atom:author."
+         ]
+      ]
+   ]
+   element atom:feed {
+      atomCommonAttributes,
+      (atomAuthor*
+       & atomCategory*
+       & atomContributor*
+       & atomGenerator?
+       & atomIcon?
+       & atomId
+       & atomLink*
+       & atomLogo?
+       & atomRights?
+       & atomSubtitle?
+       & atomTitle
+       & atomUpdated
+       & extensionElement*),
+      atomEntry*
+   }
+
+# atom:entry
+
+atomEntry =
+   [
+      s:rule [
+         context = "atom:entry"
+         s:assert [
+            test = "atom:[EMAIL PROTECTED]'alternate'] "
+            ~ "or atom:link[not(@rel)] "
+            ~ "or atom:content"
+            "An atom:entry must have at least one atom:link element "
+            ~ "with a rel attribute of 'alternate' "
+            ~ "or an atom:content."
+         ]
+      ]
+      s:rule [
+         context = "atom:entry"
+         s:assert [
+            test = "atom:author or "
+            ~ "../atom:author or atom:source/atom:author"
+            "An atom:entry must have an atom:author "
+            ~ "if its feed does not."
+         ]
+      ]
+   ]
+   element atom:entry {
+      atomCommonAttributes,
+      (atomAuthor*
+       & atomCategory*
+       & atomContent?
+       & atomContributor*
+       & atomId
+       & atomLink*
+       & atomPublished?
+       & atomRights?
+       & atomSource?
+       & atomSummary?
+       & atomTitle
+       & atomUpdated
+       & extensionElement*)
+   }
+
+# atom:content
+
+atomInlineTextContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { "text" | "html" }?,
+      (text)*
+   }
+
+atomInlineXHTMLContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { "xhtml" },
+      xhtmlDiv
+   }
+
+atomInlineOtherContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { atomMediaType }?,
+      (text|anyElement)*
+   }
+
+atomOutOfLineContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { atomMediaType }?,
+      attribute src { atomUri },
+      empty
+   }
+
+atomContent = atomInlineTextContent
+ | atomInlineXHTMLContent
+ | atomInlineOtherContent
+ | atomOutOfLineContent
+
+# atom:author
+
+atomAuthor = element atom:author { atomPersonConstruct }
+
+# atom:category
+
+atomCategory =
+   element atom:category {
+      atomCommonAttributes,
+      attribute term { text },
+      attribute scheme { atomUri }?,
+      attribute label { text }?,
+      undefinedContent
+   }
+
+# atom:contributor
+
+atomContributor = element atom:contributor { atomPersonConstruct }
+
+# atom:generator
+
+atomGenerator = element atom:generator {
+   atomCommonAttributes,
+   attribute uri { atomUri }?,
+   attribute version { text }?,
+   text
+}
+
+# atom:icon
+
+atomIcon = element atom:icon {
+   atomCommonAttributes,
+   (atomUri)
+}
+
+# atom:id
+
+atomId = element atom:id {
+   atomCommonAttributes,
+   (atomUri)
+}
+
+# atom:logo
+
+atomLogo = element atom:logo {
+   atomCommonAttributes,
+   (atomUri)
+}
+
+# atom:link
+
+atomLink =
+   element atom:link {
+      atomCommonAttributes,
+      attribute href { atomUri },
+      attribute rel { atomNCName | atomUri }?,
+      attribute type { atomMediaType }?,
+      attribute hreflang { atomLanguageTag }?,
+      attribute title { text }?,
+      attribute length { text }?,
+      undefinedContent
+   }
+
+# atom:published
+
+atomPublished = element atom:published { atomDateConstruct }
+
+# atom:rights
+
+atomRights = element atom:rights { atomTextConstruct }
+
+# atom:source
+
+atomSource =
+   element atom:source {
+      atomCommonAttributes,
+      (atomAuthor*
+       & atomCategory*
+       & atomContributor*
+       & atomGenerator?
+       & atomIcon?
+       & atomId?
+       & atomLink*
+       & atomLogo?
+       & atomRights?
+       & atomSubtitle?
+       & atomTitle?
+       & atomUpdated?
+       & extensionElement*)
+   }
+
+# atom:subtitle
+
+atomSubtitle = element atom:subtitle { atomTextConstruct }
+
+# atom:summary
+
+atomSummary = element atom:summary { atomTextConstruct }
+
+# atom:title
+
+atomTitle = element atom:title { atomTextConstruct }
+
+# atom:updated
+
+atomUpdated = element atom:updated { atomDateConstruct }
+
+# Low-level simple types
+
+atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" }
+
+# Whatever a media type is, it contains at least one slash
+atomMediaType = xsd:string { pattern = ".+/.+" }
+
+# As defined in RFC 3066
+atomLanguageTag = xsd:string {
+   pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
+}
+
+# Unconstrained; it's not entirely clear how IRI fit into
+# xsd:anyURI so let's not try to constrain it here
+atomUri = text
+
+# Whatever an email address is, it contains at least one @
+atomEmailAddress = xsd:string { pattern = "[EMAIL PROTECTED]" }
+
+# Simple Extension
+
+simpleExtensionElement =
+   element * - atom:* {
+      text
+   }
+
+# Structured Extension
+
+structuredExtensionElement =
+   element * - atom:* {
+      (attribute * { text }+,
+         (text|anyElement)*)
+    | (attribute * { text }*,
+       (text?, anyElement+, (text|anyElement)*))
+   }
+
+# Other Extensibility
+
+extensionElement =
+   simpleExtensionElement | structuredExtensionElement
+
+undefinedAttribute =
+  attribute * - (xml:base | xml:lang | local:*) { text }
+
+undefinedContent = (text|anyForeignElement)*
+
+anyElement =
+   element * {
+      (attribute * { text }
+       | text
+       | anyElement)*
+   }
+
+anyForeignElement =
+   element * - atom:* {
+      (attribute * { text }
+       | text
+       | anyElement)*
+   }
+
+# XHTML
+
+anyXHTML = element xhtml:* {
+   (attribute * { text }
+    | text
+    | anyXHTML)*
+}
+
+xhtmlDiv = element xhtml:div {
+   (attribute * { text }
+    | text
+    | anyXHTML)*
+}
+
+# EOF
+

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

Reply via email to