Sfoglia il codice sorgente

- fixed split expression
- fixed expression' strings parser

Laurent Bedubourg 19 anni fa
parent
commit
54fbae8866
1 ha cambiato i file con 26 aggiunte e 12 eliminazioni
  1. 26 12
      std/mtwin/templo/Parser.hx

+ 26 - 12
std/mtwin/templo/Parser.hx

@@ -339,7 +339,10 @@ class Parser {
 		var arg = "";
 		var arg = "";
 		var len = str.length;
 		var len = str.length;
 		var cto = 0;
 		var cto = 0;
-		for (i in 0...len){
+		var string = false;
+		var dstring = false;
+		var i = 0;
+		while (i < len){
 			var c = str.charAt(i);
 			var c = str.charAt(i);
 			if (c == "("){ 
 			if (c == "("){ 
 				cto++; 
 				cto++; 
@@ -347,13 +350,28 @@ class Parser {
 			else if (c == ")"){ 
 			else if (c == ")"){ 
 				cto--; 
 				cto--; 
 			}
 			}
-			if (c == "," && cto == 0) {
+
+			if (c == "\\"){
+				arg += c;
+				arg += str.charAt(i+1);
+				i += 2;
+				continue;
+			}
+
+			if (c == "\"" && !string)
+				dstring = !dstring;
+
+			if (c == "'" && !dstring)
+				string = !string;
+
+			if (c == "," && cto == 0 && !string && !dstring){
 				res.add(StringTools.trim(arg));
 				res.add(StringTools.trim(arg));
 				arg = "";
 				arg = "";
 			}
 			}
 			else {
 			else {
 				arg += c;
 				arg += c;
 			}
 			}
+			i++;
 		}
 		}
 		if (arg != ""){
 		if (arg != ""){
 			res.add(StringTools.trim(arg));
 			res.add(StringTools.trim(arg));
@@ -422,7 +440,8 @@ class Parser {
 		var mark = 0;
 		var mark = 0;
 		var getter = false;
 		var getter = false;
 		var len = str.length;
 		var len = str.length;
-		for (i in 0...len+1){
+		var i = 0;
+		while (i < len+1){
 			var skip = false;
 			var skip = false;
 			var c = if (i == len) "\n" else str.charAt(i);
 			var c = if (i == len) "\n" else str.charAt(i);
 			var n = if (i+1 >= len) "\n" else str.charAt(i+1);
 			var n = if (i+1 >= len) "\n" else str.charAt(i+1);
@@ -475,13 +494,10 @@ class Parser {
 					
 					
 				case states.string:
 				case states.string:
 					if (c == "\\" && n == "'"){ 
 					if (c == "\\" && n == "'"){ 
-						result.add("'");
+						result.add("\\'");
 						skip = true;
 						skip = true;
 						++i; 
 						++i; 
 					}
 					}
-					else if (c == "\""){
-						result.add("\\");
-					}						
 					else if (c == "'"){
 					else if (c == "'"){
 						state = states.none;
 						state = states.none;
 						result.add("\")");
 						result.add("\")");
@@ -489,14 +505,11 @@ class Parser {
 					}
 					}
 					
 					
 				case states.dstring:
 				case states.dstring:
-					if (c == "\\" && n == "'"){
-						result.add("\\'");
+					if (c == "\\" && n == "\""){
+						result.add("\\\"");
 						skip = true;
 						skip = true;
 						++i;
 						++i;
 					}
 					}
-					else if (c == "\\" && n == "\""){
-						++i;
-					}
 					else if (c == "\""){
 					else if (c == "\""){
 						state = states.none;
 						state = states.none;
 						result.add("\")");
 						result.add("\")");
@@ -588,6 +601,7 @@ class Parser {
 			if (!skip && i < len && state != states.variable){
 			if (!skip && i < len && state != states.variable){
 				result.add(str.charAt(i));
 				result.add(str.charAt(i));
 			}
 			}
+			++i;
 		}
 		}
 		return result.toString();
 		return result.toString();
 	}
 	}