changeset 1550:0dc3be25ad20

use_long_strings
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 03 Oct 2020 23:08:36 -0600
parents 41c32da4cbd1
children 9cc4cee39b8b
files src/luan/modules/BasicLuan.java src/luan/modules/parsers/LuanToString.java
diffstat 2 files changed, 24 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/modules/BasicLuan.java	Sat Oct 03 20:55:26 2020 -0600
+++ b/src/luan/modules/BasicLuan.java	Sat Oct 03 23:08:36 2020 -0600
@@ -221,6 +221,9 @@
 			Boolean compressed = Utils.removeBoolean(options,"compressed");
 			if( compressed != null )
 				lts.compressed = compressed;
+			Boolean useLongStrings = Utils.removeBoolean(options,"use_long_strings");
+			if( useLongStrings != null )
+				lts.useLongStrings = useLongStrings;
 			Utils.checkEmpty(options);
 		}
 		return lts.toString(obj);
--- a/src/luan/modules/parsers/LuanToString.java	Sat Oct 03 20:55:26 2020 -0600
+++ b/src/luan/modules/parsers/LuanToString.java	Sat Oct 03 23:08:36 2020 -0600
@@ -12,6 +12,7 @@
 	public boolean strict = false;
 	public boolean numberTypes = false;
 	public boolean compressed = false;
+	public boolean useLongStrings = false;
 
 	public String toString(Object obj) throws LuanException {
 		StringBuilder sb = new StringBuilder();
@@ -33,9 +34,7 @@
 			return;
 		}
 		if( obj instanceof String ) {
-			sb.append( '"' );
-			sb.append( Luan.stringEncode((String)obj) );
-			sb.append( '"' );
+			toString((String)obj,sb);
 			return;
 		}
 		if( obj instanceof LuanTable ) {
@@ -120,4 +119,23 @@
 			throw new LuanRuntimeException(e);
 		}
 	}
+
+	private void toString(String s,StringBuilder sb) {
+		if( useLongStrings && s.indexOf('\n') != -1 ) {
+			StringBuilder start = new StringBuilder("[[\n");
+			StringBuilder end = new StringBuilder("]]");
+			while( s.contains(end) ) {
+				start.insert(1,'=');
+				end.insert(1,'=');
+			}
+			sb.append(start);
+			sb.append(s);
+			sb.append(end);
+			return;
+		}
+		sb.append( '"' );
+		sb.append( Luan.stringEncode(s) );
+		sb.append( '"' );
+	}
+
 }