Author: sshafroi
Date: 2008-04-07 12:24:50 +0200 (Mon, 07 Apr 2008)
New Revision: 6379

Modified:
   branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/Builder.java
   branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateDTD.java
   branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateRelaxNG.java
   branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateXSD.java
Log:
Navigator's can be nested. Implement this for xsd and dtd. The RelaxNG 
generator will ignore this and just avoid blowing the stack.




Modified: branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/Builder.java
===================================================================
--- branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/Builder.java   
2008-04-07 10:14:14 UTC (rev 6378)
+++ branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/Builder.java   
2008-04-07 10:24:50 UTC (rev 6379)
@@ -170,6 +170,9 @@
         navigator.attributes.add(new ConfigAttribute("sort", null, false));
         navigator.attributes.add(new ConfigAttribute("boundary-match"));
 
+        // allow recursive nesting of navigator.
+        navigator.addChild(navigator);
+
         // only for fast commands
         navigators.addChild(navigator);
 

Modified: branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateDTD.java
===================================================================
--- branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateDTD.java       
2008-04-07 10:14:14 UTC (rev 6378)
+++ branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateDTD.java       
2008-04-07 10:24:50 UTC (rev 6379)
@@ -65,8 +65,10 @@
             }
             printlnU(">");
 
-            for (int i = 0; i < element.children.size(); i++) {
-                generate(element.children.get(i));
+            for (ConfigElement child : element.children) {
+                if (!written.contains(child.name)) {
+                    generate(child);
+                }
             }
         }
     }

Modified: 
branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateRelaxNG.java
===================================================================
--- branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateRelaxNG.java   
2008-04-07 10:14:14 UTC (rev 6378)
+++ branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateRelaxNG.java   
2008-04-07 10:24:50 UTC (rev 6379)
@@ -36,16 +36,25 @@
             }
         }
 
+        // prevent blowing the stack. This is because we currently don't 
support
+        // recursive elements in this RelaxNG generator.
+        boolean empty = true;
+        for (ConfigElement child : element.children) {
+            if (!element.name.equals(child.name)) {
+                empty = false;
+            }
+        }
+
         println("element " + element.name + " {");
         indent();
-        if (element.attributes.isEmpty() && element.children.isEmpty()) {
+        if (element.attributes.isEmpty() && empty) {
             print(" empty ");
         } else {
             for (final Iterator<ConfigAttribute> iterator = 
element.attributes.iterator(); iterator.hasNext();) {
                 final ConfigAttribute attrib = iterator.next();
 
                 generate(attrib);
-                if (iterator.hasNext() || !element.children.isEmpty()) {
+                if (iterator.hasNext() || !empty) {
                     println(",");
                 } else {
                     println("");
@@ -53,13 +62,18 @@
             }
         }
 
-        if (!element.children.isEmpty()) {
+        if (!empty) {
             println("(");
-            for (int i = 0; i < element.children.size(); i++) {
-                if (i > 0) {
-                    println("|");
+            boolean one = false;
+            for (ConfigElement child : element.children) {
+                if (!element.name.equals(child.name)) {
+                    if(one) {
+                        println("|");
+                    } else {
+                        one = true;
+                    }
+                    generate(child);
                 }
-                generate(element.children.get(i));
             }
             println(")*");
         }

Modified: branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateXSD.java
===================================================================
--- branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateXSD.java       
2008-04-07 10:14:14 UTC (rev 6378)
+++ branches/2.17/mojo/src/main/java/no/sesat/mojo/modes/GenerateXSD.java       
2008-04-07 10:24:50 UTC (rev 6379)
@@ -72,7 +72,9 @@
 
         }
         for (ConfigElement child : element.children) {
-            generate(child);
+            if (!written.contains(child.name)) {
+                generate(child);
+            }
         }
     }
 }

_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to