Ejemplo n.º 1
0
 public TokenMatcherQuantitizer(TokenMatcherItemBase internalItem, int minimum, int maximum)
     : base(internalItem.CaptureName)
 {
     _InternalItem = internalItem;
     _Minimum      = minimum;
     _Maximum      = maximum;
 }
Ejemplo n.º 2
0
        public static TGroup ContinueWithMany <TGroup, T>(
            this ITokenMatcherItemGroup <TGroup> group,
            string captureName,
            Action <TokenMatcherGroup> configuration,
            TokenMatcherItemBase separator,
            Func <TokenMatcherState, T> captureConversion,
            int minimum = 1,
            int maximum = int.MaxValue)
            where T : class
        {
            var firstKey = captureName + "." + nameof(TokenMatcherHelper) + "." + nameof(ContinueWithMany) + ".firstCapture";

            var fg = new TokenMatcherGroup(firstKey, captureConversion);

            configuration(fg);

            var ig = new TokenMatcherGroup(captureName, captureConversion);

            ig.AddItem(separator);
            configuration(ig);

            var igq = new TokenMatcherQuantitizer(ig, Math.Max(0, minimum - 1), maximum < int.MaxValue ? maximum - 1 : int.MaxValue);

            var g = new TokenMatcherGroup(captureName, (Func <TokenMatcherState, List <T> >)(s =>
            {
                var f = s.Captures.TryGetValue(firstKey, out var fv) ? fv as T : null;
                var l = s.Captures.TryGetValue(captureName, out var lv) ? lv as IEnumerable : null;

                if (f == null)
                {
                    return(l.Cast <T>().ToList());
                }

                if (l != null)
                {
                    var nl = new List <T>()
                    {
                        f
                    };
                    nl.AddRange(l.Cast <T>());
                    return(nl);
                }
                else
                {
                    return(new List <T>(1)
                    {
                        f
                    });
                }
            }));

            g.AddItem(fg).AddItem(igq);

            return(group.AddItem(g));
        }
Ejemplo n.º 3
0
 public TokenMatcherOptional(TokenMatcherItemBase internalItem)
     : base(internalItem.CaptureName)
 {
     _InternalItem = internalItem;
 }
Ejemplo n.º 4
0
 public TokenMatcherGroup AddItem(TokenMatcherItemBase item)
 {
     _Items.Add(item);
     return(this);
 }
Ejemplo n.º 5
0
 public TokenMatcherBuilder AddItem(TokenMatcherItemBase item)
 {
     _Items.Add(item);
     return(this);
 }