GitSharp.IgnoreRules.BuildRules C# (CSharp) Method

BuildRules() private method

private BuildRules ( List rules, string lines ) : void
rules List
lines string
return void
        private void BuildRules(List<Rule> rules, string[] lines)
        {
            foreach (string line in lines)
            {
                string workingLine = line.Trim();
                if (workingLine.StartsWith("#") || workingLine.Length == 0)
                    continue;

                Rule r;
                r.exclude = !workingLine.StartsWith("!");
                if (!r.exclude)
                    workingLine = workingLine.Substring(1);
                r.isDirectoryOnly = !workingLine.Contains(".");

                const string regexCharMatch = @"[^/\\]";
                StringBuilder pattern = new StringBuilder();
                int i = 0;
                if (workingLine[0] == '/')
                {
                    pattern.Append("^/");
                    i++;
                }
                else
                {
                    pattern.Append("/");
                }
                for (; i < workingLine.Length; i++)
                {
                    switch (workingLine[i])
                    {
                        case '?':
                            pattern.Append(regexCharMatch).Append("?");
                            break;
                        case '\\':
                            i++;
                            pattern.Append("\\");
                            break;
                        case '*':
                            pattern.Append(regexCharMatch).Append("*");
                            break;
                        case '[':
                            for (; i < workingLine.Length && workingLine[i] != ']'; i++)
                            {
                                if (i == 0 && workingLine[i] == '!')
                                    pattern.Append("^");
                                else
                                    pattern.Append(workingLine[i]);
                            }
                            pattern.Append(workingLine[i]);
                            break;
                        case '.':
                            pattern.Append("\\.");
                            break;
                        default:
                            pattern.Append(workingLine[i]);
                            break;
                    }
                }
                if (!r.isDirectoryOnly)
                {
                    pattern.Append("$");
                }
                r.pattern = new System.Text.RegularExpressions.Regex(pattern.ToString());
                rules.Add(r);
            }
        }