Exemple #1
0
        public virtual string Render(PatternList pattern)
        {
            var writer = new SqlPatternWriter(this);

            pattern.Visit(writer);
            return(writer.ToString());
        }
        public override string Render(PatternList pattern)
        {
            var writer = new AmlPatternWriter();

            pattern.Visit(writer);
            return(writer.ToString());
        }
Exemple #3
0
        public virtual PatternList Parse(string str)
        {
            _pat      = new Pattern();
            _strMatch = new StringMatch();
            Anchor endAnchor = null;

            if (string.IsNullOrEmpty(str))
            {
                return(new PatternList());
            }

            if (str[0] == this.Pattern_Anything)
            {
                str = str.TrimStart(this.Pattern_Anything);
            }
            else
            {
                _pat.Matches.Add(new Anchor()
                {
                    Type = AnchorType.Start_Absolute
                });
            }
            if (!string.IsNullOrEmpty(str) && str[str.Length - 1] == this.Pattern_Anything)
            {
                str = str.TrimEnd(this.Pattern_Anything);
            }
            else
            {
                endAnchor = new Anchor()
                {
                    Type = AnchorType.End_Absolute
                };
            }

            var  i       = 0;
            bool inRange = false;

            while (i < str.Length)
            {
                if (inRange)
                {
                    if (str[i] == ']')
                    {
                        inRange = false;
                        _pat.Matches.Add(_set);
                        _set = null;
                    }
                    else if (_set.Chars.Count > 0 && str[i] == this.Pattern_SetRange && (i + 1) < str.Length && str[i + 1] != ']')
                    {
                        _set.AddRange((char)(_set.Chars.Last() + 1), str[i + 1]);
                        i++;
                    }
                    else
                    {
                        _set.Chars.Add(str[i]);
                    }
                }
                else if (str[i] == this.Pattern_Anything)
                {
                    FinishStringMatch();
                    _set = new CharSet('.');
                    _set.Repeat.MinCount = 0;
                    _set.Repeat.MaxCount = int.MaxValue;
                    _pat.Matches.Add(_set);
                    _set = null;
                }
                else if (str[i] == this.Pattern_SingleChar)
                {
                    FinishStringMatch();
                    _set = new CharSet('.');
                    _set.Repeat.MinCount = 1;
                    _set.Repeat.MaxCount = 1;
                    _pat.Matches.Add(_set);
                    _set = null;
                }
                else if (str[i] == this.Pattern_SingleDigit)
                {
                    FinishStringMatch();
                    _set = new CharSet('d');
                    _set.Repeat.MinCount = 1;
                    _set.Repeat.MaxCount = 1;
                    _pat.Matches.Add(_set);
                    _set = null;
                }
                else if (str[i] == '[' && !inRange && AllowCharSet)
                {
                    FinishStringMatch();
                    inRange = true;
                    _set    = new CharSet();
                    if ((i + 1) < str.Length && str[i + 1] == this.Pattern_InverseSet)
                    {
                        _set.InverseSet = true;
                        i++;
                    }
                }
                else if (str[i] == this.Pattern_Escape)
                {
                    i++;
                    _strMatch.Match.Append(str[i]);
                }
                else
                {
                    _strMatch.Match.Append(str[i]);
                }
                i++;
            }

            if (_strMatch.Match.Length > 0)
            {
                _pat.Matches.Add(_strMatch);
            }
            if (endAnchor != null)
            {
                _pat.Matches.Add(endAnchor);
            }

            var patOpts = new PatternList();

            patOpts.Patterns.Add(_pat);
            patOpts.Visit(RegexParser.Simplify);
            return(patOpts);
        }