Exemplo n.º 1
0
    // 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;
    }
Exemplo n.º 2
0
    // 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);
    }