Browse Source

Add quotes to .tscn keys, solves #4366

Juan Linietsky 9 years ago
parent
commit
6872139300
2 changed files with 21 additions and 3 deletions
  1. 14 1
      core/variant_parser.cpp
  2. 7 2
      scene/resources/scene_format_text.cpp

+ 14 - 1
core/variant_parser.cpp

@@ -1775,7 +1775,20 @@ Error VariantParser::parse_tag_assign_eof(Stream *p_stream, int &line, String &r
 		}
 
 		if (c>32) {
-			if (c!='=') {
+			if (c=='"') { //quoted
+				p_stream->saved='"';
+				Token tk;
+				Error err = get_token(p_stream,tk,line,r_err_str);
+				if (err)
+					return err;
+				if (tk.type!=TK_STRING) {
+					r_err_str="Error reading quoted string";
+					return err;
+				}
+
+				what=tk.value;
+
+			} else if (c!='=') {
 				what+=String::chr(c);
 			} else {
 				r_assign=what;

+ 7 - 2
scene/resources/scene_format_text.cpp

@@ -1140,7 +1140,12 @@ void ResourceFormatSaverTextInstance::_find_resources(const Variant& p_variant,b
 
 }
 
+static String _valprop(const String& p_name) {
 
+	if (p_name.find("\"")!=-1 || p_name.find("=")!=-1 || p_name.find(" ")!=-1)
+		return "\""+p_name.c_escape()+"\"";
+	return p_name;
+}
 
 Error ResourceFormatSaverTextInstance::save(const String &p_path,const RES& p_resource,uint32_t p_flags) {
 
@@ -1296,7 +1301,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path,const RES& p_re
 
 				String vars;
 				VariantWriter::write_to_string(value,vars,_write_resources,this);
-				f->store_string(name+" = "+vars+"\n");
+				f->store_string(_valprop(name)+" = "+vars+"\n");
 			}
 
 
@@ -1370,7 +1375,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path,const RES& p_re
 				String vars;
 				VariantWriter::write_to_string(state->get_node_property_value(i,j),vars,_write_resources,this);
 
-				f->store_string(String(state->get_node_property_name(i,j))+" = "+vars+"\n");
+				f->store_string(_valprop(String(state->get_node_property_name(i,j)))+" = "+vars+"\n");
 			}
 
 			if (state->get_node_property_count(i)) {