changeset 1307:6c8ceca4a10b

json fixes
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 23 Jan 2019 13:34:18 -0700
parents 97e7c25e9e70
children 70eecde81820
files src/luan/lib/json/JsonParser.java src/luan/lib/json/JsonToString.java src/luan/modules/Html.luan
diffstat 3 files changed, 37 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
diff -r 97e7c25e9e70 -r 6c8ceca4a10b src/luan/lib/json/JsonParser.java
--- a/src/luan/lib/json/JsonParser.java	Wed Jan 23 12:48:47 2019 -0700
+++ b/src/luan/lib/json/JsonParser.java	Wed Jan 23 13:34:18 2019 -0700
@@ -71,6 +71,7 @@
 					c = parser.lastChar();
 					switch(c) {
 					case '"':
+					case '\'':  // not in spec
 					case '\\':
 					case '/':
 						sb.append(c);
diff -r 97e7c25e9e70 -r 6c8ceca4a10b src/luan/lib/json/JsonToString.java
--- a/src/luan/lib/json/JsonToString.java	Wed Jan 23 12:48:47 2019 -0700
+++ b/src/luan/lib/json/JsonToString.java	Wed Jan 23 13:34:18 2019 -0700
@@ -29,12 +29,6 @@
 		return sb.toString();
 	}
 
-	public static String encodeString(String s) {
-		StringBuilder sb = new StringBuilder();
-		encodeString(s,sb);
-		return sb.toString();
-	}
-
 	private void toString(Object obj,StringBuilder sb,int indented) throws JsonException {
 		if( obj == null || obj instanceof Boolean || obj instanceof Number ) {
 			sb.append(obj);
@@ -57,18 +51,46 @@
 
 	private static void toString(final String s,StringBuilder sb) {
 		sb.append('"');
-		encodeString(s,sb);
-		sb.append('"');
-	}
-
-	private static void encodeString(final String s,StringBuilder sb) {
 		for( int i=0; i<s.length(); i++ ) {
 			char c = s.charAt(i);
 			switch(c) {
 			case '"':
 				sb.append("\\\"");
 				break;
-			case '\'':
+			case '\\':
+				sb.append("\\\\");
+				break;
+			case '\b':
+				sb.append("\\b");
+				break;
+			case '\f':
+				sb.append("\\f");
+				break;
+			case '\n':
+				sb.append("\\n");
+				break;
+			case '\r':
+				sb.append("\\r");
+				break;
+			case '\t':
+				sb.append("\\t");
+				break;
+			default:
+				sb.append(c);
+			}
+		}
+		sb.append('"');
+	}
+
+	public static String javascriptEncode(String s) {
+		StringBuilder sb = new StringBuilder();
+		for( int i=0; i<s.length(); i++ ) {
+			char c = s.charAt(i);
+			switch(c) {
+			case '"':
+				sb.append("\\\"");
+				break;
+			case '\'':  // added for javascript
 				sb.append("\\'");
 				break;
 			case '\\':
@@ -93,6 +115,7 @@
 				sb.append(c);
 			}
 		}
+		return sb.toString();
 	}
 
 	private void toString(List list,StringBuilder sb,int indented) {
diff -r 97e7c25e9e70 -r 6c8ceca4a10b src/luan/modules/Html.luan
--- a/src/luan/modules/Html.luan	Wed Jan 23 12:48:47 2019 -0700
+++ b/src/luan/modules/Html.luan	Wed Jan 23 13:34:18 2019 -0700
@@ -15,7 +15,7 @@
 local Html = {}
 
 Html.encode = HtmlLuan.encode
-Html.javascript_encode = JsonToString.encodeString
+Html.javascript_encode = JsonToString.javascriptEncode
 
 local quote = HtmlLuan.quote
 Html.quote = quote