public virtual void SpecialChar(RegexPatternMaker maker, char c)
 {
 }
 // Static members
 public void EscapeAndAppend(RegexPatternMaker maker, char c)
 {
     maker._stringBuilder.Append(Regex.Escape(c.ToString()));
 }
 public virtual void Space(RegexPatternMaker maker, char c)
 {
 }
 public override void SpecialChar(RegexPatternMaker maker, char c)
 {
     maker._stringBuilder.Append(@"\s*");
     EscapeAndAppend(maker, c);
 }
 public virtual void Abc(RegexPatternMaker maker, char c)
 {
 }
 public override void Space(RegexPatternMaker maker, char c)
 {
 }
 public override void Abc(RegexPatternMaker maker, char c)
 {
     maker._stringBuilder.Append(@"\s*");
     EscapeAndAppend(maker, c);
     maker._state = maker._abcState;
 }
 public override void Space(RegexPatternMaker maker, char c)
 {
     maker._state = maker._spaceState;
 }
 public override void Abc(RegexPatternMaker maker, char c)
 {
     EscapeAndAppend(maker, c);
 }
            public static string GetRegexPattern(string text)
            {
                if (null == text) throw new ArgumentNullException();
                if (string.IsNullOrEmpty(text)) throw new ArgumentException();

                var maker = new RegexPatternMaker(text);
                var queue = new Queue<char>(text);
                while (0 < queue.Count())
                {
                    var c = queue.Dequeue();
                    if (char.IsWhiteSpace(c))
                    {
                        if (null == maker._state)
                        {
                            maker._state = maker._spaceState;
                        }
                        maker._state.Space(maker, c);
                    }
                    else if (IsSpecialChar(c))
                    {
                        if (null == maker._state)
                        {
                            maker._state = maker._specialCharState;
                        }
                        maker._state.SpecialChar(maker, c);
                    }
                    else
                    {
                        if (null == maker._state)
                        {
                            maker._state = maker._abcState;
                        }
                        maker._state.Abc(maker, c);
                    }
                }
                return maker._stringBuilder.ToString();
            }