diff --git a/src/main/java/de/neemann/digital/draw/library/ResolveGenerics.java b/src/main/java/de/neemann/digital/draw/library/ResolveGenerics.java index 06536b0c6..cc67c55e3 100644 --- a/src/main/java/de/neemann/digital/draw/library/ResolveGenerics.java +++ b/src/main/java/de/neemann/digital/draw/library/ResolveGenerics.java @@ -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; diff --git a/src/test/java/de/neemann/digital/draw/library/ResolveGenericsTest.java b/src/test/java/de/neemann/digital/draw/library/ResolveGenericsTest.java new file mode 100644 index 000000000..185bd156b --- /dev/null +++ b/src/test/java/de/neemann/digital/draw/library/ResolveGenericsTest.java @@ -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()); + } +} \ No newline at end of file