Ejemplo n.º 1
0
        private void GeneratedItem(object sender, ProgressChangedEventArgs e)
        {
            object[] gen = e.UserState as object[];
            SuperVar sv  = gen[0] as SuperVar;

            if (gen[1] is string file)
            {
                ListViewItem i = new ListViewItem("");
                i.SubItems.Add(file);
                FileList.Items.Add(i);
            }

            if (ProgStatus.Maximum != sv.Total)
            {
                ProgStatus.Value   = 0;
                ProgStatus.Maximum = sv.Total;
            }
            ProgStatus.Value = sv.Count;
        }
Ejemplo n.º 2
0
        private void Generate(object sender, DoWorkEventArgs e)
        {
            SuperVar sv = e.Argument as SuperVar;

            sv.Stage = SuperVar.Stages.Generating;
            string          fp     = sv.FilePattern;
            List <string[]> matrix = new List <string[]>();

            string[] parts = fp.Split('{');
            sv.Count = 0;
            sv.Total = parts.Length;
            foreach (string part in parts)
            {
                sv.Status = "Generating group possibilities...";
                sv.Count++;
                Generator.ReportProgress(0, new object[] { sv, null });
                if (part.Contains("}"))
                {
                    string        pattern     = part.Split('}')[0];
                    string        thing       = part.Split('}')[1];
                    List <string> possibility = new List <string>();
                    if (pattern.Contains("|"))
                    {
                        possibility.AddRange(pattern.Split('|'));
                    }
                    else if (pattern.Contains("-"))
                    {
                        int      start, end;
                        string[] range = pattern.Split('-');
                        if (range.Length != 2)
                        {
                            e.Result = false;
                            MessageBox.Show("Too many dashes in pattern.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        else if (range[0].Length == 0 || range[1].Length == 0)
                        {
                            e.Result = false;
                            MessageBox.Show("A range must have both a start and an end.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        else if (range[0].Length == 1 && range[1].Length == 1)
                        {
                            start = range[0][0];
                            end   = range[1][0];

                            if (!(start >= 32 && end <= 126))
                            {
                                e.Result = false;
                                MessageBox.Show("Invalid character range. Please make sure your characters are between ASCII codes 32 and 126.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                return;
                            }
                            foreach (int ch in IntRange(start, end))
                            {
                                possibility.Add(Convert.ToChar(ch).ToString());
                            }
                        }
                        else
                        {
                            try
                            {
                                end = int.Parse(range[1]);
                                int pad = 0;
                                if (range[0].StartsWith("p"))
                                {
                                    start = int.Parse(range[0].Substring(1));
                                    pad   = (start < end) ? end.ToString().Length : start.ToString().Length;
                                }
                                else
                                {
                                    start = int.Parse(range[0]);
                                }
                                foreach (int num in IntRange(start, end))
                                {
                                    string p = num.ToString();
                                    while (p.Length < pad)
                                    {
                                        p = "0" + p;
                                    }
                                    possibility.Add(p);
                                }
                            }
                            catch
                            {
                                e.Result = false;
                                MessageBox.Show("Unable to parse range.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                return;
                            }
                        }
                    }
                    matrix.Add(possibility.ToArray());
                    if (thing != "" && thing != null)
                    {
                        matrix.Add(new string[] { thing });
                    }
                    possibility.Clear();
                }
                else
                {
                    if (part != "" && part != null)
                    {
                        matrix.Add(new string[] { part });
                    }
                }
            }
            sv.Total = 1;
            foreach (string[] arr in matrix)
            {
                sv.Total = sv.Total * arr.Length;
            }
            sv.Count = 0;

            sv.Status = "Generating possibilities...";
            foreach (string[] possibility in (new MatrixWalker <string>(matrix.ToArray())).Get())
            {
                sv.Count++;
                sv.Possibilities.Add(string.Join("", possibility));
                Generator.ReportProgress(0, new object[] { sv, sv.Possibilities.Last() });
            }
            sv.Status = "Finished";
            e.Result  = sv;
        }