package jetbrains.mps.baseLanguage.textGen;
/*Generated by MPS */
import jetbrains.mps.text.rt.TextGenContext;
import jetbrains.mps.text.impl.TextGenSupport;
public abstract class StringTextGen {
public static void compilableString(String s, final TextGenContext ctx) {
final TextGenSupport tgs = new TextGenSupport(ctx);
String result = s;
if (s.indexOf('"') >= 0 || s.indexOf('\n') >= 0 || s.indexOf('\r') >= 0) {
boolean needsEscaping = false;
for (int i = 0; i < s.length(); i++) {
if (StringTextGen.isBadDoubleQuote(s, i, ctx) || result.charAt(i) == '\r' || result.charAt(i) == '\n') {
needsEscaping = true;
break;
}
}
if (needsEscaping) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (StringTextGen.isBadDoubleQuote(s, i, ctx)) {
stringBuilder.append("\\\"");
} else if (result.charAt(i) == '\r') {
stringBuilder.append("\\r");
} else if (result.charAt(i) == '\n') {
stringBuilder.append("\\n");
} else {
stringBuilder.append(s.charAt(i));
}
}
result = stringBuilder.toString();
}
}
tgs.append(result);
}
protected static boolean isBadDoubleQuote(String s, int i, final TextGenContext ctx) {
final TextGenSupport tgs = new TextGenSupport(ctx);
return s.charAt(i) == '"' && (i == 0 || s.charAt(i - 1) != '\\');
}
}