diff --git a/src-tests/com/maccasoft/tools/SourceFormatterTest.java b/src-tests/com/maccasoft/tools/SourceFormatterTest.java index f5522f9..6d818a5 100644 --- a/src-tests/com/maccasoft/tools/SourceFormatterTest.java +++ b/src-tests/com/maccasoft/tools/SourceFormatterTest.java @@ -99,6 +99,18 @@ public class SourceFormatterTest { assertEquals("TEST ld hl, TEST\r\n", formatter.format()); } + @Test + public void testKeepStringLiteralDelimiters() throws Exception { + StringBuilder builder = new StringBuilder(); + builder.append("test1 db 'string'").append("\n"); + builder.append("test2 db \"string\"").append("\n"); + SourceBuilder sourceBuilder = new SourceBuilder(new ArrayList()); + Source source = sourceBuilder.parse(new StringReader(builder.toString()), null); + + SourceFormatter formatter = new SourceFormatter(source); + assertEquals("test1 db 'string'\r\ntest2 db \"string\"\r\n", formatter.format()); + } + public String format(String... sourceLines) { StringBuilder builder = new StringBuilder(); for (String lineText : sourceLines) { diff --git a/src/nl/grauw/glass/Parser.java b/src/nl/grauw/glass/Parser.java index ca686b3..0b830bf 100644 --- a/src/nl/grauw/glass/Parser.java +++ b/src/nl/grauw/glass/Parser.java @@ -288,7 +288,7 @@ public class Parser { @Override public State parse(char character) { if (character == '"') { - expressionBuilder.addValueToken(new StringLiteral(accumulator.toString())); + expressionBuilder.addValueToken(new StringLiteral(character, accumulator.toString())); accumulator.setLength(0); return argumentOperatorState; } @@ -367,7 +367,7 @@ public class Parser { expressionBuilder.addValueToken(new CharacterLiteral(accumulator.charAt(0))); } else { - expressionBuilder.addValueToken(new StringLiteral(accumulator.toString())); + expressionBuilder.addValueToken(new StringLiteral(character, accumulator.toString())); } accumulator.setLength(0); return argumentOperatorState; diff --git a/src/nl/grauw/glass/expressions/StringLiteral.java b/src/nl/grauw/glass/expressions/StringLiteral.java index 756151b..8699bc4 100644 --- a/src/nl/grauw/glass/expressions/StringLiteral.java +++ b/src/nl/grauw/glass/expressions/StringLiteral.java @@ -4,9 +4,11 @@ import java.util.List; public class StringLiteral extends Literal { + private final char delimiter; private final String string; - public StringLiteral(String string) { + public StringLiteral(char delimiter, String string) { + this.delimiter = delimiter; this.string = string; } @@ -49,7 +51,12 @@ public class StringLiteral extends Literal { public String toString() { String escaped = string; escaped = escaped.replace("\\", "\\\\"); - escaped = escaped.replace("\"", "\\\""); + if (delimiter == '"') { + escaped = escaped.replace("\"", "\\\""); + } + else if (delimiter == '\'') { + escaped = escaped.replace("'", "\\'"); + } escaped = escaped.replace("\0", "\\0"); escaped = escaped.replace("\7", "\\a"); escaped = escaped.replace("\t", "\\t"); @@ -57,7 +64,7 @@ public class StringLiteral extends Literal { escaped = escaped.replace("\f", "\\f"); escaped = escaped.replace("\r", "\\r"); escaped = escaped.replace("\33", "\\e"); - return "\"" + escaped + "\""; + return delimiter + escaped + delimiter; } @Override