diff --git a/Mustache.relast b/Mustache.relast index 94f4ab20fdc3838348bd53b812b3d1477cae3558..98b475bc84944c01621daab3f1bb8612dbd5589d 100644 --- a/Mustache.relast +++ b/Mustache.relast @@ -1,4 +1,4 @@ -Document ::= <FileName> ComplexElement* ; +Document ::= <FileName> [RootElement:ComplexElement] ; abstract Element ; abstract ComplexElement : Element ; MappingElement : ComplexElement ::= KeyValuePair* ; diff --git a/Navigation.jrag b/Navigation.jrag index 8a147930c42af69e2f828ae63b73eeaa9c565e33..5ad8611944c1eb4623978d603da80121f5ee843a 100644 --- a/Navigation.jrag +++ b/Navigation.jrag @@ -1,9 +1,4 @@ aspect Navigation { - eq Document.getChild().program() = null; - eq Document.getChild().ragconnect() = null; - eq Document.getChild().containedFile() = null; - eq Document.getChild().containedFileName() = getFileName(); - syn boolean Element.isComplex() = false; eq ComplexElement.isComplex() = true; diff --git a/Printing.jrag b/Printing.jrag index 74607aeb7737e1e43c9565b799693889a648a9df..8da958d1e5eb4fd31fbfddd642bf58cf58d2fb02 100644 --- a/Printing.jrag +++ b/Printing.jrag @@ -1,37 +1,40 @@ aspect Printing { String ASTNode.PRINT_INDENT = " "; - syn String MappingDefinitionType.prettyPrint(); - eq JavaMappingDefinitionType.prettyPrint() = getType().getName(); - eq JavaArrayMappingDefinitionType.prettyPrint() = getType().getName() + "[]"; - - syn String JavaTypeUse.prettyPrint() { - StringBuilder sb = new StringBuilder(); - generateAbstractGrammar(sb); - return sb.toString(); + public String Document.prettyPrint() { + return prettyPrint(true); } - syn String Document.prettyPrint() { + public String Document.prettyPrint(boolean prependCreationComment) { StringBuilder sb = new StringBuilder(); - sb.append("# RagConnect created at ").append(java.time.Instant.now()).append("\n"); - for (ComplexElement element : getComplexElementList()) { - element.prettyPrint(sb, false, ""); + if (prependCreationComment) { + sb.append("# RagConnect created at ").append(java.time.Instant.now()).append("\n"); } - if (sb.charAt(sb.length() - 1) != '\n') { + if (hasRootElement()) { + getRootElement().prettyPrint(sb, false, ""); + } + if (sb.length() > 0 && sb.charAt(sb.length() - 1) != '\n') { sb.append("\n"); } return sb.toString(); } - syn StringBuilder Element.prettyPrint(StringBuilder sb, boolean printIndent, String indent); - eq ValueElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { + + abstract protected StringBuilder Element.prettyPrint(StringBuilder sb, boolean printIndent, String indent); + + @Override + protected StringBuilder ValueElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { sb.append(getValue()); return sb; } - eq StringElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { + + @Override + protected StringBuilder StringElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { sb.append("\"").append(getValue()).append("\""); return sb; } - eq ListElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { + + @Override + protected StringBuilder ListElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { if (isEmpty()) { sb.append("[]"); } else { @@ -45,18 +48,23 @@ aspect Printing { } return sb; } - eq KeyValuePair.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { + + @Override + protected StringBuilder KeyValuePair.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { if (printIndent) sb.append(indent); - sb.append(getKey()).append(": "); + sb.append(getKey()).append(":"); if (getValue().isComplex() && !getValue().isEmpty()) { sb.append("\n"); getValue().prettyPrint(sb, true, indent + PRINT_INDENT); //); } else { + sb.append(" "); getValue().prettyPrint(sb, false, indent); } return sb; } - eq MappingElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { + + @Override + protected StringBuilder MappingElement.prettyPrint(StringBuilder sb, boolean printIndent, String indent) { if (isEmpty()) { sb.append("{}"); } else {