Index: frog/server/dart_json.dart |
=================================================================== |
--- frog/server/dart_json.dart (revision 3253) |
+++ frog/server/dart_json.dart (working copy) |
@@ -137,6 +137,8 @@ |
static final int A_SMALL = 97; // 'a'.charCodeAt(0) |
static final int B_SMALL = 98; // 'b'.charCodeAt(0) |
static final int E_SMALL = 101; // 'e'.charCodeAt(0) |
+ static final int N_SMALL = 110; // 'n'.charCodeAt(0) |
+ static final int R_SMALL = 114; // 'r'.charCodeAt(0) |
static final int Z_SMALL = 122; // 'z'.charCodeAt(0) |
static final int LBRACE = 123; // '{'.charCodeAt(0) |
static final int RBRACE = 125; // '}'.charCodeAt(0) |
@@ -496,7 +498,8 @@ |
// TODO: add others. |
static bool _needsEscape(int charCode) { |
- return JsonTokenizer.QUOTE == charCode || JsonTokenizer.BACKSLASH == charCode; |
+ return JsonTokenizer.QUOTE == charCode || JsonTokenizer.BACKSLASH == charCode |
+ || JsonTokenizer.NEW_LINE == charCode || JsonTokenizer.LINE_FEED == charCode; |
} |
static void _escape(StringBuffer sb, String s) { |
@@ -507,10 +510,16 @@ |
bool needsEscape = false; |
final charCodes = new List<int>(); |
for (int i = 0; i < length; i++) { |
- final int charCode = s.charCodeAt(i); |
+ int charCode = s.charCodeAt(i); |
if (_needsEscape(charCode)) { |
charCodes.add(JsonTokenizer.BACKSLASH); |
needsEscape = true; |
+ |
+ if (JsonTokenizer.NEW_LINE == charCode) { |
+ charCode = N_SMALL; |
+ } else if (JsonTokenizer.LINE_FEED == charCode) { |
+ charCode = R_SMALL; |
+ } |
} |
charCodes.add(charCode); |
} |