Explorar el Código

Make hxd.res.DynamicText ignore ::patte(rns):: that are not alphanumeric (#1079)

* Make hxd.res.DynamicText use the r_attr regex

You can now edit the r_attr regex from an init macro and from the start
of the program to make it ignore non-valid ::patte(rns)::
for example with ~/::([A-Za-z0-9_]+)::/g
Leonardo hace 3 años
padre
commit
1eb25b0ed6
Se han modificado 1 ficheros con 11 adiciones y 13 borrados
  1. 11 13
      hxd/res/DynamicText.hx

+ 11 - 13
hxd/res/DynamicText.hx

@@ -76,7 +76,7 @@ class DynamicText {
 		applyRec([], obj, x, ref, onMissing);
 		applyRec([], obj, x, ref, onMissing);
 	}
 	}
 
 
-	static var r_attr = ~/::([A-Za-z0-9_]+)::/g;
+	public static var r_attr = ~/::(.+?)::/g;
 
 
 	static function applyText( path : Array<String>, old : Dynamic, x : Access, ref : Access, onMissing : Array<String> -> String -> String ) {
 	static function applyText( path : Array<String>, old : Dynamic, x : Access, ref : Access, onMissing : Array<String> -> String -> String ) {
 		var str = x == null ? null : x.innerHTML;
 		var str = x == null ? null : x.innerHTML;
@@ -266,7 +266,7 @@ class DynamicText {
 
 
 	static function parseText( str : String ) : Dynamic {
 	static function parseText( str : String ) : Dynamic {
 		str = str.split("\r\n").join("\n");
 		str = str.split("\r\n").join("\n");
-		if( str.split("::").length <= 1 )
+		if( !r_attr.match(str) )
 			return str;
 			return str;
 		return function(vars) {
 		return function(vars) {
 			var str = str;
 			var str = str;
@@ -307,23 +307,21 @@ class DynamicText {
 			return macro : Array<String>;
 			return macro : Array<String>;
 		case "t":
 		case "t":
 			var tstring = macro : String;
 			var tstring = macro : String;
-			var vars = x.innerHTML.split("::");
-			if( vars.length <= 1 )
+			if (!r_attr.match(x.innerHTML))
 				return tstring;
 				return tstring;
 			// printer function
 			// printer function
 			var i = 1;
 			var i = 1;
 			var fields = new Array<Field>();
 			var fields = new Array<Field>();
 			var map = new Map();
 			var map = new Map();
-			while( i < vars.length ) {
-				var name = vars[i];
-				if( map.exists(name) ) {
-					i += 2;
-					continue;
+			r_attr.map(x.innerHTML, function(r) {
+				var name = r.matched(1);
+				if( !map.exists(name) ) {
+					map.set(name, true);
+					fields.push( { name : name, kind : FVar(macro : Dynamic), pos : pos.pos, meta : [] } );
 				}
 				}
-				map.set(name, true);
-				fields.push( { name : name, kind : FVar(macro : Dynamic), pos : pos.pos, meta : [] } );
-				i += 2;
-			}
+				return r.matched(0);
+			});
+
 			return TFunction([TAnonymous(fields)], tstring);
 			return TFunction([TAnonymous(fields)], tstring);
 		default:
 		default:
 			Context.error("Unknown node " + x.name, findPos(pos,'<${x.name.toLowerCase()}'));
 			Context.error("Unknown node " + x.name, findPos(pos,'<${x.name.toLowerCase()}'));