fixes a problem with string escaping

This commit is contained in:
hneemann 2020-11-06 18:25:50 +01:00
parent 0184e2c43c
commit 006faab1a0
2 changed files with 51 additions and 3 deletions

View File

@ -244,15 +244,42 @@ public class ResolveGenerics {
contentSet.add(key);
sb.append(key).append(":=");
if (val instanceof String)
sb.append("\"").append(val).append("\"");
else if (val instanceof Integer)
if (val instanceof String) {
sb.append("\"");
escapeString(sb, (String) val);
sb.append("\"");
} else if (val instanceof Integer)
sb.append("int(").append(val).append(")");
else
sb.append(val);
sb.append(";\n");
}
static void escapeString(StringBuilder sb, String str) {
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '\\':
sb.append("\\\\");
break;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\t':
sb.append("\\t");
break;
case '"':
sb.append("\\\"");
break;
default:
sb.append(c);
}
}
}
private static final class SetCircuitFunc extends Function {
private final VisualElement ve;

View File

@ -0,0 +1,21 @@
package de.neemann.digital.draw.library;
import junit.framework.TestCase;
public class ResolveGenericsTest extends TestCase {
public void testEscapeString() {
check("Test", "Test");
check("\\\\", "\\");
check("\\n", "\n");
check("\\r", "\r");
check("\\t", "\t");
check("\\\"Test\\\"", "\"Test\"");
}
private void check(String expected, String found) {
StringBuilder sb = new StringBuilder();
ResolveGenerics.escapeString(sb, found);
assertEquals(expected, sb.toString());
}
}