diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-16 14:52:18 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-16 14:52:18 +0000 |
| commit | aa02301717037a48b1fdfbadd26e341213df15b5 (patch) | |
| tree | a46b2dfe88556ead6d78aa6c44d8eebbcbfb8392 /src/main/java/org/zwobble/couscous/backends/csharp | |
| parent | 1825bb87182562003d223c0c74f110406eea36cc (diff) | |
Combine Python and C# writers
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/csharp')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 31 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpWriter.java | 38 |
2 files changed, 20 insertions, 49 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java index 8f7e137..43e6611 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -1,21 +1,33 @@ package org.zwobble.couscous.backends.csharp; +import com.google.common.base.Strings; import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.visitors.NodeVisitor; +import org.zwobble.couscous.backends.SourceCodeWriter; import org.zwobble.couscous.values.PrimitiveValueVisitor; public class CsharpSerializer implements NodeVisitor { public static String serialize(Node node, String namespace) { - CsharpWriter writer = new CsharpWriter(); + SourceCodeWriter writer = new SourceCodeWriter( + (writer2, indentation) -> { + writer2.writeSpace(); + writer2.writeSymbol("{"); + }, + (writer2, indentation) -> { + writer2.writeSymbol(Strings.repeat(" ", indentation)); + writer2.writeSymbol("}"); + writer2.writeSymbol("\n"); + } + ); CsharpSerializer serializer = new CsharpSerializer(writer, namespace); serializer.write(node); return writer.asString(); } - private final CsharpWriter writer; + private final SourceCodeWriter writer; private final String namespace; - private CsharpSerializer(CsharpWriter writer, String namespace) { + private CsharpSerializer(SourceCodeWriter writer, String namespace) { this.writer = writer; this.namespace = namespace; } @@ -29,7 +41,7 @@ public class CsharpSerializer implements NodeVisitor { literal.getValue().accept(new PrimitiveValueVisitor<Void>() { @Override public Void visitInteger(int value) { - writer.writeIntegerLiteral(value); + writer.writeInteger(value); return null; } @@ -41,7 +53,7 @@ public class CsharpSerializer implements NodeVisitor { @Override public Void visitBoolean(boolean value) { - writer.writeBooleanLiteral(value); + writer.writeKeyword(value ? "true" : "false"); return null; } @@ -165,14 +177,11 @@ public class CsharpSerializer implements NodeVisitor { writer.writeIdentifier(method.getName()); writer.writeSymbol("("); writer.writeSymbol(")"); - writer.writeSpace(); - writer.writeSymbol("{"); + writer.startBlock(); for (StatementNode statement : method.getBody()) { - writer.writeSymbol("\n "); - write(statement); + writer.writeStatement(() -> write(statement)); } - writer.writeSymbol("\n"); - writer.writeSymbol("}"); + writer.endBlock(); } @Override diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpWriter.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpWriter.java deleted file mode 100644 index d3cfce2..0000000 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpWriter.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.zwobble.couscous.backends.csharp; - -public class CsharpWriter { - private final StringBuilder builder = new StringBuilder(); - - public String asString() { - return builder.toString(); - } - - public void writeIntegerLiteral(int value) { - builder.append(Integer.toString(value)); - } - - public void writeStringLiteral(String value) { - // TODO: escaping - builder.append("\"" + value + "\""); - } - - public void writeBooleanLiteral(boolean value) { - builder.append(value ? "true" : "false"); - } - - public void writeKeyword(String keyword) { - builder.append(keyword); - } - - public void writeSymbol(String symbol) { - builder.append(symbol); - } - - public void writeIdentifier(String identifier) { - builder.append(identifier); - } - - public void writeSpace() { - builder.append(" "); - } -} |
