From 5b39965a9f843ebf00dd4ef9dd406098aab00294 Mon Sep 17 00:00:00 2001
From: Anders Nilsson <anders.nilsson@cs.lth.se>
Date: Mon, 13 Aug 2007 15:02:40 +0200
Subject: [PATCH] Prettyprinter works for workpiece.x3d IF doctype is disabled.

---
 CompilerGeneration.jrag | 38 +++++++++++++++++++++++++-------------
 JavaCCChunks.jrag       | 21 +++++++++++----------
 x3d/test.x3d            |  1 -
 3 files changed, 36 insertions(+), 24 deletions(-)

diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index 595314f..c7ea26f 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -109,11 +109,11 @@ aspect GenJavaCC {
         pStream.println("void Specification() #Specification : {}");
         pStream.println("{");
         pStream.println("  XmlHeader()");
-        pStream.println("//  [DocType()]");
+//         pStream.println("  [DocType()]");
         pStream.println("  ElementList()");
         pStream.println("}");
         pStream.println();
-        pStream.println("void DocType() : {String s;}");
+        pStream.println("void DocType() #Opt : {String s;}");
         pStream.println("{");
         pStream.println("  <LTBANG>");
         pStream.println("  {");
@@ -174,7 +174,7 @@ aspect GenJavaCC {
         pStream.println();
         pStream.println("void Element()  : {}");
         pStream.println("{");
-        pStream.println("  \"<\"");
+        pStream.println("  <LT> (");
         Iterator iter = elementTypes().values().iterator();
         if (iter.hasNext()) {
             pStream.println("  "+fixName(((XsElement) iter.next()).name())+"()");
@@ -182,7 +182,7 @@ aspect GenJavaCC {
         while (iter.hasNext()) {
             pStream.println("  | "+fixName(((XsElement) iter.next()).name())+"()");
         }
-        pStream.println("  ");
+        pStream.println(" ) ");
         pStream.println("}");
         pStream.println();
         pStream.println("void Attribute()  : {}");
@@ -214,10 +214,12 @@ aspect GenJavaCC {
             pStream.println("void "+name+"() #"+name+" : {}");
             pStream.println("{");
 
-            pStream.println("   <"+name+"> AttributeList() \">\"");
+            pStream.println("   <"+name+"> AttributeList()");
+//             pStream.println("   <"+name+"> AttributeList() \">\"");
 //             pStream.println("  \"<\" <"+name+"> AttributeList() \">\"");
-            pStream.println("  ElementList()");
-            pStream.println("  \"</\" <"+name+">  \">\"");
+//             pStream.println("  ElementList()");
+            pStream.print("  ( <GT> ElementList()");
+            pStream.println("  \"</\" <"+name+">  \">\" | ElementList() \"/>\" )");
 //             pStream.println("  \"<\" <"+name.toUpperCase()+"> AttributeList() \">\"");
 //             pStream.println("  ElementList()");
 //             pStream.println("  \"</\" <"+name.toUpperCase()+">  \">\"");
@@ -360,9 +362,9 @@ aspect GenPrettyPrinter {
 		pStream.println();
 		pStream.println("aspect PrettyPrinter {");
 		pStream.println("  public void ASTNode.prettyPrint(String indent, PrintStream pStream) {");
-		pStream.println("    pStream.print(getNumChild());");
+// 		pStream.println("    pStream.print(getNumChild());");
 		pStream.println("    for (int i=0; i<getNumChild(); i++) {");
-		pStream.println("      pStream.print(getChild(i).getClass());");
+// 		pStream.println("      pStream.print(getChild(i).getClass());");
 		pStream.println("      getChild(i).prettyPrint(indent,pStream);");
 		pStream.println("    }");
 		pStream.println("  }\n");
@@ -411,12 +413,21 @@ aspect GenPrettyPrinter {
 
     public void XsElement.genPrettyPrinter(PrintStream pStream) {
         String name = fixName(name());
-		pStream.println("  public void "+name+".prettyPrint(String indent, PrintStream pStream) {");
-		pStream.println("    pStream.print(\"<"+name+" \");");
+		pStream.println("  public void "+name+".prettyPrint(String ind, PrintStream pStream) {");
+		pStream.println("    pStream.print(ind+\"<"+name+" \");");
 		pStream.println("    for (int i=0; i<getNumAttribute(); i++) {");
-		pStream.println("      getAttribute(i).prettyPrint(indent,pStream);");
+		pStream.println("      getAttribute(i).prettyPrint(ind,pStream);");
 		pStream.println("    }");
-		pStream.println("    pStream.println(\"> \");");
+        pStream.println("    if (getNumElement() == 0) {");
+        pStream.println("       pStream.println(\"/> \");");
+        pStream.println("    } else {");
+        pStream.println("       pStream.println(\"> \");");
+        pStream.println("       String newInd = ind+\"  \";");
+        pStream.println("       for (int i=0; i<getNumElement(); i++) {");
+        pStream.println("          getElement(i).prettyPrint(newInd,pStream);");
+        pStream.println("       }");
+		pStream.println("       pStream.println(ind+\"</"+name+"> \");");
+        pStream.println("    }");
 		pStream.println("  }\n");        
     }
 }
@@ -655,6 +666,7 @@ aspect ParserGen {
 		pStream.println();
         pStream.println("                // Dump the AST");
         pStream.println("                ast.prettyPrint(\"  \", System.out);");
+//         pStream.println("                ast.dumpTree(\"  \", System.out);");
         pStream.println("        }");
         pStream.println("}");
 
diff --git a/JavaCCChunks.jrag b/JavaCCChunks.jrag
index 04b9403..0a1ffdb 100644
--- a/JavaCCChunks.jrag
+++ b/JavaCCChunks.jrag
@@ -94,16 +94,17 @@ aspect JavaCCChunks {
 		pStream.println("    |");
 		pStream.println("    < STRING_LITERAL:");
 		pStream.println("        \"\\\"\"");
-		pStream.println("        (   (~[\"\\\"\",\"\\\\\",\"\\n\",\"\\r\"])");
-		pStream.println("            |");
-		pStream.println("            (\"\\\\\"");
-		pStream.println("                (    [\"n\",\"t\",\"b\",\"r\",\"f\",\"\\\\\",\"'\",\"\\\"\"]");
-		pStream.println("                     |");
-		pStream.println("                     [\"0\"-\"7\"] ( [\"0\"-\"7\"] )?");
-		pStream.println("                     |");
-		pStream.println("                     [\"0\"-\"3\"] [\"0\"-\"7\"] [\"0\"-\"7\"]");
-		pStream.println("                )");
-		pStream.println("            )");
+		pStream.println("        (   (~[\"\\\"\",\"\\n\",\"\\r\"])");
+// 		pStream.println("        (   (~[\"\\\"\",\"\\\\\",\"\\n\",\"\\r\"])");
+// 		pStream.println("            |");
+// 		pStream.println("            (\"\\\\\"");
+// 		pStream.println("                (    [\"n\",\"t\",\"b\",\"r\",\"f\",\"\\\\\",\"'\",\"\\\"\"]");
+// 		pStream.println("                     |");
+// 		pStream.println("                     [\"0\"-\"7\"] ( [\"0\"-\"7\"] )?");
+// 		pStream.println("                     |");
+// 		pStream.println("                     [\"0\"-\"3\"] [\"0\"-\"7\"] [\"0\"-\"7\"]");
+// 		pStream.println("                )");
+// 		pStream.println("            )");
 		pStream.println("        )*");
 		pStream.println("        \"\\\"\"");
 		pStream.println("    >");
diff --git a/x3d/test.x3d b/x3d/test.x3d
index 096d725..a0e3349 100644
--- a/x3d/test.x3d
+++ b/x3d/test.x3d
@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN"   "http://www.web3d.org/specifications/x3d-3.0.dtd">
 <X3D profile="Full">
   <head>
     <meta name="filename" content="..\Sample Parts\Head&plate.x3d"/>
-- 
GitLab