Sfoglia il codice sorgente

- templo, added support for \n inside :: ::
- templo, improved xml parse error presentation

Laurent Bedubourg 18 anni fa
parent
commit
27f01359c2
2 ha cambiato i file con 22 aggiunte e 10 eliminazioni
  1. 9 9
      std/mtwin/templo/Preprocessor.hx
  2. 13 1
      std/mtwin/templo/Template.hx

+ 9 - 9
std/mtwin/templo/Preprocessor.hx

@@ -27,17 +27,17 @@ package mtwin.templo;
 
 class Preprocessor {
 
-	static var r_if      = ~/::if([^_a-zA-Z0-9].*?)::/g;
-	static var r_elseif  = ~/::elseif([^_a-zA-Z0-9].*?)::/;
+	static var r_if      = ~/::if([^_a-zA-Z0-9].*?)::/gs;
+	static var r_elseif  = ~/::elseif([^_a-zA-Z0-9].*?)::/gs;
 	static var r_else    = ~/::else *?::/;
-	static var r_foreach = ~/::foreach (.*?)::/g;
-	static var r_fill    = ~/::fill (.*?)::/g;
-	static var r_use     = ~/::use (.*?)::/g;
-	static var r_set     = ~/::set (.*?)::/g;
+	static var r_foreach = ~/::foreach (.*?)::/gs;
+	static var r_fill    = ~/::fill (.*?)::/gs;
+	static var r_use     = ~/::use (.*?)::/gs;
+	static var r_set     = ~/::set (.*?)::/gs;
 
-	static var r_cond    = ~/::cond (.*?)::/g;
-	static var r_repeat  = ~/::repeat (.*?)::/g;
-	static var r_attr    = ~/::attr (.*?)::/g;
+	static var r_cond    = ~/::cond (.*?)::/gs;
+	static var r_repeat  = ~/::repeat (.*?)::/gs;
+	static var r_attr    = ~/::attr (.*?)::/gs;
 
 	static var r_cdata     = ~/<!\[CDATA\[([^\0]*?)]]>/g;
 	static var r_comment   = ~/<!--([^\0]*?)-->/g;

+ 13 - 1
std/mtwin/templo/Template.hx

@@ -93,7 +93,19 @@ class Template {
 			x = Xml.parse(src);
 		}
 		catch (e:Dynamic){
-			throw { message:"Error in "+id+"\n"+Std.string(e), source:src };
+			var source : String = src;
+			var str = Std.string(e);
+			var reg = ~/Xml parse error : .* at line ([0-9]+)/gs;
+			if (reg.match(str)){
+				var margin = 10;
+				var line = Std.parseInt(reg.matched(1));
+				var lines = src.split("\n");
+				var start = Std.int(Math.max(0,line-margin));
+				var splice = lines.splice(start, line+margin);
+				var splice = Lambda.map(splice, function(s:String){ return (start++) + " : " + s; });
+				source = splice.join("\n");
+			}
+			throw { message:"Error in "+id+"\n"+str, source:source };
 		}
 
 		var p = new mtwin.templo.Parser(isXhtml == true);