// string [0] static string[] GetVariantsVariables(GameXmlDefinition definition) { const string exp = "([^=]+) (=) ([^!]+)"; StringBuilderIndentation builder_definitions = new StringBuilderIndentation (); StringBuilderIndentation builder_assigments = new StringBuilderIndentation (); string [] rslt = new string [2]; GameXmlDefinitionVariant variant; builder_assigments.Level = 4; for (int i = 0; i < definition.Variants.Count; i++) { Regex regex; int prev = 0, next, pos; string line, vars; Match match; variant = definition.Variants [i]; if (String.IsNullOrEmpty (variant.Variables)) continue; // Header builder_definitions.Level = 2; builder_definitions.AppendLine (String.Format ("class VariantVariables{0}", i)); builder_definitions.AppendLine ("{"); builder_definitions.Level = 3; regex = new Regex (exp, RegexOptions.IgnoreCase); vars = variant.Variables; builder_definitions.AppendLine ("Random random = new Random ();"); while (true) { pos = next = vars.IndexOf (';', prev); if (pos == -1) line = vars.Substring (prev, vars.Length - prev); else line = vars.Substring (prev, next + 1 - prev); line = line.Trim (); // Process line match = regex.Match (line); bool first_nonspace = false; StringBuilder var_name = new StringBuilder (); string var_def = match.Groups [1].ToString (); Console.WriteLine ("var_Def {0}", var_def); for (int n = var_def.Length - 1; n >= 0; n--) { if (var_def [n] == ' ' && first_nonspace == true) break; if (var_def [n] != ' ') first_nonspace = true; var_name.Insert (0, var_def [n]); } if (String.IsNullOrEmpty (line) == false) { builder_definitions.AppendLine (String.Format ("public {0};", match.Groups [1])); builder_assigments.AppendLine (String.Format ("{0} = {1}", var_name.ToString (), match.Groups [3])); } if (pos == -1) break; prev = next + 1; } // Footer builder_definitions.AppendLine (" "); builder_definitions.AppendLine (String.Format ("VariantVariables{0} ()", i)); builder_definitions.AppendLine ("{"); builder_definitions.Level = 0; builder_definitions.AppendLine (builder_assigments.ToString ()); builder_definitions.Level = 3; builder_definitions.AppendLine ("}"); builder_definitions.Level = 2; builder_definitions.AppendLine ("}"); builder_assigments.Clear (); } rslt [VarIdxDefinitions] = builder_definitions.ToString (); rslt [VarIdxAssigments] = builder_assigments.ToString (); return rslt; }
// string [0] static string[] GetVariantsVariables(GameXmlDefinition definition) { const string exp = "([^=]+) (=) ([^!]+)"; StringBuilderIndentation builder_definitions = new StringBuilderIndentation(); StringBuilderIndentation builder_assigments = new StringBuilderIndentation(); string [] rslt = new string [2]; GameXmlDefinitionVariant variant; builder_assigments.Level = 4; for (int i = 0; i < definition.Variants.Count; i++) { Regex regex; int prev = 0, next, pos; string line, vars; Match match; variant = definition.Variants [i]; if (String.IsNullOrEmpty(variant.Variables)) { continue; } // Header builder_definitions.Level = 2; builder_definitions.AppendLine(String.Format("class VariantVariables{0}", i)); builder_definitions.AppendLine("{"); builder_definitions.Level = 3; regex = new Regex(exp, RegexOptions.IgnoreCase); vars = variant.Variables; builder_definitions.AppendLine("Random random = new Random ();"); while (true) { pos = next = vars.IndexOf(';', prev); if (pos == -1) { line = vars.Substring(prev, vars.Length - prev); } else { line = vars.Substring(prev, next + 1 - prev); } line = line.Trim(); // Process line match = regex.Match(line); bool first_nonspace = false; StringBuilder var_name = new StringBuilder(); string var_def = match.Groups [1].ToString(); Console.WriteLine("var_Def {0}", var_def); for (int n = var_def.Length - 1; n >= 0; n--) { if (var_def [n] == ' ' && first_nonspace == true) { break; } if (var_def [n] != ' ') { first_nonspace = true; } var_name.Insert(0, var_def [n]); } if (String.IsNullOrEmpty(line) == false) { builder_definitions.AppendLine(String.Format("public {0};", match.Groups [1])); builder_assigments.AppendLine(String.Format("{0} = {1}", var_name.ToString(), match.Groups [3])); } if (pos == -1) { break; } prev = next + 1; } // Footer builder_definitions.AppendLine(" "); builder_definitions.AppendLine(String.Format("VariantVariables{0} ()", i)); builder_definitions.AppendLine("{"); builder_definitions.Level = 0; builder_definitions.AppendLine(builder_assigments.ToString()); builder_definitions.Level = 3; builder_definitions.AppendLine("}"); builder_definitions.Level = 2; builder_definitions.AppendLine("}"); builder_assigments.Clear(); } rslt [VarIdxDefinitions] = builder_definitions.ToString(); rslt [VarIdxAssigments] = builder_assigments.ToString(); return(rslt); }