Escaping string is a mess...
Here's my final(?) function with some last minute surprises in it:
/*
** Prepare a String for JSON export
** ex:
** Once upon
** a "time"
** Becomes:
** "Once upon\na \"time\""
*/
public static function escape(text:String):String
{
var textField:TextField = new TextField();
textField.text = text;
var string:String = "";
if (textField.numLines > 1)
{
for (i in 0 ... textField.numLines)
{
var line:String = textField.getLineText(i);
if (i < (textField.numLines - 1))
{
line = line.substring(0, line.length - 1);
line += "\\n";
}
string += line;
}
}
else
{
string = text;
}
string = StringTools.quoteWinArg(string, false);
if (string.substring(0, 1) != "\"") string = "\"" + string + "\"";
return string;
}
As you can see, I've taken account of TextField that have only one line.
And sometimes quoteWinArg don't add quotes at the start and end of string. So I'm adding them manually. Once again, WHY?
Anyway, it works. I move on something else.