module dud.pkgdescription.outpututils;

@safe pure:

private enum string[dchar] tTable = [
	'"' : "\\\"", '\n' : "\\\\n", '\v' : "\\\v", '\r' : "\\\r", '\\' : "\\\\"
];

string escapeString(string s) {
	import std.array : appender;
	import std.conv : to;
	import std..string : translate;
	auto app = appender!(dchar[])();
	translate(s, tTable, null, app);
	return to!string(app.data);
}

unittest {
	string s = "Hello \"World";
	string se = s.escapeString();
	assert(se == "Hello \\\"World", se);
}

bool containsEscapable(string s) {
	foreach(idx; 0 .. s.length) {
		if(s[idx] == '\n'
				|| s[idx] == '"'
				|| s[idx] == '\r'
				|| s[idx] == '\\')
		{
			return true;
		}
	}
	return false;
}