public override object VisitPattern([NotNull] PageInterpreterParser.PatternContext context)
        {
            var onlyFirstCaptured = context.Any() == null ? true : false;

            currentCount = 0;

            base.VisitPattern(context);

            if (!ResultCountByQuery.ContainsKey(currentQuery))
            {
                ResultCountByQuery.Add(currentQuery, new AnalyzedQuery()
                {
                    IsArray          = !onlyFirstCaptured,
                    NumberOfCaptures = currentCount
                });
            }
            else
            {
                if (!onlyFirstCaptured && !ResultCountByQuery[currentQuery].IsArray)
                {
                    ResultCountByQuery[currentQuery].IsArray = true;
                }

                if (currentCount > ResultCountByQuery[currentQuery].NumberOfCaptures)
                {
                    ResultCountByQuery[currentQuery].NumberOfCaptures = currentCount;
                }
            }

            return(null);
        }
Exemple #2
0
        public override Symbol VisitPattern([NotNull] PageInterpreterParser.PatternContext context)
        {
            var onlyFirstCaptured = context.Any() == null ? true : false;

            var subsets = context?.subset()?.Accept(this)?.GetValue <Dictionary <SubsetPart, int> >();

            for
            (
                int x = page.Contents.GetLength(0) - calculateSubsetOnPage(subsets, SubsetPart.Right);
                x < calculateSubsetOnPage(subsets, SubsetPart.Left);
                x++
            )
            {
                for
                (
                    int y = page.Contents.GetLength(1) - calculateSubsetOnPage(subsets, SubsetPart.Bottom);
                    y < calculateSubsetOnPage(subsets, SubsetPart.Top);
                    y++
                )
                {
                    if (page.Contents[x, y] == null || page.Contents[x, y].Count == 0)
                    {
                        continue;
                    }

                    pageTraverser = new PageTraverser(page, new PageIndex(x, y));

                    currentPatternResult = new PatternResult();

                    try
                    {
                        base.VisitPattern(context);
                        if (currentPatternResult != null)
                        {
                            foreach (var item in currentPatternResult.Result)
                            {
                                Result.AddResult(queryLabel, item.Key, item.Value);
                            }
                        }
                        if (onlyFirstCaptured)
                        {
                            x = page.Contents.GetLength(0);
                            break;
                        }
                    }
                    catch (ParseCanceledException)
                    {
                        currentPatternResult = null;
                    }
                }
            }

            return(new Symbol(SymbolType.Success));
        }