kopia lustrzana https://github.com/maccasoft/z80-tools
Added parameter to keep string literal delimiters
rodzic
def67dfc39
commit
58ad0cf425
|
@ -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<File>());
|
||||
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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue